xobjects 0.6.4__tar.gz → 0.6.5__tar.gz
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.
- {xobjects-0.6.4/xobjects.egg-info → xobjects-0.6.5}/PKG-INFO +1 -1
- xobjects-0.6.5/xobjects/_version.py +1 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/context_cpu.py +54 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/struct.py +27 -15
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/test_helpers.py +31 -0
- {xobjects-0.6.4 → xobjects-0.6.5/xobjects.egg-info}/PKG-INFO +1 -1
- xobjects-0.6.4/xobjects/_version.py +0 -1
- {xobjects-0.6.4 → xobjects-0.6.5}/Architecture.md +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/LICENSE +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/MANIFEST.in +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/README.md +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/pyproject.toml +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/setup.cfg +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/setup.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_align.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_array.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_buffer.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_capi.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_chunk.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_common.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_context_opencl.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_hybrid_class.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_kernel.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_linked_array.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_nplike_arrays.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_ref.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_scalars.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_shared_memory.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_strides.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_string.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_struct.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_to_dict.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_typeutils.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_unionref.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/__init__.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/_patch_pyopencl_array.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/array.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/capi.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/context.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/context_cupy.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/context_pyopencl.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/general.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/headers/atomicadd.h +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/headers/common.h +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/hybrid_class.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/linkedarray.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/ref.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/scalar.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/specialize_source.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/string.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/typeutils.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/union.py +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/SOURCES.txt +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/dependency_links.txt +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/entry_points.txt +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/requires.txt +0 -0
- {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.6.5"
|
|
@@ -19,6 +19,60 @@ import scipy as sp
|
|
|
19
19
|
|
|
20
20
|
_forbid_compile = False
|
|
21
21
|
_suppress_warnings = False
|
|
22
|
+
allow_no_prebuilt_kernel = False
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _class_allows_no_prebuilt_kernel(cls):
|
|
26
|
+
return (
|
|
27
|
+
getattr(cls, 'allow_no_prebuilt_kernel', False)
|
|
28
|
+
or getattr(getattr(cls, '_DressingClass', None),
|
|
29
|
+
'allow_no_prebuilt_kernel', False)
|
|
30
|
+
or getattr(getattr(cls, '_XoStruct', None),
|
|
31
|
+
'allow_no_prebuilt_kernel', False)
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def allow_no_prebuilt_kernel_enabled(context=None, classes=()):
|
|
36
|
+
if classes is None:
|
|
37
|
+
classes = ()
|
|
38
|
+
elif isinstance(classes, type):
|
|
39
|
+
classes = (classes,)
|
|
40
|
+
|
|
41
|
+
if os.environ.get('XSUITE_ALLOW_NO_PREBUILT_KERNELS') is not None:
|
|
42
|
+
return True
|
|
43
|
+
if allow_no_prebuilt_kernel:
|
|
44
|
+
return True
|
|
45
|
+
if any(_class_allows_no_prebuilt_kernel(cls) for cls in classes):
|
|
46
|
+
return True
|
|
47
|
+
return getattr(context, 'allow_no_prebuilt_kernel', False)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _is_serial_cpu_context(context):
|
|
51
|
+
if context is None or not hasattr(context, 'openmp_enabled'):
|
|
52
|
+
return False
|
|
53
|
+
return context.openmp_enabled is False
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def require_prebuilt_kernel(context=None, classes=()):
|
|
57
|
+
return (
|
|
58
|
+
not allow_no_prebuilt_kernel_enabled(context, classes=classes)
|
|
59
|
+
and _is_serial_cpu_context(context)
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def no_prebuilt_kernel_jit_message():
|
|
64
|
+
return (
|
|
65
|
+
'To allow just-in-time compilation instead, as in older Xsuite '
|
|
66
|
+
'versions, set the environment variable '
|
|
67
|
+
'`XSUITE_ALLOW_NO_PREBUILT_KERNELS`, set '
|
|
68
|
+
'`xobjects.context_cpu.allow_no_prebuilt_kernel = True`, or set '
|
|
69
|
+
'`context.allow_no_prebuilt_kernel = True`. Classes that require '
|
|
70
|
+
'just-in-time compilation can also define '
|
|
71
|
+
'`allow_no_prebuilt_kernel = True` as a class attribute. Using '
|
|
72
|
+
'just-in-time compilation instead of prebuilt kernels may require '
|
|
73
|
+
'lengthy compilation whenever a different kernel is needed.'
|
|
74
|
+
)
|
|
75
|
+
|
|
22
76
|
|
|
23
77
|
from .context import (
|
|
24
78
|
Kernel,
|
|
@@ -522,21 +522,33 @@ class Struct(metaclass=MetaStruct):
|
|
|
522
522
|
_print_state = Print.suppress
|
|
523
523
|
Print.suppress = True
|
|
524
524
|
try:
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
525
|
+
try:
|
|
526
|
+
from xsuite import (
|
|
527
|
+
get_suitable_kernel,
|
|
528
|
+
XSK_PREBUILT_KERNELS_LOCATION,
|
|
529
|
+
)
|
|
530
|
+
|
|
531
|
+
kernel_info = get_suitable_kernel(
|
|
532
|
+
config={},
|
|
533
|
+
tracker_element_classes=[],
|
|
534
|
+
classes=list(extra_classes) + [cls],
|
|
535
|
+
context=context,
|
|
536
|
+
)
|
|
537
|
+
except ImportError as err:
|
|
538
|
+
from . import context_cpu
|
|
539
|
+
|
|
540
|
+
if not context_cpu.require_prebuilt_kernel(
|
|
541
|
+
context, classes=list(extra_classes) + [cls]):
|
|
542
|
+
kernel_info = None
|
|
543
|
+
else:
|
|
544
|
+
raise ImportError(
|
|
545
|
+
'Xsuite is required to load prebuilt kernels but could '
|
|
546
|
+
'not be imported. Please install it with '
|
|
547
|
+
f'`pip install xsuite`. '
|
|
548
|
+
f'{context_cpu.no_prebuilt_kernel_jit_message()}'
|
|
549
|
+
) from err
|
|
550
|
+
finally:
|
|
551
|
+
Print.suppress = _print_state
|
|
540
552
|
if kernel_info:
|
|
541
553
|
kernels = context.kernels_from_file(
|
|
542
554
|
module_name=kernel_info["module_name"],
|
|
@@ -108,6 +108,37 @@ def fix_random_seed(seed: int):
|
|
|
108
108
|
return decorator
|
|
109
109
|
|
|
110
110
|
|
|
111
|
+
def allow_no_prebuilt_kernels(test_function=None, *, skip_when_forbid_compile=True):
|
|
112
|
+
"""Allow JIT compilation for tests that intentionally compile kernels.
|
|
113
|
+
|
|
114
|
+
By default, the wrapped test is skipped when compilation is forbidden by
|
|
115
|
+
``XOBJECTS_FORBID_COMPILE``. Use ``skip_when_forbid_compile=False`` when
|
|
116
|
+
the test has more specific ``skip_if_forbid_compile()`` guards inside the
|
|
117
|
+
test.
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
def decorator(test_function):
|
|
121
|
+
@wraps(test_function)
|
|
122
|
+
def wrapper(*args, **kwargs):
|
|
123
|
+
if skip_when_forbid_compile:
|
|
124
|
+
skip_if_forbid_compile()
|
|
125
|
+
old_value = os.environ.get("XSUITE_ALLOW_NO_PREBUILT_KERNELS")
|
|
126
|
+
os.environ["XSUITE_ALLOW_NO_PREBUILT_KERNELS"] = "1"
|
|
127
|
+
try:
|
|
128
|
+
return test_function(*args, **kwargs)
|
|
129
|
+
finally:
|
|
130
|
+
if old_value is None:
|
|
131
|
+
del os.environ["XSUITE_ALLOW_NO_PREBUILT_KERNELS"]
|
|
132
|
+
else:
|
|
133
|
+
os.environ["XSUITE_ALLOW_NO_PREBUILT_KERNELS"] = old_value
|
|
134
|
+
|
|
135
|
+
return wrapper
|
|
136
|
+
|
|
137
|
+
if test_function is None:
|
|
138
|
+
return decorator
|
|
139
|
+
return decorator(test_function)
|
|
140
|
+
|
|
141
|
+
|
|
111
142
|
def skip_if_forbid_compile():
|
|
112
143
|
if os.environ.get("XOBJECTS_FORBID_COMPILE"):
|
|
113
144
|
pytest.skip(
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.6.4"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|