> entry :
- reservedFieldNameToPairOfStandardSQLTypeAndDescription.entrySet()) {
- Field field =
- Field.newBuilder(entry.getKey(), entry.getValue().getLeft())
- .setDescription(entry.getValue().getRight())
- .build();
- log.info("- {}", field.toString());
- fields.add(field);
- }
-
- TimePartitioning timePartitioning =
- TimePartitioning.newBuilder(Type.DAY).setField("event_timestamp").build();
- log.info("Table partitioning: " + timePartitioning.toString());
-
- return StandardTableDefinition.newBuilder()
- .setTimePartitioning(timePartitioning)
- .setSchema(Schema.of(fields))
- .build();
- }
-
- /**
- * This method ensures that, given a FeatureSetSpec object, the relevant BigQuery table is created
- * with the correct schema.
- *
- * Refer to protos/feast/core/Store.proto for the derivation of the table name and schema from
- * a FeatureSetSpec object.
- *
- * @param featureSet FeatureSet object
- * @param bigqueryProjectId BigQuery project id
- * @param bigqueryDatasetId BigQuery dataset id
- * @param bigquery BigQuery service object
- */
- public static void setupBigQuery(
- FeatureSet featureSet,
- String bigqueryProjectId,
- String bigqueryDatasetId,
- BigQuery bigquery) {
-
- FeatureSetSpec featureSetSpec = featureSet.getSpec();
- // Ensure BigQuery dataset exists.
- DatasetId datasetId = DatasetId.of(bigqueryProjectId, bigqueryDatasetId);
- if (bigquery.getDataset(datasetId) == null) {
- log.info("Creating dataset '{}' in project '{}'", datasetId.getDataset(), bigqueryProjectId);
- bigquery.create(DatasetInfo.of(datasetId));
- }
-
- String tableName =
- String.format(
- "%s_%s_v%d",
- featureSetSpec.getProject(), featureSetSpec.getName(), featureSetSpec.getVersion())
- .replaceAll("-", "_");
- TableId tableId = TableId.of(bigqueryProjectId, datasetId.getDataset(), tableName);
-
- // Return if there is an existing table
- Table table = bigquery.getTable(tableId);
- if (table != null) {
- log.info(
- "Writing to existing BigQuery table '{}:{}.{}'",
- bigqueryProjectId,
- datasetId.getDataset(),
- tableName);
- return;
- }
-
- log.info(
- "Creating table '{}' in dataset '{}' in project '{}'",
- tableId.getTable(),
- datasetId.getDataset(),
- bigqueryProjectId);
- TableDefinition tableDefinition = createBigQueryTableDefinition(featureSet.getSpec());
- TableInfo tableInfo = TableInfo.of(tableId, tableDefinition);
- bigquery.create(tableInfo);
- }
-
- /**
- * Ensure Redis is accessible, else throw a RuntimeException.
- *
- * @param redisConfig Plase refer to feast.core.Store proto
- */
- public static void checkRedisConnection(RedisConfig redisConfig) {
- RedisClient redisClient =
- RedisClient.create(RedisURI.create(redisConfig.getHost(), redisConfig.getPort()));
- try {
- redisClient.connect();
- } catch (RedisConnectionException e) {
- throw new RuntimeException(
- String.format(
- "Failed to connect to Redis at host: '%s' port: '%d'. Please check that your Redis is running and accessible from Feast.",
- redisConfig.getHost(), redisConfig.getPort()));
- }
- redisClient.shutdown();
- }
}
diff --git a/ingestion/src/main/java/feast/ingestion/values/FeatureSet.java b/ingestion/src/main/java/feast/ingestion/values/FeatureSet.java
index bf07bcec966..758fbd0ba31 100644
--- a/ingestion/src/main/java/feast/ingestion/values/FeatureSet.java
+++ b/ingestion/src/main/java/feast/ingestion/values/FeatureSet.java
@@ -34,9 +34,9 @@ public class FeatureSet implements Serializable {
private final Map fields;
- public FeatureSet(FeatureSetProto.FeatureSet featureSet) {
- this.reference = getFeatureSetReference(featureSet);
- this.fields = getFieldsByName(featureSet.getSpec());
+ public FeatureSet(FeatureSetProto.FeatureSetSpec featureSetSpec) {
+ this.reference = getFeatureSetReference(featureSetSpec);
+ this.fields = getFieldsByName(featureSetSpec);
}
public String getReference() {
diff --git a/ingestion/src/main/java/feast/store/serving/redis/FeatureRowToRedisMutationDoFn.java b/ingestion/src/main/java/feast/store/serving/redis/FeatureRowToRedisMutationDoFn.java
deleted file mode 100644
index 1f5a0f19677..00000000000
--- a/ingestion/src/main/java/feast/store/serving/redis/FeatureRowToRedisMutationDoFn.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * SPDX-License-Identifier: Apache-2.0
- * Copyright 2018-2019 The Feast Authors
- *
- * 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.
- */
-package feast.store.serving.redis;
-
-import feast.core.FeatureSetProto.EntitySpec;
-import feast.core.FeatureSetProto.FeatureSet;
-import feast.core.FeatureSetProto.FeatureSetSpec;
-import feast.core.FeatureSetProto.FeatureSpec;
-import feast.storage.RedisProto.RedisKey;
-import feast.storage.RedisProto.RedisKey.Builder;
-import feast.store.serving.redis.RedisCustomIO.Method;
-import feast.store.serving.redis.RedisCustomIO.RedisMutation;
-import feast.types.FeatureRowProto.FeatureRow;
-import feast.types.FieldProto.Field;
-import feast.types.ValueProto;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import org.apache.beam.sdk.transforms.DoFn;
-import org.slf4j.Logger;
-
-public class FeatureRowToRedisMutationDoFn extends DoFn {
-
- private static final Logger log =
- org.slf4j.LoggerFactory.getLogger(FeatureRowToRedisMutationDoFn.class);
- private Map featureSets;
-
- public FeatureRowToRedisMutationDoFn(Map featureSets) {
- this.featureSets = featureSets;
- }
-
- private RedisKey getKey(FeatureRow featureRow) {
- FeatureSet featureSet = featureSets.get(featureRow.getFeatureSet());
- List entityNames =
- featureSet.getSpec().getEntitiesList().stream()
- .map(EntitySpec::getName)
- .sorted()
- .collect(Collectors.toList());
-
- Map entityFields = new HashMap<>();
- Builder redisKeyBuilder = RedisKey.newBuilder().setFeatureSet(featureRow.getFeatureSet());
- for (Field field : featureRow.getFieldsList()) {
- if (entityNames.contains(field.getName())) {
- entityFields.putIfAbsent(
- field.getName(),
- Field.newBuilder().setName(field.getName()).setValue(field.getValue()).build());
- }
- }
- for (String entityName : entityNames) {
- if (entityFields.containsKey(entityName)) {
- redisKeyBuilder.addEntities(entityFields.get(entityName));
- }
- }
- return redisKeyBuilder.build();
- }
-
- private byte[] getValue(FeatureRow featureRow) {
- FeatureSetSpec spec = featureSets.get(featureRow.getFeatureSet()).getSpec();
-
- List featureNames =
- spec.getFeaturesList().stream().map(FeatureSpec::getName).collect(Collectors.toList());
- Map fieldValueOnlyMap =
- featureRow.getFieldsList().stream()
- .filter(field -> featureNames.contains(field.getName()))
- .distinct()
- .collect(
- Collectors.toMap(
- Field::getName,
- field -> Field.newBuilder().setValue(field.getValue()).build()));
-
- List values =
- featureNames.stream()
- .sorted()
- .map(
- featureName ->
- fieldValueOnlyMap.getOrDefault(
- featureName,
- Field.newBuilder().setValue(ValueProto.Value.getDefaultInstance()).build()))
- .collect(Collectors.toList());
-
- return FeatureRow.newBuilder()
- .setEventTimestamp(featureRow.getEventTimestamp())
- .addAllFields(values)
- .build()
- .toByteArray();
- }
-
- /** Output a redis mutation object for every feature in the feature row. */
- @ProcessElement
- public void processElement(ProcessContext context) {
- FeatureRow featureRow = context.element();
- try {
- byte[] key = getKey(featureRow).toByteArray();
- byte[] value = getValue(featureRow);
- RedisMutation redisMutation = new RedisMutation(Method.SET, key, value, null, null);
- context.output(redisMutation);
- } catch (Exception e) {
- log.error(e.getMessage(), e);
- }
- }
-}
diff --git a/ingestion/src/main/java/feast/store/serving/redis/RedisCustomIO.java b/ingestion/src/main/java/feast/store/serving/redis/RedisCustomIO.java
deleted file mode 100644
index 633c2eb551d..00000000000
--- a/ingestion/src/main/java/feast/store/serving/redis/RedisCustomIO.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * SPDX-License-Identifier: Apache-2.0
- * Copyright 2018-2019 The Feast Authors
- *
- * 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.
- */
-package feast.store.serving.redis;
-
-import feast.core.StoreProto;
-import feast.ingestion.values.FailedElement;
-import feast.retry.Retriable;
-import io.lettuce.core.RedisConnectionException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import org.apache.avro.reflect.Nullable;
-import org.apache.beam.sdk.coders.AvroCoder;
-import org.apache.beam.sdk.coders.DefaultCoder;
-import org.apache.beam.sdk.transforms.DoFn;
-import org.apache.beam.sdk.transforms.PTransform;
-import org.apache.beam.sdk.transforms.ParDo;
-import org.apache.beam.sdk.transforms.windowing.GlobalWindow;
-import org.apache.beam.sdk.values.PCollection;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.joda.time.Instant;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RedisCustomIO {
-
- private static final int DEFAULT_BATCH_SIZE = 1000;
- private static final int DEFAULT_TIMEOUT = 2000;
-
- private static final Logger log = LoggerFactory.getLogger(RedisCustomIO.class);
-
- private RedisCustomIO() {}
-
- public static Write write(StoreProto.Store store) {
- return new Write(store);
- }
-
- public enum Method {
-
- /**
- * Use APPEND command. If key already exists and is a string, this command appends the value at
- * the end of the string.
- */
- APPEND,
-
- /** Use SET command. If key already holds a value, it is overwritten. */
- SET,
-
- /**
- * Use LPUSH command. Insert value at the head of the list stored at key. If key does not exist,
- * it is created as empty list before performing the push operations. When key holds a value
- * that is not a list, an error is returned.
- */
- LPUSH,
-
- /**
- * Use RPUSH command. Insert value at the tail of the list stored at key. If key does not exist,
- * it is created as empty list before performing the push operations. When key holds a value
- * that is not a list, an error is returned.
- */
- RPUSH,
-
- /**
- * Use SADD command. Insert value into a set with a defined key. If key does not exist, it is
- * created as empty set before performing the add operations. When key holds a value that is not
- * a set, an error is returned.
- */
- SADD,
-
- /**
- * Use ZADD command. Adds all the specified members with the specified scores to the sorted set
- * stored at key. It is possible to specify multiple score / member pairs. If a specified member
- * is already a member of the sorted set, the score is updated and the element reinserted at the
- * right position to ensure the correct ordering.
- */
- ZADD
- }
-
- @DefaultCoder(AvroCoder.class)
- public static class RedisMutation {
-
- private Method method;
- private byte[] key;
- private byte[] value;
- @Nullable private Long expiryMillis;
- @Nullable private Long score;
-
- public RedisMutation() {}
-
- public RedisMutation(
- Method method,
- byte[] key,
- byte[] value,
- @Nullable Long expiryMillis,
- @Nullable Long score) {
- this.method = method;
- this.key = key;
- this.value = value;
- this.expiryMillis = expiryMillis;
- this.score = score;
- }
-
- public Method getMethod() {
- return method;
- }
-
- public void setMethod(Method method) {
- this.method = method;
- }
-
- public byte[] getKey() {
- return key;
- }
-
- public void setKey(byte[] key) {
- this.key = key;
- }
-
- public byte[] getValue() {
- return value;
- }
-
- public void setValue(byte[] value) {
- this.value = value;
- }
-
- @Nullable
- public Long getExpiryMillis() {
- return expiryMillis;
- }
-
- public void setExpiryMillis(@Nullable Long expiryMillis) {
- this.expiryMillis = expiryMillis;
- }
-
- @Nullable
- public Long getScore() {
- return score;
- }
-
- public void setScore(@Nullable Long score) {
- this.score = score;
- }
- }
-
- /** ServingStoreWrite data to a Redis server. */
- public static class Write
- extends PTransform, PCollection> {
-
- private WriteDoFn dofn;
-
- private Write(StoreProto.Store store) {
- this.dofn = new WriteDoFn(store);
- }
-
- public Write withBatchSize(int batchSize) {
- this.dofn.withBatchSize(batchSize);
- return this;
- }
-
- public Write withTimeout(int timeout) {
- this.dofn.withTimeout(timeout);
- return this;
- }
-
- @Override
- public PCollection expand(PCollection input) {
- return input.apply(ParDo.of(dofn));
- }
-
- public static class WriteDoFn extends DoFn {
-
- private final List mutations = new ArrayList<>();
- private int batchSize = DEFAULT_BATCH_SIZE;
- private int timeout = DEFAULT_TIMEOUT;
- private RedisIngestionClient redisIngestionClient;
-
- WriteDoFn(StoreProto.Store store) {
- if (store.getType() == StoreProto.Store.StoreType.REDIS)
- this.redisIngestionClient = new RedisStandaloneIngestionClient(store.getRedisConfig());
- }
-
- public WriteDoFn withBatchSize(int batchSize) {
- if (batchSize > 0) {
- this.batchSize = batchSize;
- }
- return this;
- }
-
- public WriteDoFn withTimeout(int timeout) {
- if (timeout > 0) {
- this.timeout = timeout;
- }
- return this;
- }
-
- @Setup
- public void setup() {
- this.redisIngestionClient.setup();
- }
-
- @StartBundle
- public void startBundle() {
- try {
- redisIngestionClient.connect();
- } catch (RedisConnectionException e) {
- log.error("Connection to redis cannot be established ", e);
- }
- mutations.clear();
- }
-
- private void executeBatch() throws Exception {
- this.redisIngestionClient
- .getBackOffExecutor()
- .execute(
- new Retriable() {
- @Override
- public void execute() throws ExecutionException, InterruptedException {
- if (!redisIngestionClient.isConnected()) {
- redisIngestionClient.connect();
- }
- mutations.forEach(
- mutation -> {
- writeRecord(mutation);
- if (mutation.getExpiryMillis() != null
- && mutation.getExpiryMillis() > 0) {
- redisIngestionClient.pexpire(
- mutation.getKey(), mutation.getExpiryMillis());
- }
- });
- redisIngestionClient.sync();
- mutations.clear();
- }
-
- @Override
- public Boolean isExceptionRetriable(Exception e) {
- return e instanceof RedisConnectionException;
- }
-
- @Override
- public void cleanUpAfterFailure() {}
- });
- }
-
- private FailedElement toFailedElement(
- RedisMutation mutation, Exception exception, String jobName) {
- return FailedElement.newBuilder()
- .setJobName(jobName)
- .setTransformName("RedisCustomIO")
- .setPayload(Arrays.toString(mutation.getValue()))
- .setErrorMessage(exception.getMessage())
- .setStackTrace(ExceptionUtils.getStackTrace(exception))
- .build();
- }
-
- @ProcessElement
- public void processElement(ProcessContext context) {
- RedisMutation mutation = context.element();
- mutations.add(mutation);
- if (mutations.size() >= batchSize) {
- try {
- executeBatch();
- } catch (Exception e) {
- mutations.forEach(
- failedMutation -> {
- FailedElement failedElement =
- toFailedElement(failedMutation, e, context.getPipelineOptions().getJobName());
- context.output(failedElement);
- });
- mutations.clear();
- }
- }
- }
-
- private void writeRecord(RedisMutation mutation) {
- switch (mutation.getMethod()) {
- case APPEND:
- redisIngestionClient.append(mutation.getKey(), mutation.getValue());
- return;
- case SET:
- redisIngestionClient.set(mutation.getKey(), mutation.getValue());
- return;
- case LPUSH:
- redisIngestionClient.lpush(mutation.getKey(), mutation.getValue());
- return;
- case RPUSH:
- redisIngestionClient.rpush(mutation.getKey(), mutation.getValue());
- return;
- case SADD:
- redisIngestionClient.sadd(mutation.getKey(), mutation.getValue());
- return;
- case ZADD:
- redisIngestionClient.zadd(mutation.getKey(), mutation.getScore(), mutation.getValue());
- return;
- default:
- throw new UnsupportedOperationException(
- String.format("Not implemented writing records for %s", mutation.getMethod()));
- }
- }
-
- @FinishBundle
- public void finishBundle(FinishBundleContext context)
- throws IOException, InterruptedException {
- if (mutations.size() > 0) {
- try {
- executeBatch();
- } catch (Exception e) {
- mutations.forEach(
- failedMutation -> {
- FailedElement failedElement =
- toFailedElement(failedMutation, e, context.getPipelineOptions().getJobName());
- context.output(failedElement, Instant.now(), GlobalWindow.INSTANCE);
- });
- mutations.clear();
- }
- }
- }
-
- @Teardown
- public void teardown() {
- redisIngestionClient.shutdown();
- }
- }
- }
-}
diff --git a/ingestion/src/test/java/feast/ingestion/ImportJobTest.java b/ingestion/src/test/java/feast/ingestion/ImportJobTest.java
index 0b000df0f59..13df73e96a4 100644
--- a/ingestion/src/test/java/feast/ingestion/ImportJobTest.java
+++ b/ingestion/src/test/java/feast/ingestion/ImportJobTest.java
@@ -188,8 +188,8 @@ public void runPipeline_ShouldWriteToRedisCorrectlyGivenValidSpecAndFeatureRow()
IntStream.range(0, IMPORT_JOB_SAMPLE_FEATURE_ROW_SIZE)
.forEach(
i -> {
- FeatureRow randomRow = TestUtil.createRandomFeatureRow(featureSet);
- RedisKey redisKey = TestUtil.createRedisKey(featureSet, randomRow);
+ FeatureRow randomRow = TestUtil.createRandomFeatureRow(featureSet.getSpec());
+ RedisKey redisKey = TestUtil.createRedisKey(featureSet.getSpec(), randomRow);
input.add(randomRow);
List fields =
randomRow.getFieldsList().stream()
diff --git a/ingestion/src/test/java/feast/ingestion/transform/ValidateFeatureRowsTest.java b/ingestion/src/test/java/feast/ingestion/transform/ValidateFeatureRowsTest.java
index 5c9860ed97f..3737a736168 100644
--- a/ingestion/src/test/java/feast/ingestion/transform/ValidateFeatureRowsTest.java
+++ b/ingestion/src/test/java/feast/ingestion/transform/ValidateFeatureRowsTest.java
@@ -16,13 +16,10 @@
*/
package feast.ingestion.transform;
-import static org.junit.Assert.*;
-
import feast.core.FeatureSetProto.EntitySpec;
-import feast.core.FeatureSetProto.FeatureSet;
import feast.core.FeatureSetProto.FeatureSetSpec;
import feast.core.FeatureSetProto.FeatureSpec;
-import feast.ingestion.values.FailedElement;
+import feast.storage.api.writer.FailedElement;
import feast.test.TestUtil;
import feast.types.FeatureRowProto.FeatureRow;
import feast.types.FieldProto.Field;
@@ -52,73 +49,57 @@ public class ValidateFeatureRowsTest {
@Test
public void shouldWriteSuccessAndFailureTagsCorrectly() {
- FeatureSet fs1 =
- FeatureSet.newBuilder()
- .setSpec(
- FeatureSetSpec.newBuilder()
- .setName("feature_set")
- .setVersion(1)
- .setProject("myproject")
- .addEntities(
- EntitySpec.newBuilder()
- .setName("entity_id_primary")
- .setValueType(Enum.INT32)
- .build())
- .addEntities(
- EntitySpec.newBuilder()
- .setName("entity_id_secondary")
- .setValueType(Enum.STRING)
- .build())
- .addFeatures(
- FeatureSpec.newBuilder()
- .setName("feature_1")
- .setValueType(Enum.STRING)
- .build())
- .addFeatures(
- FeatureSpec.newBuilder()
- .setName("feature_2")
- .setValueType(Enum.INT64)
- .build()))
+ FeatureSetSpec fs1 =
+ FeatureSetSpec.newBuilder()
+ .setName("feature_set")
+ .setVersion(1)
+ .setProject("myproject")
+ .addEntities(
+ EntitySpec.newBuilder()
+ .setName("entity_id_primary")
+ .setValueType(Enum.INT32)
+ .build())
+ .addEntities(
+ EntitySpec.newBuilder()
+ .setName("entity_id_secondary")
+ .setValueType(Enum.STRING)
+ .build())
+ .addFeatures(
+ FeatureSpec.newBuilder().setName("feature_1").setValueType(Enum.STRING).build())
+ .addFeatures(
+ FeatureSpec.newBuilder().setName("feature_2").setValueType(Enum.INT64).build())
.build();
- FeatureSet fs2 =
- FeatureSet.newBuilder()
- .setSpec(
- FeatureSetSpec.newBuilder()
- .setName("feature_set")
- .setVersion(2)
- .setProject("myproject")
- .addEntities(
- EntitySpec.newBuilder()
- .setName("entity_id_primary")
- .setValueType(Enum.INT32)
- .build())
- .addEntities(
- EntitySpec.newBuilder()
- .setName("entity_id_secondary")
- .setValueType(Enum.STRING)
- .build())
- .addFeatures(
- FeatureSpec.newBuilder()
- .setName("feature_1")
- .setValueType(Enum.STRING)
- .build())
- .addFeatures(
- FeatureSpec.newBuilder()
- .setName("feature_2")
- .setValueType(Enum.INT64)
- .build()))
+ FeatureSetSpec fs2 =
+ FeatureSetSpec.newBuilder()
+ .setName("feature_set")
+ .setVersion(2)
+ .setProject("myproject")
+ .addEntities(
+ EntitySpec.newBuilder()
+ .setName("entity_id_primary")
+ .setValueType(Enum.INT32)
+ .build())
+ .addEntities(
+ EntitySpec.newBuilder()
+ .setName("entity_id_secondary")
+ .setValueType(Enum.STRING)
+ .build())
+ .addFeatures(
+ FeatureSpec.newBuilder().setName("feature_1").setValueType(Enum.STRING).build())
+ .addFeatures(
+ FeatureSpec.newBuilder().setName("feature_2").setValueType(Enum.INT64).build())
.build();
- Map featureSets = new HashMap<>();
- featureSets.put("myproject/feature_set:1", fs1);
- featureSets.put("myproject/feature_set:2", fs2);
+ Map featureSetSpecs = new HashMap<>();
+ featureSetSpecs.put("myproject/feature_set:1", fs1);
+ featureSetSpecs.put("myproject/feature_set:2", fs2);
List input = new ArrayList<>();
List expected = new ArrayList<>();
- for (FeatureSet featureSet : featureSets.values()) {
- FeatureRow randomRow = TestUtil.createRandomFeatureRow(featureSet);
+ for (FeatureSetSpec featureSetSpec : featureSetSpecs.values()) {
+ FeatureRow randomRow = TestUtil.createRandomFeatureRow(featureSetSpec);
input.add(randomRow);
expected.add(randomRow);
}
@@ -132,7 +113,7 @@ public void shouldWriteSuccessAndFailureTagsCorrectly() {
ValidateFeatureRows.newBuilder()
.setFailureTag(FAILURE_TAG)
.setSuccessTag(SUCCESS_TAG)
- .setFeatureSets(featureSets)
+ .setFeatureSetSpecs(featureSetSpecs)
.build());
PAssert.that(output.get(SUCCESS_TAG)).containsInAnyOrder(expected);
@@ -143,36 +124,28 @@ public void shouldWriteSuccessAndFailureTagsCorrectly() {
@Test
public void shouldExcludeUnregisteredFields() {
- FeatureSet fs1 =
- FeatureSet.newBuilder()
- .setSpec(
- FeatureSetSpec.newBuilder()
- .setName("feature_set")
- .setVersion(1)
- .setProject("myproject")
- .addEntities(
- EntitySpec.newBuilder()
- .setName("entity_id_primary")
- .setValueType(Enum.INT32)
- .build())
- .addEntities(
- EntitySpec.newBuilder()
- .setName("entity_id_secondary")
- .setValueType(Enum.STRING)
- .build())
- .addFeatures(
- FeatureSpec.newBuilder()
- .setName("feature_1")
- .setValueType(Enum.STRING)
- .build())
- .addFeatures(
- FeatureSpec.newBuilder()
- .setName("feature_2")
- .setValueType(Enum.INT64)
- .build()))
+ FeatureSetSpec fs1 =
+ FeatureSetSpec.newBuilder()
+ .setName("feature_set")
+ .setVersion(1)
+ .setProject("myproject")
+ .addEntities(
+ EntitySpec.newBuilder()
+ .setName("entity_id_primary")
+ .setValueType(Enum.INT32)
+ .build())
+ .addEntities(
+ EntitySpec.newBuilder()
+ .setName("entity_id_secondary")
+ .setValueType(Enum.STRING)
+ .build())
+ .addFeatures(
+ FeatureSpec.newBuilder().setName("feature_1").setValueType(Enum.STRING).build())
+ .addFeatures(
+ FeatureSpec.newBuilder().setName("feature_2").setValueType(Enum.INT64).build())
.build();
- Map featureSets = new HashMap<>();
+ Map featureSets = new HashMap<>();
featureSets.put("myproject/feature_set:1", fs1);
List input = new ArrayList<>();
@@ -196,7 +169,7 @@ public void shouldExcludeUnregisteredFields() {
ValidateFeatureRows.newBuilder()
.setFailureTag(FAILURE_TAG)
.setSuccessTag(SUCCESS_TAG)
- .setFeatureSets(featureSets)
+ .setFeatureSetSpecs(featureSets)
.build());
PAssert.that(output.get(SUCCESS_TAG)).containsInAnyOrder(expected);
diff --git a/ingestion/src/test/java/feast/ingestion/utils/StoreUtilTest.java b/ingestion/src/test/java/feast/ingestion/utils/StoreUtilTest.java
deleted file mode 100644
index 82988121bc8..00000000000
--- a/ingestion/src/test/java/feast/ingestion/utils/StoreUtilTest.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * SPDX-License-Identifier: Apache-2.0
- * Copyright 2018-2019 The Feast Authors
- *
- * 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.
- */
-package feast.ingestion.utils;
-
-import static feast.types.ValueProto.ValueType.Enum.*;
-
-import com.google.cloud.bigquery.BigQuery;
-import com.google.cloud.bigquery.Field;
-import com.google.cloud.bigquery.Field.Mode;
-import com.google.cloud.bigquery.Schema;
-import com.google.cloud.bigquery.StandardSQLTypeName;
-import feast.core.FeatureSetProto.EntitySpec;
-import feast.core.FeatureSetProto.FeatureSet;
-import feast.core.FeatureSetProto.FeatureSetSpec;
-import feast.core.FeatureSetProto.FeatureSpec;
-import java.util.Arrays;
-import org.junit.Assert;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-public class StoreUtilTest {
-
- @Test
- public void setupBigQuery_shouldCreateTable_givenValidFeatureSetSpec() {
- FeatureSet featureSet =
- FeatureSet.newBuilder()
- .setSpec(
- FeatureSetSpec.newBuilder()
- .setName("feature_set_1")
- .setVersion(1)
- .setProject("feast-project")
- .addEntities(EntitySpec.newBuilder().setName("entity_1").setValueType(INT32))
- .addFeatures(FeatureSpec.newBuilder().setName("feature_1").setValueType(INT32))
- .addFeatures(
- FeatureSpec.newBuilder().setName("feature_2").setValueType(STRING_LIST)))
- .build();
- BigQuery mockedBigquery = Mockito.mock(BigQuery.class);
- StoreUtil.setupBigQuery(featureSet, "project-1", "dataset_1", mockedBigquery);
- }
-
- @Test
- public void createBigQueryTableDefinition_shouldCreateCorrectSchema_givenValidFeatureSetSpec() {
- FeatureSetSpec input =
- FeatureSetSpec.newBuilder()
- .addAllEntities(
- Arrays.asList(
- EntitySpec.newBuilder().setName("bytes_entity").setValueType(BYTES).build(),
- EntitySpec.newBuilder().setName("string_entity").setValueType(STRING).build(),
- EntitySpec.newBuilder().setName("int32_entity").setValueType(INT32).build(),
- EntitySpec.newBuilder().setName("int64_entity").setValueType(INT64).build(),
- EntitySpec.newBuilder().setName("double_entity").setValueType(DOUBLE).build(),
- EntitySpec.newBuilder().setName("float_entity").setValueType(FLOAT).build(),
- EntitySpec.newBuilder().setName("bool_entity").setValueType(BOOL).build(),
- EntitySpec.newBuilder()
- .setName("bytes_list_entity")
- .setValueType(BYTES_LIST)
- .build(),
- EntitySpec.newBuilder()
- .setName("string_list_entity")
- .setValueType(STRING_LIST)
- .build(),
- EntitySpec.newBuilder()
- .setName("int32_list_entity")
- .setValueType(INT32_LIST)
- .build(),
- EntitySpec.newBuilder()
- .setName("int64_list_entity")
- .setValueType(INT64_LIST)
- .build(),
- EntitySpec.newBuilder()
- .setName("double_list_entity")
- .setValueType(DOUBLE_LIST)
- .build(),
- EntitySpec.newBuilder()
- .setName("float_list_entity")
- .setValueType(FLOAT_LIST)
- .build(),
- EntitySpec.newBuilder()
- .setName("bool_list_entity")
- .setValueType(BOOL_LIST)
- .build()))
- .addAllFeatures(
- Arrays.asList(
- FeatureSpec.newBuilder().setName("bytes_feature").setValueType(BYTES).build(),
- FeatureSpec.newBuilder().setName("string_feature").setValueType(STRING).build(),
- FeatureSpec.newBuilder().setName("int32_feature").setValueType(INT32).build(),
- FeatureSpec.newBuilder().setName("int64_feature").setValueType(INT64).build(),
- FeatureSpec.newBuilder().setName("double_feature").setValueType(DOUBLE).build(),
- FeatureSpec.newBuilder().setName("float_feature").setValueType(FLOAT).build(),
- FeatureSpec.newBuilder().setName("bool_feature").setValueType(BOOL).build(),
- FeatureSpec.newBuilder()
- .setName("bytes_list_feature")
- .setValueType(BYTES_LIST)
- .build(),
- FeatureSpec.newBuilder()
- .setName("string_list_feature")
- .setValueType(STRING_LIST)
- .build(),
- FeatureSpec.newBuilder()
- .setName("int32_list_feature")
- .setValueType(INT32_LIST)
- .build(),
- FeatureSpec.newBuilder()
- .setName("int64_list_feature")
- .setValueType(INT64_LIST)
- .build(),
- FeatureSpec.newBuilder()
- .setName("double_list_feature")
- .setValueType(DOUBLE_LIST)
- .build(),
- FeatureSpec.newBuilder()
- .setName("float_list_feature")
- .setValueType(FLOAT_LIST)
- .build(),
- FeatureSpec.newBuilder()
- .setName("bool_list_feature")
- .setValueType(BOOL_LIST)
- .build()))
- .build();
-
- Schema actual = StoreUtil.createBigQueryTableDefinition(input).getSchema();
-
- Schema expected =
- Schema.of(
- Arrays.asList(
- // Fields from entity
- Field.newBuilder("bytes_entity", StandardSQLTypeName.BYTES).build(),
- Field.newBuilder("string_entity", StandardSQLTypeName.STRING).build(),
- Field.newBuilder("int32_entity", StandardSQLTypeName.INT64).build(),
- Field.newBuilder("int64_entity", StandardSQLTypeName.INT64).build(),
- Field.newBuilder("double_entity", StandardSQLTypeName.FLOAT64).build(),
- Field.newBuilder("float_entity", StandardSQLTypeName.FLOAT64).build(),
- Field.newBuilder("bool_entity", StandardSQLTypeName.BOOL).build(),
- Field.newBuilder("bytes_list_entity", StandardSQLTypeName.BYTES)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("string_list_entity", StandardSQLTypeName.STRING)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("int32_list_entity", StandardSQLTypeName.INT64)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("int64_list_entity", StandardSQLTypeName.INT64)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("double_list_entity", StandardSQLTypeName.FLOAT64)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("float_list_entity", StandardSQLTypeName.FLOAT64)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("bool_list_entity", StandardSQLTypeName.BOOL)
- .setMode(Mode.REPEATED)
- .build(),
- // Fields from feature
- Field.newBuilder("bytes_feature", StandardSQLTypeName.BYTES).build(),
- Field.newBuilder("string_feature", StandardSQLTypeName.STRING).build(),
- Field.newBuilder("int32_feature", StandardSQLTypeName.INT64).build(),
- Field.newBuilder("int64_feature", StandardSQLTypeName.INT64).build(),
- Field.newBuilder("double_feature", StandardSQLTypeName.FLOAT64).build(),
- Field.newBuilder("float_feature", StandardSQLTypeName.FLOAT64).build(),
- Field.newBuilder("bool_feature", StandardSQLTypeName.BOOL).build(),
- Field.newBuilder("bytes_list_feature", StandardSQLTypeName.BYTES)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("string_list_feature", StandardSQLTypeName.STRING)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("int32_list_feature", StandardSQLTypeName.INT64)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("int64_list_feature", StandardSQLTypeName.INT64)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("double_list_feature", StandardSQLTypeName.FLOAT64)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("float_list_feature", StandardSQLTypeName.FLOAT64)
- .setMode(Mode.REPEATED)
- .build(),
- Field.newBuilder("bool_list_feature", StandardSQLTypeName.BOOL)
- .setMode(Mode.REPEATED)
- .build(),
- // Reserved fields
- Field.newBuilder("event_timestamp", StandardSQLTypeName.TIMESTAMP)
- .setDescription(StoreUtil.BIGQUERY_EVENT_TIMESTAMP_FIELD_DESCRIPTION)
- .build(),
- Field.newBuilder("created_timestamp", StandardSQLTypeName.TIMESTAMP)
- .setDescription(StoreUtil.BIGQUERY_CREATED_TIMESTAMP_FIELD_DESCRIPTION)
- .build(),
- Field.newBuilder("job_id", StandardSQLTypeName.STRING)
- .setDescription(StoreUtil.BIGQUERY_JOB_ID_FIELD_DESCRIPTION)
- .build()));
-
- Assert.assertEquals(expected, actual);
- }
-}
diff --git a/ingestion/src/test/java/feast/store/serving/redis/RedisCustomIOTest.java b/ingestion/src/test/java/feast/store/serving/redis/RedisCustomIOTest.java
deleted file mode 100644
index 75663d24a6a..00000000000
--- a/ingestion/src/test/java/feast/store/serving/redis/RedisCustomIOTest.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * SPDX-License-Identifier: Apache-2.0
- * Copyright 2018-2019 The Feast Authors
- *
- * 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.
- */
-package feast.store.serving.redis;
-
-import static feast.test.TestUtil.field;
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import feast.core.StoreProto;
-import feast.storage.RedisProto.RedisKey;
-import feast.store.serving.redis.RedisCustomIO.Method;
-import feast.store.serving.redis.RedisCustomIO.RedisMutation;
-import feast.types.FeatureRowProto.FeatureRow;
-import feast.types.ValueProto.ValueType.Enum;
-import io.lettuce.core.RedisClient;
-import io.lettuce.core.RedisURI;
-import io.lettuce.core.api.StatefulRedisConnection;
-import io.lettuce.core.api.sync.RedisStringCommands;
-import io.lettuce.core.codec.ByteArrayCodec;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import org.apache.beam.sdk.testing.PAssert;
-import org.apache.beam.sdk.testing.TestPipeline;
-import org.apache.beam.sdk.transforms.Count;
-import org.apache.beam.sdk.transforms.Create;
-import org.apache.beam.sdk.values.PCollection;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import redis.embedded.Redis;
-import redis.embedded.RedisServer;
-
-public class RedisCustomIOTest {
- @Rule public transient TestPipeline p = TestPipeline.create();
-
- private static String REDIS_HOST = "localhost";
- private static int REDIS_PORT = 51234;
- private Redis redis;
- private RedisClient redisClient;
- private RedisStringCommands sync;
-
- @Before
- public void setUp() throws IOException {
- redis = new RedisServer(REDIS_PORT);
- redis.start();
- redisClient =
- RedisClient.create(new RedisURI(REDIS_HOST, REDIS_PORT, java.time.Duration.ofMillis(2000)));
- StatefulRedisConnection connection = redisClient.connect(new ByteArrayCodec());
- sync = connection.sync();
- }
-
- @After
- public void teardown() {
- redisClient.shutdown();
- redis.stop();
- }
-
- @Test
- public void shouldWriteToRedis() {
- StoreProto.Store.RedisConfig redisConfig =
- StoreProto.Store.RedisConfig.newBuilder().setHost(REDIS_HOST).setPort(REDIS_PORT).build();
- HashMap kvs = new LinkedHashMap<>();
- kvs.put(
- RedisKey.newBuilder()
- .setFeatureSet("fs:1")
- .addEntities(field("entity", 1, Enum.INT64))
- .build(),
- FeatureRow.newBuilder()
- .setFeatureSet("fs:1")
- .addFields(field("entity", 1, Enum.INT64))
- .addFields(field("feature", "one", Enum.STRING))
- .build());
- kvs.put(
- RedisKey.newBuilder()
- .setFeatureSet("fs:1")
- .addEntities(field("entity", 2, Enum.INT64))
- .build(),
- FeatureRow.newBuilder()
- .setFeatureSet("fs:1")
- .addFields(field("entity", 2, Enum.INT64))
- .addFields(field("feature", "two", Enum.STRING))
- .build());
-
- List featureRowWrites =
- kvs.entrySet().stream()
- .map(
- kv ->
- new RedisMutation(
- Method.SET,
- kv.getKey().toByteArray(),
- kv.getValue().toByteArray(),
- null,
- null))
- .collect(Collectors.toList());
-
- StoreProto.Store store =
- StoreProto.Store.newBuilder()
- .setRedisConfig(redisConfig)
- .setType(StoreProto.Store.StoreType.REDIS)
- .build();
- p.apply(Create.of(featureRowWrites)).apply(RedisCustomIO.write(store));
- p.run();
-
- kvs.forEach(
- (key, value) -> {
- byte[] actual = sync.get(key.toByteArray());
- assertThat(actual, equalTo(value.toByteArray()));
- });
- }
-
- @Test(timeout = 10000)
- public void shouldRetryFailConnection() throws InterruptedException {
- StoreProto.Store.RedisConfig redisConfig =
- StoreProto.Store.RedisConfig.newBuilder()
- .setHost(REDIS_HOST)
- .setPort(REDIS_PORT)
- .setMaxRetries(4)
- .setInitialBackoffMs(2000)
- .build();
- HashMap kvs = new LinkedHashMap<>();
- kvs.put(
- RedisKey.newBuilder()
- .setFeatureSet("fs:1")
- .addEntities(field("entity", 1, Enum.INT64))
- .build(),
- FeatureRow.newBuilder()
- .setFeatureSet("fs:1")
- .addFields(field("entity", 1, Enum.INT64))
- .addFields(field("feature", "one", Enum.STRING))
- .build());
-
- List featureRowWrites =
- kvs.entrySet().stream()
- .map(
- kv ->
- new RedisMutation(
- Method.SET,
- kv.getKey().toByteArray(),
- kv.getValue().toByteArray(),
- null,
- null))
- .collect(Collectors.toList());
-
- StoreProto.Store store =
- StoreProto.Store.newBuilder()
- .setRedisConfig(redisConfig)
- .setType(StoreProto.Store.StoreType.REDIS)
- .build();
- PCollection failedElementCount =
- p.apply(Create.of(featureRowWrites))
- .apply(RedisCustomIO.write(store))
- .apply(Count.globally());
-
- redis.stop();
- final ScheduledThreadPoolExecutor redisRestartExecutor = new ScheduledThreadPoolExecutor(1);
- ScheduledFuture> scheduledRedisRestart =
- redisRestartExecutor.schedule(
- () -> {
- redis.start();
- },
- 3,
- TimeUnit.SECONDS);
-
- PAssert.that(failedElementCount).containsInAnyOrder(0L);
- p.run();
- scheduledRedisRestart.cancel(true);
-
- kvs.forEach(
- (key, value) -> {
- byte[] actual = sync.get(key.toByteArray());
- assertThat(actual, equalTo(value.toByteArray()));
- });
- }
-
- @Test
- public void shouldProduceFailedElementIfRetryExceeded() {
- StoreProto.Store.RedisConfig redisConfig =
- StoreProto.Store.RedisConfig.newBuilder().setHost(REDIS_HOST).setPort(REDIS_PORT).build();
- HashMap kvs = new LinkedHashMap<>();
- kvs.put(
- RedisKey.newBuilder()
- .setFeatureSet("fs:1")
- .addEntities(field("entity", 1, Enum.INT64))
- .build(),
- FeatureRow.newBuilder()
- .setFeatureSet("fs:1")
- .addFields(field("entity", 1, Enum.INT64))
- .addFields(field("feature", "one", Enum.STRING))
- .build());
-
- List featureRowWrites =
- kvs.entrySet().stream()
- .map(
- kv ->
- new RedisMutation(
- Method.SET,
- kv.getKey().toByteArray(),
- kv.getValue().toByteArray(),
- null,
- null))
- .collect(Collectors.toList());
-
- StoreProto.Store store =
- StoreProto.Store.newBuilder()
- .setRedisConfig(redisConfig)
- .setType(StoreProto.Store.StoreType.REDIS)
- .build();
- PCollection failedElementCount =
- p.apply(Create.of(featureRowWrites))
- .apply(RedisCustomIO.write(store))
- .apply(Count.globally());
-
- redis.stop();
- PAssert.that(failedElementCount).containsInAnyOrder(1L);
- p.run();
- }
-}
diff --git a/ingestion/src/test/java/feast/test/TestUtil.java b/ingestion/src/test/java/feast/test/TestUtil.java
index 3cad39e3ec5..2cd3242fb00 100644
--- a/ingestion/src/test/java/feast/test/TestUtil.java
+++ b/ingestion/src/test/java/feast/test/TestUtil.java
@@ -21,20 +21,13 @@
import com.google.protobuf.ByteString;
import com.google.protobuf.util.Timestamps;
import feast.core.FeatureSetProto.FeatureSet;
-import feast.ingestion.transform.WriteToStore;
+import feast.core.FeatureSetProto.FeatureSetSpec;
+import feast.ingestion.transform.metrics.WriteSuccessMetricsTransform;
import feast.storage.RedisProto.RedisKey;
import feast.types.FeatureRowProto.FeatureRow;
import feast.types.FeatureRowProto.FeatureRow.Builder;
import feast.types.FieldProto.Field;
-import feast.types.ValueProto.BoolList;
-import feast.types.ValueProto.BytesList;
-import feast.types.ValueProto.DoubleList;
-import feast.types.ValueProto.FloatList;
-import feast.types.ValueProto.Int32List;
-import feast.types.ValueProto.Int64List;
-import feast.types.ValueProto.StringList;
-import feast.types.ValueProto.Value;
-import feast.types.ValueProto.ValueType;
+import feast.types.ValueProto.*;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
@@ -174,12 +167,15 @@ public static void publishFeatureRowsToKafka(
/**
* Create a Feature Row with random value according to the FeatureSetSpec
*
- * See {@link #createRandomFeatureRow(FeatureSet, int)}
+ *
See {@link #createRandomFeatureRow(FeatureSetSpec, int)}
+ *
+ * @param featureSetSpec {@link FeatureSetSpec}
+ * @return {@link FeatureRow}
*/
- public static FeatureRow createRandomFeatureRow(FeatureSet featureSet) {
+ public static FeatureRow createRandomFeatureRow(FeatureSetSpec featureSetSpec) {
ThreadLocalRandom random = ThreadLocalRandom.current();
int randomStringSizeMaxSize = 12;
- return createRandomFeatureRow(featureSet, random.nextInt(0, randomStringSizeMaxSize) + 4);
+ return createRandomFeatureRow(featureSetSpec, random.nextInt(0, randomStringSizeMaxSize) + 4);
}
/**
@@ -188,18 +184,18 @@ public static FeatureRow createRandomFeatureRow(FeatureSet featureSet) {
*
The Feature Row created contains fields according to the entities and features defined in
* FeatureSet, matching the value type of the field, with randomized value for testing.
*
- * @param featureSet {@link FeatureSet}
+ * @param featureSetSpec {@link FeatureSetSpec}
* @param randomStringSize number of characters for the generated random string
* @return {@link FeatureRow}
*/
- public static FeatureRow createRandomFeatureRow(FeatureSet featureSet, int randomStringSize) {
+ public static FeatureRow createRandomFeatureRow(
+ FeatureSetSpec featureSetSpec, int randomStringSize) {
Builder builder =
FeatureRow.newBuilder()
- .setFeatureSet(getFeatureSetReference(featureSet))
+ .setFeatureSet(getFeatureSetReference(featureSetSpec))
.setEventTimestamp(Timestamps.fromMillis(System.currentTimeMillis()));
- featureSet
- .getSpec()
+ featureSetSpec
.getEntitiesList()
.forEach(
field -> {
@@ -210,8 +206,7 @@ public static FeatureRow createRandomFeatureRow(FeatureSet featureSet, int rando
.build());
});
- featureSet
- .getSpec()
+ featureSetSpec
.getFeaturesList()
.forEach(
field -> {
@@ -301,15 +296,14 @@ public static Value createRandomValue(ValueType.Enum type, int randomStringSize)
*
The entities in the created {@link RedisKey} will contain the value with matching field name
* in the {@link FeatureRow}
*
- * @param featureSet {@link FeatureSet}
+ * @param featureSetSpec {@link FeatureSetSpec}
* @param row {@link FeatureSet}
* @return {@link RedisKey}
*/
- public static RedisKey createRedisKey(FeatureSet featureSet, FeatureRow row) {
+ public static RedisKey createRedisKey(FeatureSetSpec featureSetSpec, FeatureRow row) {
RedisKey.Builder builder =
- RedisKey.newBuilder().setFeatureSet(getFeatureSetReference(featureSet));
- featureSet
- .getSpec()
+ RedisKey.newBuilder().setFeatureSet(getFeatureSetReference(featureSetSpec));
+ featureSetSpec
.getEntitiesList()
.forEach(
entityField ->
@@ -452,7 +446,9 @@ public static void waitUntilAllElementsAreWrittenToStore(
}
String writeToStoreMetric =
- WriteToStore.METRIC_NAMESPACE + ":" + WriteToStore.ELEMENTS_WRITTEN_METRIC;
+ WriteSuccessMetricsTransform.METRIC_NAMESPACE
+ + ":"
+ + WriteSuccessMetricsTransform.ELEMENTS_WRITTEN_METRIC;
long committed = 0;
long maxSystemTimeMillis = System.currentTimeMillis() + maxWaitDuration.getMillis();
diff --git a/pom.xml b/pom.xml
index 3abb0eb9ace..8fe300e1ff7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,8 @@
datatypes/java
+ storage/api
+ storage/connectors
ingestion
core
serving
@@ -484,6 +486,14 @@
true
+
+
+ build-info
+
+ build-info
+
+
+
diff --git a/protos/feast/core/Store.proto b/protos/feast/core/Store.proto
index 931a9d46b69..de9af0a99fe 100644
--- a/protos/feast/core/Store.proto
+++ b/protos/feast/core/Store.proto
@@ -120,6 +120,9 @@ message Store {
message BigQueryConfig {
string project_id = 1;
string dataset_id = 2;
+ string staging_location = 3;
+ int32 initial_retry_delay_seconds = 4;
+ int32 total_timeout_seconds = 5;
}
message CassandraConfig {
diff --git a/sdk/python/feast/entity.py b/sdk/python/feast/entity.py
index 5f823a754a0..9c5a027b974 100644
--- a/sdk/python/feast/entity.py
+++ b/sdk/python/feast/entity.py
@@ -29,7 +29,26 @@ def to_proto(self) -> EntityProto:
Returns EntitySpec object
"""
value_type = ValueTypeProto.ValueType.Enum.Value(self.dtype.name)
- return EntityProto(name=self.name, value_type=value_type)
+ return EntityProto(
+ name=self.name,
+ value_type=value_type,
+ presence=self.presence,
+ group_presence=self.group_presence,
+ shape=self.shape,
+ value_count=self.value_count,
+ domain=self.domain,
+ int_domain=self.int_domain,
+ float_domain=self.float_domain,
+ string_domain=self.string_domain,
+ bool_domain=self.bool_domain,
+ struct_domain=self.struct_domain,
+ natural_language_domain=self.natural_language_domain,
+ image_domain=self.image_domain,
+ mid_domain=self.mid_domain,
+ url_domain=self.url_domain,
+ time_domain=self.time_domain,
+ time_of_day_domain=self.time_of_day_domain,
+ )
@classmethod
def from_proto(cls, entity_proto: EntityProto):
@@ -42,4 +61,8 @@ def from_proto(cls, entity_proto: EntityProto):
Returns:
Entity object
"""
- return cls(name=entity_proto.name, dtype=ValueType(entity_proto.value_type))
+ entity = cls(name=entity_proto.name, dtype=ValueType(entity_proto.value_type))
+ entity.update_presence_constraints(entity_proto)
+ entity.update_shape_type(entity_proto)
+ entity.update_domain_info(entity_proto)
+ return entity
diff --git a/sdk/python/feast/feature.py b/sdk/python/feast/feature.py
index c9fc1cbff40..9c7ff20f9e2 100644
--- a/sdk/python/feast/feature.py
+++ b/sdk/python/feast/feature.py
@@ -24,9 +24,41 @@ class Feature(Field):
def to_proto(self) -> FeatureProto:
"""Converts Feature object to its Protocol Buffer representation"""
value_type = ValueTypeProto.ValueType.Enum.Value(self.dtype.name)
- return FeatureProto(name=self.name, value_type=value_type)
+ return FeatureProto(
+ name=self.name,
+ value_type=value_type,
+ presence=self.presence,
+ group_presence=self.group_presence,
+ shape=self.shape,
+ value_count=self.value_count,
+ domain=self.domain,
+ int_domain=self.int_domain,
+ float_domain=self.float_domain,
+ string_domain=self.string_domain,
+ bool_domain=self.bool_domain,
+ struct_domain=self.struct_domain,
+ natural_language_domain=self.natural_language_domain,
+ image_domain=self.image_domain,
+ mid_domain=self.mid_domain,
+ url_domain=self.url_domain,
+ time_domain=self.time_domain,
+ time_of_day_domain=self.time_of_day_domain,
+ )
@classmethod
def from_proto(cls, feature_proto: FeatureProto):
- """Converts Protobuf Feature to its SDK equivalent"""
- return cls(name=feature_proto.name, dtype=ValueType(feature_proto.value_type))
+ """
+
+ Args:
+ feature_proto: FeatureSpec protobuf object
+
+ Returns:
+ Feature object
+ """
+ feature = cls(
+ name=feature_proto.name, dtype=ValueType(feature_proto.value_type)
+ )
+ feature.update_presence_constraints(feature_proto)
+ feature.update_shape_type(feature_proto)
+ feature.update_domain_info(feature_proto)
+ return feature
diff --git a/sdk/python/feast/feature_set.py b/sdk/python/feast/feature_set.py
index c4cedaf6b2a..c6104f47a08 100644
--- a/sdk/python/feast/feature_set.py
+++ b/sdk/python/feast/feature_set.py
@@ -11,18 +11,20 @@
# 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.
-
-
+import warnings
from collections import OrderedDict
-from typing import Dict, List, Optional
+from typing import Dict
+from typing import List, Optional
import pandas as pd
import pyarrow as pa
from google.protobuf import json_format
from google.protobuf.duration_pb2 import Duration
from google.protobuf.json_format import MessageToJson
+from google.protobuf.message import Message
from pandas.api.types import is_datetime64_ns_dtype
from pyarrow.lib import TimestampType
+from tensorflow_metadata.proto.v0 import schema_pb2
from feast.core.FeatureSet_pb2 import FeatureSet as FeatureSetProto
from feast.core.FeatureSet_pb2 import FeatureSetMeta as FeatureSetMetaProto
@@ -657,6 +659,93 @@ def is_valid(self):
if len(self.entities) == 0:
raise ValueError(f"No entities found in feature set {self.name}")
+ def import_tfx_schema(self, schema: schema_pb2.Schema):
+ """
+ Updates presence_constraints, shape_type and domain_info for all fields
+ (features and entities) in the FeatureSet from schema in the Tensorflow metadata.
+
+ Args:
+ schema: Schema from Tensorflow metadata
+
+ Returns:
+ None
+
+ """
+ _make_tfx_schema_domain_info_inline(schema)
+ for feature_from_tfx_schema in schema.feature:
+ if feature_from_tfx_schema.name in self._fields.keys():
+ field = self._fields[feature_from_tfx_schema.name]
+ field.update_presence_constraints(feature_from_tfx_schema)
+ field.update_shape_type(feature_from_tfx_schema)
+ field.update_domain_info(feature_from_tfx_schema)
+ else:
+ warnings.warn(
+ f"The provided schema contains feature name '{feature_from_tfx_schema.name}' "
+ f"that does not exist in the FeatureSet '{self.name}' in Feast"
+ )
+
+ def export_tfx_schema(self) -> schema_pb2.Schema:
+ """
+ Create a Tensorflow metadata schema from a FeatureSet.
+
+ Returns:
+ Tensorflow metadata schema.
+
+ """
+ schema = schema_pb2.Schema()
+
+ # List of attributes to copy from fields in the FeatureSet to feature in
+ # Tensorflow metadata schema where the attribute name is the same.
+ attributes_to_copy_from_field_to_feature = [
+ "name",
+ "presence",
+ "group_presence",
+ "shape",
+ "value_count",
+ "domain",
+ "int_domain",
+ "float_domain",
+ "string_domain",
+ "bool_domain",
+ "struct_domain",
+ "_natural_language_domain",
+ "image_domain",
+ "mid_domain",
+ "url_domain",
+ "time_domain",
+ "time_of_day_domain",
+ ]
+
+ for _, field in self._fields.items():
+ feature = schema_pb2.Feature()
+ for attr in attributes_to_copy_from_field_to_feature:
+ if getattr(field, attr) is None:
+ # This corresponds to an unset member in the proto Oneof field.
+ continue
+ if issubclass(type(getattr(feature, attr)), Message):
+ # Proto message field to copy is an "embedded" field, so MergeFrom()
+ # method must be used.
+ getattr(feature, attr).MergeFrom(getattr(field, attr))
+ elif issubclass(type(getattr(feature, attr)), (int, str, bool)):
+ # Proto message field is a simple Python type, so setattr()
+ # can be used.
+ setattr(feature, attr, getattr(field, attr))
+ else:
+ warnings.warn(
+ f"Attribute '{attr}' cannot be copied from Field "
+ f"'{field.name}' in FeatureSet '{self.name}' to a "
+ f"Feature in the Tensorflow metadata schema, because"
+ f"the type is neither a Protobuf message or Python "
+ f"int, str and bool"
+ )
+ # "type" attr is handled separately because the attribute name is different
+ # ("dtype" in field and "type" in Feature) and "type" in Feature is only
+ # a subset of "dtype".
+ feature.type = field.dtype.to_tfx_schema_feature_type()
+ schema.feature.append(feature)
+
+ return schema
+
@classmethod
def from_yaml(cls, yml: str):
"""
@@ -855,6 +944,40 @@ def __hash__(self):
return hash(repr(self))
+def _make_tfx_schema_domain_info_inline(schema: schema_pb2.Schema) -> None:
+ """
+ Copy top level domain info defined at schema level into inline definition.
+ One use case is when importing domain info from Tensorflow metadata schema
+ into Feast features. Feast features do not have access to schema level information
+ so the domain info needs to be inline.
+
+ Args:
+ schema: Tensorflow metadata schema
+
+ Returns: None
+ """
+ # Reference to domains defined at schema level
+ domain_ref_to_string_domain = {d.name: d for d in schema.string_domain}
+ domain_ref_to_float_domain = {d.name: d for d in schema.float_domain}
+ domain_ref_to_int_domain = {d.name: d for d in schema.int_domain}
+
+ # With the reference, it is safe to remove the domains defined at schema level
+ del schema.string_domain[:]
+ del schema.float_domain[:]
+ del schema.int_domain[:]
+
+ for feature in schema.feature:
+ domain_info_case = feature.WhichOneof("domain_info")
+ if domain_info_case == "domain":
+ domain_ref = feature.domain
+ if domain_ref in domain_ref_to_string_domain:
+ feature.string_domain.MergeFrom(domain_ref_to_string_domain[domain_ref])
+ elif domain_ref in domain_ref_to_float_domain:
+ feature.float_domain.MergeFrom(domain_ref_to_float_domain[domain_ref])
+ elif domain_ref in domain_ref_to_int_domain:
+ feature.int_domain.MergeFrom(domain_ref_to_int_domain[domain_ref])
+
+
def _infer_pd_column_type(column, series, rows_to_sample):
dtype = None
sample_count = 0
diff --git a/sdk/python/feast/field.py b/sdk/python/feast/field.py
index 2efd4587ff0..be56823489b 100644
--- a/sdk/python/feast/field.py
+++ b/sdk/python/feast/field.py
@@ -11,8 +11,11 @@
# 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.
+from typing import Union
+from feast.core.FeatureSet_pb2 import EntitySpec, FeatureSpec
from feast.value_type import ValueType
+from tensorflow_metadata.proto.v0 import schema_pb2
class Field:
@@ -26,6 +29,22 @@ def __init__(self, name: str, dtype: ValueType):
if not isinstance(dtype, ValueType):
raise ValueError("dtype is not a valid ValueType")
self._dtype = dtype
+ self._presence = None
+ self._group_presence = None
+ self._shape = None
+ self._value_count = None
+ self._domain = None
+ self._int_domain = None
+ self._float_domain = None
+ self._string_domain = None
+ self._bool_domain = None
+ self._struct_domain = None
+ self._natural_language_domain = None
+ self._image_domain = None
+ self._mid_domain = None
+ self._url_domain = None
+ self._time_domain = None
+ self._time_of_day_domain = None
def __eq__(self, other):
if self.name != other.name or self.dtype != other.dtype:
@@ -46,6 +65,354 @@ def dtype(self) -> ValueType:
"""
return self._dtype
+ @property
+ def presence(self) -> schema_pb2.FeaturePresence:
+ """
+ Getter for presence of this field
+ """
+ return self._presence
+
+ @presence.setter
+ def presence(self, presence: schema_pb2.FeaturePresence):
+ """
+ Setter for presence of this field
+ """
+ if not isinstance(presence, schema_pb2.FeaturePresence):
+ raise TypeError("presence must be of FeaturePresence type")
+ self._clear_presence_constraints()
+ self._presence = presence
+
+ @property
+ def group_presence(self) -> schema_pb2.FeaturePresenceWithinGroup:
+ """
+ Getter for group_presence of this field
+ """
+ return self._group_presence
+
+ @group_presence.setter
+ def group_presence(self, group_presence: schema_pb2.FeaturePresenceWithinGroup):
+ """
+ Setter for group_presence of this field
+ """
+ if not isinstance(group_presence, schema_pb2.FeaturePresenceWithinGroup):
+ raise TypeError("group_presence must be of FeaturePresenceWithinGroup type")
+ self._clear_presence_constraints()
+ self._group_presence = group_presence
+
+ @property
+ def shape(self) -> schema_pb2.FixedShape:
+ """
+ Getter for shape of this field
+ """
+ return self._shape
+
+ @shape.setter
+ def shape(self, shape: schema_pb2.FixedShape):
+ """
+ Setter for shape of this field
+ """
+ if not isinstance(shape, schema_pb2.FixedShape):
+ raise TypeError("shape must be of FixedShape type")
+ self._clear_shape_type()
+ self._shape = shape
+
+ @property
+ def value_count(self) -> schema_pb2.ValueCount:
+ """
+ Getter for value_count of this field
+ """
+ return self._value_count
+
+ @value_count.setter
+ def value_count(self, value_count: schema_pb2.ValueCount):
+ """
+ Setter for value_count of this field
+ """
+ if not isinstance(value_count, schema_pb2.ValueCount):
+ raise TypeError("value_count must be of ValueCount type")
+ self._clear_shape_type()
+ self._value_count = value_count
+
+ @property
+ def domain(self) -> str:
+ """
+ Getter for domain of this field
+ """
+ return self._domain
+
+ @domain.setter
+ def domain(self, domain: str):
+ """
+ Setter for domain of this field
+ """
+ if not isinstance(domain, str):
+ raise TypeError("domain must be of str type")
+ self._clear_domain_info()
+ self._domain = domain
+
+ @property
+ def int_domain(self) -> schema_pb2.IntDomain:
+ """
+ Getter for int_domain of this field
+ """
+ return self._int_domain
+
+ @int_domain.setter
+ def int_domain(self, int_domain: schema_pb2.IntDomain):
+ """
+ Setter for int_domain of this field
+ """
+ if not isinstance(int_domain, schema_pb2.IntDomain):
+ raise TypeError("int_domain must be of IntDomain type")
+ self._clear_domain_info()
+ self._int_domain = int_domain
+
+ @property
+ def float_domain(self) -> schema_pb2.FloatDomain:
+ """
+ Getter for float_domain of this field
+ """
+ return self._float_domain
+
+ @float_domain.setter
+ def float_domain(self, float_domain: schema_pb2.FloatDomain):
+ """
+ Setter for float_domain of this field
+ """
+ if not isinstance(float_domain, schema_pb2.FloatDomain):
+ raise TypeError("float_domain must be of FloatDomain type")
+ self._clear_domain_info()
+ self._float_domain = float_domain
+
+ @property
+ def string_domain(self) -> schema_pb2.StringDomain:
+ """
+ Getter for string_domain of this field
+ """
+ return self._string_domain
+
+ @string_domain.setter
+ def string_domain(self, string_domain: schema_pb2.StringDomain):
+ """
+ Setter for string_domain of this field
+ """
+ if not isinstance(string_domain, schema_pb2.StringDomain):
+ raise TypeError("string_domain must be of StringDomain type")
+ self._clear_domain_info()
+ self._string_domain = string_domain
+
+ @property
+ def bool_domain(self) -> schema_pb2.BoolDomain:
+ """
+ Getter for bool_domain of this field
+ """
+ return self._bool_domain
+
+ @bool_domain.setter
+ def bool_domain(self, bool_domain: schema_pb2.BoolDomain):
+ """
+ Setter for bool_domain of this field
+ """
+ if not isinstance(bool_domain, schema_pb2.BoolDomain):
+ raise TypeError("bool_domain must be of BoolDomain type")
+ self._clear_domain_info()
+ self._bool_domain = bool_domain
+
+ @property
+ def struct_domain(self) -> schema_pb2.StructDomain:
+ """
+ Getter for struct_domain of this field
+ """
+ return self._struct_domain
+
+ @struct_domain.setter
+ def struct_domain(self, struct_domain: schema_pb2.StructDomain):
+ """
+ Setter for struct_domain of this field
+ """
+ if not isinstance(struct_domain, schema_pb2.StructDomain):
+ raise TypeError("struct_domain must be of StructDomain type")
+ self._clear_domain_info()
+ self._struct_domain = struct_domain
+
+ @property
+ def natural_language_domain(self) -> schema_pb2.NaturalLanguageDomain:
+ """
+ Getter for natural_language_domain of this field
+ """
+ return self._natural_language_domain
+
+ @natural_language_domain.setter
+ def natural_language_domain(
+ self, natural_language_domain: schema_pb2.NaturalLanguageDomain
+ ):
+ """
+ Setter for natural_language_domin of this field
+ """
+ if not isinstance(natural_language_domain, schema_pb2.NaturalLanguageDomain):
+ raise TypeError(
+ "natural_language_domain must be of NaturalLanguageDomain type"
+ )
+ self._clear_domain_info()
+ self._natural_language_domain = natural_language_domain
+
+ @property
+ def image_domain(self) -> schema_pb2.ImageDomain:
+ """
+ Getter for image_domain of this field
+ """
+ return self._image_domain
+
+ @image_domain.setter
+ def image_domain(self, image_domain: schema_pb2.ImageDomain):
+ """
+ Setter for image_domain of this field
+ """
+ if not isinstance(image_domain, schema_pb2.ImageDomain):
+ raise TypeError("image_domain must be of ImageDomain type")
+ self._clear_domain_info()
+ self._image_domain = image_domain
+
+ @property
+ def mid_domain(self) -> schema_pb2.MIDDomain:
+ """
+ Getter for mid_domain of this field
+ """
+ return self._mid_domain
+
+ @mid_domain.setter
+ def mid_domain(self, mid_domain: schema_pb2.MIDDomain):
+ """
+ Setter for mid_domain of this field
+ """
+ if not isinstance(mid_domain, schema_pb2.MIDDomain):
+ raise TypeError("mid_domain must be of MIDDomain type")
+ self._clear_domain_info()
+ self._mid_domain = mid_domain
+
+ @property
+ def url_domain(self) -> schema_pb2.URLDomain:
+ """
+ Getter for url_domain of this field
+ """
+ return self._url_domain
+
+ @url_domain.setter
+ def url_domain(self, url_domain: schema_pb2.URLDomain):
+ """
+ Setter for url_domain of this field
+ """
+ if not isinstance(url_domain, schema_pb2.URLDomain):
+ raise TypeError("url_domain must be of URLDomain type")
+ self._clear_domain_info()
+ self.url_domain = url_domain
+
+ @property
+ def time_domain(self) -> schema_pb2.TimeDomain:
+ """
+ Getter for time_domain of this field
+ """
+ return self._time_domain
+
+ @time_domain.setter
+ def time_domain(self, time_domain: schema_pb2.TimeDomain):
+ """
+ Setter for time_domain of this field
+ """
+ if not isinstance(time_domain, schema_pb2.TimeDomain):
+ raise TypeError("time_domain must be of TimeDomain type")
+ self._clear_domain_info()
+ self._time_domain = time_domain
+
+ @property
+ def time_of_day_domain(self) -> schema_pb2.TimeOfDayDomain:
+ """
+ Getter for time_of_day_domain of this field
+ """
+ return self._time_of_day_domain
+
+ @time_of_day_domain.setter
+ def time_of_day_domain(self, time_of_day_domain):
+ """
+ Setter for time_of_day_domain of this field
+ """
+ if not isinstance(time_of_day_domain, schema_pb2.TimeOfDayDomain):
+ raise TypeError("time_of_day_domain must be of TimeOfDayDomain type")
+ self._clear_domain_info()
+ self._time_of_day_domain = time_of_day_domain
+
+ def update_presence_constraints(
+ self, feature: Union[schema_pb2.Feature, EntitySpec, FeatureSpec]
+ ) -> None:
+ """
+ Update the presence constraints in this field from Tensorflow Feature,
+ Feast EntitySpec or FeatureSpec
+
+ Args:
+ feature: Tensorflow Feature, Feast EntitySpec or FeatureSpec
+
+ Returns: None
+ """
+ presence_constraints_case = feature.WhichOneof("presence_constraints")
+ if presence_constraints_case == "presence":
+ self.presence = feature.presence
+ elif presence_constraints_case == "group_presence":
+ self.group_presence = feature.group_presence
+
+ def update_shape_type(
+ self, feature: Union[schema_pb2.Feature, EntitySpec, FeatureSpec]
+ ) -> None:
+ """
+ Update the shape type in this field from Tensorflow Feature,
+ Feast EntitySpec or FeatureSpec
+
+ Args:
+ feature: Tensorflow Feature, Feast EntitySpec or FeatureSpec
+
+ Returns: None
+ """
+ shape_type_case = feature.WhichOneof("shape_type")
+ if shape_type_case == "shape":
+ self.shape = feature.shape
+ elif shape_type_case == "value_count":
+ self.value_count = feature.value_count
+
+ def update_domain_info(
+ self, feature: Union[schema_pb2.Feature, EntitySpec, FeatureSpec]
+ ) -> None:
+ """
+ Update the domain info in this field from Tensorflow Feature, Feast EntitySpec
+ or FeatureSpec
+
+ Args:
+ feature: Tensorflow Feature, Feast EntitySpec or FeatureSpec
+
+ Returns: None
+ """
+ domain_info_case = feature.WhichOneof("domain_info")
+ if domain_info_case == "int_domain":
+ self.int_domain = feature.int_domain
+ elif domain_info_case == "float_domain":
+ self.float_domain = feature.float_domain
+ elif domain_info_case == "string_domain":
+ self.string_domain = feature.string_domain
+ elif domain_info_case == "bool_domain":
+ self.bool_domain = feature.bool_domain
+ elif domain_info_case == "struct_domain":
+ self.struct_domain = feature.struct_domain
+ elif domain_info_case == "natural_language_domain":
+ self.natural_language_domain = feature.natural_language_domain
+ elif domain_info_case == "image_domain":
+ self.image_domain = feature.image_domain
+ elif domain_info_case == "mid_domain":
+ self.mid_domain = feature.mid_domain
+ elif domain_info_case == "url_domain":
+ self.url_domain = feature.url_domain
+ elif domain_info_case == "time_domain":
+ self.time_domain = feature.time_domain
+ elif domain_info_case == "time_of_day_domain":
+ self.time_of_day_domain = feature.time_of_day_domain
+
def to_proto(self):
"""
Unimplemented to_proto method for a field. This should be extended.
@@ -57,3 +424,25 @@ def from_proto(self, proto):
Unimplemented from_proto method for a field. This should be extended.
"""
pass
+
+ def _clear_presence_constraints(self):
+ self._presence = None
+ self._group_presence = None
+
+ def _clear_shape_type(self):
+ self._shape = None
+ self._value_count = None
+
+ def _clear_domain_info(self):
+ self._domain = None
+ self._int_domain = None
+ self._float_domain = None
+ self._string_domain = None
+ self._bool_domain = None
+ self._struct_domain = None
+ self._natural_language_domain = None
+ self._image_domain = None
+ self._mid_domain = None
+ self._url_domain = None
+ self._time_domain = None
+ self._time_of_day_domain = None
diff --git a/sdk/python/feast/loaders/yaml.py b/sdk/python/feast/loaders/yaml.py
index 130a71a3d02..624bc47d49c 100644
--- a/sdk/python/feast/loaders/yaml.py
+++ b/sdk/python/feast/loaders/yaml.py
@@ -57,7 +57,8 @@ def _get_yaml_contents(yml: str) -> str:
yml_content = yml
else:
raise Exception(
- f"Invalid YAML provided. Please provide either a file path or YAML string: ${yml}"
+ f"Invalid YAML provided. Please provide either a file path or YAML string.\n"
+ f"Provided YAML: {yml}"
)
return yml_content
diff --git a/sdk/python/feast/value_type.py b/sdk/python/feast/value_type.py
index df315480ce7..687dccc7b7f 100644
--- a/sdk/python/feast/value_type.py
+++ b/sdk/python/feast/value_type.py
@@ -14,6 +14,8 @@
import enum
+from tensorflow_metadata.proto.v0 import schema_pb2
+
class ValueType(enum.Enum):
"""
@@ -35,3 +37,24 @@ class ValueType(enum.Enum):
DOUBLE_LIST = 15
FLOAT_LIST = 16
BOOL_LIST = 17
+
+ def to_tfx_schema_feature_type(self) -> schema_pb2.FeatureType:
+ if self.value in [
+ ValueType.BYTES.value,
+ ValueType.STRING.value,
+ ValueType.BOOL.value,
+ ValueType.BYTES_LIST.value,
+ ValueType.STRING_LIST.value,
+ ValueType.INT32_LIST.value,
+ ValueType.INT64_LIST.value,
+ ValueType.DOUBLE_LIST.value,
+ ValueType.FLOAT_LIST.value,
+ ValueType.BOOL_LIST.value,
+ ]:
+ return schema_pb2.FeatureType.BYTES
+ elif self.value in [ValueType.INT32.value, ValueType.INT64.value]:
+ return schema_pb2.FeatureType.INT
+ elif self.value in [ValueType.DOUBLE.value, ValueType.FLOAT.value]:
+ return schema_pb2.FeatureType.FLOAT
+ else:
+ return schema_pb2.FeatureType.TYPE_UNKNOWN
diff --git a/sdk/python/tensorflow_metadata/proto/v0/path_pb2.py b/sdk/python/tensorflow_metadata/proto/v0/path_pb2.py
deleted file mode 100644
index 24850688592..00000000000
--- a/sdk/python/tensorflow_metadata/proto/v0/path_pb2.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: tensorflow_metadata/proto/v0/path.proto
-
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='tensorflow_metadata/proto/v0/path.proto',
- package='tensorflow.metadata.v0',
- syntax='proto2',
- serialized_options=b'\n\032org.tensorflow.metadata.v0P\001\370\001\001',
- serialized_pb=b'\n\'tensorflow_metadata/proto/v0/path.proto\x12\x16tensorflow.metadata.v0\"\x14\n\x04Path\x12\x0c\n\x04step\x18\x01 \x03(\tB!\n\x1aorg.tensorflow.metadata.v0P\x01\xf8\x01\x01'
-)
-
-
-
-
-_PATH = _descriptor.Descriptor(
- name='Path',
- full_name='tensorflow.metadata.v0.Path',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='step', full_name='tensorflow.metadata.v0.Path.step', index=0,
- number=1, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=67,
- serialized_end=87,
-)
-
-DESCRIPTOR.message_types_by_name['Path'] = _PATH
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Path = _reflection.GeneratedProtocolMessageType('Path', (_message.Message,), {
- 'DESCRIPTOR' : _PATH,
- '__module__' : 'tensorflow_metadata.proto.v0.path_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.Path)
- })
-_sym_db.RegisterMessage(Path)
-
-
-DESCRIPTOR._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/sdk/python/tensorflow_metadata/proto/v0/path_pb2.pyi b/sdk/python/tensorflow_metadata/proto/v0/path_pb2.pyi
deleted file mode 100644
index caf370bd372..00000000000
--- a/sdk/python/tensorflow_metadata/proto/v0/path_pb2.pyi
+++ /dev/null
@@ -1,52 +0,0 @@
-# @generated by generate_proto_mypy_stubs.py. Do not edit!
-import sys
-from google.protobuf.descriptor import (
- Descriptor as google___protobuf___descriptor___Descriptor,
-)
-
-from google.protobuf.internal.containers import (
- RepeatedScalarFieldContainer as google___protobuf___internal___containers___RepeatedScalarFieldContainer,
-)
-
-from google.protobuf.message import (
- Message as google___protobuf___message___Message,
-)
-
-from typing import (
- Iterable as typing___Iterable,
- Optional as typing___Optional,
- Text as typing___Text,
- Union as typing___Union,
-)
-
-from typing_extensions import (
- Literal as typing_extensions___Literal,
-)
-
-
-builtin___bool = bool
-builtin___bytes = bytes
-builtin___float = float
-builtin___int = int
-if sys.version_info < (3,):
- builtin___buffer = buffer
- builtin___unicode = unicode
-
-
-class Path(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- step = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
-
- def __init__(self,
- *,
- step : typing___Optional[typing___Iterable[typing___Text]] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> Path: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Path: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"step",b"step"]) -> None: ...
diff --git a/sdk/python/tensorflow_metadata/proto/v0/schema_pb2.py b/sdk/python/tensorflow_metadata/proto/v0/schema_pb2.py
deleted file mode 100644
index c27579f0e28..00000000000
--- a/sdk/python/tensorflow_metadata/proto/v0/schema_pb2.py
+++ /dev/null
@@ -1,2256 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: tensorflow_metadata/proto/v0/schema.proto
-
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2
-from tensorflow_metadata.proto.v0 import path_pb2 as tensorflow__metadata_dot_proto_dot_v0_dot_path__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='tensorflow_metadata/proto/v0/schema.proto',
- package='tensorflow.metadata.v0',
- syntax='proto2',
- serialized_options=b'\n\032org.tensorflow.metadata.v0P\001\370\001\001',
- serialized_pb=b'\n)tensorflow_metadata/proto/v0/schema.proto\x12\x16tensorflow.metadata.v0\x1a\x19google/protobuf/any.proto\x1a\'tensorflow_metadata/proto/v0/path.proto\"\xe2\x05\n\x06Schema\x12\x30\n\x07\x66\x65\x61ture\x18\x01 \x03(\x0b\x32\x1f.tensorflow.metadata.v0.Feature\x12=\n\x0esparse_feature\x18\x06 \x03(\x0b\x32%.tensorflow.metadata.v0.SparseFeature\x12\x41\n\x10weighted_feature\x18\x0c \x03(\x0b\x32\'.tensorflow.metadata.v0.WeightedFeature\x12;\n\rstring_domain\x18\x04 \x03(\x0b\x32$.tensorflow.metadata.v0.StringDomain\x12\x39\n\x0c\x66loat_domain\x18\t \x03(\x0b\x32#.tensorflow.metadata.v0.FloatDomain\x12\x35\n\nint_domain\x18\n \x03(\x0b\x32!.tensorflow.metadata.v0.IntDomain\x12\x1b\n\x13\x64\x65\x66\x61ult_environment\x18\x05 \x03(\t\x12\x36\n\nannotation\x18\x08 \x01(\x0b\x32\".tensorflow.metadata.v0.Annotation\x12G\n\x13\x64\x61taset_constraints\x18\x0b \x01(\x0b\x32*.tensorflow.metadata.v0.DatasetConstraints\x12\x62\n\x1btensor_representation_group\x18\r \x03(\x0b\x32=.tensorflow.metadata.v0.Schema.TensorRepresentationGroupEntry\x1as\n\x1eTensorRepresentationGroupEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12@\n\x05value\x18\x02 \x01(\x0b\x32\x31.tensorflow.metadata.v0.TensorRepresentationGroup:\x02\x38\x01\"\xdf\x0b\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\ndeprecated\x18\x02 \x01(\x08\x42\x02\x18\x01\x12;\n\x08presence\x18\x0e \x01(\x0b\x32\'.tensorflow.metadata.v0.FeaturePresenceH\x00\x12L\n\x0egroup_presence\x18\x11 \x01(\x0b\x32\x32.tensorflow.metadata.v0.FeaturePresenceWithinGroupH\x00\x12\x33\n\x05shape\x18\x17 \x01(\x0b\x32\".tensorflow.metadata.v0.FixedShapeH\x01\x12\x39\n\x0bvalue_count\x18\x05 \x01(\x0b\x32\".tensorflow.metadata.v0.ValueCountH\x01\x12\x31\n\x04type\x18\x06 \x01(\x0e\x32#.tensorflow.metadata.v0.FeatureType\x12\x10\n\x06\x64omain\x18\x07 \x01(\tH\x02\x12\x37\n\nint_domain\x18\t \x01(\x0b\x32!.tensorflow.metadata.v0.IntDomainH\x02\x12;\n\x0c\x66loat_domain\x18\n \x01(\x0b\x32#.tensorflow.metadata.v0.FloatDomainH\x02\x12=\n\rstring_domain\x18\x0b \x01(\x0b\x32$.tensorflow.metadata.v0.StringDomainH\x02\x12\x39\n\x0b\x62ool_domain\x18\r \x01(\x0b\x32\".tensorflow.metadata.v0.BoolDomainH\x02\x12=\n\rstruct_domain\x18\x1d \x01(\x0b\x32$.tensorflow.metadata.v0.StructDomainH\x02\x12P\n\x17natural_language_domain\x18\x18 \x01(\x0b\x32-.tensorflow.metadata.v0.NaturalLanguageDomainH\x02\x12;\n\x0cimage_domain\x18\x19 \x01(\x0b\x32#.tensorflow.metadata.v0.ImageDomainH\x02\x12\x37\n\nmid_domain\x18\x1a \x01(\x0b\x32!.tensorflow.metadata.v0.MIDDomainH\x02\x12\x37\n\nurl_domain\x18\x1b \x01(\x0b\x32!.tensorflow.metadata.v0.URLDomainH\x02\x12\x39\n\x0btime_domain\x18\x1c \x01(\x0b\x32\".tensorflow.metadata.v0.TimeDomainH\x02\x12\x45\n\x12time_of_day_domain\x18\x1e \x01(\x0b\x32\'.tensorflow.metadata.v0.TimeOfDayDomainH\x02\x12Q\n\x18\x64istribution_constraints\x18\x0f \x01(\x0b\x32/.tensorflow.metadata.v0.DistributionConstraints\x12\x36\n\nannotation\x18\x10 \x01(\x0b\x32\".tensorflow.metadata.v0.Annotation\x12\x42\n\x0fskew_comparator\x18\x12 \x01(\x0b\x32).tensorflow.metadata.v0.FeatureComparator\x12\x43\n\x10\x64rift_comparator\x18\x15 \x01(\x0b\x32).tensorflow.metadata.v0.FeatureComparator\x12\x16\n\x0ein_environment\x18\x14 \x03(\t\x12\x1a\n\x12not_in_environment\x18\x13 \x03(\t\x12?\n\x0flifecycle_stage\x18\x16 \x01(\x0e\x32&.tensorflow.metadata.v0.LifecycleStageB\x16\n\x14presence_constraintsB\x0c\n\nshape_typeB\r\n\x0b\x64omain_info\"X\n\nAnnotation\x12\x0b\n\x03tag\x18\x01 \x03(\t\x12\x0f\n\x07\x63omment\x18\x02 \x03(\t\x12,\n\x0e\x65xtra_metadata\x18\x03 \x03(\x0b\x32\x14.google.protobuf.Any\"X\n\x16NumericValueComparator\x12\x1e\n\x16min_fraction_threshold\x18\x01 \x01(\x01\x12\x1e\n\x16max_fraction_threshold\x18\x02 \x01(\x01\"\xe0\x01\n\x12\x44\x61tasetConstraints\x12U\n\x1dnum_examples_drift_comparator\x18\x01 \x01(\x0b\x32..tensorflow.metadata.v0.NumericValueComparator\x12W\n\x1fnum_examples_version_comparator\x18\x02 \x01(\x0b\x32..tensorflow.metadata.v0.NumericValueComparator\x12\x1a\n\x12min_examples_count\x18\x03 \x01(\x03\"d\n\nFixedShape\x12\x33\n\x03\x64im\x18\x02 \x03(\x0b\x32&.tensorflow.metadata.v0.FixedShape.Dim\x1a!\n\x03\x44im\x12\x0c\n\x04size\x18\x01 \x01(\x03\x12\x0c\n\x04name\x18\x02 \x01(\t\"&\n\nValueCount\x12\x0b\n\x03min\x18\x01 \x01(\x03\x12\x0b\n\x03max\x18\x02 \x01(\x03\"\xc5\x01\n\x0fWeightedFeature\x12\x0c\n\x04name\x18\x01 \x01(\t\x12-\n\x07\x66\x65\x61ture\x18\x02 \x01(\x0b\x32\x1c.tensorflow.metadata.v0.Path\x12\x34\n\x0eweight_feature\x18\x03 \x01(\x0b\x32\x1c.tensorflow.metadata.v0.Path\x12?\n\x0flifecycle_stage\x18\x04 \x01(\x0e\x32&.tensorflow.metadata.v0.LifecycleStage\"\x90\x04\n\rSparseFeature\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\ndeprecated\x18\x02 \x01(\x08\x42\x02\x18\x01\x12?\n\x0flifecycle_stage\x18\x07 \x01(\x0e\x32&.tensorflow.metadata.v0.LifecycleStage\x12=\n\x08presence\x18\x04 \x01(\x0b\x32\'.tensorflow.metadata.v0.FeaturePresenceB\x02\x18\x01\x12\x37\n\x0b\x64\x65nse_shape\x18\x05 \x01(\x0b\x32\".tensorflow.metadata.v0.FixedShape\x12I\n\rindex_feature\x18\x06 \x03(\x0b\x32\x32.tensorflow.metadata.v0.SparseFeature.IndexFeature\x12\x11\n\tis_sorted\x18\x08 \x01(\x08\x12I\n\rvalue_feature\x18\t \x01(\x0b\x32\x32.tensorflow.metadata.v0.SparseFeature.ValueFeature\x12\x35\n\x04type\x18\n \x01(\x0e\x32#.tensorflow.metadata.v0.FeatureTypeB\x02\x18\x01\x1a\x1c\n\x0cIndexFeature\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a\x1c\n\x0cValueFeature\x12\x0c\n\x04name\x18\x01 \x01(\tJ\x04\x08\x0b\x10\x0c\"5\n\x17\x44istributionConstraints\x12\x1a\n\x0fmin_domain_mass\x18\x01 \x01(\x01:\x01\x31\"K\n\tIntDomain\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03min\x18\x03 \x01(\x03\x12\x0b\n\x03max\x18\x04 \x01(\x03\x12\x16\n\x0eis_categorical\x18\x05 \x01(\x08\"5\n\x0b\x46loatDomain\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03min\x18\x03 \x01(\x02\x12\x0b\n\x03max\x18\x04 \x01(\x02\"\x7f\n\x0cStructDomain\x12\x30\n\x07\x66\x65\x61ture\x18\x01 \x03(\x0b\x32\x1f.tensorflow.metadata.v0.Feature\x12=\n\x0esparse_feature\x18\x02 \x03(\x0b\x32%.tensorflow.metadata.v0.SparseFeature\"+\n\x0cStringDomain\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x03(\t\"C\n\nBoolDomain\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\ntrue_value\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61lse_value\x18\x03 \x01(\t\"\x17\n\x15NaturalLanguageDomain\"\r\n\x0bImageDomain\"\x0b\n\tMIDDomain\"\x0b\n\tURLDomain\"\x8e\x02\n\nTimeDomain\x12\x17\n\rstring_format\x18\x01 \x01(\tH\x00\x12N\n\x0einteger_format\x18\x02 \x01(\x0e\x32\x34.tensorflow.metadata.v0.TimeDomain.IntegerTimeFormatH\x00\"\x8c\x01\n\x11IntegerTimeFormat\x12\x12\n\x0e\x46ORMAT_UNKNOWN\x10\x00\x12\r\n\tUNIX_DAYS\x10\x05\x12\x10\n\x0cUNIX_SECONDS\x10\x01\x12\x15\n\x11UNIX_MILLISECONDS\x10\x02\x12\x15\n\x11UNIX_MICROSECONDS\x10\x03\x12\x14\n\x10UNIX_NANOSECONDS\x10\x04\x42\x08\n\x06\x66ormat\"\xd1\x01\n\x0fTimeOfDayDomain\x12\x17\n\rstring_format\x18\x01 \x01(\tH\x00\x12X\n\x0einteger_format\x18\x02 \x01(\x0e\x32>.tensorflow.metadata.v0.TimeOfDayDomain.IntegerTimeOfDayFormatH\x00\"A\n\x16IntegerTimeOfDayFormat\x12\x12\n\x0e\x46ORMAT_UNKNOWN\x10\x00\x12\x13\n\x0fPACKED_64_NANOS\x10\x01\x42\x08\n\x06\x66ormat\":\n\x0f\x46\x65\x61turePresence\x12\x14\n\x0cmin_fraction\x18\x01 \x01(\x01\x12\x11\n\tmin_count\x18\x02 \x01(\x03\".\n\x1a\x46\x65\x61turePresenceWithinGroup\x12\x10\n\x08required\x18\x01 \x01(\x08\"!\n\x0cInfinityNorm\x12\x11\n\tthreshold\x18\x01 \x01(\x01\"P\n\x11\x46\x65\x61tureComparator\x12;\n\rinfinity_norm\x18\x01 \x01(\x0b\x32$.tensorflow.metadata.v0.InfinityNorm\"\xeb\x05\n\x14TensorRepresentation\x12P\n\x0c\x64\x65nse_tensor\x18\x01 \x01(\x0b\x32\x38.tensorflow.metadata.v0.TensorRepresentation.DenseTensorH\x00\x12_\n\x14varlen_sparse_tensor\x18\x02 \x01(\x0b\x32?.tensorflow.metadata.v0.TensorRepresentation.VarLenSparseTensorH\x00\x12R\n\rsparse_tensor\x18\x03 \x01(\x0b\x32\x39.tensorflow.metadata.v0.TensorRepresentation.SparseTensorH\x00\x1ao\n\x0c\x44\x65\x66\x61ultValue\x12\x15\n\x0b\x66loat_value\x18\x01 \x01(\x01H\x00\x12\x13\n\tint_value\x18\x02 \x01(\x03H\x00\x12\x15\n\x0b\x62ytes_value\x18\x03 \x01(\x0cH\x00\x12\x14\n\nuint_value\x18\x04 \x01(\x04H\x00\x42\x06\n\x04kind\x1a\xa7\x01\n\x0b\x44\x65nseTensor\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12\x31\n\x05shape\x18\x02 \x01(\x0b\x32\".tensorflow.metadata.v0.FixedShape\x12P\n\rdefault_value\x18\x03 \x01(\x0b\x32\x39.tensorflow.metadata.v0.TensorRepresentation.DefaultValue\x1a)\n\x12VarLenSparseTensor\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x1a~\n\x0cSparseTensor\x12\x37\n\x0b\x64\x65nse_shape\x18\x01 \x01(\x0b\x32\".tensorflow.metadata.v0.FixedShape\x12\x1a\n\x12index_column_names\x18\x02 \x03(\t\x12\x19\n\x11value_column_name\x18\x03 \x01(\tB\x06\n\x04kind\"\xf2\x01\n\x19TensorRepresentationGroup\x12j\n\x15tensor_representation\x18\x01 \x03(\x0b\x32K.tensorflow.metadata.v0.TensorRepresentationGroup.TensorRepresentationEntry\x1ai\n\x19TensorRepresentationEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12;\n\x05value\x18\x02 \x01(\x0b\x32,.tensorflow.metadata.v0.TensorRepresentation:\x02\x38\x01*u\n\x0eLifecycleStage\x12\x11\n\rUNKNOWN_STAGE\x10\x00\x12\x0b\n\x07PLANNED\x10\x01\x12\t\n\x05\x41LPHA\x10\x02\x12\x08\n\x04\x42\x45TA\x10\x03\x12\x0e\n\nPRODUCTION\x10\x04\x12\x0e\n\nDEPRECATED\x10\x05\x12\x0e\n\nDEBUG_ONLY\x10\x06*J\n\x0b\x46\x65\x61tureType\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\t\n\x05\x42YTES\x10\x01\x12\x07\n\x03INT\x10\x02\x12\t\n\x05\x46LOAT\x10\x03\x12\n\n\x06STRUCT\x10\x04\x42!\n\x1aorg.tensorflow.metadata.v0P\x01\xf8\x01\x01'
- ,
- dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,tensorflow__metadata_dot_proto_dot_v0_dot_path__pb2.DESCRIPTOR,])
-
-_LIFECYCLESTAGE = _descriptor.EnumDescriptor(
- name='LifecycleStage',
- full_name='tensorflow.metadata.v0.LifecycleStage',
- filename=None,
- file=DESCRIPTOR,
- values=[
- _descriptor.EnumValueDescriptor(
- name='UNKNOWN_STAGE', index=0, number=0,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='PLANNED', index=1, number=1,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='ALPHA', index=2, number=2,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='BETA', index=3, number=3,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='PRODUCTION', index=4, number=4,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='DEPRECATED', index=5, number=5,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='DEBUG_ONLY', index=6, number=6,
- serialized_options=None,
- type=None),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=5865,
- serialized_end=5982,
-)
-_sym_db.RegisterEnumDescriptor(_LIFECYCLESTAGE)
-
-LifecycleStage = enum_type_wrapper.EnumTypeWrapper(_LIFECYCLESTAGE)
-_FEATURETYPE = _descriptor.EnumDescriptor(
- name='FeatureType',
- full_name='tensorflow.metadata.v0.FeatureType',
- filename=None,
- file=DESCRIPTOR,
- values=[
- _descriptor.EnumValueDescriptor(
- name='TYPE_UNKNOWN', index=0, number=0,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='BYTES', index=1, number=1,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='INT', index=2, number=2,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='FLOAT', index=3, number=3,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='STRUCT', index=4, number=4,
- serialized_options=None,
- type=None),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=5984,
- serialized_end=6058,
-)
-_sym_db.RegisterEnumDescriptor(_FEATURETYPE)
-
-FeatureType = enum_type_wrapper.EnumTypeWrapper(_FEATURETYPE)
-UNKNOWN_STAGE = 0
-PLANNED = 1
-ALPHA = 2
-BETA = 3
-PRODUCTION = 4
-DEPRECATED = 5
-DEBUG_ONLY = 6
-TYPE_UNKNOWN = 0
-BYTES = 1
-INT = 2
-FLOAT = 3
-STRUCT = 4
-
-
-_TIMEDOMAIN_INTEGERTIMEFORMAT = _descriptor.EnumDescriptor(
- name='IntegerTimeFormat',
- full_name='tensorflow.metadata.v0.TimeDomain.IntegerTimeFormat',
- filename=None,
- file=DESCRIPTOR,
- values=[
- _descriptor.EnumValueDescriptor(
- name='FORMAT_UNKNOWN', index=0, number=0,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='UNIX_DAYS', index=1, number=5,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='UNIX_SECONDS', index=2, number=1,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='UNIX_MILLISECONDS', index=3, number=2,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='UNIX_MICROSECONDS', index=4, number=3,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='UNIX_NANOSECONDS', index=5, number=4,
- serialized_options=None,
- type=None),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=4281,
- serialized_end=4421,
-)
-_sym_db.RegisterEnumDescriptor(_TIMEDOMAIN_INTEGERTIMEFORMAT)
-
-_TIMEOFDAYDOMAIN_INTEGERTIMEOFDAYFORMAT = _descriptor.EnumDescriptor(
- name='IntegerTimeOfDayFormat',
- full_name='tensorflow.metadata.v0.TimeOfDayDomain.IntegerTimeOfDayFormat',
- filename=None,
- file=DESCRIPTOR,
- values=[
- _descriptor.EnumValueDescriptor(
- name='FORMAT_UNKNOWN', index=0, number=0,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='PACKED_64_NANOS', index=1, number=1,
- serialized_options=None,
- type=None),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=4568,
- serialized_end=4633,
-)
-_sym_db.RegisterEnumDescriptor(_TIMEOFDAYDOMAIN_INTEGERTIMEOFDAYFORMAT)
-
-
-_SCHEMA_TENSORREPRESENTATIONGROUPENTRY = _descriptor.Descriptor(
- name='TensorRepresentationGroupEntry',
- full_name='tensorflow.metadata.v0.Schema.TensorRepresentationGroupEntry',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='key', full_name='tensorflow.metadata.v0.Schema.TensorRepresentationGroupEntry.key', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='value', full_name='tensorflow.metadata.v0.Schema.TensorRepresentationGroupEntry.value', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=b'8\001',
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=761,
- serialized_end=876,
-)
-
-_SCHEMA = _descriptor.Descriptor(
- name='Schema',
- full_name='tensorflow.metadata.v0.Schema',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='feature', full_name='tensorflow.metadata.v0.Schema.feature', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='sparse_feature', full_name='tensorflow.metadata.v0.Schema.sparse_feature', index=1,
- number=6, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='weighted_feature', full_name='tensorflow.metadata.v0.Schema.weighted_feature', index=2,
- number=12, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='string_domain', full_name='tensorflow.metadata.v0.Schema.string_domain', index=3,
- number=4, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='float_domain', full_name='tensorflow.metadata.v0.Schema.float_domain', index=4,
- number=9, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='int_domain', full_name='tensorflow.metadata.v0.Schema.int_domain', index=5,
- number=10, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='default_environment', full_name='tensorflow.metadata.v0.Schema.default_environment', index=6,
- number=5, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='annotation', full_name='tensorflow.metadata.v0.Schema.annotation', index=7,
- number=8, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='dataset_constraints', full_name='tensorflow.metadata.v0.Schema.dataset_constraints', index=8,
- number=11, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='tensor_representation_group', full_name='tensorflow.metadata.v0.Schema.tensor_representation_group', index=9,
- number=13, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[_SCHEMA_TENSORREPRESENTATIONGROUPENTRY, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=138,
- serialized_end=876,
-)
-
-
-_FEATURE = _descriptor.Descriptor(
- name='Feature',
- full_name='tensorflow.metadata.v0.Feature',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.Feature.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='deprecated', full_name='tensorflow.metadata.v0.Feature.deprecated', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='presence', full_name='tensorflow.metadata.v0.Feature.presence', index=2,
- number=14, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='group_presence', full_name='tensorflow.metadata.v0.Feature.group_presence', index=3,
- number=17, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='shape', full_name='tensorflow.metadata.v0.Feature.shape', index=4,
- number=23, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='value_count', full_name='tensorflow.metadata.v0.Feature.value_count', index=5,
- number=5, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='type', full_name='tensorflow.metadata.v0.Feature.type', index=6,
- number=6, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='domain', full_name='tensorflow.metadata.v0.Feature.domain', index=7,
- number=7, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='int_domain', full_name='tensorflow.metadata.v0.Feature.int_domain', index=8,
- number=9, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='float_domain', full_name='tensorflow.metadata.v0.Feature.float_domain', index=9,
- number=10, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='string_domain', full_name='tensorflow.metadata.v0.Feature.string_domain', index=10,
- number=11, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='bool_domain', full_name='tensorflow.metadata.v0.Feature.bool_domain', index=11,
- number=13, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='struct_domain', full_name='tensorflow.metadata.v0.Feature.struct_domain', index=12,
- number=29, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='natural_language_domain', full_name='tensorflow.metadata.v0.Feature.natural_language_domain', index=13,
- number=24, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='image_domain', full_name='tensorflow.metadata.v0.Feature.image_domain', index=14,
- number=25, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='mid_domain', full_name='tensorflow.metadata.v0.Feature.mid_domain', index=15,
- number=26, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='url_domain', full_name='tensorflow.metadata.v0.Feature.url_domain', index=16,
- number=27, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='time_domain', full_name='tensorflow.metadata.v0.Feature.time_domain', index=17,
- number=28, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='time_of_day_domain', full_name='tensorflow.metadata.v0.Feature.time_of_day_domain', index=18,
- number=30, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='distribution_constraints', full_name='tensorflow.metadata.v0.Feature.distribution_constraints', index=19,
- number=15, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='annotation', full_name='tensorflow.metadata.v0.Feature.annotation', index=20,
- number=16, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='skew_comparator', full_name='tensorflow.metadata.v0.Feature.skew_comparator', index=21,
- number=18, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='drift_comparator', full_name='tensorflow.metadata.v0.Feature.drift_comparator', index=22,
- number=21, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='in_environment', full_name='tensorflow.metadata.v0.Feature.in_environment', index=23,
- number=20, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='not_in_environment', full_name='tensorflow.metadata.v0.Feature.not_in_environment', index=24,
- number=19, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='lifecycle_stage', full_name='tensorflow.metadata.v0.Feature.lifecycle_stage', index=25,
- number=22, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='presence_constraints', full_name='tensorflow.metadata.v0.Feature.presence_constraints',
- index=0, containing_type=None, fields=[]),
- _descriptor.OneofDescriptor(
- name='shape_type', full_name='tensorflow.metadata.v0.Feature.shape_type',
- index=1, containing_type=None, fields=[]),
- _descriptor.OneofDescriptor(
- name='domain_info', full_name='tensorflow.metadata.v0.Feature.domain_info',
- index=2, containing_type=None, fields=[]),
- ],
- serialized_start=879,
- serialized_end=2382,
-)
-
-
-_ANNOTATION = _descriptor.Descriptor(
- name='Annotation',
- full_name='tensorflow.metadata.v0.Annotation',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='tag', full_name='tensorflow.metadata.v0.Annotation.tag', index=0,
- number=1, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='comment', full_name='tensorflow.metadata.v0.Annotation.comment', index=1,
- number=2, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='extra_metadata', full_name='tensorflow.metadata.v0.Annotation.extra_metadata', index=2,
- number=3, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2384,
- serialized_end=2472,
-)
-
-
-_NUMERICVALUECOMPARATOR = _descriptor.Descriptor(
- name='NumericValueComparator',
- full_name='tensorflow.metadata.v0.NumericValueComparator',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='min_fraction_threshold', full_name='tensorflow.metadata.v0.NumericValueComparator.min_fraction_threshold', index=0,
- number=1, type=1, cpp_type=5, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='max_fraction_threshold', full_name='tensorflow.metadata.v0.NumericValueComparator.max_fraction_threshold', index=1,
- number=2, type=1, cpp_type=5, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2474,
- serialized_end=2562,
-)
-
-
-_DATASETCONSTRAINTS = _descriptor.Descriptor(
- name='DatasetConstraints',
- full_name='tensorflow.metadata.v0.DatasetConstraints',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='num_examples_drift_comparator', full_name='tensorflow.metadata.v0.DatasetConstraints.num_examples_drift_comparator', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='num_examples_version_comparator', full_name='tensorflow.metadata.v0.DatasetConstraints.num_examples_version_comparator', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='min_examples_count', full_name='tensorflow.metadata.v0.DatasetConstraints.min_examples_count', index=2,
- number=3, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2565,
- serialized_end=2789,
-)
-
-
-_FIXEDSHAPE_DIM = _descriptor.Descriptor(
- name='Dim',
- full_name='tensorflow.metadata.v0.FixedShape.Dim',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='size', full_name='tensorflow.metadata.v0.FixedShape.Dim.size', index=0,
- number=1, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.FixedShape.Dim.name', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2858,
- serialized_end=2891,
-)
-
-_FIXEDSHAPE = _descriptor.Descriptor(
- name='FixedShape',
- full_name='tensorflow.metadata.v0.FixedShape',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='dim', full_name='tensorflow.metadata.v0.FixedShape.dim', index=0,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[_FIXEDSHAPE_DIM, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2791,
- serialized_end=2891,
-)
-
-
-_VALUECOUNT = _descriptor.Descriptor(
- name='ValueCount',
- full_name='tensorflow.metadata.v0.ValueCount',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='min', full_name='tensorflow.metadata.v0.ValueCount.min', index=0,
- number=1, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='max', full_name='tensorflow.metadata.v0.ValueCount.max', index=1,
- number=2, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2893,
- serialized_end=2931,
-)
-
-
-_WEIGHTEDFEATURE = _descriptor.Descriptor(
- name='WeightedFeature',
- full_name='tensorflow.metadata.v0.WeightedFeature',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.WeightedFeature.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='feature', full_name='tensorflow.metadata.v0.WeightedFeature.feature', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='weight_feature', full_name='tensorflow.metadata.v0.WeightedFeature.weight_feature', index=2,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='lifecycle_stage', full_name='tensorflow.metadata.v0.WeightedFeature.lifecycle_stage', index=3,
- number=4, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2934,
- serialized_end=3131,
-)
-
-
-_SPARSEFEATURE_INDEXFEATURE = _descriptor.Descriptor(
- name='IndexFeature',
- full_name='tensorflow.metadata.v0.SparseFeature.IndexFeature',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.SparseFeature.IndexFeature.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3598,
- serialized_end=3626,
-)
-
-_SPARSEFEATURE_VALUEFEATURE = _descriptor.Descriptor(
- name='ValueFeature',
- full_name='tensorflow.metadata.v0.SparseFeature.ValueFeature',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.SparseFeature.ValueFeature.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3628,
- serialized_end=3656,
-)
-
-_SPARSEFEATURE = _descriptor.Descriptor(
- name='SparseFeature',
- full_name='tensorflow.metadata.v0.SparseFeature',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.SparseFeature.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='deprecated', full_name='tensorflow.metadata.v0.SparseFeature.deprecated', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='lifecycle_stage', full_name='tensorflow.metadata.v0.SparseFeature.lifecycle_stage', index=2,
- number=7, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='presence', full_name='tensorflow.metadata.v0.SparseFeature.presence', index=3,
- number=4, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='dense_shape', full_name='tensorflow.metadata.v0.SparseFeature.dense_shape', index=4,
- number=5, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='index_feature', full_name='tensorflow.metadata.v0.SparseFeature.index_feature', index=5,
- number=6, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='is_sorted', full_name='tensorflow.metadata.v0.SparseFeature.is_sorted', index=6,
- number=8, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='value_feature', full_name='tensorflow.metadata.v0.SparseFeature.value_feature', index=7,
- number=9, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='type', full_name='tensorflow.metadata.v0.SparseFeature.type', index=8,
- number=10, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[_SPARSEFEATURE_INDEXFEATURE, _SPARSEFEATURE_VALUEFEATURE, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3134,
- serialized_end=3662,
-)
-
-
-_DISTRIBUTIONCONSTRAINTS = _descriptor.Descriptor(
- name='DistributionConstraints',
- full_name='tensorflow.metadata.v0.DistributionConstraints',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='min_domain_mass', full_name='tensorflow.metadata.v0.DistributionConstraints.min_domain_mass', index=0,
- number=1, type=1, cpp_type=5, label=1,
- has_default_value=True, default_value=float(1),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3664,
- serialized_end=3717,
-)
-
-
-_INTDOMAIN = _descriptor.Descriptor(
- name='IntDomain',
- full_name='tensorflow.metadata.v0.IntDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.IntDomain.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='min', full_name='tensorflow.metadata.v0.IntDomain.min', index=1,
- number=3, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='max', full_name='tensorflow.metadata.v0.IntDomain.max', index=2,
- number=4, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='is_categorical', full_name='tensorflow.metadata.v0.IntDomain.is_categorical', index=3,
- number=5, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3719,
- serialized_end=3794,
-)
-
-
-_FLOATDOMAIN = _descriptor.Descriptor(
- name='FloatDomain',
- full_name='tensorflow.metadata.v0.FloatDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.FloatDomain.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='min', full_name='tensorflow.metadata.v0.FloatDomain.min', index=1,
- number=3, type=2, cpp_type=6, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='max', full_name='tensorflow.metadata.v0.FloatDomain.max', index=2,
- number=4, type=2, cpp_type=6, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3796,
- serialized_end=3849,
-)
-
-
-_STRUCTDOMAIN = _descriptor.Descriptor(
- name='StructDomain',
- full_name='tensorflow.metadata.v0.StructDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='feature', full_name='tensorflow.metadata.v0.StructDomain.feature', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='sparse_feature', full_name='tensorflow.metadata.v0.StructDomain.sparse_feature', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3851,
- serialized_end=3978,
-)
-
-
-_STRINGDOMAIN = _descriptor.Descriptor(
- name='StringDomain',
- full_name='tensorflow.metadata.v0.StringDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.StringDomain.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='value', full_name='tensorflow.metadata.v0.StringDomain.value', index=1,
- number=2, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3980,
- serialized_end=4023,
-)
-
-
-_BOOLDOMAIN = _descriptor.Descriptor(
- name='BoolDomain',
- full_name='tensorflow.metadata.v0.BoolDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='name', full_name='tensorflow.metadata.v0.BoolDomain.name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='true_value', full_name='tensorflow.metadata.v0.BoolDomain.true_value', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='false_value', full_name='tensorflow.metadata.v0.BoolDomain.false_value', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4025,
- serialized_end=4092,
-)
-
-
-_NATURALLANGUAGEDOMAIN = _descriptor.Descriptor(
- name='NaturalLanguageDomain',
- full_name='tensorflow.metadata.v0.NaturalLanguageDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4094,
- serialized_end=4117,
-)
-
-
-_IMAGEDOMAIN = _descriptor.Descriptor(
- name='ImageDomain',
- full_name='tensorflow.metadata.v0.ImageDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4119,
- serialized_end=4132,
-)
-
-
-_MIDDOMAIN = _descriptor.Descriptor(
- name='MIDDomain',
- full_name='tensorflow.metadata.v0.MIDDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4134,
- serialized_end=4145,
-)
-
-
-_URLDOMAIN = _descriptor.Descriptor(
- name='URLDomain',
- full_name='tensorflow.metadata.v0.URLDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4147,
- serialized_end=4158,
-)
-
-
-_TIMEDOMAIN = _descriptor.Descriptor(
- name='TimeDomain',
- full_name='tensorflow.metadata.v0.TimeDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='string_format', full_name='tensorflow.metadata.v0.TimeDomain.string_format', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='integer_format', full_name='tensorflow.metadata.v0.TimeDomain.integer_format', index=1,
- number=2, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- _TIMEDOMAIN_INTEGERTIMEFORMAT,
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='format', full_name='tensorflow.metadata.v0.TimeDomain.format',
- index=0, containing_type=None, fields=[]),
- ],
- serialized_start=4161,
- serialized_end=4431,
-)
-
-
-_TIMEOFDAYDOMAIN = _descriptor.Descriptor(
- name='TimeOfDayDomain',
- full_name='tensorflow.metadata.v0.TimeOfDayDomain',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='string_format', full_name='tensorflow.metadata.v0.TimeOfDayDomain.string_format', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='integer_format', full_name='tensorflow.metadata.v0.TimeOfDayDomain.integer_format', index=1,
- number=2, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- _TIMEOFDAYDOMAIN_INTEGERTIMEOFDAYFORMAT,
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='format', full_name='tensorflow.metadata.v0.TimeOfDayDomain.format',
- index=0, containing_type=None, fields=[]),
- ],
- serialized_start=4434,
- serialized_end=4643,
-)
-
-
-_FEATUREPRESENCE = _descriptor.Descriptor(
- name='FeaturePresence',
- full_name='tensorflow.metadata.v0.FeaturePresence',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='min_fraction', full_name='tensorflow.metadata.v0.FeaturePresence.min_fraction', index=0,
- number=1, type=1, cpp_type=5, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='min_count', full_name='tensorflow.metadata.v0.FeaturePresence.min_count', index=1,
- number=2, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4645,
- serialized_end=4703,
-)
-
-
-_FEATUREPRESENCEWITHINGROUP = _descriptor.Descriptor(
- name='FeaturePresenceWithinGroup',
- full_name='tensorflow.metadata.v0.FeaturePresenceWithinGroup',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='required', full_name='tensorflow.metadata.v0.FeaturePresenceWithinGroup.required', index=0,
- number=1, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4705,
- serialized_end=4751,
-)
-
-
-_INFINITYNORM = _descriptor.Descriptor(
- name='InfinityNorm',
- full_name='tensorflow.metadata.v0.InfinityNorm',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='threshold', full_name='tensorflow.metadata.v0.InfinityNorm.threshold', index=0,
- number=1, type=1, cpp_type=5, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4753,
- serialized_end=4786,
-)
-
-
-_FEATURECOMPARATOR = _descriptor.Descriptor(
- name='FeatureComparator',
- full_name='tensorflow.metadata.v0.FeatureComparator',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='infinity_norm', full_name='tensorflow.metadata.v0.FeatureComparator.infinity_norm', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4788,
- serialized_end=4868,
-)
-
-
-_TENSORREPRESENTATION_DEFAULTVALUE = _descriptor.Descriptor(
- name='DefaultValue',
- full_name='tensorflow.metadata.v0.TensorRepresentation.DefaultValue',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='float_value', full_name='tensorflow.metadata.v0.TensorRepresentation.DefaultValue.float_value', index=0,
- number=1, type=1, cpp_type=5, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='int_value', full_name='tensorflow.metadata.v0.TensorRepresentation.DefaultValue.int_value', index=1,
- number=2, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='bytes_value', full_name='tensorflow.metadata.v0.TensorRepresentation.DefaultValue.bytes_value', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='uint_value', full_name='tensorflow.metadata.v0.TensorRepresentation.DefaultValue.uint_value', index=3,
- number=4, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='kind', full_name='tensorflow.metadata.v0.TensorRepresentation.DefaultValue.kind',
- index=0, containing_type=None, fields=[]),
- ],
- serialized_start=5158,
- serialized_end=5269,
-)
-
-_TENSORREPRESENTATION_DENSETENSOR = _descriptor.Descriptor(
- name='DenseTensor',
- full_name='tensorflow.metadata.v0.TensorRepresentation.DenseTensor',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='column_name', full_name='tensorflow.metadata.v0.TensorRepresentation.DenseTensor.column_name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='shape', full_name='tensorflow.metadata.v0.TensorRepresentation.DenseTensor.shape', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='default_value', full_name='tensorflow.metadata.v0.TensorRepresentation.DenseTensor.default_value', index=2,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=5272,
- serialized_end=5439,
-)
-
-_TENSORREPRESENTATION_VARLENSPARSETENSOR = _descriptor.Descriptor(
- name='VarLenSparseTensor',
- full_name='tensorflow.metadata.v0.TensorRepresentation.VarLenSparseTensor',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='column_name', full_name='tensorflow.metadata.v0.TensorRepresentation.VarLenSparseTensor.column_name', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=5441,
- serialized_end=5482,
-)
-
-_TENSORREPRESENTATION_SPARSETENSOR = _descriptor.Descriptor(
- name='SparseTensor',
- full_name='tensorflow.metadata.v0.TensorRepresentation.SparseTensor',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='dense_shape', full_name='tensorflow.metadata.v0.TensorRepresentation.SparseTensor.dense_shape', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='index_column_names', full_name='tensorflow.metadata.v0.TensorRepresentation.SparseTensor.index_column_names', index=1,
- number=2, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='value_column_name', full_name='tensorflow.metadata.v0.TensorRepresentation.SparseTensor.value_column_name', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=5484,
- serialized_end=5610,
-)
-
-_TENSORREPRESENTATION = _descriptor.Descriptor(
- name='TensorRepresentation',
- full_name='tensorflow.metadata.v0.TensorRepresentation',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='dense_tensor', full_name='tensorflow.metadata.v0.TensorRepresentation.dense_tensor', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='varlen_sparse_tensor', full_name='tensorflow.metadata.v0.TensorRepresentation.varlen_sparse_tensor', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='sparse_tensor', full_name='tensorflow.metadata.v0.TensorRepresentation.sparse_tensor', index=2,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[_TENSORREPRESENTATION_DEFAULTVALUE, _TENSORREPRESENTATION_DENSETENSOR, _TENSORREPRESENTATION_VARLENSPARSETENSOR, _TENSORREPRESENTATION_SPARSETENSOR, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='kind', full_name='tensorflow.metadata.v0.TensorRepresentation.kind',
- index=0, containing_type=None, fields=[]),
- ],
- serialized_start=4871,
- serialized_end=5618,
-)
-
-
-_TENSORREPRESENTATIONGROUP_TENSORREPRESENTATIONENTRY = _descriptor.Descriptor(
- name='TensorRepresentationEntry',
- full_name='tensorflow.metadata.v0.TensorRepresentationGroup.TensorRepresentationEntry',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='key', full_name='tensorflow.metadata.v0.TensorRepresentationGroup.TensorRepresentationEntry.key', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- _descriptor.FieldDescriptor(
- name='value', full_name='tensorflow.metadata.v0.TensorRepresentationGroup.TensorRepresentationEntry.value', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=b'8\001',
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=5758,
- serialized_end=5863,
-)
-
-_TENSORREPRESENTATIONGROUP = _descriptor.Descriptor(
- name='TensorRepresentationGroup',
- full_name='tensorflow.metadata.v0.TensorRepresentationGroup',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- fields=[
- _descriptor.FieldDescriptor(
- name='tensor_representation', full_name='tensorflow.metadata.v0.TensorRepresentationGroup.tensor_representation', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR),
- ],
- extensions=[
- ],
- nested_types=[_TENSORREPRESENTATIONGROUP_TENSORREPRESENTATIONENTRY, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=5621,
- serialized_end=5863,
-)
-
-_SCHEMA_TENSORREPRESENTATIONGROUPENTRY.fields_by_name['value'].message_type = _TENSORREPRESENTATIONGROUP
-_SCHEMA_TENSORREPRESENTATIONGROUPENTRY.containing_type = _SCHEMA
-_SCHEMA.fields_by_name['feature'].message_type = _FEATURE
-_SCHEMA.fields_by_name['sparse_feature'].message_type = _SPARSEFEATURE
-_SCHEMA.fields_by_name['weighted_feature'].message_type = _WEIGHTEDFEATURE
-_SCHEMA.fields_by_name['string_domain'].message_type = _STRINGDOMAIN
-_SCHEMA.fields_by_name['float_domain'].message_type = _FLOATDOMAIN
-_SCHEMA.fields_by_name['int_domain'].message_type = _INTDOMAIN
-_SCHEMA.fields_by_name['annotation'].message_type = _ANNOTATION
-_SCHEMA.fields_by_name['dataset_constraints'].message_type = _DATASETCONSTRAINTS
-_SCHEMA.fields_by_name['tensor_representation_group'].message_type = _SCHEMA_TENSORREPRESENTATIONGROUPENTRY
-_FEATURE.fields_by_name['presence'].message_type = _FEATUREPRESENCE
-_FEATURE.fields_by_name['group_presence'].message_type = _FEATUREPRESENCEWITHINGROUP
-_FEATURE.fields_by_name['shape'].message_type = _FIXEDSHAPE
-_FEATURE.fields_by_name['value_count'].message_type = _VALUECOUNT
-_FEATURE.fields_by_name['type'].enum_type = _FEATURETYPE
-_FEATURE.fields_by_name['int_domain'].message_type = _INTDOMAIN
-_FEATURE.fields_by_name['float_domain'].message_type = _FLOATDOMAIN
-_FEATURE.fields_by_name['string_domain'].message_type = _STRINGDOMAIN
-_FEATURE.fields_by_name['bool_domain'].message_type = _BOOLDOMAIN
-_FEATURE.fields_by_name['struct_domain'].message_type = _STRUCTDOMAIN
-_FEATURE.fields_by_name['natural_language_domain'].message_type = _NATURALLANGUAGEDOMAIN
-_FEATURE.fields_by_name['image_domain'].message_type = _IMAGEDOMAIN
-_FEATURE.fields_by_name['mid_domain'].message_type = _MIDDOMAIN
-_FEATURE.fields_by_name['url_domain'].message_type = _URLDOMAIN
-_FEATURE.fields_by_name['time_domain'].message_type = _TIMEDOMAIN
-_FEATURE.fields_by_name['time_of_day_domain'].message_type = _TIMEOFDAYDOMAIN
-_FEATURE.fields_by_name['distribution_constraints'].message_type = _DISTRIBUTIONCONSTRAINTS
-_FEATURE.fields_by_name['annotation'].message_type = _ANNOTATION
-_FEATURE.fields_by_name['skew_comparator'].message_type = _FEATURECOMPARATOR
-_FEATURE.fields_by_name['drift_comparator'].message_type = _FEATURECOMPARATOR
-_FEATURE.fields_by_name['lifecycle_stage'].enum_type = _LIFECYCLESTAGE
-_FEATURE.oneofs_by_name['presence_constraints'].fields.append(
- _FEATURE.fields_by_name['presence'])
-_FEATURE.fields_by_name['presence'].containing_oneof = _FEATURE.oneofs_by_name['presence_constraints']
-_FEATURE.oneofs_by_name['presence_constraints'].fields.append(
- _FEATURE.fields_by_name['group_presence'])
-_FEATURE.fields_by_name['group_presence'].containing_oneof = _FEATURE.oneofs_by_name['presence_constraints']
-_FEATURE.oneofs_by_name['shape_type'].fields.append(
- _FEATURE.fields_by_name['shape'])
-_FEATURE.fields_by_name['shape'].containing_oneof = _FEATURE.oneofs_by_name['shape_type']
-_FEATURE.oneofs_by_name['shape_type'].fields.append(
- _FEATURE.fields_by_name['value_count'])
-_FEATURE.fields_by_name['value_count'].containing_oneof = _FEATURE.oneofs_by_name['shape_type']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['domain'])
-_FEATURE.fields_by_name['domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['int_domain'])
-_FEATURE.fields_by_name['int_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['float_domain'])
-_FEATURE.fields_by_name['float_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['string_domain'])
-_FEATURE.fields_by_name['string_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['bool_domain'])
-_FEATURE.fields_by_name['bool_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['struct_domain'])
-_FEATURE.fields_by_name['struct_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['natural_language_domain'])
-_FEATURE.fields_by_name['natural_language_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['image_domain'])
-_FEATURE.fields_by_name['image_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['mid_domain'])
-_FEATURE.fields_by_name['mid_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['url_domain'])
-_FEATURE.fields_by_name['url_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['time_domain'])
-_FEATURE.fields_by_name['time_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_FEATURE.oneofs_by_name['domain_info'].fields.append(
- _FEATURE.fields_by_name['time_of_day_domain'])
-_FEATURE.fields_by_name['time_of_day_domain'].containing_oneof = _FEATURE.oneofs_by_name['domain_info']
-_ANNOTATION.fields_by_name['extra_metadata'].message_type = google_dot_protobuf_dot_any__pb2._ANY
-_DATASETCONSTRAINTS.fields_by_name['num_examples_drift_comparator'].message_type = _NUMERICVALUECOMPARATOR
-_DATASETCONSTRAINTS.fields_by_name['num_examples_version_comparator'].message_type = _NUMERICVALUECOMPARATOR
-_FIXEDSHAPE_DIM.containing_type = _FIXEDSHAPE
-_FIXEDSHAPE.fields_by_name['dim'].message_type = _FIXEDSHAPE_DIM
-_WEIGHTEDFEATURE.fields_by_name['feature'].message_type = tensorflow__metadata_dot_proto_dot_v0_dot_path__pb2._PATH
-_WEIGHTEDFEATURE.fields_by_name['weight_feature'].message_type = tensorflow__metadata_dot_proto_dot_v0_dot_path__pb2._PATH
-_WEIGHTEDFEATURE.fields_by_name['lifecycle_stage'].enum_type = _LIFECYCLESTAGE
-_SPARSEFEATURE_INDEXFEATURE.containing_type = _SPARSEFEATURE
-_SPARSEFEATURE_VALUEFEATURE.containing_type = _SPARSEFEATURE
-_SPARSEFEATURE.fields_by_name['lifecycle_stage'].enum_type = _LIFECYCLESTAGE
-_SPARSEFEATURE.fields_by_name['presence'].message_type = _FEATUREPRESENCE
-_SPARSEFEATURE.fields_by_name['dense_shape'].message_type = _FIXEDSHAPE
-_SPARSEFEATURE.fields_by_name['index_feature'].message_type = _SPARSEFEATURE_INDEXFEATURE
-_SPARSEFEATURE.fields_by_name['value_feature'].message_type = _SPARSEFEATURE_VALUEFEATURE
-_SPARSEFEATURE.fields_by_name['type'].enum_type = _FEATURETYPE
-_STRUCTDOMAIN.fields_by_name['feature'].message_type = _FEATURE
-_STRUCTDOMAIN.fields_by_name['sparse_feature'].message_type = _SPARSEFEATURE
-_TIMEDOMAIN.fields_by_name['integer_format'].enum_type = _TIMEDOMAIN_INTEGERTIMEFORMAT
-_TIMEDOMAIN_INTEGERTIMEFORMAT.containing_type = _TIMEDOMAIN
-_TIMEDOMAIN.oneofs_by_name['format'].fields.append(
- _TIMEDOMAIN.fields_by_name['string_format'])
-_TIMEDOMAIN.fields_by_name['string_format'].containing_oneof = _TIMEDOMAIN.oneofs_by_name['format']
-_TIMEDOMAIN.oneofs_by_name['format'].fields.append(
- _TIMEDOMAIN.fields_by_name['integer_format'])
-_TIMEDOMAIN.fields_by_name['integer_format'].containing_oneof = _TIMEDOMAIN.oneofs_by_name['format']
-_TIMEOFDAYDOMAIN.fields_by_name['integer_format'].enum_type = _TIMEOFDAYDOMAIN_INTEGERTIMEOFDAYFORMAT
-_TIMEOFDAYDOMAIN_INTEGERTIMEOFDAYFORMAT.containing_type = _TIMEOFDAYDOMAIN
-_TIMEOFDAYDOMAIN.oneofs_by_name['format'].fields.append(
- _TIMEOFDAYDOMAIN.fields_by_name['string_format'])
-_TIMEOFDAYDOMAIN.fields_by_name['string_format'].containing_oneof = _TIMEOFDAYDOMAIN.oneofs_by_name['format']
-_TIMEOFDAYDOMAIN.oneofs_by_name['format'].fields.append(
- _TIMEOFDAYDOMAIN.fields_by_name['integer_format'])
-_TIMEOFDAYDOMAIN.fields_by_name['integer_format'].containing_oneof = _TIMEOFDAYDOMAIN.oneofs_by_name['format']
-_FEATURECOMPARATOR.fields_by_name['infinity_norm'].message_type = _INFINITYNORM
-_TENSORREPRESENTATION_DEFAULTVALUE.containing_type = _TENSORREPRESENTATION
-_TENSORREPRESENTATION_DEFAULTVALUE.oneofs_by_name['kind'].fields.append(
- _TENSORREPRESENTATION_DEFAULTVALUE.fields_by_name['float_value'])
-_TENSORREPRESENTATION_DEFAULTVALUE.fields_by_name['float_value'].containing_oneof = _TENSORREPRESENTATION_DEFAULTVALUE.oneofs_by_name['kind']
-_TENSORREPRESENTATION_DEFAULTVALUE.oneofs_by_name['kind'].fields.append(
- _TENSORREPRESENTATION_DEFAULTVALUE.fields_by_name['int_value'])
-_TENSORREPRESENTATION_DEFAULTVALUE.fields_by_name['int_value'].containing_oneof = _TENSORREPRESENTATION_DEFAULTVALUE.oneofs_by_name['kind']
-_TENSORREPRESENTATION_DEFAULTVALUE.oneofs_by_name['kind'].fields.append(
- _TENSORREPRESENTATION_DEFAULTVALUE.fields_by_name['bytes_value'])
-_TENSORREPRESENTATION_DEFAULTVALUE.fields_by_name['bytes_value'].containing_oneof = _TENSORREPRESENTATION_DEFAULTVALUE.oneofs_by_name['kind']
-_TENSORREPRESENTATION_DEFAULTVALUE.oneofs_by_name['kind'].fields.append(
- _TENSORREPRESENTATION_DEFAULTVALUE.fields_by_name['uint_value'])
-_TENSORREPRESENTATION_DEFAULTVALUE.fields_by_name['uint_value'].containing_oneof = _TENSORREPRESENTATION_DEFAULTVALUE.oneofs_by_name['kind']
-_TENSORREPRESENTATION_DENSETENSOR.fields_by_name['shape'].message_type = _FIXEDSHAPE
-_TENSORREPRESENTATION_DENSETENSOR.fields_by_name['default_value'].message_type = _TENSORREPRESENTATION_DEFAULTVALUE
-_TENSORREPRESENTATION_DENSETENSOR.containing_type = _TENSORREPRESENTATION
-_TENSORREPRESENTATION_VARLENSPARSETENSOR.containing_type = _TENSORREPRESENTATION
-_TENSORREPRESENTATION_SPARSETENSOR.fields_by_name['dense_shape'].message_type = _FIXEDSHAPE
-_TENSORREPRESENTATION_SPARSETENSOR.containing_type = _TENSORREPRESENTATION
-_TENSORREPRESENTATION.fields_by_name['dense_tensor'].message_type = _TENSORREPRESENTATION_DENSETENSOR
-_TENSORREPRESENTATION.fields_by_name['varlen_sparse_tensor'].message_type = _TENSORREPRESENTATION_VARLENSPARSETENSOR
-_TENSORREPRESENTATION.fields_by_name['sparse_tensor'].message_type = _TENSORREPRESENTATION_SPARSETENSOR
-_TENSORREPRESENTATION.oneofs_by_name['kind'].fields.append(
- _TENSORREPRESENTATION.fields_by_name['dense_tensor'])
-_TENSORREPRESENTATION.fields_by_name['dense_tensor'].containing_oneof = _TENSORREPRESENTATION.oneofs_by_name['kind']
-_TENSORREPRESENTATION.oneofs_by_name['kind'].fields.append(
- _TENSORREPRESENTATION.fields_by_name['varlen_sparse_tensor'])
-_TENSORREPRESENTATION.fields_by_name['varlen_sparse_tensor'].containing_oneof = _TENSORREPRESENTATION.oneofs_by_name['kind']
-_TENSORREPRESENTATION.oneofs_by_name['kind'].fields.append(
- _TENSORREPRESENTATION.fields_by_name['sparse_tensor'])
-_TENSORREPRESENTATION.fields_by_name['sparse_tensor'].containing_oneof = _TENSORREPRESENTATION.oneofs_by_name['kind']
-_TENSORREPRESENTATIONGROUP_TENSORREPRESENTATIONENTRY.fields_by_name['value'].message_type = _TENSORREPRESENTATION
-_TENSORREPRESENTATIONGROUP_TENSORREPRESENTATIONENTRY.containing_type = _TENSORREPRESENTATIONGROUP
-_TENSORREPRESENTATIONGROUP.fields_by_name['tensor_representation'].message_type = _TENSORREPRESENTATIONGROUP_TENSORREPRESENTATIONENTRY
-DESCRIPTOR.message_types_by_name['Schema'] = _SCHEMA
-DESCRIPTOR.message_types_by_name['Feature'] = _FEATURE
-DESCRIPTOR.message_types_by_name['Annotation'] = _ANNOTATION
-DESCRIPTOR.message_types_by_name['NumericValueComparator'] = _NUMERICVALUECOMPARATOR
-DESCRIPTOR.message_types_by_name['DatasetConstraints'] = _DATASETCONSTRAINTS
-DESCRIPTOR.message_types_by_name['FixedShape'] = _FIXEDSHAPE
-DESCRIPTOR.message_types_by_name['ValueCount'] = _VALUECOUNT
-DESCRIPTOR.message_types_by_name['WeightedFeature'] = _WEIGHTEDFEATURE
-DESCRIPTOR.message_types_by_name['SparseFeature'] = _SPARSEFEATURE
-DESCRIPTOR.message_types_by_name['DistributionConstraints'] = _DISTRIBUTIONCONSTRAINTS
-DESCRIPTOR.message_types_by_name['IntDomain'] = _INTDOMAIN
-DESCRIPTOR.message_types_by_name['FloatDomain'] = _FLOATDOMAIN
-DESCRIPTOR.message_types_by_name['StructDomain'] = _STRUCTDOMAIN
-DESCRIPTOR.message_types_by_name['StringDomain'] = _STRINGDOMAIN
-DESCRIPTOR.message_types_by_name['BoolDomain'] = _BOOLDOMAIN
-DESCRIPTOR.message_types_by_name['NaturalLanguageDomain'] = _NATURALLANGUAGEDOMAIN
-DESCRIPTOR.message_types_by_name['ImageDomain'] = _IMAGEDOMAIN
-DESCRIPTOR.message_types_by_name['MIDDomain'] = _MIDDOMAIN
-DESCRIPTOR.message_types_by_name['URLDomain'] = _URLDOMAIN
-DESCRIPTOR.message_types_by_name['TimeDomain'] = _TIMEDOMAIN
-DESCRIPTOR.message_types_by_name['TimeOfDayDomain'] = _TIMEOFDAYDOMAIN
-DESCRIPTOR.message_types_by_name['FeaturePresence'] = _FEATUREPRESENCE
-DESCRIPTOR.message_types_by_name['FeaturePresenceWithinGroup'] = _FEATUREPRESENCEWITHINGROUP
-DESCRIPTOR.message_types_by_name['InfinityNorm'] = _INFINITYNORM
-DESCRIPTOR.message_types_by_name['FeatureComparator'] = _FEATURECOMPARATOR
-DESCRIPTOR.message_types_by_name['TensorRepresentation'] = _TENSORREPRESENTATION
-DESCRIPTOR.message_types_by_name['TensorRepresentationGroup'] = _TENSORREPRESENTATIONGROUP
-DESCRIPTOR.enum_types_by_name['LifecycleStage'] = _LIFECYCLESTAGE
-DESCRIPTOR.enum_types_by_name['FeatureType'] = _FEATURETYPE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Schema = _reflection.GeneratedProtocolMessageType('Schema', (_message.Message,), {
-
- 'TensorRepresentationGroupEntry' : _reflection.GeneratedProtocolMessageType('TensorRepresentationGroupEntry', (_message.Message,), {
- 'DESCRIPTOR' : _SCHEMA_TENSORREPRESENTATIONGROUPENTRY,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.Schema.TensorRepresentationGroupEntry)
- })
- ,
- 'DESCRIPTOR' : _SCHEMA,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.Schema)
- })
-_sym_db.RegisterMessage(Schema)
-_sym_db.RegisterMessage(Schema.TensorRepresentationGroupEntry)
-
-Feature = _reflection.GeneratedProtocolMessageType('Feature', (_message.Message,), {
- 'DESCRIPTOR' : _FEATURE,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.Feature)
- })
-_sym_db.RegisterMessage(Feature)
-
-Annotation = _reflection.GeneratedProtocolMessageType('Annotation', (_message.Message,), {
- 'DESCRIPTOR' : _ANNOTATION,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.Annotation)
- })
-_sym_db.RegisterMessage(Annotation)
-
-NumericValueComparator = _reflection.GeneratedProtocolMessageType('NumericValueComparator', (_message.Message,), {
- 'DESCRIPTOR' : _NUMERICVALUECOMPARATOR,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.NumericValueComparator)
- })
-_sym_db.RegisterMessage(NumericValueComparator)
-
-DatasetConstraints = _reflection.GeneratedProtocolMessageType('DatasetConstraints', (_message.Message,), {
- 'DESCRIPTOR' : _DATASETCONSTRAINTS,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.DatasetConstraints)
- })
-_sym_db.RegisterMessage(DatasetConstraints)
-
-FixedShape = _reflection.GeneratedProtocolMessageType('FixedShape', (_message.Message,), {
-
- 'Dim' : _reflection.GeneratedProtocolMessageType('Dim', (_message.Message,), {
- 'DESCRIPTOR' : _FIXEDSHAPE_DIM,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.FixedShape.Dim)
- })
- ,
- 'DESCRIPTOR' : _FIXEDSHAPE,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.FixedShape)
- })
-_sym_db.RegisterMessage(FixedShape)
-_sym_db.RegisterMessage(FixedShape.Dim)
-
-ValueCount = _reflection.GeneratedProtocolMessageType('ValueCount', (_message.Message,), {
- 'DESCRIPTOR' : _VALUECOUNT,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.ValueCount)
- })
-_sym_db.RegisterMessage(ValueCount)
-
-WeightedFeature = _reflection.GeneratedProtocolMessageType('WeightedFeature', (_message.Message,), {
- 'DESCRIPTOR' : _WEIGHTEDFEATURE,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.WeightedFeature)
- })
-_sym_db.RegisterMessage(WeightedFeature)
-
-SparseFeature = _reflection.GeneratedProtocolMessageType('SparseFeature', (_message.Message,), {
-
- 'IndexFeature' : _reflection.GeneratedProtocolMessageType('IndexFeature', (_message.Message,), {
- 'DESCRIPTOR' : _SPARSEFEATURE_INDEXFEATURE,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.SparseFeature.IndexFeature)
- })
- ,
-
- 'ValueFeature' : _reflection.GeneratedProtocolMessageType('ValueFeature', (_message.Message,), {
- 'DESCRIPTOR' : _SPARSEFEATURE_VALUEFEATURE,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.SparseFeature.ValueFeature)
- })
- ,
- 'DESCRIPTOR' : _SPARSEFEATURE,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.SparseFeature)
- })
-_sym_db.RegisterMessage(SparseFeature)
-_sym_db.RegisterMessage(SparseFeature.IndexFeature)
-_sym_db.RegisterMessage(SparseFeature.ValueFeature)
-
-DistributionConstraints = _reflection.GeneratedProtocolMessageType('DistributionConstraints', (_message.Message,), {
- 'DESCRIPTOR' : _DISTRIBUTIONCONSTRAINTS,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.DistributionConstraints)
- })
-_sym_db.RegisterMessage(DistributionConstraints)
-
-IntDomain = _reflection.GeneratedProtocolMessageType('IntDomain', (_message.Message,), {
- 'DESCRIPTOR' : _INTDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.IntDomain)
- })
-_sym_db.RegisterMessage(IntDomain)
-
-FloatDomain = _reflection.GeneratedProtocolMessageType('FloatDomain', (_message.Message,), {
- 'DESCRIPTOR' : _FLOATDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.FloatDomain)
- })
-_sym_db.RegisterMessage(FloatDomain)
-
-StructDomain = _reflection.GeneratedProtocolMessageType('StructDomain', (_message.Message,), {
- 'DESCRIPTOR' : _STRUCTDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.StructDomain)
- })
-_sym_db.RegisterMessage(StructDomain)
-
-StringDomain = _reflection.GeneratedProtocolMessageType('StringDomain', (_message.Message,), {
- 'DESCRIPTOR' : _STRINGDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.StringDomain)
- })
-_sym_db.RegisterMessage(StringDomain)
-
-BoolDomain = _reflection.GeneratedProtocolMessageType('BoolDomain', (_message.Message,), {
- 'DESCRIPTOR' : _BOOLDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.BoolDomain)
- })
-_sym_db.RegisterMessage(BoolDomain)
-
-NaturalLanguageDomain = _reflection.GeneratedProtocolMessageType('NaturalLanguageDomain', (_message.Message,), {
- 'DESCRIPTOR' : _NATURALLANGUAGEDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.NaturalLanguageDomain)
- })
-_sym_db.RegisterMessage(NaturalLanguageDomain)
-
-ImageDomain = _reflection.GeneratedProtocolMessageType('ImageDomain', (_message.Message,), {
- 'DESCRIPTOR' : _IMAGEDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.ImageDomain)
- })
-_sym_db.RegisterMessage(ImageDomain)
-
-MIDDomain = _reflection.GeneratedProtocolMessageType('MIDDomain', (_message.Message,), {
- 'DESCRIPTOR' : _MIDDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.MIDDomain)
- })
-_sym_db.RegisterMessage(MIDDomain)
-
-URLDomain = _reflection.GeneratedProtocolMessageType('URLDomain', (_message.Message,), {
- 'DESCRIPTOR' : _URLDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.URLDomain)
- })
-_sym_db.RegisterMessage(URLDomain)
-
-TimeDomain = _reflection.GeneratedProtocolMessageType('TimeDomain', (_message.Message,), {
- 'DESCRIPTOR' : _TIMEDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TimeDomain)
- })
-_sym_db.RegisterMessage(TimeDomain)
-
-TimeOfDayDomain = _reflection.GeneratedProtocolMessageType('TimeOfDayDomain', (_message.Message,), {
- 'DESCRIPTOR' : _TIMEOFDAYDOMAIN,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TimeOfDayDomain)
- })
-_sym_db.RegisterMessage(TimeOfDayDomain)
-
-FeaturePresence = _reflection.GeneratedProtocolMessageType('FeaturePresence', (_message.Message,), {
- 'DESCRIPTOR' : _FEATUREPRESENCE,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.FeaturePresence)
- })
-_sym_db.RegisterMessage(FeaturePresence)
-
-FeaturePresenceWithinGroup = _reflection.GeneratedProtocolMessageType('FeaturePresenceWithinGroup', (_message.Message,), {
- 'DESCRIPTOR' : _FEATUREPRESENCEWITHINGROUP,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.FeaturePresenceWithinGroup)
- })
-_sym_db.RegisterMessage(FeaturePresenceWithinGroup)
-
-InfinityNorm = _reflection.GeneratedProtocolMessageType('InfinityNorm', (_message.Message,), {
- 'DESCRIPTOR' : _INFINITYNORM,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.InfinityNorm)
- })
-_sym_db.RegisterMessage(InfinityNorm)
-
-FeatureComparator = _reflection.GeneratedProtocolMessageType('FeatureComparator', (_message.Message,), {
- 'DESCRIPTOR' : _FEATURECOMPARATOR,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.FeatureComparator)
- })
-_sym_db.RegisterMessage(FeatureComparator)
-
-TensorRepresentation = _reflection.GeneratedProtocolMessageType('TensorRepresentation', (_message.Message,), {
-
- 'DefaultValue' : _reflection.GeneratedProtocolMessageType('DefaultValue', (_message.Message,), {
- 'DESCRIPTOR' : _TENSORREPRESENTATION_DEFAULTVALUE,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TensorRepresentation.DefaultValue)
- })
- ,
-
- 'DenseTensor' : _reflection.GeneratedProtocolMessageType('DenseTensor', (_message.Message,), {
- 'DESCRIPTOR' : _TENSORREPRESENTATION_DENSETENSOR,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TensorRepresentation.DenseTensor)
- })
- ,
-
- 'VarLenSparseTensor' : _reflection.GeneratedProtocolMessageType('VarLenSparseTensor', (_message.Message,), {
- 'DESCRIPTOR' : _TENSORREPRESENTATION_VARLENSPARSETENSOR,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TensorRepresentation.VarLenSparseTensor)
- })
- ,
-
- 'SparseTensor' : _reflection.GeneratedProtocolMessageType('SparseTensor', (_message.Message,), {
- 'DESCRIPTOR' : _TENSORREPRESENTATION_SPARSETENSOR,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TensorRepresentation.SparseTensor)
- })
- ,
- 'DESCRIPTOR' : _TENSORREPRESENTATION,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TensorRepresentation)
- })
-_sym_db.RegisterMessage(TensorRepresentation)
-_sym_db.RegisterMessage(TensorRepresentation.DefaultValue)
-_sym_db.RegisterMessage(TensorRepresentation.DenseTensor)
-_sym_db.RegisterMessage(TensorRepresentation.VarLenSparseTensor)
-_sym_db.RegisterMessage(TensorRepresentation.SparseTensor)
-
-TensorRepresentationGroup = _reflection.GeneratedProtocolMessageType('TensorRepresentationGroup', (_message.Message,), {
-
- 'TensorRepresentationEntry' : _reflection.GeneratedProtocolMessageType('TensorRepresentationEntry', (_message.Message,), {
- 'DESCRIPTOR' : _TENSORREPRESENTATIONGROUP_TENSORREPRESENTATIONENTRY,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TensorRepresentationGroup.TensorRepresentationEntry)
- })
- ,
- 'DESCRIPTOR' : _TENSORREPRESENTATIONGROUP,
- '__module__' : 'tensorflow_metadata.proto.v0.schema_pb2'
- # @@protoc_insertion_point(class_scope:tensorflow.metadata.v0.TensorRepresentationGroup)
- })
-_sym_db.RegisterMessage(TensorRepresentationGroup)
-_sym_db.RegisterMessage(TensorRepresentationGroup.TensorRepresentationEntry)
-
-
-DESCRIPTOR._options = None
-_SCHEMA_TENSORREPRESENTATIONGROUPENTRY._options = None
-_FEATURE.fields_by_name['deprecated']._options = None
-_SPARSEFEATURE.fields_by_name['deprecated']._options = None
-_SPARSEFEATURE.fields_by_name['presence']._options = None
-_SPARSEFEATURE.fields_by_name['type']._options = None
-_TENSORREPRESENTATIONGROUP_TENSORREPRESENTATIONENTRY._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/sdk/python/tensorflow_metadata/proto/v0/schema_pb2.pyi b/sdk/python/tensorflow_metadata/proto/v0/schema_pb2.pyi
deleted file mode 100644
index d684e28c0c2..00000000000
--- a/sdk/python/tensorflow_metadata/proto/v0/schema_pb2.pyi
+++ /dev/null
@@ -1,1063 +0,0 @@
-# @generated by generate_proto_mypy_stubs.py. Do not edit!
-import sys
-from google.protobuf.any_pb2 import (
- Any as google___protobuf___any_pb2___Any,
-)
-
-from google.protobuf.descriptor import (
- Descriptor as google___protobuf___descriptor___Descriptor,
- EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
-)
-
-from google.protobuf.internal.containers import (
- RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
- RepeatedScalarFieldContainer as google___protobuf___internal___containers___RepeatedScalarFieldContainer,
-)
-
-from google.protobuf.message import (
- Message as google___protobuf___message___Message,
-)
-
-from tensorflow_metadata.proto.v0.path_pb2 import (
- Path as tensorflow_metadata___proto___v0___path_pb2___Path,
-)
-
-from typing import (
- Iterable as typing___Iterable,
- List as typing___List,
- Mapping as typing___Mapping,
- MutableMapping as typing___MutableMapping,
- Optional as typing___Optional,
- Text as typing___Text,
- Tuple as typing___Tuple,
- Union as typing___Union,
- cast as typing___cast,
- overload as typing___overload,
-)
-
-from typing_extensions import (
- Literal as typing_extensions___Literal,
-)
-
-
-builtin___bool = bool
-builtin___bytes = bytes
-builtin___float = float
-builtin___int = int
-builtin___str = str
-if sys.version_info < (3,):
- builtin___buffer = buffer
- builtin___unicode = unicode
-
-
-class LifecycleStage(builtin___int):
- DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
- @classmethod
- def Name(cls, number: builtin___int) -> builtin___str: ...
- @classmethod
- def Value(cls, name: builtin___str) -> 'LifecycleStage': ...
- @classmethod
- def keys(cls) -> typing___List[builtin___str]: ...
- @classmethod
- def values(cls) -> typing___List['LifecycleStage']: ...
- @classmethod
- def items(cls) -> typing___List[typing___Tuple[builtin___str, 'LifecycleStage']]: ...
- UNKNOWN_STAGE = typing___cast('LifecycleStage', 0)
- PLANNED = typing___cast('LifecycleStage', 1)
- ALPHA = typing___cast('LifecycleStage', 2)
- BETA = typing___cast('LifecycleStage', 3)
- PRODUCTION = typing___cast('LifecycleStage', 4)
- DEPRECATED = typing___cast('LifecycleStage', 5)
- DEBUG_ONLY = typing___cast('LifecycleStage', 6)
-UNKNOWN_STAGE = typing___cast('LifecycleStage', 0)
-PLANNED = typing___cast('LifecycleStage', 1)
-ALPHA = typing___cast('LifecycleStage', 2)
-BETA = typing___cast('LifecycleStage', 3)
-PRODUCTION = typing___cast('LifecycleStage', 4)
-DEPRECATED = typing___cast('LifecycleStage', 5)
-DEBUG_ONLY = typing___cast('LifecycleStage', 6)
-
-class FeatureType(builtin___int):
- DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
- @classmethod
- def Name(cls, number: builtin___int) -> builtin___str: ...
- @classmethod
- def Value(cls, name: builtin___str) -> 'FeatureType': ...
- @classmethod
- def keys(cls) -> typing___List[builtin___str]: ...
- @classmethod
- def values(cls) -> typing___List['FeatureType']: ...
- @classmethod
- def items(cls) -> typing___List[typing___Tuple[builtin___str, 'FeatureType']]: ...
- TYPE_UNKNOWN = typing___cast('FeatureType', 0)
- BYTES = typing___cast('FeatureType', 1)
- INT = typing___cast('FeatureType', 2)
- FLOAT = typing___cast('FeatureType', 3)
- STRUCT = typing___cast('FeatureType', 4)
-TYPE_UNKNOWN = typing___cast('FeatureType', 0)
-BYTES = typing___cast('FeatureType', 1)
-INT = typing___cast('FeatureType', 2)
-FLOAT = typing___cast('FeatureType', 3)
-STRUCT = typing___cast('FeatureType', 4)
-
-class Schema(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- class TensorRepresentationGroupEntry(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- key = ... # type: typing___Text
-
- @property
- def value(self) -> TensorRepresentationGroup: ...
-
- def __init__(self,
- *,
- key : typing___Optional[typing___Text] = None,
- value : typing___Optional[TensorRepresentationGroup] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> Schema.TensorRepresentationGroupEntry: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Schema.TensorRepresentationGroupEntry: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> None: ...
-
- default_environment = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
-
- @property
- def feature(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[Feature]: ...
-
- @property
- def sparse_feature(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[SparseFeature]: ...
-
- @property
- def weighted_feature(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[WeightedFeature]: ...
-
- @property
- def string_domain(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[StringDomain]: ...
-
- @property
- def float_domain(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[FloatDomain]: ...
-
- @property
- def int_domain(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[IntDomain]: ...
-
- @property
- def annotation(self) -> Annotation: ...
-
- @property
- def dataset_constraints(self) -> DatasetConstraints: ...
-
- @property
- def tensor_representation_group(self) -> typing___MutableMapping[typing___Text, TensorRepresentationGroup]: ...
-
- def __init__(self,
- *,
- feature : typing___Optional[typing___Iterable[Feature]] = None,
- sparse_feature : typing___Optional[typing___Iterable[SparseFeature]] = None,
- weighted_feature : typing___Optional[typing___Iterable[WeightedFeature]] = None,
- string_domain : typing___Optional[typing___Iterable[StringDomain]] = None,
- float_domain : typing___Optional[typing___Iterable[FloatDomain]] = None,
- int_domain : typing___Optional[typing___Iterable[IntDomain]] = None,
- default_environment : typing___Optional[typing___Iterable[typing___Text]] = None,
- annotation : typing___Optional[Annotation] = None,
- dataset_constraints : typing___Optional[DatasetConstraints] = None,
- tensor_representation_group : typing___Optional[typing___Mapping[typing___Text, TensorRepresentationGroup]] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> Schema: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Schema: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"annotation",b"annotation",u"dataset_constraints",b"dataset_constraints"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"annotation",b"annotation",u"dataset_constraints",b"dataset_constraints",u"default_environment",b"default_environment",u"feature",b"feature",u"float_domain",b"float_domain",u"int_domain",b"int_domain",u"sparse_feature",b"sparse_feature",u"string_domain",b"string_domain",u"tensor_representation_group",b"tensor_representation_group",u"weighted_feature",b"weighted_feature"]) -> None: ...
-
-class Feature(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- name = ... # type: typing___Text
- deprecated = ... # type: builtin___bool
- type = ... # type: FeatureType
- domain = ... # type: typing___Text
- in_environment = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
- not_in_environment = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
- lifecycle_stage = ... # type: LifecycleStage
-
- @property
- def presence(self) -> FeaturePresence: ...
-
- @property
- def group_presence(self) -> FeaturePresenceWithinGroup: ...
-
- @property
- def shape(self) -> FixedShape: ...
-
- @property
- def value_count(self) -> ValueCount: ...
-
- @property
- def int_domain(self) -> IntDomain: ...
-
- @property
- def float_domain(self) -> FloatDomain: ...
-
- @property
- def string_domain(self) -> StringDomain: ...
-
- @property
- def bool_domain(self) -> BoolDomain: ...
-
- @property
- def struct_domain(self) -> StructDomain: ...
-
- @property
- def natural_language_domain(self) -> NaturalLanguageDomain: ...
-
- @property
- def image_domain(self) -> ImageDomain: ...
-
- @property
- def mid_domain(self) -> MIDDomain: ...
-
- @property
- def url_domain(self) -> URLDomain: ...
-
- @property
- def time_domain(self) -> TimeDomain: ...
-
- @property
- def time_of_day_domain(self) -> TimeOfDayDomain: ...
-
- @property
- def distribution_constraints(self) -> DistributionConstraints: ...
-
- @property
- def annotation(self) -> Annotation: ...
-
- @property
- def skew_comparator(self) -> FeatureComparator: ...
-
- @property
- def drift_comparator(self) -> FeatureComparator: ...
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- deprecated : typing___Optional[builtin___bool] = None,
- presence : typing___Optional[FeaturePresence] = None,
- group_presence : typing___Optional[FeaturePresenceWithinGroup] = None,
- shape : typing___Optional[FixedShape] = None,
- value_count : typing___Optional[ValueCount] = None,
- type : typing___Optional[FeatureType] = None,
- domain : typing___Optional[typing___Text] = None,
- int_domain : typing___Optional[IntDomain] = None,
- float_domain : typing___Optional[FloatDomain] = None,
- string_domain : typing___Optional[StringDomain] = None,
- bool_domain : typing___Optional[BoolDomain] = None,
- struct_domain : typing___Optional[StructDomain] = None,
- natural_language_domain : typing___Optional[NaturalLanguageDomain] = None,
- image_domain : typing___Optional[ImageDomain] = None,
- mid_domain : typing___Optional[MIDDomain] = None,
- url_domain : typing___Optional[URLDomain] = None,
- time_domain : typing___Optional[TimeDomain] = None,
- time_of_day_domain : typing___Optional[TimeOfDayDomain] = None,
- distribution_constraints : typing___Optional[DistributionConstraints] = None,
- annotation : typing___Optional[Annotation] = None,
- skew_comparator : typing___Optional[FeatureComparator] = None,
- drift_comparator : typing___Optional[FeatureComparator] = None,
- in_environment : typing___Optional[typing___Iterable[typing___Text]] = None,
- not_in_environment : typing___Optional[typing___Iterable[typing___Text]] = None,
- lifecycle_stage : typing___Optional[LifecycleStage] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> Feature: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Feature: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"annotation",b"annotation",u"bool_domain",b"bool_domain",u"deprecated",b"deprecated",u"distribution_constraints",b"distribution_constraints",u"domain",b"domain",u"domain_info",b"domain_info",u"drift_comparator",b"drift_comparator",u"float_domain",b"float_domain",u"group_presence",b"group_presence",u"image_domain",b"image_domain",u"int_domain",b"int_domain",u"lifecycle_stage",b"lifecycle_stage",u"mid_domain",b"mid_domain",u"name",b"name",u"natural_language_domain",b"natural_language_domain",u"presence",b"presence",u"presence_constraints",b"presence_constraints",u"shape",b"shape",u"shape_type",b"shape_type",u"skew_comparator",b"skew_comparator",u"string_domain",b"string_domain",u"struct_domain",b"struct_domain",u"time_domain",b"time_domain",u"time_of_day_domain",b"time_of_day_domain",u"type",b"type",u"url_domain",b"url_domain",u"value_count",b"value_count"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"annotation",b"annotation",u"bool_domain",b"bool_domain",u"deprecated",b"deprecated",u"distribution_constraints",b"distribution_constraints",u"domain",b"domain",u"domain_info",b"domain_info",u"drift_comparator",b"drift_comparator",u"float_domain",b"float_domain",u"group_presence",b"group_presence",u"image_domain",b"image_domain",u"in_environment",b"in_environment",u"int_domain",b"int_domain",u"lifecycle_stage",b"lifecycle_stage",u"mid_domain",b"mid_domain",u"name",b"name",u"natural_language_domain",b"natural_language_domain",u"not_in_environment",b"not_in_environment",u"presence",b"presence",u"presence_constraints",b"presence_constraints",u"shape",b"shape",u"shape_type",b"shape_type",u"skew_comparator",b"skew_comparator",u"string_domain",b"string_domain",u"struct_domain",b"struct_domain",u"time_domain",b"time_domain",u"time_of_day_domain",b"time_of_day_domain",u"type",b"type",u"url_domain",b"url_domain",u"value_count",b"value_count"]) -> None: ...
- @typing___overload
- def WhichOneof(self, oneof_group: typing_extensions___Literal[u"domain_info",b"domain_info"]) -> typing_extensions___Literal["domain","int_domain","float_domain","string_domain","bool_domain","struct_domain","natural_language_domain","image_domain","mid_domain","url_domain","time_domain","time_of_day_domain"]: ...
- @typing___overload
- def WhichOneof(self, oneof_group: typing_extensions___Literal[u"presence_constraints",b"presence_constraints"]) -> typing_extensions___Literal["presence","group_presence"]: ...
- @typing___overload
- def WhichOneof(self, oneof_group: typing_extensions___Literal[u"shape_type",b"shape_type"]) -> typing_extensions___Literal["shape","value_count"]: ...
-
-class Annotation(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- tag = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
- comment = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
-
- @property
- def extra_metadata(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[google___protobuf___any_pb2___Any]: ...
-
- def __init__(self,
- *,
- tag : typing___Optional[typing___Iterable[typing___Text]] = None,
- comment : typing___Optional[typing___Iterable[typing___Text]] = None,
- extra_metadata : typing___Optional[typing___Iterable[google___protobuf___any_pb2___Any]] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> Annotation: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Annotation: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"comment",b"comment",u"extra_metadata",b"extra_metadata",u"tag",b"tag"]) -> None: ...
-
-class NumericValueComparator(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- min_fraction_threshold = ... # type: builtin___float
- max_fraction_threshold = ... # type: builtin___float
-
- def __init__(self,
- *,
- min_fraction_threshold : typing___Optional[builtin___float] = None,
- max_fraction_threshold : typing___Optional[builtin___float] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> NumericValueComparator: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> NumericValueComparator: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"max_fraction_threshold",b"max_fraction_threshold",u"min_fraction_threshold",b"min_fraction_threshold"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"max_fraction_threshold",b"max_fraction_threshold",u"min_fraction_threshold",b"min_fraction_threshold"]) -> None: ...
-
-class DatasetConstraints(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- min_examples_count = ... # type: builtin___int
-
- @property
- def num_examples_drift_comparator(self) -> NumericValueComparator: ...
-
- @property
- def num_examples_version_comparator(self) -> NumericValueComparator: ...
-
- def __init__(self,
- *,
- num_examples_drift_comparator : typing___Optional[NumericValueComparator] = None,
- num_examples_version_comparator : typing___Optional[NumericValueComparator] = None,
- min_examples_count : typing___Optional[builtin___int] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> DatasetConstraints: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> DatasetConstraints: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"min_examples_count",b"min_examples_count",u"num_examples_drift_comparator",b"num_examples_drift_comparator",u"num_examples_version_comparator",b"num_examples_version_comparator"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"min_examples_count",b"min_examples_count",u"num_examples_drift_comparator",b"num_examples_drift_comparator",u"num_examples_version_comparator",b"num_examples_version_comparator"]) -> None: ...
-
-class FixedShape(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- class Dim(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- size = ... # type: builtin___int
- name = ... # type: typing___Text
-
- def __init__(self,
- *,
- size : typing___Optional[builtin___int] = None,
- name : typing___Optional[typing___Text] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> FixedShape.Dim: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> FixedShape.Dim: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"name",b"name",u"size",b"size"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name",u"size",b"size"]) -> None: ...
-
-
- @property
- def dim(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[FixedShape.Dim]: ...
-
- def __init__(self,
- *,
- dim : typing___Optional[typing___Iterable[FixedShape.Dim]] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> FixedShape: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> FixedShape: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"dim",b"dim"]) -> None: ...
-
-class ValueCount(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- min = ... # type: builtin___int
- max = ... # type: builtin___int
-
- def __init__(self,
- *,
- min : typing___Optional[builtin___int] = None,
- max : typing___Optional[builtin___int] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> ValueCount: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ValueCount: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"max",b"max",u"min",b"min"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"max",b"max",u"min",b"min"]) -> None: ...
-
-class WeightedFeature(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- name = ... # type: typing___Text
- lifecycle_stage = ... # type: LifecycleStage
-
- @property
- def feature(self) -> tensorflow_metadata___proto___v0___path_pb2___Path: ...
-
- @property
- def weight_feature(self) -> tensorflow_metadata___proto___v0___path_pb2___Path: ...
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- feature : typing___Optional[tensorflow_metadata___proto___v0___path_pb2___Path] = None,
- weight_feature : typing___Optional[tensorflow_metadata___proto___v0___path_pb2___Path] = None,
- lifecycle_stage : typing___Optional[LifecycleStage] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> WeightedFeature: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> WeightedFeature: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"feature",b"feature",u"lifecycle_stage",b"lifecycle_stage",u"name",b"name",u"weight_feature",b"weight_feature"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"feature",b"feature",u"lifecycle_stage",b"lifecycle_stage",u"name",b"name",u"weight_feature",b"weight_feature"]) -> None: ...
-
-class SparseFeature(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- class IndexFeature(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- name = ... # type: typing___Text
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> SparseFeature.IndexFeature: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> SparseFeature.IndexFeature: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"name",b"name"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name"]) -> None: ...
-
- class ValueFeature(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- name = ... # type: typing___Text
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> SparseFeature.ValueFeature: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> SparseFeature.ValueFeature: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"name",b"name"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name"]) -> None: ...
-
- name = ... # type: typing___Text
- deprecated = ... # type: builtin___bool
- lifecycle_stage = ... # type: LifecycleStage
- is_sorted = ... # type: builtin___bool
- type = ... # type: FeatureType
-
- @property
- def presence(self) -> FeaturePresence: ...
-
- @property
- def dense_shape(self) -> FixedShape: ...
-
- @property
- def index_feature(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[SparseFeature.IndexFeature]: ...
-
- @property
- def value_feature(self) -> SparseFeature.ValueFeature: ...
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- deprecated : typing___Optional[builtin___bool] = None,
- lifecycle_stage : typing___Optional[LifecycleStage] = None,
- presence : typing___Optional[FeaturePresence] = None,
- dense_shape : typing___Optional[FixedShape] = None,
- index_feature : typing___Optional[typing___Iterable[SparseFeature.IndexFeature]] = None,
- is_sorted : typing___Optional[builtin___bool] = None,
- value_feature : typing___Optional[SparseFeature.ValueFeature] = None,
- type : typing___Optional[FeatureType] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> SparseFeature: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> SparseFeature: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"dense_shape",b"dense_shape",u"deprecated",b"deprecated",u"is_sorted",b"is_sorted",u"lifecycle_stage",b"lifecycle_stage",u"name",b"name",u"presence",b"presence",u"type",b"type",u"value_feature",b"value_feature"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"dense_shape",b"dense_shape",u"deprecated",b"deprecated",u"index_feature",b"index_feature",u"is_sorted",b"is_sorted",u"lifecycle_stage",b"lifecycle_stage",u"name",b"name",u"presence",b"presence",u"type",b"type",u"value_feature",b"value_feature"]) -> None: ...
-
-class DistributionConstraints(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- min_domain_mass = ... # type: builtin___float
-
- def __init__(self,
- *,
- min_domain_mass : typing___Optional[builtin___float] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> DistributionConstraints: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> DistributionConstraints: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"min_domain_mass",b"min_domain_mass"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"min_domain_mass",b"min_domain_mass"]) -> None: ...
-
-class IntDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- name = ... # type: typing___Text
- min = ... # type: builtin___int
- max = ... # type: builtin___int
- is_categorical = ... # type: builtin___bool
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- min : typing___Optional[builtin___int] = None,
- max : typing___Optional[builtin___int] = None,
- is_categorical : typing___Optional[builtin___bool] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> IntDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> IntDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"is_categorical",b"is_categorical",u"max",b"max",u"min",b"min",u"name",b"name"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"is_categorical",b"is_categorical",u"max",b"max",u"min",b"min",u"name",b"name"]) -> None: ...
-
-class FloatDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- name = ... # type: typing___Text
- min = ... # type: builtin___float
- max = ... # type: builtin___float
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- min : typing___Optional[builtin___float] = None,
- max : typing___Optional[builtin___float] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> FloatDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> FloatDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"max",b"max",u"min",b"min",u"name",b"name"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"max",b"max",u"min",b"min",u"name",b"name"]) -> None: ...
-
-class StructDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
-
- @property
- def feature(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[Feature]: ...
-
- @property
- def sparse_feature(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[SparseFeature]: ...
-
- def __init__(self,
- *,
- feature : typing___Optional[typing___Iterable[Feature]] = None,
- sparse_feature : typing___Optional[typing___Iterable[SparseFeature]] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> StructDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> StructDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"feature",b"feature",u"sparse_feature",b"sparse_feature"]) -> None: ...
-
-class StringDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- name = ... # type: typing___Text
- value = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- value : typing___Optional[typing___Iterable[typing___Text]] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> StringDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> StringDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"name",b"name"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name",u"value",b"value"]) -> None: ...
-
-class BoolDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- name = ... # type: typing___Text
- true_value = ... # type: typing___Text
- false_value = ... # type: typing___Text
-
- def __init__(self,
- *,
- name : typing___Optional[typing___Text] = None,
- true_value : typing___Optional[typing___Text] = None,
- false_value : typing___Optional[typing___Text] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> BoolDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> BoolDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"false_value",b"false_value",u"name",b"name",u"true_value",b"true_value"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"false_value",b"false_value",u"name",b"name",u"true_value",b"true_value"]) -> None: ...
-
-class NaturalLanguageDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
-
- def __init__(self,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> NaturalLanguageDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> NaturalLanguageDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
-
-class ImageDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
-
- def __init__(self,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> ImageDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ImageDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
-
-class MIDDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
-
- def __init__(self,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> MIDDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> MIDDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
-
-class URLDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
-
- def __init__(self,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> URLDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> URLDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
-
-class TimeDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- class IntegerTimeFormat(builtin___int):
- DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
- @classmethod
- def Name(cls, number: builtin___int) -> builtin___str: ...
- @classmethod
- def Value(cls, name: builtin___str) -> 'TimeDomain.IntegerTimeFormat': ...
- @classmethod
- def keys(cls) -> typing___List[builtin___str]: ...
- @classmethod
- def values(cls) -> typing___List['TimeDomain.IntegerTimeFormat']: ...
- @classmethod
- def items(cls) -> typing___List[typing___Tuple[builtin___str, 'TimeDomain.IntegerTimeFormat']]: ...
- FORMAT_UNKNOWN = typing___cast('TimeDomain.IntegerTimeFormat', 0)
- UNIX_DAYS = typing___cast('TimeDomain.IntegerTimeFormat', 5)
- UNIX_SECONDS = typing___cast('TimeDomain.IntegerTimeFormat', 1)
- UNIX_MILLISECONDS = typing___cast('TimeDomain.IntegerTimeFormat', 2)
- UNIX_MICROSECONDS = typing___cast('TimeDomain.IntegerTimeFormat', 3)
- UNIX_NANOSECONDS = typing___cast('TimeDomain.IntegerTimeFormat', 4)
- FORMAT_UNKNOWN = typing___cast('TimeDomain.IntegerTimeFormat', 0)
- UNIX_DAYS = typing___cast('TimeDomain.IntegerTimeFormat', 5)
- UNIX_SECONDS = typing___cast('TimeDomain.IntegerTimeFormat', 1)
- UNIX_MILLISECONDS = typing___cast('TimeDomain.IntegerTimeFormat', 2)
- UNIX_MICROSECONDS = typing___cast('TimeDomain.IntegerTimeFormat', 3)
- UNIX_NANOSECONDS = typing___cast('TimeDomain.IntegerTimeFormat', 4)
-
- string_format = ... # type: typing___Text
- integer_format = ... # type: TimeDomain.IntegerTimeFormat
-
- def __init__(self,
- *,
- string_format : typing___Optional[typing___Text] = None,
- integer_format : typing___Optional[TimeDomain.IntegerTimeFormat] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TimeDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TimeDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"format",b"format",u"integer_format",b"integer_format",u"string_format",b"string_format"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"format",b"format",u"integer_format",b"integer_format",u"string_format",b"string_format"]) -> None: ...
- def WhichOneof(self, oneof_group: typing_extensions___Literal[u"format",b"format"]) -> typing_extensions___Literal["string_format","integer_format"]: ...
-
-class TimeOfDayDomain(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- class IntegerTimeOfDayFormat(builtin___int):
- DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
- @classmethod
- def Name(cls, number: builtin___int) -> builtin___str: ...
- @classmethod
- def Value(cls, name: builtin___str) -> 'TimeOfDayDomain.IntegerTimeOfDayFormat': ...
- @classmethod
- def keys(cls) -> typing___List[builtin___str]: ...
- @classmethod
- def values(cls) -> typing___List['TimeOfDayDomain.IntegerTimeOfDayFormat']: ...
- @classmethod
- def items(cls) -> typing___List[typing___Tuple[builtin___str, 'TimeOfDayDomain.IntegerTimeOfDayFormat']]: ...
- FORMAT_UNKNOWN = typing___cast('TimeOfDayDomain.IntegerTimeOfDayFormat', 0)
- PACKED_64_NANOS = typing___cast('TimeOfDayDomain.IntegerTimeOfDayFormat', 1)
- FORMAT_UNKNOWN = typing___cast('TimeOfDayDomain.IntegerTimeOfDayFormat', 0)
- PACKED_64_NANOS = typing___cast('TimeOfDayDomain.IntegerTimeOfDayFormat', 1)
-
- string_format = ... # type: typing___Text
- integer_format = ... # type: TimeOfDayDomain.IntegerTimeOfDayFormat
-
- def __init__(self,
- *,
- string_format : typing___Optional[typing___Text] = None,
- integer_format : typing___Optional[TimeOfDayDomain.IntegerTimeOfDayFormat] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TimeOfDayDomain: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TimeOfDayDomain: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"format",b"format",u"integer_format",b"integer_format",u"string_format",b"string_format"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"format",b"format",u"integer_format",b"integer_format",u"string_format",b"string_format"]) -> None: ...
- def WhichOneof(self, oneof_group: typing_extensions___Literal[u"format",b"format"]) -> typing_extensions___Literal["string_format","integer_format"]: ...
-
-class FeaturePresence(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- min_fraction = ... # type: builtin___float
- min_count = ... # type: builtin___int
-
- def __init__(self,
- *,
- min_fraction : typing___Optional[builtin___float] = None,
- min_count : typing___Optional[builtin___int] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> FeaturePresence: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> FeaturePresence: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"min_count",b"min_count",u"min_fraction",b"min_fraction"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"min_count",b"min_count",u"min_fraction",b"min_fraction"]) -> None: ...
-
-class FeaturePresenceWithinGroup(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- required = ... # type: builtin___bool
-
- def __init__(self,
- *,
- required : typing___Optional[builtin___bool] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> FeaturePresenceWithinGroup: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> FeaturePresenceWithinGroup: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"required",b"required"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"required",b"required"]) -> None: ...
-
-class InfinityNorm(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- threshold = ... # type: builtin___float
-
- def __init__(self,
- *,
- threshold : typing___Optional[builtin___float] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> InfinityNorm: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> InfinityNorm: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"threshold",b"threshold"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"threshold",b"threshold"]) -> None: ...
-
-class FeatureComparator(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
-
- @property
- def infinity_norm(self) -> InfinityNorm: ...
-
- def __init__(self,
- *,
- infinity_norm : typing___Optional[InfinityNorm] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> FeatureComparator: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> FeatureComparator: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"infinity_norm",b"infinity_norm"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"infinity_norm",b"infinity_norm"]) -> None: ...
-
-class TensorRepresentation(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- class DefaultValue(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- float_value = ... # type: builtin___float
- int_value = ... # type: builtin___int
- bytes_value = ... # type: builtin___bytes
- uint_value = ... # type: builtin___int
-
- def __init__(self,
- *,
- float_value : typing___Optional[builtin___float] = None,
- int_value : typing___Optional[builtin___int] = None,
- bytes_value : typing___Optional[builtin___bytes] = None,
- uint_value : typing___Optional[builtin___int] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TensorRepresentation.DefaultValue: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TensorRepresentation.DefaultValue: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"bytes_value",b"bytes_value",u"float_value",b"float_value",u"int_value",b"int_value",u"kind",b"kind",u"uint_value",b"uint_value"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"bytes_value",b"bytes_value",u"float_value",b"float_value",u"int_value",b"int_value",u"kind",b"kind",u"uint_value",b"uint_value"]) -> None: ...
- def WhichOneof(self, oneof_group: typing_extensions___Literal[u"kind",b"kind"]) -> typing_extensions___Literal["float_value","int_value","bytes_value","uint_value"]: ...
-
- class DenseTensor(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- column_name = ... # type: typing___Text
-
- @property
- def shape(self) -> FixedShape: ...
-
- @property
- def default_value(self) -> TensorRepresentation.DefaultValue: ...
-
- def __init__(self,
- *,
- column_name : typing___Optional[typing___Text] = None,
- shape : typing___Optional[FixedShape] = None,
- default_value : typing___Optional[TensorRepresentation.DefaultValue] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TensorRepresentation.DenseTensor: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TensorRepresentation.DenseTensor: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"column_name",b"column_name",u"default_value",b"default_value",u"shape",b"shape"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"column_name",b"column_name",u"default_value",b"default_value",u"shape",b"shape"]) -> None: ...
-
- class VarLenSparseTensor(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- column_name = ... # type: typing___Text
-
- def __init__(self,
- *,
- column_name : typing___Optional[typing___Text] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TensorRepresentation.VarLenSparseTensor: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TensorRepresentation.VarLenSparseTensor: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"column_name",b"column_name"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"column_name",b"column_name"]) -> None: ...
-
- class SparseTensor(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- index_column_names = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[typing___Text]
- value_column_name = ... # type: typing___Text
-
- @property
- def dense_shape(self) -> FixedShape: ...
-
- def __init__(self,
- *,
- dense_shape : typing___Optional[FixedShape] = None,
- index_column_names : typing___Optional[typing___Iterable[typing___Text]] = None,
- value_column_name : typing___Optional[typing___Text] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TensorRepresentation.SparseTensor: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TensorRepresentation.SparseTensor: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"dense_shape",b"dense_shape",u"value_column_name",b"value_column_name"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"dense_shape",b"dense_shape",u"index_column_names",b"index_column_names",u"value_column_name",b"value_column_name"]) -> None: ...
-
-
- @property
- def dense_tensor(self) -> TensorRepresentation.DenseTensor: ...
-
- @property
- def varlen_sparse_tensor(self) -> TensorRepresentation.VarLenSparseTensor: ...
-
- @property
- def sparse_tensor(self) -> TensorRepresentation.SparseTensor: ...
-
- def __init__(self,
- *,
- dense_tensor : typing___Optional[TensorRepresentation.DenseTensor] = None,
- varlen_sparse_tensor : typing___Optional[TensorRepresentation.VarLenSparseTensor] = None,
- sparse_tensor : typing___Optional[TensorRepresentation.SparseTensor] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TensorRepresentation: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TensorRepresentation: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"dense_tensor",b"dense_tensor",u"kind",b"kind",u"sparse_tensor",b"sparse_tensor",u"varlen_sparse_tensor",b"varlen_sparse_tensor"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"dense_tensor",b"dense_tensor",u"kind",b"kind",u"sparse_tensor",b"sparse_tensor",u"varlen_sparse_tensor",b"varlen_sparse_tensor"]) -> None: ...
- def WhichOneof(self, oneof_group: typing_extensions___Literal[u"kind",b"kind"]) -> typing_extensions___Literal["dense_tensor","varlen_sparse_tensor","sparse_tensor"]: ...
-
-class TensorRepresentationGroup(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- class TensorRepresentationEntry(google___protobuf___message___Message):
- DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- key = ... # type: typing___Text
-
- @property
- def value(self) -> TensorRepresentation: ...
-
- def __init__(self,
- *,
- key : typing___Optional[typing___Text] = None,
- value : typing___Optional[TensorRepresentation] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TensorRepresentationGroup.TensorRepresentationEntry: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TensorRepresentationGroup.TensorRepresentationEntry: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def HasField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> builtin___bool: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> None: ...
-
-
- @property
- def tensor_representation(self) -> typing___MutableMapping[typing___Text, TensorRepresentation]: ...
-
- def __init__(self,
- *,
- tensor_representation : typing___Optional[typing___Mapping[typing___Text, TensorRepresentation]] = None,
- ) -> None: ...
- if sys.version_info >= (3,):
- @classmethod
- def FromString(cls, s: builtin___bytes) -> TensorRepresentationGroup: ...
- else:
- @classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TensorRepresentationGroup: ...
- def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"tensor_representation",b"tensor_representation"]) -> None: ...
diff --git a/sdk/python/tests/data/tensorflow_metadata/bikeshare_feature_set.yaml b/sdk/python/tests/data/tensorflow_metadata/bikeshare_feature_set.yaml
new file mode 100644
index 00000000000..daa0a35f0ab
--- /dev/null
+++ b/sdk/python/tests/data/tensorflow_metadata/bikeshare_feature_set.yaml
@@ -0,0 +1,81 @@
+spec:
+ name: bikeshare
+ entities:
+ - name: station_id
+ valueType: INT64
+ intDomain:
+ min: 1
+ max: 5000
+ presence:
+ minFraction: 1.0
+ minCount: 1
+ shape:
+ dim:
+ - size: 1
+ features:
+ - name: location
+ valueType: STRING
+ stringDomain:
+ name: location
+ value:
+ - (30.24258, -97.71726)
+ - (30.24472, -97.72336)
+ - (30.24891, -97.75019)
+ presence:
+ minFraction: 1.0
+ minCount: 1
+ shape:
+ dim:
+ - size: 1
+ - name: name
+ valueType: STRING
+ stringDomain:
+ name: name
+ value:
+ - 10th & Red River
+ - 11th & Salina
+ - 11th & San Jacinto
+ - 13th & San Antonio
+ - 17th & Guadalupe
+ presence:
+ minFraction: 1.0
+ minCount: 1
+ shape:
+ dim:
+ - size: 1
+ - name: status
+ valueType: STRING
+ stringDomain:
+ name: status
+ value:
+ - "active"
+ - "closed"
+ presence:
+ minFraction: 1.0
+ minCount: 1
+ shape:
+ dim:
+ - size: 1
+ - name: latitude
+ valueType: DOUBLE
+ floatDomain:
+ min: 100.0
+ max: 105.0
+ presence:
+ minFraction: 1.0
+ minCount: 1
+ shape:
+ dim:
+ - size: 1
+ - name: longitude
+ valueType: DOUBLE
+ floatDomain:
+ min: 102.0
+ max: 105.0
+ presence:
+ minFraction: 1.0
+ minCount: 1
+ shape:
+ dim:
+ - size: 1
+ maxAge: 3600s
diff --git a/sdk/python/tests/data/tensorflow_metadata/bikeshare_schema.json b/sdk/python/tests/data/tensorflow_metadata/bikeshare_schema.json
new file mode 100644
index 00000000000..e7a886053c1
--- /dev/null
+++ b/sdk/python/tests/data/tensorflow_metadata/bikeshare_schema.json
@@ -0,0 +1,136 @@
+{
+ "feature": [
+ {
+ "name": "location",
+ "type": "BYTES",
+ "domain": "location",
+ "presence": {
+ "minFraction": 1.0,
+ "minCount": "1"
+ },
+ "shape": {
+ "dim": [
+ {
+ "size": "1"
+ }
+ ]
+ }
+ },
+ {
+ "name": "name",
+ "type": "BYTES",
+ "domain": "name",
+ "presence": {
+ "minFraction": 1.0,
+ "minCount": "1"
+ },
+ "shape": {
+ "dim": [
+ {
+ "size": "1"
+ }
+ ]
+ }
+ },
+ {
+ "name": "status",
+ "type": "BYTES",
+ "domain": "status",
+ "presence": {
+ "minFraction": 1.0,
+ "minCount": "1"
+ },
+ "shape": {
+ "dim": [
+ {
+ "size": "1"
+ }
+ ]
+ }
+ },
+ {
+ "name": "latitude",
+ "type": "FLOAT",
+ "float_domain": {
+ "min": 100.0,
+ "max": 105.0
+ },
+ "presence": {
+ "minFraction": 1.0,
+ "minCount": "1"
+ },
+ "shape": {
+ "dim": [
+ {
+ "size": "1"
+ }
+ ]
+ }
+ },
+ {
+ "name": "longitude",
+ "type": "FLOAT",
+ "presence": {
+ "minFraction": 1.0,
+ "minCount": "1"
+ },
+ "float_domain": {
+ "min": 102.0,
+ "max": 105.0
+ },
+ "shape": {
+ "dim": [
+ {
+ "size": "1"
+ }
+ ]
+ }
+ },
+ {
+ "name": "station_id",
+ "type": "INT",
+ "presence": {
+ "minFraction": 1.0,
+ "minCount": "1"
+ },
+ "int_domain": {
+ "min": 1,
+ "max": 5000
+ },
+ "shape": {
+ "dim": [
+ {
+ "size": "1"
+ }
+ ]
+ }
+ }
+ ],
+ "stringDomain": [
+ {
+ "name": "location",
+ "value": [
+ "(30.24258, -97.71726)",
+ "(30.24472, -97.72336)",
+ "(30.24891, -97.75019)"
+ ]
+ },
+ {
+ "name": "name",
+ "value": [
+ "10th & Red River",
+ "11th & Salina",
+ "11th & San Jacinto",
+ "13th & San Antonio",
+ "17th & Guadalupe"
+ ]
+ },
+ {
+ "name": "status",
+ "value": [
+ "active",
+ "closed"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/sdk/python/tests/test_feature_set.py b/sdk/python/tests/test_feature_set.py
index bd31d712bb3..6f087d98bbf 100644
--- a/sdk/python/tests/test_feature_set.py
+++ b/sdk/python/tests/test_feature_set.py
@@ -11,6 +11,7 @@
# 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.
+import pathlib
from concurrent import futures
from datetime import datetime
@@ -18,12 +19,19 @@
import pandas as pd
import pytest
import pytz
+from google.protobuf import json_format
+from tensorflow_metadata.proto.v0 import schema_pb2
import dataframes
import feast.core.CoreService_pb2_grpc as Core
from feast.client import Client
from feast.entity import Entity
-from feast.feature_set import Feature, FeatureSet, FeatureSetRef
+from feast.feature_set import (
+ Feature,
+ FeatureSet,
+ FeatureSetRef,
+ _make_tfx_schema_domain_info_inline,
+)
from feast.value_type import ValueType
from feast_core_server import CoreServicer
@@ -168,6 +176,97 @@ def test_add_features_from_df_success(
assert len(my_feature_set.features) == feature_count
assert len(my_feature_set.entities) == entity_count
+ def test_import_tfx_schema(self):
+ tests_folder = pathlib.Path(__file__).parent
+ test_input_schema_json = open(
+ tests_folder / "data" / "tensorflow_metadata" / "bikeshare_schema.json"
+ ).read()
+ test_input_schema = schema_pb2.Schema()
+ json_format.Parse(test_input_schema_json, test_input_schema)
+
+ feature_set = FeatureSet(
+ name="bikeshare",
+ entities=[Entity(name="station_id", dtype=ValueType.INT64)],
+ features=[
+ Feature(name="name", dtype=ValueType.STRING),
+ Feature(name="status", dtype=ValueType.STRING),
+ Feature(name="latitude", dtype=ValueType.FLOAT),
+ Feature(name="longitude", dtype=ValueType.FLOAT),
+ Feature(name="location", dtype=ValueType.STRING),
+ ],
+ )
+
+ # Before update
+ for entity in feature_set.entities:
+ assert entity.presence is None
+ assert entity.shape is None
+ for feature in feature_set.features:
+ assert feature.presence is None
+ assert feature.shape is None
+ assert feature.string_domain is None
+ assert feature.float_domain is None
+ assert feature.int_domain is None
+
+ feature_set.import_tfx_schema(test_input_schema)
+
+ # After update
+ for entity in feature_set.entities:
+ assert entity.presence is not None
+ assert entity.shape is not None
+ for feature in feature_set.features:
+ assert feature.presence is not None
+ assert feature.shape is not None
+ if feature.name in ["location", "name", "status"]:
+ assert feature.string_domain is not None
+ elif feature.name in ["latitude", "longitude"]:
+ assert feature.float_domain is not None
+ elif feature.name in ["station_id"]:
+ assert feature.int_domain is not None
+
+ def test_export_tfx_schema(self):
+ tests_folder = pathlib.Path(__file__).parent
+ test_input_feature_set = FeatureSet.from_yaml(
+ str(
+ tests_folder
+ / "data"
+ / "tensorflow_metadata"
+ / "bikeshare_feature_set.yaml"
+ )
+ )
+
+ expected_schema_json = open(
+ tests_folder / "data" / "tensorflow_metadata" / "bikeshare_schema.json"
+ ).read()
+ expected_schema = schema_pb2.Schema()
+ json_format.Parse(expected_schema_json, expected_schema)
+ _make_tfx_schema_domain_info_inline(expected_schema)
+
+ actual_schema = test_input_feature_set.export_tfx_schema()
+
+ assert len(actual_schema.feature) == len(expected_schema.feature)
+ for actual, expected in zip(actual_schema.feature, expected_schema.feature):
+ assert actual.SerializeToString() == expected.SerializeToString()
+
+
+def make_tfx_schema_domain_info_inline(schema):
+ # Copy top-level domain info defined in the schema to inline definition.
+ # One use case is in FeatureSet which does not have access to the top-level domain
+ # info.
+ domain_ref_to_string_domain = {d.name: d for d in schema.string_domain}
+ domain_ref_to_float_domain = {d.name: d for d in schema.float_domain}
+ domain_ref_to_int_domain = {d.name: d for d in schema.int_domain}
+
+ for feature in schema.feature:
+ domain_info_case = feature.WhichOneof("domain_info")
+ if domain_info_case == "domain":
+ domain_ref = feature.domain
+ if domain_ref in domain_ref_to_string_domain:
+ feature.string_domain.MergeFrom(domain_ref_to_string_domain[domain_ref])
+ elif domain_ref in domain_ref_to_float_domain:
+ feature.float_domain.MergeFrom(domain_ref_to_float_domain[domain_ref])
+ elif domain_ref in domain_ref_to_int_domain:
+ feature.int_domain.MergeFrom(domain_ref_to_int_domain[domain_ref])
+
class TestFeatureSetRef:
def test_from_feature_set(self):
diff --git a/serving/pom.xml b/serving/pom.xml
index 4cc02dc4510..1036f437de3 100644
--- a/serving/pom.xml
+++ b/serving/pom.xml
@@ -34,7 +34,7 @@
spring-plugins
Spring Plugins
- http://repo.spring.io/plugins-release
+ https://repo.spring.io/plugins-release
@@ -46,6 +46,14 @@
false
+
+
+ build-info
+
+ build-info
+
+
+
org.apache.maven.plugins
@@ -76,6 +84,30 @@
${project.version}