tensorflow_probability/python/distributions/joint_distribution_named.py
def _prob_chain_rule_flatten(named_makers):
  """Creates lists of callables suitable for JDSeq."""
  def _make(dist_fn, args):
    if args is None:
      return lambda *_: dist_fn
    if not args:
      return lambda *_: dist_fn()
    def _fn(*xs):
      kwargs = dict(zip(args, reversed(xs[-len(args):])))
      kwargs.pop('_', None)
      return dist_fn(**kwargs)
    return _fn
  named_makers = _convert_to_dict(named_makers)
  g = {k: (None if distribution_util.is_distribution_instance(v)
           else joint_distribution_sequential._get_required_args(v))  # pylint: disable=protected-access
       for k, v in named_makers.items()}
  g = _best_order(g)
  dist_fn_name, dist_fn_args = zip(*g)
  dist_fn_args = tuple(None if a is None else tuple(a) for a in dist_fn_args)
  dist_fn_wrapped = tuple(_make(named_makers[name], parents)
                          for (name, parents) in g)
  dist_fn = tuple(named_makers.get(n) for n in dist_fn_name)
  return dist_fn, dist_fn_wrapped, dist_fn_args, dist_fn_name
def _prob_chain_rule_flatten(named_makers):
  """Creates lists of callables suitable for JDSeq."""
  def _make(dist_fn, args):
    if args is None:
      return lambda *_: dist_fn
    if not args:
      return lambda *_: dist_fn()
    def _fn(*xs):
      kwargs = dict(zip(args, reversed(xs[-len(args):])))
      kwargs.pop('_', None)
      return dist_fn(**kwargs)
    return _fn
  named_makers = _convert_to_dict(named_makers)
  g = {k: (None if distribution_util.is_distribution_instance(v)
           else joint_distribution_sequential._get_required_args(v))  # pylint: disable=protected-access
       for k, v in named_makers.items()}
  g = _best_order(g)
  dist_fn_name, dist_fn_args = zip(*g)
  dist_fn_args = tuple(None if a is None else tuple(a) for a in dist_fn_args)
  dist_fn_wrapped = tuple(_make(named_makers[name], parents)
                          for (name, parents) in g)
  dist_fn = tuple(named_makers.get(n) for n in dist_fn_name)
  return dist_fn, dist_fn_wrapped, dist_fn_args, dist_fn_name
def _prob_chain_rule_flatten ( named_makers ) : def _make ( dist_fn , args ) : if args is None : return lambda * _ : dist_fn if not args : return lambda * _ : dist_fn ( ) def _fn ( * xs ) : kwargs = dict ( zip ( args , reversed ( xs [ - len ( args ) : ] ) ) ) kwargs . pop ( '_' , None ) return dist_fn ( * * kwargs ) return _fn named_makers = _convert_to_dict ( named_makers ) g = { k : ( None if distribution_util . is_distribution_instance ( v ) else joint_distribution_sequential . _get_required_args ( v ) ) # pylint: disable=protected-access for k , v in named_makers . items ( ) } g = _best_order ( g ) dist_fn_name , dist_fn_args = zip ( * g ) dist_fn_args = tuple ( None if a is None else tuple ( a ) for a in dist_fn_args ) dist_fn_wrapped = tuple ( _make ( named_makers [ name ] , parents ) for ( name , parents ) in g ) dist_fn = tuple ( named_makers . get ( n ) for n in dist_fn_name ) return dist_fn , dist_fn_wrapped , dist_fn_args , dist_fn_name
Creates lists of callables suitable for JDSeq.
Creates lists of callables suitable for JDSeq .