code: def match(self, subject: Union[Expression, FlatTerm]) -> Iterator[Tuple[T, Substitution]]:
          
          for index in self._match(subject):
              pattern, label = self._patterns[index]
              subst = Substitution()
              if subst.extract_substitution(subject, pattern.expression):
                  for constraint in pattern.constraints:
                      if not constraint(subst):
                          break
                  else:
                      yield label, subst
docs: Match the given subject against all patterns in the net.
  
          Args:
              subject:
                  The subject that is matched. Must be constant.
  
          Yields:
              A tuple :code:`(final label, substitution)`, where the first component is the final label associated with
              the pattern as given when using :meth:`add()` and the second one is the match substitution.