def METHOD_NAME(self, sdfg, state):
    """
    Validates the tensor transposition operation.
    :return: A tuple (inp_tensor, out_tensor) for the data descriptors in the parent SDFG.
    """
    inp_tensor, out_tensor = None, None
    for e in state.out_edges(self):
        if e.src_conn == "_out_tensor":
            out_tensor = sdfg.arrays[e.data.data]
    for e in state.in_edges(self):
        if e.dst_conn == "_inp_tensor":
            inp_tensor = sdfg.arrays[e.data.data]
    if not inp_tensor:
        raise ValueError("Missing the input tensor.")
    if not out_tensor:
        raise ValueError("Missing the output tensor.")
    if inp_tensor.dtype != out_tensor.dtype:
        raise ValueError("The datatype of the input and output tensors must match.")
    if inp_tensor.storage != out_tensor.storage:
        raise ValueError("The storage of the input and output tensors must match.")
    if len(inp_tensor.shape) != len(out_tensor.shape):
        raise ValueError("The input and output tensors must have the same number of modes.")
    if len(inp_tensor.shape) != len(self.axes):
        raise ValueError("The axes list property must have as many elements as the number of tensor modes.")
    if sorted(self.axes) != list(range(len(inp_tensor.shape))):
        raise ValueError("The axes list property is not a perimutation of the input tensor's modes.")
    transposed_shape = [inp_tensor.shape[t] for t in self.axes]
    if transposed_shape != list(out_tensor.shape):
        raise ValueError("The permutation of the input shape does not match the output shape.")
    return inp_tensor, out_tensor