code: def props(obj, required, **kwargs):
      
      # Get the attributes of the template object
      pr = get_obj_attrs(obj)
  
      # Get the parameters to generate the waveform
      # Note that keyword arguments override values in the template object
      input_params = default_qnm_args.copy()
      input_params.update(pr)
      input_params.update(kwargs)
  
      # Check if the required arguments are given
      for arg in required:
          if arg not in input_params:
              raise ValueError('Please provide ' + str(arg))
  
      return input_params
docs: Return a dictionary built from the combination of defaults, kwargs,
      and the attributes of the given object.