code: def as_dict(self, quiet: bool = False, infer_type_and_cast: bool = False):
          
          if infer_type_and_cast:
              params_as_dict = infer_and_cast(self.params)
          else:
              params_as_dict = self.params
  
          if quiet:
              return params_as_dict
  
          def log_recursively(parameters, history):
              for key, value in parameters.items():
                  if isinstance(value, dict):
                      new_local_history = history + key  + "."
                      log_recursively(value, new_local_history)
                  else:
                      logger.info(history + key + " = " + str(value))
  
          logger.info("Converting Params object to dict; logging of default "
                      "values will not occur when dictionary parameters are "
                      "used subsequently.")
          logger.info("CURRENTLY DEFINED PARAMETERS: ")
          log_recursively(self.params, self.history)
          return params_as_dict
docs: Sometimes we need to just represent the parameters as a dict, for instance when we pass
          them to PyTorch code.
  
          Parameters
          ----------
          quiet: bool, optional (default = False)
              Whether to log the parameters before returning them as a dict.
          infer_type_and_cast : bool, optional (default = False)
              If True, we infer types and cast (e.g. things that look like floats to floats).