code: def eager_add_gaussian_gaussian(op, lhs, rhs):
      # Fuse two Gaussians by adding their log-densities pointwise.
      # This is similar to a Kalman filter update, but also keeps track of
      # the marginal likelihood which accumulates into a Tensor.
  
      # Align data.
      inputs = lhs.inputs.copy()
      inputs.update(rhs.inputs)
      lhs_white_vec, lhs_prec_sqrt = align_gaussian(
          inputs, lhs, expand=True
      )
      rhs_white_vec, rhs_prec_sqrt = align_gaussian(
          inputs, rhs, expand=True
      )
  
      # Fuse aligned Gaussians via concatenation.
      white_vec = ops.cat([lhs_white_vec, rhs_white_vec], -1)
      prec_sqrt = ops.cat([lhs_prec_sqrt, rhs_prec_sqrt], -1)
      return Gaussian(white_vec, prec_sqrt, inputs)
  
imports: import math
  from collections import OrderedDict, defaultdict
  from contextlib import contextmanager
  from functools import reduce
  import funsor.ops
  from funsor.affine import affine_inputs, extract_affine, is_affine
  from funsor.delta import Delta
  from funsor.domains import Real, Reals
  from funsor.interpretations import compress_gaussians
  from funsor.ops import AddOp, SubOp
  from funsor.tensor import Tensor, align_tensor, align_tensors
  from funsor.terms import Binary, Funsor, FunsorMeta, Number, Slice, Subs, Variable, eager, reflect
  from funsor.util import broadcast_shape, get_tracing_state, lazy_property
label_desc: Use image node_id 17 for calling a global function with example usage: eager_add_gaussian_gaussian(op, lhs, rhs) and returns: Gaussian