class_docstr: Callback for evaluating an agent.
  
  :param eval_env: (Union[gym.Env, VecEnv]) The environment used for initialization
  :param callback_on_new_best: (Optional[BaseCallback]) Callback to trigger
      when there is a new best model according to the `mean_reward`
  :param n_eval_episodes: (int) The number of episodes to test the agent
  :param eval_freq: (int) Evaluate the agent every eval_freq call of the callback.
  :param log_path: (str) Path to a folder where the evaluations (`evaluations.npz`)
      will be saved. It will be updated at each evaluation.
  :param best_model_save_path: (str) Path to a folder where the best model
      according to performance on the eval env will be saved.
  :param deterministic: (bool) Whether the evaluation should
      use a stochastic or deterministic actions.
  :param render: (bool) Whether to render or not the environment during evaluation
  :param verbose: (int)
class_docstr_tok: ["Callback","for","evaluating","an","agent",".",":","param","eval_env",":","(","Union","[","gym.Env",",","VecEnv","]",")","The","environment","used","for","initialization",":","param","callback_on_new_best",":","(","Optional","[","BaseCallback","]",")","Callback","to","trigger","when","there","is","a","new","best","model","according","to","the","`","mean_reward","`",":","param","n_eval_episodes",":","(","int",")","The","number","of","episodes","to","test","the","agent",":","param","eval_freq",":","(","int",")","Evaluate","the","agent","every","eval_freq","call","of","the","callback",".",":","param","log_path",":","(","str",")","Path","to","a","folder","where","the","evaluations","(","`","evaluations.npz","`",")","will","be","saved",".","It","will","be","updated","at","each","evaluation",".",":","param","best_model_save_path",":","(","str",")","Path","to","a","folder","where","the","best","model","according","to","performance","on","the","eval","env","will","be","saved",".",":","param","deterministic",":","(","bool",")","Whether","the","evaluation","should","use","a","stochastic","or","deterministic","actions",".",":","param","render",":","(","bool",")","Whether","to","render","or","not","the","environment","during","evaluation",":","param","verbose",":","(","int",")"]
code: def _init_callback(self):
      # Does not work in some corner cases, where the wrapper is not the same
      if not type(self.training_env) is type(self.eval_env):
          warnings.warn(
              "Training and eval env are not of the same type"
              "{} != {}".format(self.training_env, self.eval_env)
          )
  
      # Create folders if needed
      if self.best_model_save_path is not None:
          os.makedirs(self.best_model_save_path, exist_ok=True)
      if self.log_path is not None:
          os.makedirs(os.path.dirname(self.log_path), exist_ok=True)
  
imports: import os
  from abc import ABC
  import warnings
  import typing
  from typing import Union, List, Dict, Any, Optional
  import gym
  import numpy
  from stable_baselines.common.vec_env import VecEnv, sync_envs_normalization, DummyVecEnv
  from stable_baselines.common.evaluation import evaluate_policy
  from stable_baselines import logger
label_desc: Use image node_id 2 for calling the EvalCallback obj's underlying member method code with example usage: obj._init_callback() without return types