In RandomVariable.make_node, return theano.gof.Apply(self, inputs, (rng.type(), out_var, log_lik))—where log_lik is a graph of the log-likelihood for the given RV. This addition will allow RandomVariables to represent both measure and sample-space graphs.
In this case, a random variable's—e.g. rv—complete log-likelihood would always be available as rv.owner.outputs[-1].
Since owner information needs to be attached to Op outputs, we can't take that approach (e.g. some log-likelihoods may be constants). Instead, we should simply provide a logp function that constructs the measure-space graph for a given RandomVariable output using its RandomVariable.logp implementation.
InRandomVariable.make_node, returntheano.gof.Apply(self, inputs, (rng.type(), out_var, log_lik))—wherelog_likis a graph of the log-likelihood for the given RV. This addition will allowRandomVariables to represent both measure and sample-space graphs.In this case, a random variable's—e.g.rv—complete log-likelihood would always be available asrv.owner.outputs[-1].Since owner information needs to be attached to
Opoutputs, we can't take that approach (e.g. some log-likelihoods may be constants). Instead, we should simply provide alogpfunction that constructs the measure-space graph for a givenRandomVariableoutput using itsRandomVariable.logpimplementation.