docs: def ensure_row_dep_constraint(
              self, M_c, T, X_L, X_D, row1, row2, dependent=True, wrt=None,
              max_iter=100, force=False):
          """Ensures dependencey or indepdendency between rows with respect to
          columns."""
          X_L_list, X_D_list, was_multistate = su.ensure_multistate(X_L, X_D)
  
          if force:
              raise NotImplementedError
          else:
              kernel_list = ('row_partition_assignements',)
              for i, (X_L_i, X_D_i) in enumerate(zip(X_L_list, X_D_list)):
  
                  iters = 0
                  X_L_tmp = copy.deepcopy(X_L_i)
                  X_D_tmp = copy.deepcopy(X_D_i)
  
                  while not self.assert_row(
                          X_L_tmp, X_D_tmp, row1, row2,
                          dependent=dependent, wrt=wrt):
                      if iters >= max_iter:
                          raise RuntimeError(
                              'Maximum ensure iterations reached.')
                      # XXX No seed?
                      res = self.analyze(
                          M_c, T, X_L_i, X_D_i, kernel_list=kernel_list,
                          n_steps=1, r=(row1,))
                      X_L_tmp = res[0]
                      X_D_tmp = res[1]
                      iters += 1
  
                  X_L_list[i] = X_L_tmp
                  X_D_list[i] = X_D_tmp
  
          if was_multistate:
              return X_L_list, X_D_list
          else:
              return X_L_list[0], X_D_list[0]