code: def test_necessary_conds():
      """
      This function tests the necessary conditions for
      a Riccati ODE to have a rational particular solution.
      """
      # Valuation at Infinity is an odd negative integer
      assert check_necessary_conds(-3, [1, 2, 4]) == False
      # Valuation at Infinity is a positive integer lesser than 2
      assert check_necessary_conds(1, [1, 2, 4]) == False
      # Multiplicity of a pole is an odd integer greater than 1
      assert check_necessary_conds(2, [3, 1, 6]) == False
      # All values are correct
      assert check_necessary_conds(-10, [1, 2, 8, 12]) == True
  
imports: from sympy.core.random import randint
  from sympy.core.function import Function
  from sympy.core.mul import Mul
  from sympy.core.numbers import I, Rational, oo
  from sympy.core.relational import Eq
  from sympy.core.singleton import S
  from sympy.core.symbol import Dummy, symbols
  from sympy.functions.elementary.exponential import exp, log
  from sympy.functions.elementary.hyperbolic import tanh
  from sympy.functions.elementary.miscellaneous import sqrt
  from sympy.functions.elementary.trigonometric import sin
  from sympy.polys.polytools import Poly
  from sympy.simplify.ratsimp import ratsimp
  from sympy.solvers.ode.subscheck import checkodesol
  from sympy.testing.pytest import slow
  from sympy.solvers.ode.riccati import riccati_normal, riccati_inverse_normal, riccati_reduced, match_riccati, inverse_transform_poly, limit_at_inf, check_necessary_conds, val_at_inf, construct_c_case_1, construct_c_case_2, construct_c_case_3, construct_d_case_4, construct_d_case_5, construct_d_case_6, rational_laurent_series, solve_riccati
label_desc: Use image node_id 9 for calling a global function with example usage: test_necessary_conds() without return types