code: def _apply_givens_rotation(cosa, sina, axis_i, axis_j, input_x):
      """Applies a Givens rotation on tensor `x`.
  
      Reference on Givens rotations:
      https://en.wikipedia.org/wiki/Givens_rotation
  
      Args:
        cosa: the cosine of the angle.
        sina: the sine of the angle.
        axis_i: the first axis of rotation.
        axis_j: the second axis of rotation.
        input_x: the input tensor.
  
      Returns:
        The rotated tensor (same shape as `x`).
      """
      output = _update_row(
          input_x,
          cosa * input_x[axis_i, :] - sina * input_x[axis_j, :],
          axis_i,
      )
      output = _update_row(
          output,
          sina * input_x[axis_i, :] + cosa * input_x[axis_j, :],
          axis_j,
      )
      return output
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import gin
  import tensorflow
  from tf_agents.bandits.environments import non_stationary_stochastic_environment
  from tf_agents.specs import tensor_spec
  from tf_agents.typing import types
label_desc: Use image node_id 3 for calling a global function with example usage: _apply_givens_rotation(cosa, sina, axis_i, axis_j, input_x) and returns: output