class_docstr: TFX artifact used for orchestration.
  
  This is used for type-checking and inter-component communication. Currently,
  it wraps a tuple of (ml_metadata.proto.Artifact,
  ml_metadata.proto.ArtifactType) with additional property accessors for
  internal state.
  
  A user may create a subclass of Artifact and override the TYPE_NAME property
  with the type for this artifact subclass. Users of the subclass may then omit
  the "type_name" field when construction the object.
  
  A user may specify artifact type-specific properties for an Artifact subclass
  by overriding the PROPERTIES dictionary, as detailed below.
  
  Note: the behavior of this class is experimental, without backwards
  compatibility guarantees, and may change in upcoming releases.
class_docstr_tok: ["TFX","artifact","used","for","orchestration",".","This","is","used","for","type-checking","and","inter-component","communication",".","Currently",",","it","wraps","a","tuple","of","(","ml_metadata.proto.Artifact",",","ml_metadata.proto.ArtifactType",")","with","additional","property","accessors","for","internal","state",".","A","user","may","create","a","subclass","of","Artifact","and","override","the","TYPE_NAME","property","with","the","type","for","this","artifact","subclass",".","Users","of","the","subclass","may","then","omit","the","``","type_name","''","field","when","construction","the","object",".","A","user","may","specify","artifact","type-specific","properties","for","an","Artifact","subclass","by","overriding","the","PROPERTIES","dictionary",",","as","detailed","below",".","Note",":","the","behavior","of","this","class","is","experimental",",","without","backwards","compatibility","guarantees",",","and","may","change","in","upcoming","releases","."]
docstr: Construct an instance of Artifact.
  
  Used by TFX internal implementation: create an empty Artifact with
  type_name and optional split info specified. The remaining info will be
  filled in during compiling and running time. The Artifact should be
  transparent to end users and should not be initiated directly by pipeline
  users.
  
  Args:
    mlmd_artifact_type: Proto message defining the underlying ArtifactType.
      Optional and intended for internal use.
docstr_tok: ["Construct","an","instance","of","Artifact",".","Used","by","TFX","internal","implementation",":","create","an","empty","Artifact","with","type_name","and","optional","split","info","specified",".","The","remaining","info","will","be","filled","in","during","compiling","and","running","time",".","The","Artifact","should","be","transparent","to","end","users","and","should","not","be","initiated","directly","by","pipeline","users",".","Args",":","mlmd_artifact_type",":","Proto","message","defining","the","underlying","ArtifactType",".","Optional","and","intended","for","internal","use","."]
code: def __init__(
      self,
      mlmd_artifact_type: Optional[
          metadata_store_pb2.ArtifactType
      ] = None,
  ):
      """Construct an instance of Artifact.
  
      Used by TFX internal implementation: create an empty Artifact with
      type_name and optional split info specified. The remaining info will be
      filled in during compiling and running time. The Artifact should be
      transparent to end users and should not be initiated directly by pipeline
      users.
  
      Args:
        mlmd_artifact_type: Proto message defining the underlying ArtifactType.
          Optional and intended for internal use.
      """
      if self.__class__ == Artifact:
          if not mlmd_artifact_type:
              raise ValueError(
                  'The "mlmd_artifact_type" argument must be passed to specify a '
                  "type for this Artifact."
              )
          if not isinstance(
              mlmd_artifact_type, metadata_store_pb2.ArtifactType
          ):
              raise ValueError(
                  'The "mlmd_artifact_type" argument must be an instance of the '
                  "proto message ml_metadata.proto.metadata_store_pb2.ArtifactType."
              )
      else:
          if mlmd_artifact_type:
              raise ValueError(
                  'The "mlmd_artifact_type" argument must not be passed for '
                  "Artifact subclass %s." % self.__class__
              )
          mlmd_artifact_type = self._get_artifact_type()
  
      # MLMD artifact type proto object.
      self._artifact_type = mlmd_artifact_type
      # Underlying MLMD artifact proto object.
      self._artifact = metadata_store_pb2.Artifact()
      # When list/dict JSON or proto value properties are read, it is possible
      # they will be modified without knowledge of this class. Therefore,
      # deserialized values need to be cached here and reserialized into the
      # metadata proto when requested.
      self._cached_modifiable_properties = {}
      self._cached_modifiable_custom_properties = {}
      # Initialization flag to prevent recursive getattr / setattr errors.
      self._initialized = True
  
imports: import builtins
  import copy
  import importlib
  import json
  from typing import Any, Dict, List, Optional, Type, Union
  from absl import logging
  from tfx.types import artifact_property
  from tfx.types.system_artifacts import SystemArtifact
  from tfx.utils import doc_controls
  from tfx.utils import json_utils
  from tfx.utils import proto_utils
  from google.protobuf import struct_pb2
  from google.protobuf import json_format
  from google.protobuf import message
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 1 to create a new Artifact object from inherited base classes: json_utils with example: obj = Artifact(mlmd_artifact_type)