17db96d56Sopenharmony_ci""" 27db96d56Sopenharmony_ciOperator Interface 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ciThis module exports a set of functions corresponding to the intrinsic 57db96d56Sopenharmony_cioperators of Python. For example, operator.add(x, y) is equivalent 67db96d56Sopenharmony_cito the expression x+y. The function names are those used for special 77db96d56Sopenharmony_cimethods; variants without leading and trailing '__' are also provided 87db96d56Sopenharmony_cifor convenience. 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciThis is the pure Python implementation of the module. 117db96d56Sopenharmony_ci""" 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci__all__ = ['abs', 'add', 'and_', 'attrgetter', 'call', 'concat', 'contains', 'countOf', 147db96d56Sopenharmony_ci 'delitem', 'eq', 'floordiv', 'ge', 'getitem', 'gt', 'iadd', 'iand', 157db96d56Sopenharmony_ci 'iconcat', 'ifloordiv', 'ilshift', 'imatmul', 'imod', 'imul', 167db96d56Sopenharmony_ci 'index', 'indexOf', 'inv', 'invert', 'ior', 'ipow', 'irshift', 177db96d56Sopenharmony_ci 'is_', 'is_not', 'isub', 'itemgetter', 'itruediv', 'ixor', 'le', 187db96d56Sopenharmony_ci 'length_hint', 'lshift', 'lt', 'matmul', 'methodcaller', 'mod', 197db96d56Sopenharmony_ci 'mul', 'ne', 'neg', 'not_', 'or_', 'pos', 'pow', 'rshift', 207db96d56Sopenharmony_ci 'setitem', 'sub', 'truediv', 'truth', 'xor'] 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_cifrom builtins import abs as _abs 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci# Comparison Operations *******************************************************# 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_cidef lt(a, b): 287db96d56Sopenharmony_ci "Same as a < b." 297db96d56Sopenharmony_ci return a < b 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_cidef le(a, b): 327db96d56Sopenharmony_ci "Same as a <= b." 337db96d56Sopenharmony_ci return a <= b 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_cidef eq(a, b): 367db96d56Sopenharmony_ci "Same as a == b." 377db96d56Sopenharmony_ci return a == b 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_cidef ne(a, b): 407db96d56Sopenharmony_ci "Same as a != b." 417db96d56Sopenharmony_ci return a != b 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_cidef ge(a, b): 447db96d56Sopenharmony_ci "Same as a >= b." 457db96d56Sopenharmony_ci return a >= b 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_cidef gt(a, b): 487db96d56Sopenharmony_ci "Same as a > b." 497db96d56Sopenharmony_ci return a > b 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci# Logical Operations **********************************************************# 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_cidef not_(a): 547db96d56Sopenharmony_ci "Same as not a." 557db96d56Sopenharmony_ci return not a 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_cidef truth(a): 587db96d56Sopenharmony_ci "Return True if a is true, False otherwise." 597db96d56Sopenharmony_ci return True if a else False 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_cidef is_(a, b): 627db96d56Sopenharmony_ci "Same as a is b." 637db96d56Sopenharmony_ci return a is b 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_cidef is_not(a, b): 667db96d56Sopenharmony_ci "Same as a is not b." 677db96d56Sopenharmony_ci return a is not b 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci# Mathematical/Bitwise Operations *********************************************# 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_cidef abs(a): 727db96d56Sopenharmony_ci "Same as abs(a)." 737db96d56Sopenharmony_ci return _abs(a) 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_cidef add(a, b): 767db96d56Sopenharmony_ci "Same as a + b." 777db96d56Sopenharmony_ci return a + b 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_cidef and_(a, b): 807db96d56Sopenharmony_ci "Same as a & b." 817db96d56Sopenharmony_ci return a & b 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_cidef floordiv(a, b): 847db96d56Sopenharmony_ci "Same as a // b." 857db96d56Sopenharmony_ci return a // b 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_cidef index(a): 887db96d56Sopenharmony_ci "Same as a.__index__()." 897db96d56Sopenharmony_ci return a.__index__() 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_cidef inv(a): 927db96d56Sopenharmony_ci "Same as ~a." 937db96d56Sopenharmony_ci return ~a 947db96d56Sopenharmony_ciinvert = inv 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_cidef lshift(a, b): 977db96d56Sopenharmony_ci "Same as a << b." 987db96d56Sopenharmony_ci return a << b 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_cidef mod(a, b): 1017db96d56Sopenharmony_ci "Same as a % b." 1027db96d56Sopenharmony_ci return a % b 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_cidef mul(a, b): 1057db96d56Sopenharmony_ci "Same as a * b." 1067db96d56Sopenharmony_ci return a * b 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_cidef matmul(a, b): 1097db96d56Sopenharmony_ci "Same as a @ b." 1107db96d56Sopenharmony_ci return a @ b 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_cidef neg(a): 1137db96d56Sopenharmony_ci "Same as -a." 1147db96d56Sopenharmony_ci return -a 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_cidef or_(a, b): 1177db96d56Sopenharmony_ci "Same as a | b." 1187db96d56Sopenharmony_ci return a | b 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_cidef pos(a): 1217db96d56Sopenharmony_ci "Same as +a." 1227db96d56Sopenharmony_ci return +a 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_cidef pow(a, b): 1257db96d56Sopenharmony_ci "Same as a ** b." 1267db96d56Sopenharmony_ci return a ** b 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_cidef rshift(a, b): 1297db96d56Sopenharmony_ci "Same as a >> b." 1307db96d56Sopenharmony_ci return a >> b 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_cidef sub(a, b): 1337db96d56Sopenharmony_ci "Same as a - b." 1347db96d56Sopenharmony_ci return a - b 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_cidef truediv(a, b): 1377db96d56Sopenharmony_ci "Same as a / b." 1387db96d56Sopenharmony_ci return a / b 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_cidef xor(a, b): 1417db96d56Sopenharmony_ci "Same as a ^ b." 1427db96d56Sopenharmony_ci return a ^ b 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci# Sequence Operations *********************************************************# 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_cidef concat(a, b): 1477db96d56Sopenharmony_ci "Same as a + b, for a and b sequences." 1487db96d56Sopenharmony_ci if not hasattr(a, '__getitem__'): 1497db96d56Sopenharmony_ci msg = "'%s' object can't be concatenated" % type(a).__name__ 1507db96d56Sopenharmony_ci raise TypeError(msg) 1517db96d56Sopenharmony_ci return a + b 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_cidef contains(a, b): 1547db96d56Sopenharmony_ci "Same as b in a (note reversed operands)." 1557db96d56Sopenharmony_ci return b in a 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_cidef countOf(a, b): 1587db96d56Sopenharmony_ci "Return the number of items in a which are, or which equal, b." 1597db96d56Sopenharmony_ci count = 0 1607db96d56Sopenharmony_ci for i in a: 1617db96d56Sopenharmony_ci if i is b or i == b: 1627db96d56Sopenharmony_ci count += 1 1637db96d56Sopenharmony_ci return count 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_cidef delitem(a, b): 1667db96d56Sopenharmony_ci "Same as del a[b]." 1677db96d56Sopenharmony_ci del a[b] 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_cidef getitem(a, b): 1707db96d56Sopenharmony_ci "Same as a[b]." 1717db96d56Sopenharmony_ci return a[b] 1727db96d56Sopenharmony_ci 1737db96d56Sopenharmony_cidef indexOf(a, b): 1747db96d56Sopenharmony_ci "Return the first index of b in a." 1757db96d56Sopenharmony_ci for i, j in enumerate(a): 1767db96d56Sopenharmony_ci if j is b or j == b: 1777db96d56Sopenharmony_ci return i 1787db96d56Sopenharmony_ci else: 1797db96d56Sopenharmony_ci raise ValueError('sequence.index(x): x not in sequence') 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_cidef setitem(a, b, c): 1827db96d56Sopenharmony_ci "Same as a[b] = c." 1837db96d56Sopenharmony_ci a[b] = c 1847db96d56Sopenharmony_ci 1857db96d56Sopenharmony_cidef length_hint(obj, default=0): 1867db96d56Sopenharmony_ci """ 1877db96d56Sopenharmony_ci Return an estimate of the number of items in obj. 1887db96d56Sopenharmony_ci This is useful for presizing containers when building from an iterable. 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci If the object supports len(), the result will be exact. Otherwise, it may 1917db96d56Sopenharmony_ci over- or under-estimate by an arbitrary amount. The result will be an 1927db96d56Sopenharmony_ci integer >= 0. 1937db96d56Sopenharmony_ci """ 1947db96d56Sopenharmony_ci if not isinstance(default, int): 1957db96d56Sopenharmony_ci msg = ("'%s' object cannot be interpreted as an integer" % 1967db96d56Sopenharmony_ci type(default).__name__) 1977db96d56Sopenharmony_ci raise TypeError(msg) 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci try: 2007db96d56Sopenharmony_ci return len(obj) 2017db96d56Sopenharmony_ci except TypeError: 2027db96d56Sopenharmony_ci pass 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci try: 2057db96d56Sopenharmony_ci hint = type(obj).__length_hint__ 2067db96d56Sopenharmony_ci except AttributeError: 2077db96d56Sopenharmony_ci return default 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci try: 2107db96d56Sopenharmony_ci val = hint(obj) 2117db96d56Sopenharmony_ci except TypeError: 2127db96d56Sopenharmony_ci return default 2137db96d56Sopenharmony_ci if val is NotImplemented: 2147db96d56Sopenharmony_ci return default 2157db96d56Sopenharmony_ci if not isinstance(val, int): 2167db96d56Sopenharmony_ci msg = ('__length_hint__ must be integer, not %s' % 2177db96d56Sopenharmony_ci type(val).__name__) 2187db96d56Sopenharmony_ci raise TypeError(msg) 2197db96d56Sopenharmony_ci if val < 0: 2207db96d56Sopenharmony_ci msg = '__length_hint__() should return >= 0' 2217db96d56Sopenharmony_ci raise ValueError(msg) 2227db96d56Sopenharmony_ci return val 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci# Other Operations ************************************************************# 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_cidef call(obj, /, *args, **kwargs): 2277db96d56Sopenharmony_ci """Same as obj(*args, **kwargs).""" 2287db96d56Sopenharmony_ci return obj(*args, **kwargs) 2297db96d56Sopenharmony_ci 2307db96d56Sopenharmony_ci# Generalized Lookup Objects **************************************************# 2317db96d56Sopenharmony_ci 2327db96d56Sopenharmony_ciclass attrgetter: 2337db96d56Sopenharmony_ci """ 2347db96d56Sopenharmony_ci Return a callable object that fetches the given attribute(s) from its operand. 2357db96d56Sopenharmony_ci After f = attrgetter('name'), the call f(r) returns r.name. 2367db96d56Sopenharmony_ci After g = attrgetter('name', 'date'), the call g(r) returns (r.name, r.date). 2377db96d56Sopenharmony_ci After h = attrgetter('name.first', 'name.last'), the call h(r) returns 2387db96d56Sopenharmony_ci (r.name.first, r.name.last). 2397db96d56Sopenharmony_ci """ 2407db96d56Sopenharmony_ci __slots__ = ('_attrs', '_call') 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_ci def __init__(self, attr, *attrs): 2437db96d56Sopenharmony_ci if not attrs: 2447db96d56Sopenharmony_ci if not isinstance(attr, str): 2457db96d56Sopenharmony_ci raise TypeError('attribute name must be a string') 2467db96d56Sopenharmony_ci self._attrs = (attr,) 2477db96d56Sopenharmony_ci names = attr.split('.') 2487db96d56Sopenharmony_ci def func(obj): 2497db96d56Sopenharmony_ci for name in names: 2507db96d56Sopenharmony_ci obj = getattr(obj, name) 2517db96d56Sopenharmony_ci return obj 2527db96d56Sopenharmony_ci self._call = func 2537db96d56Sopenharmony_ci else: 2547db96d56Sopenharmony_ci self._attrs = (attr,) + attrs 2557db96d56Sopenharmony_ci getters = tuple(map(attrgetter, self._attrs)) 2567db96d56Sopenharmony_ci def func(obj): 2577db96d56Sopenharmony_ci return tuple(getter(obj) for getter in getters) 2587db96d56Sopenharmony_ci self._call = func 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci def __call__(self, obj): 2617db96d56Sopenharmony_ci return self._call(obj) 2627db96d56Sopenharmony_ci 2637db96d56Sopenharmony_ci def __repr__(self): 2647db96d56Sopenharmony_ci return '%s.%s(%s)' % (self.__class__.__module__, 2657db96d56Sopenharmony_ci self.__class__.__qualname__, 2667db96d56Sopenharmony_ci ', '.join(map(repr, self._attrs))) 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ci def __reduce__(self): 2697db96d56Sopenharmony_ci return self.__class__, self._attrs 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ciclass itemgetter: 2727db96d56Sopenharmony_ci """ 2737db96d56Sopenharmony_ci Return a callable object that fetches the given item(s) from its operand. 2747db96d56Sopenharmony_ci After f = itemgetter(2), the call f(r) returns r[2]. 2757db96d56Sopenharmony_ci After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3]) 2767db96d56Sopenharmony_ci """ 2777db96d56Sopenharmony_ci __slots__ = ('_items', '_call') 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci def __init__(self, item, *items): 2807db96d56Sopenharmony_ci if not items: 2817db96d56Sopenharmony_ci self._items = (item,) 2827db96d56Sopenharmony_ci def func(obj): 2837db96d56Sopenharmony_ci return obj[item] 2847db96d56Sopenharmony_ci self._call = func 2857db96d56Sopenharmony_ci else: 2867db96d56Sopenharmony_ci self._items = items = (item,) + items 2877db96d56Sopenharmony_ci def func(obj): 2887db96d56Sopenharmony_ci return tuple(obj[i] for i in items) 2897db96d56Sopenharmony_ci self._call = func 2907db96d56Sopenharmony_ci 2917db96d56Sopenharmony_ci def __call__(self, obj): 2927db96d56Sopenharmony_ci return self._call(obj) 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci def __repr__(self): 2957db96d56Sopenharmony_ci return '%s.%s(%s)' % (self.__class__.__module__, 2967db96d56Sopenharmony_ci self.__class__.__name__, 2977db96d56Sopenharmony_ci ', '.join(map(repr, self._items))) 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ci def __reduce__(self): 3007db96d56Sopenharmony_ci return self.__class__, self._items 3017db96d56Sopenharmony_ci 3027db96d56Sopenharmony_ciclass methodcaller: 3037db96d56Sopenharmony_ci """ 3047db96d56Sopenharmony_ci Return a callable object that calls the given method on its operand. 3057db96d56Sopenharmony_ci After f = methodcaller('name'), the call f(r) returns r.name(). 3067db96d56Sopenharmony_ci After g = methodcaller('name', 'date', foo=1), the call g(r) returns 3077db96d56Sopenharmony_ci r.name('date', foo=1). 3087db96d56Sopenharmony_ci """ 3097db96d56Sopenharmony_ci __slots__ = ('_name', '_args', '_kwargs') 3107db96d56Sopenharmony_ci 3117db96d56Sopenharmony_ci def __init__(self, name, /, *args, **kwargs): 3127db96d56Sopenharmony_ci self._name = name 3137db96d56Sopenharmony_ci if not isinstance(self._name, str): 3147db96d56Sopenharmony_ci raise TypeError('method name must be a string') 3157db96d56Sopenharmony_ci self._args = args 3167db96d56Sopenharmony_ci self._kwargs = kwargs 3177db96d56Sopenharmony_ci 3187db96d56Sopenharmony_ci def __call__(self, obj): 3197db96d56Sopenharmony_ci return getattr(obj, self._name)(*self._args, **self._kwargs) 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci def __repr__(self): 3227db96d56Sopenharmony_ci args = [repr(self._name)] 3237db96d56Sopenharmony_ci args.extend(map(repr, self._args)) 3247db96d56Sopenharmony_ci args.extend('%s=%r' % (k, v) for k, v in self._kwargs.items()) 3257db96d56Sopenharmony_ci return '%s.%s(%s)' % (self.__class__.__module__, 3267db96d56Sopenharmony_ci self.__class__.__name__, 3277db96d56Sopenharmony_ci ', '.join(args)) 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci def __reduce__(self): 3307db96d56Sopenharmony_ci if not self._kwargs: 3317db96d56Sopenharmony_ci return self.__class__, (self._name,) + self._args 3327db96d56Sopenharmony_ci else: 3337db96d56Sopenharmony_ci from functools import partial 3347db96d56Sopenharmony_ci return partial(self.__class__, self._name, **self._kwargs), self._args 3357db96d56Sopenharmony_ci 3367db96d56Sopenharmony_ci 3377db96d56Sopenharmony_ci# In-place Operations *********************************************************# 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_cidef iadd(a, b): 3407db96d56Sopenharmony_ci "Same as a += b." 3417db96d56Sopenharmony_ci a += b 3427db96d56Sopenharmony_ci return a 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_cidef iand(a, b): 3457db96d56Sopenharmony_ci "Same as a &= b." 3467db96d56Sopenharmony_ci a &= b 3477db96d56Sopenharmony_ci return a 3487db96d56Sopenharmony_ci 3497db96d56Sopenharmony_cidef iconcat(a, b): 3507db96d56Sopenharmony_ci "Same as a += b, for a and b sequences." 3517db96d56Sopenharmony_ci if not hasattr(a, '__getitem__'): 3527db96d56Sopenharmony_ci msg = "'%s' object can't be concatenated" % type(a).__name__ 3537db96d56Sopenharmony_ci raise TypeError(msg) 3547db96d56Sopenharmony_ci a += b 3557db96d56Sopenharmony_ci return a 3567db96d56Sopenharmony_ci 3577db96d56Sopenharmony_cidef ifloordiv(a, b): 3587db96d56Sopenharmony_ci "Same as a //= b." 3597db96d56Sopenharmony_ci a //= b 3607db96d56Sopenharmony_ci return a 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_cidef ilshift(a, b): 3637db96d56Sopenharmony_ci "Same as a <<= b." 3647db96d56Sopenharmony_ci a <<= b 3657db96d56Sopenharmony_ci return a 3667db96d56Sopenharmony_ci 3677db96d56Sopenharmony_cidef imod(a, b): 3687db96d56Sopenharmony_ci "Same as a %= b." 3697db96d56Sopenharmony_ci a %= b 3707db96d56Sopenharmony_ci return a 3717db96d56Sopenharmony_ci 3727db96d56Sopenharmony_cidef imul(a, b): 3737db96d56Sopenharmony_ci "Same as a *= b." 3747db96d56Sopenharmony_ci a *= b 3757db96d56Sopenharmony_ci return a 3767db96d56Sopenharmony_ci 3777db96d56Sopenharmony_cidef imatmul(a, b): 3787db96d56Sopenharmony_ci "Same as a @= b." 3797db96d56Sopenharmony_ci a @= b 3807db96d56Sopenharmony_ci return a 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_cidef ior(a, b): 3837db96d56Sopenharmony_ci "Same as a |= b." 3847db96d56Sopenharmony_ci a |= b 3857db96d56Sopenharmony_ci return a 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_cidef ipow(a, b): 3887db96d56Sopenharmony_ci "Same as a **= b." 3897db96d56Sopenharmony_ci a **=b 3907db96d56Sopenharmony_ci return a 3917db96d56Sopenharmony_ci 3927db96d56Sopenharmony_cidef irshift(a, b): 3937db96d56Sopenharmony_ci "Same as a >>= b." 3947db96d56Sopenharmony_ci a >>= b 3957db96d56Sopenharmony_ci return a 3967db96d56Sopenharmony_ci 3977db96d56Sopenharmony_cidef isub(a, b): 3987db96d56Sopenharmony_ci "Same as a -= b." 3997db96d56Sopenharmony_ci a -= b 4007db96d56Sopenharmony_ci return a 4017db96d56Sopenharmony_ci 4027db96d56Sopenharmony_cidef itruediv(a, b): 4037db96d56Sopenharmony_ci "Same as a /= b." 4047db96d56Sopenharmony_ci a /= b 4057db96d56Sopenharmony_ci return a 4067db96d56Sopenharmony_ci 4077db96d56Sopenharmony_cidef ixor(a, b): 4087db96d56Sopenharmony_ci "Same as a ^= b." 4097db96d56Sopenharmony_ci a ^= b 4107db96d56Sopenharmony_ci return a 4117db96d56Sopenharmony_ci 4127db96d56Sopenharmony_ci 4137db96d56Sopenharmony_citry: 4147db96d56Sopenharmony_ci from _operator import * 4157db96d56Sopenharmony_ciexcept ImportError: 4167db96d56Sopenharmony_ci pass 4177db96d56Sopenharmony_cielse: 4187db96d56Sopenharmony_ci from _operator import __doc__ 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci# All of these "__func__ = func" assignments have to happen after importing 4217db96d56Sopenharmony_ci# from _operator to make sure they're set to the right function 4227db96d56Sopenharmony_ci__lt__ = lt 4237db96d56Sopenharmony_ci__le__ = le 4247db96d56Sopenharmony_ci__eq__ = eq 4257db96d56Sopenharmony_ci__ne__ = ne 4267db96d56Sopenharmony_ci__ge__ = ge 4277db96d56Sopenharmony_ci__gt__ = gt 4287db96d56Sopenharmony_ci__not__ = not_ 4297db96d56Sopenharmony_ci__abs__ = abs 4307db96d56Sopenharmony_ci__add__ = add 4317db96d56Sopenharmony_ci__and__ = and_ 4327db96d56Sopenharmony_ci__call__ = call 4337db96d56Sopenharmony_ci__floordiv__ = floordiv 4347db96d56Sopenharmony_ci__index__ = index 4357db96d56Sopenharmony_ci__inv__ = inv 4367db96d56Sopenharmony_ci__invert__ = invert 4377db96d56Sopenharmony_ci__lshift__ = lshift 4387db96d56Sopenharmony_ci__mod__ = mod 4397db96d56Sopenharmony_ci__mul__ = mul 4407db96d56Sopenharmony_ci__matmul__ = matmul 4417db96d56Sopenharmony_ci__neg__ = neg 4427db96d56Sopenharmony_ci__or__ = or_ 4437db96d56Sopenharmony_ci__pos__ = pos 4447db96d56Sopenharmony_ci__pow__ = pow 4457db96d56Sopenharmony_ci__rshift__ = rshift 4467db96d56Sopenharmony_ci__sub__ = sub 4477db96d56Sopenharmony_ci__truediv__ = truediv 4487db96d56Sopenharmony_ci__xor__ = xor 4497db96d56Sopenharmony_ci__concat__ = concat 4507db96d56Sopenharmony_ci__contains__ = contains 4517db96d56Sopenharmony_ci__delitem__ = delitem 4527db96d56Sopenharmony_ci__getitem__ = getitem 4537db96d56Sopenharmony_ci__setitem__ = setitem 4547db96d56Sopenharmony_ci__iadd__ = iadd 4557db96d56Sopenharmony_ci__iand__ = iand 4567db96d56Sopenharmony_ci__iconcat__ = iconcat 4577db96d56Sopenharmony_ci__ifloordiv__ = ifloordiv 4587db96d56Sopenharmony_ci__ilshift__ = ilshift 4597db96d56Sopenharmony_ci__imod__ = imod 4607db96d56Sopenharmony_ci__imul__ = imul 4617db96d56Sopenharmony_ci__imatmul__ = imatmul 4627db96d56Sopenharmony_ci__ior__ = ior 4637db96d56Sopenharmony_ci__ipow__ = ipow 4647db96d56Sopenharmony_ci__irshift__ = irshift 4657db96d56Sopenharmony_ci__isub__ = isub 4667db96d56Sopenharmony_ci__itruediv__ = itruediv 4677db96d56Sopenharmony_ci__ixor__ = ixor 468