code: def reset(self, config=None, train_mode=True, custom_reset_parameters=None) -> AllBrainInfo:
          
          if config is None:
              config = self._resetParameters
          elif config:
              logger.info("Academy reset with parameters: {0}"
                          .format(', '.join([str(x) + ' -> ' + str(config[x]) for x in config])))
          for k in config:
              if (k in self._resetParameters) and (isinstance(config[k], (int, float))):
                  self._resetParameters[k] = config[k]
              elif not isinstance(config[k], (int, float)):
                  raise UnityEnvironmentException(
                      "The value for parameter '{0}'' must be an Integer or a Float.".format(k))
              else:
                  raise UnityEnvironmentException(
                      "The parameter '{0}' is not a valid parameter.".format(k))
  
          if self._loaded:
              outputs = self.communicator.exchange(
                  self._generate_reset_input(train_mode, config, custom_reset_parameters)
              )
              if outputs is None:
                  raise KeyboardInterrupt
              rl_output = outputs.rl_output
              s = self._get_state(rl_output)
              self._global_done = s[1]
              for _b in self._external_brain_names:
                  self._n_agents[_b] = len(s[0][_b].agents)
              return s[0]
          else:
              raise UnityEnvironmentException("No Unity environment is loaded.")
docs: Sends a signal to reset the unity environment.
          :return: AllBrainInfo  : A data structure corresponding to the initial reset state of the environment.