code: def parse_cli_string(self, cli_words: str):
      cli_words = cli_words.replace("lightly-magic ", "")
      cli_words = re.split("=| ", cli_words)
      assert len(cli_words) % 2 == 0
      dict_keys = cli_words[0::2]
      dict_values = cli_words[1::2]
      for key, value in zip(dict_keys, dict_values):
          value = value.strip('"')
          value = value.strip("'")
          try:
              value = int(value)
          except ValueError:
              pass
  
          key_subparts = key.split(".")
          if len(key_subparts) == 1:
              self.cfg[key] = value
          elif len(key_subparts) == 2:
              self.cfg[key_subparts[0]][key_subparts[1]] = value
          else:
              raise ValueError(
                  f"Keys with more than 2 subparts are not supported,"
                  f"but you entered {key}."
              )
  
file_path: lightly/tests/cli/test_cli_magic.py
imports: import os
  import re
  import sys
  import tempfile
  import torchvision
  from hydra.experimental import compose, initialize
  from lightly import cli
  from tests.api_workflow.mocked_api_workflow_client import N_FILES_ON_SERVER, MockedApiWorkflowClient, MockedApiWorkflowSetup
label_desc: Use image node_id 3 for calling the TestCLIMagic obj's underlying member method code with example usage: obj.parse_cli_string(cli_words) without return types