code: def init_env_with_observation_normalization(
      env_factory: Callable[[], StructuredEnv],
      normalization_config: Dict,
  ) -> ObservationNormalizationWrapper:
      """Instantiates new environment with normalized observations according to provided config.
  
      :param env_factory: A factory instantiating a structured environment.
      :param normalization_config: Observation normalization wrapper arguments (config) dictionary.
      :return: Observation normalization wrapped environment.
      """
  
      # initialize the env
      wrapped_env = ObservationNormalizationWrapper.wrap(
          env_factory(), **normalization_config
      )
  
      # estimate normalization statistics
      wrapped_env = estimate_normalization_statistics(wrapped_env)
  
      return wrapped_env
  
file_path: maze/maze/test/shared_test_utils/observation_normalization.py
imports: from functools import partial
  from typing import Dict, Callable, Iterable
  import gym
  import numpy
  from maze.core.env.maze_env import CoreEnvType
  from maze.core.env.structured_env import StructuredEnv
  from maze.core.utils.factory import ConfigType
  from maze.core.wrappers.observation_normalization.observation_normalization_wrapper import ObservationNormalizationWrapper
label_desc: Use image node_id 4 for calling a global function with example usage: init_env_with_observation_normalization(env_factory, normalization_config) and returns: wrapped_env