class_docstr: Represented by the random variables part of the joint distribution.
  Contains methods for PDF, CDF, sampling, marginal densities, etc.
class_docstr_tok: ["Represented","by","the","random","variables","part","of","the","joint","distribution",".","Contains","methods","for","PDF",",","CDF",",","sampling",",","marginal","densities",",","etc","."]
code: def __call__(self, *args):
      return self.pdf(*args)
  
imports: from math import prod
  from sympy.core.basic import Basic
  from sympy.core.function import Lambda
  from sympy.core.singleton import S
  from sympy.core.symbol import Dummy, Symbol
  from sympy.core.sympify import sympify
  from sympy.sets.sets import ProductSet
  from sympy.tensor.indexed import Indexed
  from sympy.concrete.products import Product
  from sympy.concrete.summations import Sum, summation
  from sympy.core.containers import Tuple
  from sympy.integrals.integrals import Integral, integrate
  from sympy.matrices import ImmutableMatrix, matrix2numpy, list2numpy
  from sympy.stats.crv import SingleContinuousDistribution, SingleContinuousPSpace
  from sympy.stats.drv import SingleDiscreteDistribution, SingleDiscretePSpace
  from sympy.stats.rv import ProductPSpace, NamedArgsMixin, Distribution, ProductDomain, RandomSymbol, random_symbols, SingleDomain, _symbol_converter
  from sympy.utilities.iterables import iterable
  from sympy.utilities.misc import filldedent
  from sympy.external import import_module
label_desc: Use image node_id 6 for calling the JointDistribution obj's underlying member method code with example usage: obj.__call__() and returns: self