code: def number_observer(t=None, targets=None):
      
      from ecell4_base.core import NumberObserver, FixedIntervalNumberObserver, TimingNumberObserver
  
      if t is None:
          return NumberObserver(targets)
      elif isinstance(t, numbers.Number):
          return FixedIntervalNumberObserver(t, targets)
      elif hasattr(t, '__iter__'):
          if targets is not None:
              return TimingNumberObserver(t, targets)
          else:
              return TimingNumberObserver(t)
      else:
          raise TypeError("An invalid type was given. Either number or iterable is required.")
docs: Return a number observer. If t is None, return NumberObserver. If t is a number,
      return FixedIntervalNumberObserver. If t is an iterable (a list of numbers), return
      TimingNumberObserver.
  
      Parameters
      ----------
      t : float, list or tuple, optional. default None
          A timing of the observation. See above.
      targets : list or tuple, optional. default None
          A list of strings suggesting Species observed.
  
      Returns
      -------
      obs : NumberObserver, FixedIntervalNumberObserver or TimingNumberObserver