code: def _rotate_on_ellipse(state_parts, vectors, angle):
      new_state_parts = []
      for state, vector in zip(state_parts, vectors):
          padded_angle = _right_pad_with_ones(angle, ps.rank(state))
          new_state_parts.append(
              state * tf.cos(padded_angle)
              + vector * tf.sin(padded_angle)
          )
      return new_state_parts
  
imports: import collections
  import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import samplers
  from tensorflow_probability.python.mcmc import kernel
  from tensorflow_probability.python.mcmc.internal import util
label_desc: Use image node_id 1 for calling a global function with example usage: _rotate_on_ellipse(state_parts, vectors, angle) and returns: new_state_parts