text: import os
  import numpy as np
  
  class SystemConfig(object):
      def __init__(self):
          self._configs = {}
          self._configs["dataset"] = None
          self._configs["sampling_function"] = "coco_detection"
  
          # Training Config
          self._configs["display"]           = 5
          self._configs["snapshot"]          = 400
          self._configs["stepsize"]          = 5000
          self._configs["learning_rate"]     = 0.001
          self._configs["decay_rate"]        = 10
          self._configs["max_iter"]          = 100000
          self._configs["val_iter"]          = 20
          self._configs["batch_size"]        = 1
          self._configs["snapshot_name"]     = None
          self._configs["prefetch_size"]     = 100
          self._configs["pretrain"]          = None
          self._configs["opt_algo"]          = "adam"
          self._configs["chunk_sizes"]       = None
  
          # Directories
          self._configs["data_dir"]   = "./data"
          self._configs["cache_dir"]  = "./cache"
          self._configs["config_dir"] = "./config"
          self._configs["result_dir"] = "./results"
  
          # Split
          self._configs["train_split"] = "training"
          self._configs["val_split"]   = "validation"
          self._configs["test_split"]  = "testdagm"
  
          # Rng
          self._configs["data_rng"] = np.random.RandomState(123)
          self._configs["nnet_rng"] = np.random.RandomState(317)
  
      @property
      def chunk_sizes(self):
          return self._configs["chunk_sizes"]
  
      @property
      def train_split(self):
          return self._configs["train_split"]
  
      @property
      def val_split(self):
          return self._configs["val_split"]
  
      @property
      def test_split(self):
          return self._configs["test_split"]
  
      @property
      def full(self):
          return self._configs
  
      @property
      def sampling_function(self):
          return self._configs["sampling_function"]
  
      @property
      def data_rng(self):
          return self._configs["data_rng"]
  
      @property
      def nnet_rng(self):
          return self._configs["nnet_rng"]
  
      @property
      def opt_algo(self):
          return self._configs["opt_algo"]
  
      @property
      def prefetch_size(self):
          return self._configs["prefetch_size"]
  
      @property
      def pretrain(self):
          return self._configs["pretrain"]
  
      @property
      def result_dir(self):
          result_dir = os.path.join(self._configs["result_dir"], self.snapshot_name)
          if not os.path.exists(result_dir):
              os.makedirs(result_dir)
          return result_dir
  
      @property
      def dataset(self):
          return self._configs["dataset"]
  
      @property
      def snapshot_name(self):
          return self._configs["snapshot_name"]
  
      @property
      def snapshot_dir(self):
          snapshot_dir = os.path.join(self.cache_dir, "nnet", self.snapshot_name)
  
          if not os.path.exists(snapshot_dir):
              os.makedirs(snapshot_dir)
          return snapshot_dir
  
      @property
      def snapshot_file(self):
          snapshot_file = os.path.join(self.snapshot_dir, self.snapshot_name + "_{}.pkl")
          return snapshot_file
  
      @property
      def config_dir(self):
          return self._configs["config_dir"]
  
      @property
      def batch_size(self):
          return self._configs["batch_size"]
  
      @property
      def max_iter(self):
          return self._configs["max_iter"]
  
      @property
      def learning_rate(self):
          return self._configs["learning_rate"]
  
      @property
      def decay_rate(self):
          return self._configs["decay_rate"]
  
      @property
      def stepsize(self):
          return self._configs["stepsize"]
  
      @property
      def snapshot(self):
          return self._configs["snapshot"]
  
      @property
      def display(self):
          return self._configs["display"]
  
      @property
      def val_iter(self):
          return self._configs["val_iter"]
  
      @property
      def data_dir(self):
          return self._configs["data_dir"]
  
      @property
      def cache_dir(self):
          if not os.path.exists(self._configs["cache_dir"]):
              os.makedirs(self._configs["cache_dir"])
          return self._configs["cache_dir"]
  
      def update_config(self, new):
          for key in new:
              if key in self._configs:
                  self._configs[key] = new[key]
          return self
  