code: def log_hyperparams(self, params, *args, **kwargs):
      if isinstance(params, Namespace):
          params = vars(params)
      elif isinstance(params, AttributeDict):
          params = dict(params)
      params = apply_to_collection(
          params,
          (DictConfig, ListConfig),
          OmegaConf.to_container,
          resolve=True,
      )
      params = apply_to_collection(params, Path, str)
      params = _sanitize_callable_params(
          _flatten_dict(_convert_params(params))
      )
      dllogger.log(step="PARAMETER", data=params)
  
file_path: NeMo/nemo/utils/loggers/dllogger.py
imports: from argparse import Namespace
  from dataclasses import dataclass
  from pathlib import Path
  from typing import Optional
  from lightning_utilities.core.apply_func import apply_to_collection
  from omegaconf import DictConfig, ListConfig, OmegaConf
  from pytorch_lightning.loggers import Logger
  from pytorch_lightning.utilities import rank_zero_only
  from pytorch_lightning.utilities.parsing import AttributeDict
  from nemo.utils import logging
label_desc: Use image node_id 4 for calling the DLLogger obj's underlying member method code with example usage: obj.log_hyperparams(params) without return types