docs: def from_classes(cls,
                   im_model_cls, im_model_config, expl_dims,
                   sm_model_cls, sm_model_config, inf_dims,
                   m_mins, m_maxs, s_mins, s_maxs, n_bootstrap=0, context_mode=None):
          """Initialize agent class
  
          :param class im_model_cls: a subclass of InterestedModel, as those registered in the interest_model package
  
          :param dict im_model_config: a configuration dict as those registered in the interest_model package
  
          :param list expl_dims: the sensorimotor dimensions where exploration is driven in the interest model
  
          :param list inf_dims: the output sensorimotor dimensions of the sensorimotor model (input being expl_dims)
  
          :param class sm_model_cls: a subclass of SensorimotorModel, as those registered in the sensorimotor_model package
  
          :param dict sensorimotor_model_config: a configuration dict as those registered in the sensorimotor_model package
  
          :param list m_mins, m_maxs, s_mins, s_max: lower and upper bounds of motor and sensory values on each dimension
  
          """
  
          conf = make_configuration(m_mins, m_maxs, s_mins, s_maxs)
  
          sm_model = sm_model_cls(conf, **sm_model_config)
          im_model = im_model_cls(conf, expl_dims,
                                             **im_model_config)
  
          return cls(conf, sm_model, im_model, n_bootstrap, context_mode)