code: def __init__(self, *args):
      if len(args) == 1:
          if isinstance(args[0], PlotInterval):
              self.fill_from(args[0])
              return
          elif isinstance(args[0], str):
              try:
                  args = eval(args[0])
              except TypeError:
                  s_eval_error = "Could not interpret string %s."
                  raise ValueError(s_eval_error % (args[0]))
          elif isinstance(args[0], (tuple, list)):
              args = args[0]
          else:
              raise ValueError("Not an interval.")
      if not isinstance(args, (tuple, list)) or len(args) > 4:
          f_error = "PlotInterval must be a tuple or list of length 4 or less."
          raise ValueError(f_error)
  
      args = list(args)
      if len(args) > 0 and (
          args[0] is None or isinstance(args[0], Symbol)
      ):
          self.v = args.pop(0)
      if len(args) in [2, 3]:
          self.v_min = args.pop(0)
          self.v_max = args.pop(0)
          if len(args) == 1:
              self.v_steps = args.pop(0)
      elif len(args) == 1:
          self.v_steps = args.pop(0)
  
imports: from sympy.core.singleton import S
  from sympy.core.symbol import Symbol
  from sympy.core.sympify import sympify
  from sympy.core.numbers import Integer
label_desc: Use image node_id 2 to create a new PlotInterval object  with example: obj = PlotInterval()