class_docstr: Padding dependent on node types.
  
  Args:
      values (dict): The mapping from edge types to padding values.
      default (int or float, optional): The padding value to use for edge
          types not specified in :obj:`values`. (default: :obj:`0.0`)
class_docstr_tok: ["Padding","dependent","on","node","types",".","Args",":","values","(","dict",")",":","The","mapping","from","edge","types","to","padding","values",".","default","(","int","or","float",",","optional",")",":","The","padding","value","to","use","for","edge","types","not","specified","in",":","obj",":","`","values","`",".","(","default",":",":","obj",":","`","0.0","`",")"]
code: def validate_key_value(self, key: Any, value: Any) -> None:
      if not isinstance(key, tuple):
          raise ValueError(
              f"Expected the edge type '{key}' to be a tuple "
              f"(got '{type(key)}')"
          )
  
      if len(key) != 3:
          raise ValueError(
              f"Expected the edge type '{key}' to hold exactly "
              f"three elements (got {len(key)})"
          )
  
      if not isinstance(value, (UniformPadding, AttrNamePadding)):
          raise ValueError(
              f"Expected the value of '{key}' to be of "
              f"type 'UniformPadding' or 'AttrNamePadding' "
              f"(got '{type(value)}')"
          )
  
imports: from abc import ABC, abstractmethod
  from dataclasses import dataclass
  from typing import Any, Callable, Dict, List, Optional, Tuple, Union
  import torch
  import torch.nn.functional
  from torch_geometric.data import Data, HeteroData
  from torch_geometric.data.datapipes import functional_transform
  from torch_geometric.data.storage import EdgeStorage, NodeStorage
  from torch_geometric.transforms import BaseTransform
  from torch_geometric.typing import EdgeType, NodeType
label_desc: Use image node_id 1 for calling the EdgeTypePadding obj's underlying member method code with example usage: obj.validate_key_value(key, value) without return types