parameters: (freq)
return_statement: return delta
docstring: Return DateOffset object from string or tuple representation
      or datetime.timedelta object.
  
      Parameters
      ----------
      freq : str, tuple, datetime.timedelta, DateOffset or None
  
      Returns
      -------
      DateOffset
          None if freq is None.
  
      Raises
      ------
      ValueError
          If freq is an invalid frequency
  
      See Also
      --------
      DateOffset
  
      Examples
      --------
      >>> to_offset('5min')
      <5 * Minutes>
  
      >>> to_offset('1D1H')
      <25 * Hours>
  
      >>> to_offset(('W', 2))
      <2 * Weeks: weekday=6>
  
      >>> to_offset((2, 'B'))
      <2 * BusinessDays>
  
      >>> to_offset(datetime.timedelta(days=1))
      <Day>
  
      >>> to_offset(Hour())
      <Hour>
docstring_summary: Return DateOffset object from string or tuple representation
      or datetime.timedelta object.
docstring_tokens: Return DateOffset object from string or tuple representation or datetime . timedelta object .
function: def to_offset(freq) -> Optional[DateOffset]:
      """
      Return DateOffset object from string or tuple representation
      or datetime.timedelta object.
  
      Parameters
      ----------
      freq : str, tuple, datetime.timedelta, DateOffset or None
  
      Returns
      -------
      DateOffset
          None if freq is None.
  
      Raises
      ------
      ValueError
          If freq is an invalid frequency
  
      See Also
      --------
      DateOffset
  
      Examples
      --------
      >>> to_offset('5min')
      <5 * Minutes>
  
      >>> to_offset('1D1H')
      <25 * Hours>
  
      >>> to_offset(('W', 2))
      <2 * Weeks: weekday=6>
  
      >>> to_offset((2, 'B'))
      <2 * BusinessDays>
  
      >>> to_offset(datetime.timedelta(days=1))
      <Day>
  
      >>> to_offset(Hour())
      <Hour>
      """
      if freq is None:
          return None
  
      if isinstance(freq, DateOffset):
          return freq
  
      if isinstance(freq, tuple):
          name = freq[0]
          stride = freq[1]
          if isinstance(stride, str):
              name, stride = stride, name
          name, _ = libfreqs._base_and_stride(name)
          delta = _get_offset(name) * stride
  
      elif isinstance(freq, timedelta):
          delta = None
          freq = Timedelta(freq)
          try:
              for name in freq.components._fields:
                  offset = _name_to_offset_map[name]
                  stride = getattr(freq.components, name)
                  if stride != 0:
                      offset = stride * offset
                      if delta is None:
                          delta = offset
                      else:
                          delta = delta + offset
          except ValueError:
              raise ValueError(libfreqs.INVALID_FREQ_ERR_MSG.format(freq))
  
      else:
          delta = None
          stride_sign = None
          try:
              splitted = re.split(libfreqs.opattern, freq)
              if splitted[-1] != "" and not splitted[-1].isspace():
                  # the last element must be blank
                  raise ValueError("last element must be blank")
              for sep, stride, name in zip(
                  splitted[0::4], splitted[1::4], splitted[2::4]
              ):
                  if sep != "" and not sep.isspace():
                      raise ValueError("separator must be spaces")
                  prefix = libfreqs._lite_rule_alias.get(name) or name
                  if stride_sign is None:
                      stride_sign = -1 if stride.startswith("-") else 1
                  if not stride:
                      stride = 1
                  if prefix in Resolution._reso_str_bump_map.keys():
                      stride, name = Resolution.get_stride_from_decimal(
                          float(stride), prefix
                      )
                  stride = int(stride)
                  offset = _get_offset(name)
                  offset = offset * int(np.fabs(stride) * stride_sign)
                  if delta is None:
                      delta = offset
                  else:
                      delta = delta + offset
          except (ValueError, TypeError):
              raise ValueError(libfreqs.INVALID_FREQ_ERR_MSG.format(freq))
  
      if delta is None:
          raise ValueError(libfreqs.INVALID_FREQ_ERR_MSG.format(freq))
  
      return delta
function_tokens: def to_offset ( freq ) -> Optional [ DateOffset ] : if freq is None : return None if isinstance ( freq , DateOffset ) : return freq if isinstance ( freq , tuple ) : name = freq [ 0 ] stride = freq [ 1 ] if isinstance ( stride , str ) : name , stride = stride , name name , _ = libfreqs . _base_and_stride ( name ) delta = _get_offset ( name ) * stride elif isinstance ( freq , timedelta ) : delta = None freq = Timedelta ( freq ) try : for name in freq . components . _fields : offset = _name_to_offset_map [ name ] stride = getattr ( freq . components , name ) if stride != 0 : offset = stride * offset if delta is None : delta = offset else : delta = delta + offset except ValueError : raise ValueError ( libfreqs . INVALID_FREQ_ERR_MSG . format ( freq ) ) else : delta = None stride_sign = None try : splitted = re . split ( libfreqs . opattern , freq ) if splitted [ - 1 ] != "" and not splitted [ - 1 ] . isspace ( ) : # the last element must be blank raise ValueError ( "last element must be blank" ) for sep , stride , name in zip ( splitted [ 0 : : 4 ] , splitted [ 1 : : 4 ] , splitted [ 2 : : 4 ] ) : if sep != "" and not sep . isspace ( ) : raise ValueError ( "separator must be spaces" ) prefix = libfreqs . _lite_rule_alias . get ( name ) or name if stride_sign is None : stride_sign = - 1 if stride . startswith ( "-" ) else 1 if not stride : stride = 1 if prefix in Resolution . _reso_str_bump_map . keys ( ) : stride , name = Resolution . get_stride_from_decimal ( float ( stride ) , prefix ) stride = int ( stride ) offset = _get_offset ( name ) offset = offset * int ( np . fabs ( stride ) * stride_sign ) if delta is None : delta = offset else : delta = delta + offset except ( ValueError , TypeError ) : raise ValueError ( libfreqs . INVALID_FREQ_ERR_MSG . format ( freq ) ) if delta is None : raise ValueError ( libfreqs . INVALID_FREQ_ERR_MSG . format ( freq ) ) return delta