class_docstr: Base class defining the distribution default behavior and interface
docstr: Args:
      X: The original data passed into NOTEARS (i.e. the reconstruction target).
  
      X_hat: The reconstructed data.
  
  Returns:
      Scalar pytorch tensor of the reconstruction loss between X and X_hat.
docstr_tok: ["Args",":","X",":","The","original","data","passed","into","NOTEARS","(","i.e",".","the","reconstruction","target",")",".","X_hat",":","The","reconstructed","data",".","Returns",":","Scalar","pytorch","tensor","of","the","reconstruction","loss","between","X","and","X_hat","."]
code: def loss(self, X: torch.Tensor, X_hat: torch.Tensor) -> torch.Tensor:
      """
      Args:
          X: The original data passed into NOTEARS (i.e. the reconstruction target).
  
          X_hat: The reconstructed data.
  
      Returns:
          Scalar pytorch tensor of the reconstruction loss between X and X_hat.
      """
      raise NotImplementedError("Must implement the loss() method")
  
imports: import itertools
  from abc import ABCMeta, abstractmethod
  from copy import deepcopy
  from typing import Dict, List, Tuple
  import numpy
  import torch
  from causalnex.structure.structuremodel import StructureModel
label_desc: Use image node_id 10 for calling the DistTypeBase obj's underlying member method code with example usage: obj.loss(X, X_hat) without return types