anchor.diff:  
   
   type Uniform(low:Tensor, high:Tensor) =
  -    inherit Distribution()
  +    inherit TensorDistribution()
       do if low.shape <> high.shape then failwithf "Expecting low and high with same shape, received %A, %A" low.shape high.shape
       do if low.dim > 1 then failwithf "Expecting scalar parameters (0-dimensional low and high) or a batch of scalar parameters (1-dimensional low and high)"
       member d.low = low
  
positive.code: 
  
  type Bernoulli(?probs:Tensor, ?logits:Tensor) =
      inherit Distribution()
      let _probs, _logits, _dtype =
          match probs, logits with
          | Some _, Some _ -> failwithf "Expecting only one of probs, logits"
  
negative.code: 
  
  type Categorical(?probs:Tensor, ?logits:Tensor) =
      inherit TensorDistribution()
      let _probs, _logits, _dtype =
          match probs, logits with
          | Some _, Some _ -> failwithf "Expecting only one of probs, logits"
  