code: def test_bode():
      if not numpy:
          skip("NumPy is required for this test")
  
      def bode_phase_evalf(system, point):
          expr = system.to_expr()
          _w = Dummy("w", real=True)
          w_expr = expr.subs({system.var: I * _w})
          return arg(w_expr).subs({_w: point}).evalf()
  
      def bode_mag_evalf(system, point):
          expr = system.to_expr()
          _w = Dummy("w", real=True)
          w_expr = expr.subs({system.var: I * _w})
          return 20 * log(Abs(w_expr), 10).subs({_w: point}).evalf()
  
      def test_bode_data(sys):
          return y_coordinate_equality(
              bode_magnitude_numerical_data, bode_mag_evalf, sys
          ) and y_coordinate_equality(
              bode_phase_numerical_data, bode_phase_evalf, sys
          )
  
      assert test_bode_data(tf1)
      assert test_bode_data(tf2)
      assert test_bode_data(tf3)
      assert test_bode_data(tf4)
      assert test_bode_data(tf5)
  
imports: from math import isclose
  from sympy.core.numbers import I
  from sympy.core.symbol import Dummy
  from sympy.functions.elementary.complexes import Abs, arg
  from sympy.functions.elementary.exponential import log
  from sympy.abc import s, p, a
  from sympy.external import import_module
  from sympy.physics.control.control_plots import pole_zero_numerical_data, pole_zero_plot, step_response_numerical_data, step_response_plot, impulse_response_numerical_data, impulse_response_plot, ramp_response_numerical_data, ramp_response_plot, bode_magnitude_numerical_data, bode_phase_numerical_data, bode_plot
  from sympy.physics.control.lti import TransferFunction, Series, Parallel, TransferFunctionMatrix
  from sympy.testing.pytest import raises, skip
label_desc: Use image node_id 6 for calling a global function with example usage: test_bode() and returns: arg, unknown, unknown