code: def test_param_poly_rischDE():
      DE = DifferentialExtension(extension={"D": [Poly(1, x)]})
      a = Poly(x**2 - x, x, field=True)
      b = Poly(1, x, field=True)
      q = [Poly(x, x, field=True), Poly(x**2, x, field=True)]
      h, A = param_poly_rischDE(a, b, q, 3, DE)
  
      assert A.nullspace() == [
          Matrix([0, 1, 1, 1], DE.t)
      ]  # c1, c2, d1, d2
      # Solution of a*Dp + b*p = c1*q1 + c2*q2 = q2 = x**2
      # is d1*h1 + d2*h2 = h1 + h2 = x.
      assert h[0] + h[1] == Poly(x, x, domain="QQ")
      # a*Dp + b*p = q1 = x has no solution.
  
      a = Poly(x**2 - x, x, field=True)
      b = Poly(x**2 - 5 * x + 3, x, field=True)
      q = [
          Poly(1, x, field=True),
          Poly(x, x, field=True),
          Poly(x**2, x, field=True),
      ]
      h, A = param_poly_rischDE(a, b, q, 3, DE)
  
      assert A.nullspace() == [Matrix([3, -5, 1, -5, 1, 1], DE.t)]
      p = -Poly(5, DE.t) * h[0] + h[1] + h[2]  # Poly(1, x)
      assert a * derivation(p, DE) + b * p == Poly(
          x**2 - 5 * x + 3, x, domain="QQ"
      )
  
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 8 for calling a global function with example usage: test_param_poly_rischDE() without return types