class_docstr: Scenes hold Assets and are the main interface used by Views (such as Renderers).
  
  Each scene has global properties:
    * frame_start
    * frame_end
    * frame_rate
    * step_rate
    * resolution  (width, height)
    * gravity
    * camera
    * global_illumination
    * background
  
  The scene also links to views such as the simulator or the renderer.
  Whenever an Asset is added via `scene.add(asset)` it is also added to all
  linked views.
class_docstr_tok: ["Scenes","hold","Assets","and","are","the","main","interface","used","by","Views","(","such","as","Renderers",")",".","Each","scene","has","global","properties",":","*","frame_start","*","frame_end","*","frame_rate","*","step_rate","*","resolution","(","width",",","height",")","*","gravity","*","camera","*","global_illumination","*","background","The","scene","also","links","to","views","such","as","the","simulator","or","the","renderer",".","Whenever","an","Asset","is","added","via","`","scene.add","(","asset",")","`","it","is","also","added","to","all","linked","views","."]
code: def _valid_step_rate(self, proposal):
      proposed_step_rate = proposal["value"]
      if proposed_step_rate <= 0:
          raise tl.TraitError(
              f"step_rate should be > 0, but was {proposed_step_rate}"
          )
      if proposed_step_rate % self.frame_rate != 0:
          raise tl.TraitError(
              f"step_rate should be a multiple of frame_rate, \
          but {proposed_step_rate} % {self.frame_rate} != 0"
          )
      return proposed_step_rate
  
imports: from typing import Tuple, Union, List
  import traitlets
  import kubric
  from kubric.utils import next_global_count
  from kubric.core import color
  from kubric.core import traits
  from kubric.core.assets import Asset
  from kubric.core.assets import UndefinedAsset
  from kubric.core.cameras import Camera
  from kubric.core.cameras import UndefinedCamera
  from kubric.core.objects import Object3D
label_desc: Use image node_id 3 for calling the Scene obj's underlying member method code with example usage: obj._valid_step_rate(proposal) and returns: proposed_step_rate