retracesoftware-utils 0.2.10__cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,172 @@
1
+ """
2
+ retracesoftware.utils - Runtime selectable release/debug builds
3
+
4
+ Set RETRACE_DEBUG=1 to use the debug build with symbols and assertions.
5
+ """
6
+ import os
7
+ import weakref
8
+ import threading
9
+ from collections import UserDict
10
+ from typing import Callable, Any, Dict
11
+ from contextlib import contextmanager
12
+ from types import ModuleType
13
+
14
+
15
+ def _is_truthy_env(v):
16
+ if v is None:
17
+ return False
18
+ return v.strip().lower() in {"1", "true", "yes", "y", "on"}
19
+
20
+ _DEBUG_MODE = _is_truthy_env(os.getenv("RETRACE_DEBUG"))
21
+
22
+ _backend_mod: ModuleType
23
+ __backend__: str
24
+
25
+ try:
26
+ if _DEBUG_MODE:
27
+ import _retracesoftware_utils_debug as _backend_mod # type: ignore
28
+ __backend__ = "native-debug"
29
+ else:
30
+ import _retracesoftware_utils_release as _backend_mod # type: ignore
31
+ __backend__ = "native-release"
32
+ except Exception:
33
+ raise ImportError("Failed to load retracesoftware_utils native extension")
34
+
35
+ # Expose debug mode flag
36
+ DEBUG_MODE = _DEBUG_MODE and __backend__.startswith("native")
37
+
38
+
39
+ def __getattr__(name: str) -> Any:
40
+ return getattr(_backend_mod, name)
41
+
42
+
43
+ def _export_public(mod: ModuleType) -> None:
44
+ g = globals()
45
+ for k, v in mod.__dict__.items():
46
+ if k.startswith("_"):
47
+ continue
48
+ g[k] = v
49
+
50
+
51
+ _export_public(_backend_mod)
52
+
53
+
54
+ # ---------------------------------------------------------------------------
55
+ # High-level API (convenience wrappers around C++ extension)
56
+ # ---------------------------------------------------------------------------
57
+
58
+ def typeflags(cls):
59
+ bits = _backend_mod.type_flags(cls)
60
+ result = set()
61
+ for name, value in _backend_mod.TypeFlags.items():
62
+ if (value & bits) != 0:
63
+ result.add(name)
64
+ return result
65
+
66
+
67
+ def is_method_descriptor(obj):
68
+ return 'Py_TPFLAGS_METHOD_DESCRIPTOR' in typeflags(type(obj))
69
+
70
+
71
+ def flags(cls: type):
72
+ f = _backend_mod.type_flags(cls)
73
+ s = set()
74
+ for name, value in _backend_mod.TypeFlags.items():
75
+ if (f & value) != 0:
76
+ s.add(name)
77
+ f = f & ~value
78
+ if f != 0:
79
+ s.add(f)
80
+ return s
81
+
82
+
83
+ class WithoutFlags:
84
+ def __init__(self, cls, *flags):
85
+ self.cls = cls
86
+ self.flags = flags
87
+
88
+ def __enter__(self):
89
+ self.saved = _backend_mod.type_flags(self.cls)
90
+ flags = self.saved
91
+ for flag in self.flags:
92
+ flags = flags & ~_backend_mod.TypeFlags[flag]
93
+ _backend_mod.set_type_flags(self.cls, flags)
94
+ return self.cls
95
+
96
+ def __exit__(self, *args):
97
+ _backend_mod.set_type_flags(self.cls, self.saved)
98
+
99
+
100
+ class WithFlags:
101
+ def __init__(self, cls, *flags):
102
+ self.cls = cls
103
+ self.flags = flags
104
+
105
+ def __enter__(self):
106
+ self.saved = _backend_mod.type_flags(self.cls)
107
+ flags = self.saved
108
+ for flag in self.flags:
109
+ flags |= _backend_mod.TypeFlags[flag]
110
+ _backend_mod.set_type_flags(self.cls, flags)
111
+ return self.cls
112
+
113
+ def __exit__(self, *args):
114
+ _backend_mod.set_type_flags(self.cls, self.saved)
115
+
116
+
117
+ def wrap_func_with_overrides(func, **overrides):
118
+ """
119
+ Return a new function identical to `func` but with selected global names
120
+ overridden by keyword arguments.
121
+ """
122
+ import builtins as _builtins
123
+ import types
124
+
125
+ orig = getattr(func, "__func__", func)
126
+ g = dict(orig.__globals__)
127
+ g.setdefault("__builtins__", _builtins.__dict__)
128
+ g.update(overrides)
129
+
130
+ return types.FunctionType(
131
+ orig.__code__, g, orig.__name__, orig.__defaults__, orig.__closure__
132
+ )
133
+
134
+
135
+ def update(obj, name, f, *args, **kwargs):
136
+ value = getattr(obj, name)
137
+ setattr(obj, name, f(value, *args, **kwargs))
138
+
139
+
140
+ class InterceptDict(dict):
141
+ def __init__(self, backing: Dict, on_set: Callable[[str, Any], Any]):
142
+ super().__init__()
143
+ self.backing = backing
144
+ self.on_set = on_set
145
+ self.move_from_backing()
146
+
147
+ def move_from_backing(self):
148
+ for key, value in self.backing.items():
149
+ super().__setitem__(key, self.on_set(key, value))
150
+ self.backing.clear()
151
+
152
+ def __getitem__(self, key):
153
+ self.move_from_backing()
154
+ return super().__getitem__(key)
155
+
156
+ def __setitem__(self, key: str, value: Any) -> None:
157
+ self.move_from_backing()
158
+ super().__setitem__(key, self.on_set(key, value))
159
+
160
+
161
+ def map_values(f, m):
162
+ return {k: f(v) for k, v in m.items()}
163
+
164
+
165
+ @contextmanager
166
+ def on_set(dict, on_set):
167
+ _backend_mod.intercept_dict_set(dict, on_set)
168
+ yield
169
+ _backend_mod.intercept_dict_set(dict, None)
170
+
171
+
172
+ __all__ = sorted([k for k in globals().keys() if not k.startswith("_")])
@@ -0,0 +1,17 @@
1
+ Metadata-Version: 2.1
2
+ Name: retracesoftware_utils
3
+ Version: 0.2.10
4
+ Keywords: functional,programming,c-extension,utilities,performance
5
+ Author-Email: Retrace Software <info@retracesoftware.com>
6
+ Maintainer-Email: Retrace Software <info@retracesoftware.com>
7
+ License: Apache-2.0
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: Implementation :: CPython
15
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
16
+ Requires-Dist: retracesoftware.functional~=0.3.5
17
+
@@ -0,0 +1,6 @@
1
+ _retracesoftware_utils_debug.cpython-312-i386-linux-gnu.so,sha256=Jj7S_jhyiTYo6ruuJkimU7gcr7P9vZ3boYgYARk_tTk,2850424
2
+ _retracesoftware_utils_release.cpython-312-i386-linux-gnu.so,sha256=W-Qi3hU3P2McxY1HXYxUmSDCLcX5ylx4yPbidT4KtMU,332332
3
+ retracesoftware_utils-0.2.10.dist-info/WHEEL,sha256=m8xSD7H0M6c8kTBrGL7KdF2qjX8ZqbabyPdWuccniJ0,133
4
+ retracesoftware_utils-0.2.10.dist-info/METADATA,sha256=h87Xfke6Rwhe-nP9Uw0j5Bp0JBMCrJAEdI1g2CklbL0,764
5
+ retracesoftware_utils-0.2.10.dist-info/RECORD,,
6
+ retracesoftware/utils/__init__.py,sha256=qxVskvjP9nDJ922awMqFQDk2zvcoUSB47MwUk8upBws,4585
@@ -0,0 +1,6 @@
1
+ Wheel-Version: 1.0
2
+ Generator: meson
3
+ Root-Is-Purelib: false
4
+ Tag: cp312-cp312-manylinux_2_17_i686
5
+ Tag: cp312-cp312-manylinux2014_i686
6
+