code: def __get_all_groups_and_commands(component, context):
      groups = []
      commands = {}
      # skip modules
      if inspect.ismodule(component):
          return groups, commands
      component_trace_result = PatchFire.__safe_Fire(
          component, [], PatchFire.__default_args, context
      )
      group_args = [[]]
      while len(group_args) > 0:
          query_group = group_args[-1]
          groups.append(PatchFire._commands_sep.join(query_group))
          group_args = group_args[:-1]
          (
              current_groups,
              current_commands,
          ) = PatchFire.__get_groups_and_commands_for_args(
              component_trace_result,
              query_group,
              PatchFire.__default_args,
              context,
          )
          for command in current_commands:
              prefix = (
                  PatchFire._commands_sep.join(query_group)
                  + PatchFire._commands_sep
                  if len(query_group) > 0
                  else ""
              )
              commands[prefix + command[0]] = command[1]
          for group in current_groups:
              group_args.append(query_group + [group[0]])
      return groups, commands
  
imports: import inspect
  from .frameworks import _patched_call
  from ..config import get_remote_task_id, running_remotely
  from ..utilities.dicts import cast_str_to_bool
label_desc: Use image node_id 6 for calling the PatchFire obj's underlying member method code with example usage: obj.__get_all_groups_and_commands(component, context) and returns: groups,  commands, groups,  commands