code: def test_sequential_sum_product_bias_1(num_steps, dim):
      time = Variable("time", Bint[num_steps])
      bias_dist = random_gaussian(OrderedDict([("bias", Reals[dim])]))
      trans = random_gaussian(
          OrderedDict(
              [
                  ("time", Bint[num_steps]),
                  ("x_prev", Reals[dim]),
                  ("x_curr", Reals[dim]),
              ]
          )
      )
      obs = random_gaussian(
          OrderedDict(
              [
                  ("time", Bint[num_steps]),
                  ("x_curr", Reals[dim]),
                  ("bias", Reals[dim]),
              ]
          )
      )
      factor = trans + obs + bias_dist
      assert set(factor.inputs) == {"time", "bias", "x_prev", "x_curr"}
  
      result = sequential_sum_product(
          ops.logaddexp, ops.add, factor, time, {"x_prev": "x_curr"}
      )
      assert set(result.inputs) == {"bias", "x_prev", "x_curr"}
  
imports: import os
  import re
  from collections import OrderedDict
  from functools import partial, reduce
  import pytest
  import funsor.ops
  from funsor.domains import Bint, Real, Reals
  from funsor.interpretations import compress_gaussians, eager, eager_or_die, lazy, moment_matching, reflect
  from funsor.interpreter import reinterpret
  from funsor.optimizer import apply_optimizer
  from funsor.sum_product import MarkovProduct, _partition, dynamic_partial_sum_product, mixed_sequential_sum_product, modified_partial_sum_product, naive_sarkka_bilmes_product, naive_sequential_sum_product, partial_sum_product, partial_unroll, sarkka_bilmes_product, sequential_sum_product, sum_product
  from funsor.tensor import Tensor, get_default_prototype
  from funsor.terms import Cat, Variable
  from funsor.testing import assert_close, random_gaussian, random_tensor
  from funsor.util import get_backend
label_desc: Use image node_id 31 for calling a global function with example usage: test_sequential_sum_product_bias_1(num_steps, dim) without return types