@@ -16,22 +16,30 @@ def _coconut_lazy_module(name, on_import=None, attr=None):
1616 return _coconut.getattr(state[0], attr)
1717 return state[0]
1818 if attr is None:
19- from types import ModuleType
20- class lazy_mod(ModuleType):
21- def __getattr__(self, name):
22- return _coconut.getattr(load(), name)
23- def __dir__(self):
24- return _coconut.dir(load())
25- return lazy_mod(_coconut_py_str(name))
19+ from types import ModuleType as base
2620 else:
27- class meta(type):
28- def __getattr__(cls, name):
29- return _coconut.getattr(load(), name)
30- def __setattr__(cls, name, value):
31- _coconut.setattr(load(), name, value)
32- def __dir__(cls):
33- return _coconut.dir(load())
34- return meta(_coconut_py_str(name), (), {{}})
21+ base = _coconut_type
22+ class lazy_obj(base):
23+ def __getattr__(cls, name):
24+ return _coconut.getattr(load(), name)
25+ def __setattr__(cls, name, value):
26+ _coconut.setattr(load(), name, value)
27+ def __dir__(cls):
28+ return _coconut.dir(load())
29+ def __instancecheck__(cls, inst):
30+ return _coconut.isinstance(inst, load())
31+ def __subclasscheck__(cls, sub):
32+ return _coconut.issubclass(sub, load())
33+ def _coconut_make_lazy_dunder(_coconut_n):
34+ def _coconut_lazy_dunder(cls, *args, **kwargs):
35+ return _coconut.getattr(load(), _coconut_n)(*args, **kwargs)
36+ return _coconut_lazy_dunder
37+ for _coconut_dunder in ("__call__", "__hash__", "__repr__", "__str__", "__format__", "__bytes__", "__bool__", "__nonzero__", "__int__", "__float__", "__complex__", "__index__", "__round__", "__eq__", "__ne__", "__lt__", "__le__", "__gt__", "__ge__", "__len__", "__contains__", "__iter__", "__next__", "__reversed__", "__getitem__", "__setitem__", "__delitem__", "__missing__", "__add__", "__radd__", "__iadd__", "__sub__", "__rsub__", "__isub__", "__mul__", "__rmul__", "__imul__", "__floordiv__", "__rfloordiv__", "__ifloordiv__", "__truediv__", "__rtruediv__", "__itruediv__", "__mod__", "__rmod__", "__imod__", "__pow__", "__rpow__", "__ipow__", "__matmul__", "__rmatmul__", "__imatmul__", "__divmod__", "__rdivmod__", "__neg__", "__pos__", "__abs__", "__invert__", "__and__", "__rand__", "__iand__", "__or__", "__ror__", "__ior__", "__xor__", "__rxor__", "__ixor__", "__lshift__", "__rlshift__", "__ilshift__", "__rshift__", "__rrshift__", "__irshift__", "__enter__", "__exit__", "__aiter__", "__anext__", "__await__", "__aenter__", "__aexit__", "__reduce__", "__reduce_ex__", "__copy__", "__deepcopy__"):
38+ _coconut_type.__setattr__(lazy_obj, _coconut_dunder, _coconut_make_lazy_dunder(_coconut_dunder))
39+ if attr is None:
40+ return lazy_obj(_coconut_py_str(name))
41+ else:
42+ return lazy_obj(_coconut_py_str(name), (), {{}})
3543@_coconut_wraps(_coconut_py_super)
3644def _coconut_super(type=None, object_or_type=None):
3745 if type is None:
@@ -82,7 +90,7 @@ class _coconut{object}:{COMMENT.EVERYTHING_HERE_MUST_BE_COPIED_TO_STUB_FILE}
8290 reiterables = abc.Sequence, abc.Mapping, abc.Set
8391 fmappables = list, tuple, dict, set, frozenset, bytes, bytearray
8492 abc.Sequence.register(collections.deque)
85- Ellipsis, NotImplemented, NotImplementedError, Exception, AttributeError, ImportError, IndexError, KeyError, NameError, TypeError, ValueError, StopIteration, RuntimeError, all, any, bool, bytes, callable, chr, classmethod, complex, dict, dir, enumerate, filter, float, frozenset, getattr, hasattr, hash, id, int, isinstance, issubclass, iter, len, list, locals, globals, map, min, max, next, object, ord, property, range, reversed, set, setattr, slice, str, sum, super, tuple, type, vars, zip, repr, print{comma_bytearray} = Ellipsis, NotImplemented, NotImplementedError, Exception, AttributeError, ImportError, IndexError, KeyError, NameError, TypeError, ValueError, StopIteration, RuntimeError, all, any, bool, bytes, callable, chr, classmethod, complex, dict, dir, enumerate, filter, float, frozenset, getattr, hasattr, hash, id, int, isinstance, issubclass, iter, len, list, locals, globals, map, {lstatic}min{rstatic}, {lstatic}max{rstatic}, next, object, ord, property, range, reversed, set, setattr, slice, str, sum, {lstatic}super{rstatic}, tuple, type, vars, zip, {lstatic}repr{rstatic}, {lstatic}print{rstatic}{comma_bytearray}
93+ Ellipsis, NotImplemented, NotImplementedError, Exception, AttributeError, ImportError, IndexError, KeyError, NameError, TypeError, ValueError, StopIteration, RuntimeError, all, any, bool, bytes, callable, chr, classmethod, complex, dict, dir, enumerate, filter, float, frozenset, getattr, hasattr, hash, id, int, isinstance, issubclass, iter, len, list, locals, globals, map, min, max, next, object, ord, property, range, reversed, set, setattr, slice, str, sum, super, tuple, vars, zip, repr, print{comma_bytearray} = Ellipsis, NotImplemented, NotImplementedError, Exception, AttributeError, ImportError, IndexError, KeyError, NameError, TypeError, ValueError, StopIteration, RuntimeError, all, any, bool, bytes, callable, chr, classmethod, complex, dict, dir, enumerate, filter, float, frozenset, getattr, hasattr, hash, id, int, isinstance, issubclass, iter, len, list, locals, globals, map, {lstatic}min{rstatic}, {lstatic}max{rstatic}, next, object, ord, property, range, reversed, set, setattr, slice, str, sum, {lstatic}super{rstatic}, tuple, vars, zip, {lstatic}repr{rstatic}, {lstatic}print{rstatic}{comma_bytearray}
8694def _coconut_handle_cls_kwargs(**kwargs):
8795 """Some code taken from six under the terms of its MIT license."""
8896 metaclass = kwargs.pop("metaclass", None)
@@ -1405,7 +1413,7 @@ def _coconut_get_function_match_error():
14051413class _coconut_base_pattern_func(_coconut_base_callable):{COMMENT.no_slots_to_allow_func_attrs}
14061414 _coconut_is_match = True
14071415 def __init__(self, *funcs):
1408- self.FunctionMatchError = _coconut.type ({py_str_MatchError}, ({_coconut_}MatchError,), {empty_py_dict})
1416+ self.FunctionMatchError = _coconut_type ({py_str_MatchError}, ({_coconut_}MatchError,), {empty_py_dict})
14091417 self.patterns = []
14101418 self.__doc__ = None
14111419 self.__name__ = None
@@ -1677,7 +1685,7 @@ def _coconut_memoize_helper(maxsize=None, typed=False):
16771685 @_coconut_wraps(func)
16781686 def memoized_func(*args, **kwargs):
16791687 if typed:
1680- key = (_coconut.tuple((x, _coconut.type (x)) for x in args), _coconut.tuple((k, _coconut.type (k), v, _coconut.type (v)) for k, v in kwargs.items()))
1688+ key = (_coconut.tuple((x, _coconut_type (x)) for x in args), _coconut.tuple((k, _coconut_type (k), v, _coconut_type (v)) for k, v in kwargs.items()))
16811689 else:
16821690 key = (args, _coconut.tuple(kwargs.items()))
16831691 got = cache.get(key, _coconut_sentinel)
0 commit comments