mirror of
https://github.com/QData/TextAttack.git
synced 2021-10-13 00:05:06 +03:00
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
""" Abstract classes represent constraints on text adversarial examples.
|
|
"""
|
|
|
|
|
|
class Constraint:
|
|
"""
|
|
An abstract class that represents constraints on adversial text examples.
|
|
A constraint evaluates if (x,x_adv) meets a certain constraint.
|
|
|
|
"""
|
|
|
|
def call_many(self, x, x_adv_list, original_text=None, **kwargs):
|
|
"""
|
|
Filters x_adv_list to x_adv where C(x,x_adv) is true.
|
|
|
|
Args:
|
|
x:
|
|
x_adv_list:
|
|
original_text(:obj:`type`, optional): Defaults to None.
|
|
|
|
"""
|
|
return [x_adv for x_adv in x_adv_list
|
|
if self.__call__(x, x_adv, original_text=original_text)]
|
|
|
|
def __call__(self, x, x_adv, original_text=None):
|
|
""" Returns True if C(x,x_adv) is true. """
|
|
raise NotImplementedError()
|
|
|
|
def extra_repr_keys(self):
|
|
"""Set the extra representation of the constraint using these keys.
|
|
|
|
To print customized extra information, you should reimplement
|
|
this method in your own constraint. Both single-line and multi-line
|
|
strings are acceptable.
|
|
"""
|
|
return []
|
|
|
|
def __repr__(self):
|
|
extra_params = []
|
|
for key in self.extra_repr_keys():
|
|
extra_params.append(key+'={'+key+'}')
|
|
extra_str = ', '.join(extra_params)
|
|
extra_str = extra_str.format(**self.__dict__)
|
|
return f'{self.__class__.__name__}({extra_str})'
|
|
|
|
__str__ = __repr__
|