<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L49-L682) |

Specifies a TensorFlow value type.

Inherits From: [`TraceType`](https://www.tensorflow.org/api_docs/python/tf/types/experimental/TraceType)

#### View aliases


**Compat aliases for migration**

See
[Migration guide](https://www.tensorflow.org/guide/migrate) for
more details.

[`tf.compat.v1.TypeSpec`](https://www.tensorflow.org/api_docs/python/tf/TypeSpec), [`tf.compat.v1.data.experimental.Structure`](https://www.tensorflow.org/api_docs/python/tf/TypeSpec)

<br />

A [`tf.TypeSpec`](https://www.tensorflow.org/api_docs/python/tf/TypeSpec) provides metadata describing an object accepted or returned
by TensorFlow APIs. Concrete subclasses, such as [`tf.TensorSpec`](https://www.tensorflow.org/api_docs/python/tf/TensorSpec) and
[`tf.RaggedTensorSpec`](https://www.tensorflow.org/api_docs/python/tf/RaggedTensorSpec), are used to describe different value types.

For example, [`tf.function`](https://www.tensorflow.org/api_docs/python/tf/function)'s `input_signature` argument accepts a list
(or nested structure) of `TypeSpec`s.

Creating new subclasses of `TypeSpec` (outside of TensorFlow core) is not
currently supported. In particular, we may make breaking changes to the
private methods and properties defined by this base class.

#### Example:

    spec = tf.TensorSpec(shape=[None, None], dtype=tf.int32)
    @tf.function(input_signature=[spec])
    def double(x):
      return x * 2
    double(tf.constant([[1, 2], [3, 4]]))
    <tf.Tensor: shape=(2, 2), dtype=int32,
        numpy=array([[2, 4], [6, 8]], dtype=int32)>

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `value_type` | The Python type for values that are compatible with this TypeSpec. <br /> In particular, all values that are compatible with this TypeSpec must be an instance of this type. |

<br />

## Methods

### `experimental_as_proto`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L217-L222)

    experimental_as_proto() -> struct_pb2.TypeSpecProto

Returns a proto representation of the TypeSpec instance.

Do NOT override for custom non-TF types.

### `experimental_from_proto`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L204-L215)

    @classmethod
    experimental_from_proto(
        proto: struct_pb2.TypeSpecProto
    ) -> 'TypeSpec'

Returns a TypeSpec instance based on the serialized proto.

Do NOT override for custom non-TF types.

<br />

<br />

<br />

| Args ||
|---|---|
| `proto` | Proto generated using 'experimental_as_proto'. |

<br />

### `experimental_type_proto`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L196-L202)

    @classmethod
    experimental_type_proto() -> Type[struct_pb2.TypeSpecProto]

Returns the type of proto associated with TypeSpec serialization.

Do NOT override for custom non-TF types.

### `is_compatible_with`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L300-L321)

    is_compatible_with(
        spec_or_value
    )

Returns true if `spec_or_value` is compatible with this TypeSpec.

Prefer using "is_subtype_of" and "most_specific_common_supertype" wherever
possible.

<br />

<br />

<br />

| Args ||
|---|---|
| `spec_or_value` | A TypeSpec or TypeSpec associated value to compare against. |

<br />

### `is_subtype_of`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L109-L146)

    is_subtype_of(
        other: https://www.tensorflow.org/api_docs/python/tf/types/experimental/TraceType
    ) -> bool

Returns True if `self` is a subtype of `other`.

Implements the tf.types.experimental.func.TraceType interface.

If not overridden by a subclass, the default behavior is to assume the
TypeSpec is covariant upon attributes that implement TraceType and
invariant upon rest of the attributes as well as the structure and type
of the TypeSpec.

<br />

<br />

<br />

| Args ||
|---|---|
| `other` | A TraceType object. |

<br />

### `most_specific_common_supertype`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L148-L194)

    most_specific_common_supertype(
        others: Sequence[https://www.tensorflow.org/api_docs/python/tf/types/experimental/TraceType]
    ) -> Optional['TypeSpec']

Returns the most specific supertype TypeSpec of `self` and `others`.

Implements the tf.types.experimental.func.TraceType interface.

If not overridden by a subclass, the default behavior is to assume the
TypeSpec is covariant upon attributes that implement TraceType and
invariant upon rest of the attributes as well as the structure and type
of the TypeSpec.

<br />

<br />

<br />

| Args ||
|---|---|
| `others` | A sequence of TraceTypes. |

<br />

### `most_specific_compatible_type`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L323-L341)

    most_specific_compatible_type(
        other: 'TypeSpec'
    ) -> 'TypeSpec'

Returns the most specific TypeSpec compatible with `self` and `other`. (deprecated)

> [!WARNING]
> **Deprecated:** THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Use most_specific_common_supertype instead.

Deprecated. Please use `most_specific_common_supertype` instead.
Do not override this function.

<br />

<br />

<br />

| Args ||
|---|---|
| `other` | A `TypeSpec`. |

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `ValueError` | If there is no TypeSpec that is compatible with both `self` and `other`. |

<br />

### `__eq__`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L545-L548)

    __eq__(
        other
    ) -> bool

Return self==value.

### `__ne__`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/framework/type_spec.py#L550-L551)

    __ne__(
        other
    ) -> bool

Return self!=value.