docs: def perceive(self, s_, context=None):
          """ Learning (see the `Explauto introduction <about.html>`__ for more detail):
  
          * update the sensorimotor model with (m, s)
          * update the interest model with (x, y, m, s)
            (x, y are stored in self.ms in :meth:`~explauto.agent.agent.Agent.production`)
          """
          s = self.sensory_primitive(s_)
          self.emit('perception', s)
          if context is None:                
              self.sensorimotor_model.update(self.m, s)
              self.interest_model.update(np.hstack((self.m, self.s)), np.hstack((self.m, s)))
          else:       
              if self.context_mode["mode"] == 'mdmsds':  
                  m = self.m[:len(self.m)//2]
                  dm = self.m[len(self.m)//2:]
                  ds = s[len(s)//2:]
                  s = s[:len(s)//2]
                  ds_g = self.s[:len(self.s)//2]
                  self.sensorimotor_model.update(np.hstack((m, dm)), np.hstack((s, ds)))
                  self.interest_model.update(np.hstack((m, dm, context, ds_g)), np.hstack((m, dm, s, ds)))
              elif self.context_mode["mode"] == 'mcs':
                  s = s[len(context):]
                  s_g = self.s[len(context):]
                  self.sensorimotor_model.update(self.m, np.hstack((context, s)))
                  self.interest_model.update(np.hstack((self.m, context, s_g)), np.hstack((self.m, context, s)))
                  
          self.t += 1