code: def test_arg_override(ray_start_4_cpus):
      def check_override(self):
          assert self.scaling_config.num_workers == 1
          # Should do deep update.
          assert not self.custom_arg["outer"]["inner"]
          assert self.custom_arg["outer"]["fixed"] == 1
  
          pg = get_current_placement_group()
          assert len(pg.bundle_specs) == 2  # 1 trainer, 1 worker
  
      scale_config = ScalingConfig(num_workers=4)
      trainer = DummyTrainer(
          check_override,
          custom_arg={"outer": {"inner": True, "fixed": 1}},
          scaling_config=scale_config,
      )
  
      new_config = {
          "custom_arg": {"outer": {"inner": False}},
          "scaling_config": ScalingConfig(num_workers=1),
      }
  
      tune.run(trainer.as_trainable(), config=new_config)
  
imports: import logging
  import tempfile
  import pytest
  import ray
  from ray import train, tune
  from ray.air.constants import MAX_REPR_LENGTH
  from ray.data.context import DataContext
  from ray.train import Checkpoint, ScalingConfig
  from ray.train.gbdt_trainer import GBDTTrainer
  from ray.train.trainer import BaseTrainer
  from ray.util.placement_group import get_current_placement_group
label_desc: Use image node_id 4 for calling a global function with example usage: test_arg_override(ray_start_4_cpus) without return types