code: def guess_param_types(**kwargs):
      
      params = {}
      for k, v in kwargs.items():
          kws = dict(default=v, constant=True)
          if isinstance(v, Parameter):
              params[k] = v
          elif isinstance(v, dt_types):
              params[k] = Date(**kws)
          elif isinstance(v, bool):
              params[k] = Boolean(**kws)
          elif isinstance(v, int):
              params[k] = Integer(**kws)
          elif isinstance(v, float):
              params[k] = Number(**kws)
          elif isinstance(v, str):
              params[k] = String(**kws)
          elif isinstance(v, dict):
              params[k] = Dict(**kws)
          elif isinstance(v, tuple):
              if all(_is_number(el) for el in v):
                  params[k] = NumericTuple(**kws)
              elif all(isinstance(el. dt_types) for el in v) and len(v)==2:
                  params[k] = DateRange(**kws)
              else:
                  params[k] = Tuple(**kws)
          elif isinstance(v, list):
              params[k] = List(**kws)
          elif isinstance(v, np.ndarray):
              params[k] = Array(**kws)
          else:
              from pandas import DataFrame as pdDFrame
              from pandas import Series as pdSeries
  
              if isinstance(v, pdDFrame):
                  params[k] = DataFrame(**kws)
              elif isinstance(v, pdSeries):
                  params[k] = Series(**kws)
              else:
                  params[k] = Parameter(**kws)
  
      return params
docs: Given a set of keyword literals, promote to the appropriate
      parameter type based on some simple heuristics.