code: def fit(self, Xs=None, ys=None, Xt=None, yt=None):
          
  
          self.mu_s = self.distribution_estimation(Xs)
          self.mu_t = self.distribution_estimation(Xt)
  
          # coupling estimation
          returned_ = OT_mapping_linear(Xs, Xt, reg=self.reg,
                                        ws=self.mu_s.reshape((-1, 1)),
                                        wt=self.mu_t.reshape((-1, 1)),
                                        bias=self.bias, log=self.log)
  
          # deal with the value of log
          if self.log:
              self.A_, self.B_, self.log_ = returned_
          else:
              self.A_, self.B_, = returned_
              self.log_ = dict()
  
          # re compute inverse mapping
          self.A1_ = linalg.inv(self.A_)
          self.B1_ = -self.B_.dot(self.A1_)
  
          return self
docs: Build a coupling matrix from source and target sets of samples
          (Xs, ys) and (Xt, yt)
  
          Parameters
          ----------
          Xs : array-like, shape (n_source_samples, n_features)
              The training input samples.
          ys : array-like, shape (n_source_samples,)
              The class labels
          Xt : array-like, shape (n_target_samples, n_features)
              The training input samples.
          yt : array-like, shape (n_target_samples,)
              The class labels. If some target samples are unlabeled, fill the
              yt's elements with -1.
  
              Warning: Note that, due to this convention -1 cannot be used as a
              class label
  
          Returns
          -------
          self : object
              Returns self.