docs: def _add_constraints(self, relation):
          """Add the given relation as one or more constraints
  
          Return a list of the names of the constraints added.
          """
          expression = relation.expression
          pairs = []
          for value_set in expression.value_sets():
              ind, val = zip(*((self._variables[variable], float(value))
                               for variable, value in value_set))
              pairs.append(cp.SparsePair(ind=ind, val=val))
  
          names = [next(self._constr_names) for _ in pairs]
  
          sense = self.CONSTR_SENSE_MAP[relation.sense]
          self._cp.linear_constraints.add(
              names=names, lin_expr=pairs,
              senses=tuple(repeat(sense, len(pairs))),
              rhs=tuple(repeat(float(-expression.offset), len(pairs))))
  
          return names