code: def add_constraint(self, con):
          
          if isinstance(con, LinearConstraint):
              N, M = con.A.shape
              if con.name in [c.name for c in self.lin_constraints]:
                  logger.error("Constraint set named '%s' already exists."
                               % con.name)
                  return False
              else:
                  con.i1 = self.lin_N# + 1
                  con.iN = self.lin_N + N - 1
  
                  nv = 0
                  for vs in con.vs:
                      nv = nv + self.get_var_N(vs)
                  if M != nv:
                      logger.error("Number of columns of A does not match number"
                          " of variables, A is %d x %d, nv = %d", N, M, nv)
                  self.lin_constraints.append(con)
          elif isinstance(con, NonLinearConstraint):
              N = con.N
              if con.name in [c.name for c in self.nln_constraints]:
                  logger.error("Constraint set named '%s' already exists."
                               % con.name)
                  return False
              else:
                  con.i1 = self.nln_N# + 1
                  con.iN = self.nln_N + N
                  self.nln_constraints.append(con)
          else:
              raise ValueError
  
          return True
docs: Adds a constraint to the model.