code: def test_prde_spde():
      D = [Poly(x, t), Poly(-x * t, t)]
      DE = DifferentialExtension(
          extension={"D": [Poly(1, x), Poly(1 / x, t)]}
      )
      # TODO: when bound_degree() can handle this, test degree bound from that too
      assert prde_spde(Poly(t, t), Poly(-1 / x, t), D, n, DE) == (
          Poly(t, t),
          Poly(0, t, domain="ZZ(x)"),
          [Poly(2 * x, t, domain="ZZ(x)"), Poly(-x, t, domain="ZZ(x)")],
          [
              Poly(-(x**2), t, domain="ZZ(x)"),
              Poly(0, t, domain="ZZ(x)"),
          ],
          n - 1,
      )
  
imports: from sympy.integrals.risch import DifferentialExtension, derivation
  from sympy.integrals.prde import prde_normal_denom, prde_special_denom, prde_linear_constraints, constant_system, prde_spde, prde_no_cancel_b_large, prde_no_cancel_b_small, limited_integrate_reduce, limited_integrate, is_deriv_k, is_log_deriv_k_t_radical, parametric_log_deriv_heu, is_log_deriv_k_t_radical_in_field, param_poly_rischDE, param_rischDE, prde_cancel_liouvillian
  from sympy.polys.polymatrix import PolyMatrix
  from sympy.core.numbers import Rational
  from sympy.core.singleton import S
  from sympy.core.symbol import symbols
  from sympy.polys.domains.rationalfield import QQ
  from sympy.polys.polytools import Poly
  from sympy.abc import x, t, n
label_desc: Use image node_id 5 for calling a global function with example usage: test_prde_spde() without return types