class_docstr: Generator of the LaserBeam objects for the LaserBeamAttack purpose
class_docstr_tok: ["Generator","of","the","LaserBeam","objects","for","the","LaserBeamAttack","purpose"]
docstr: Updates parameters of the received LaserBeam object in the random direction.
  
  :param params: LaserBeam object to be updated.
  :returns: Updated object.
docstr_tok: ["Updates","parameters","of","the","received","LaserBeam","object","in","the","random","direction",".",":","param","params",":","LaserBeam","object","to","be","updated",".",":","returns",":","Updated","object","."]
code: def update_params(self, params: Any, **kwargs) -> LaserBeam:
      """
      Updates parameters of the received LaserBeam object in the random direction.
  
      :param params: LaserBeam object to be updated.
      :returns: Updated object.
      """
      sign = kwargs.get("sign", 1)
      random_step = np.random.uniform(0, self.max_step)
      d_params = (
          self.__params_ranges * random_step * self._random_direction()
      )
      theta_prim = LaserBeam.from_numpy(
          params.to_numpy() + sign * d_params
      )
      theta_prim = self.clip(theta_prim)
      return theta_prim
  
imports: import logging
  from typing import Callable, List, Optional, Tuple, Union, Any
  import numpy
  from art.attacks.attack import EvasionAttack
  from art.attacks.evasion.laser_attack.algorithms import greedy_search
  from art.attacks.evasion.laser_attack.utils import AdversarialObject, AdvObjectGenerator, DebugInfo, ImageGenerator, Line, wavelength_to_rgb
label_desc: Use image node_id 2 for calling the LaserBeamGenerator obj's underlying member method code with example usage: obj.update_params(params) and returns: theta_prim