class_docstr: An abstract class that represents constraints on adversial text
  examples. Constraints evaluate whether transformations from a
  ``AttackedText`` to another ``AttackedText`` meet certain conditions.
  
  Args:
      compare_against_original (bool): If `True`, the reference text should be the original text under attack.
          If `False`, the reference text is the most recent text from which the transformed text was generated.
          All constraints must have this attribute.
class_docstr_tok: ["An","abstract","class","that","represents","constraints","on","adversial","text","examples",".","Constraints","evaluate","whether","transformations","from","a","``","AttackedText","``","to","another","``","AttackedText","``","meet","certain","conditions",".","Args",":","compare_against_original","(","bool",")",":","If","`","True","`",",","the","reference","text","should","be","the","original","text","under","attack",".","If","`","False","`",",","the","reference","text","is","the","most","recent","text","from","which","the","transformed","text","was","generated",".","All","constraints","must","have","this","attribute","."]
docstr: Filters ``transformed_texts`` based on which transformations fulfill
  the constraint. First checks compatibility with latest
  ``Transformation``, then calls ``_check_constraint_many``
  
  Args:
      transformed_texts (list[AttackedText]): The candidate transformed ``AttackedText``'s.
      reference_text (AttackedText): The ``AttackedText`` to compare against.
docstr_tok: ["Filters","``","transformed_texts","``","based","on","which","transformations","fulfill","the","constraint",".","First","checks","compatibility","with","latest","``","Transformation","``",",","then","calls","``","_check_constraint_many","``","Args",":","transformed_texts","(","list","[","AttackedText","]",")",":","The","candidate","transformed","``","AttackedText","``","'s",".","reference_text","(","AttackedText",")",":","The","``","AttackedText","``","to","compare","against","."]
code: def call_many(self, transformed_texts, reference_text):
      """Filters ``transformed_texts`` based on which transformations fulfill
      the constraint. First checks compatibility with latest
      ``Transformation``, then calls ``_check_constraint_many``
  
      Args:
          transformed_texts (list[AttackedText]): The candidate transformed ``AttackedText``'s.
          reference_text (AttackedText): The ``AttackedText`` to compare against.
      """
      incompatible_transformed_texts = []
      compatible_transformed_texts = []
      for transformed_text in transformed_texts:
          try:
              if self.check_compatibility(
                  transformed_text.attack_attrs["last_transformation"]
              ):
                  compatible_transformed_texts.append(transformed_text)
              else:
                  incompatible_transformed_texts.append(
                      transformed_text
                  )
          except KeyError:
              raise KeyError(
                  "transformed_text must have `last_transformation` attack_attr to apply constraint"
              )
      filtered_texts = self._check_constraint_many(
          compatible_transformed_texts, reference_text
      )
      return list(filtered_texts) + incompatible_transformed_texts
  
file_path: TextAttack/textattack/constraints/constraint.py
imports: from abc import ABC, abstractmethod
  import textattack
  from textattack.shared.utils import ReprMixin
label_desc: Use image node_id 2 for calling the Constraint obj's underlying member method code with example usage: obj.call_many(transformed_texts, reference_text) and returns: unknown