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.
Files changed (57) hide show
  1. {xobjects-0.6.4/xobjects.egg-info → xobjects-0.6.5}/PKG-INFO +1 -1
  2. xobjects-0.6.5/xobjects/_version.py +1 -0
  3. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/context_cpu.py +54 -0
  4. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/struct.py +27 -15
  5. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/test_helpers.py +31 -0
  6. {xobjects-0.6.4 → xobjects-0.6.5/xobjects.egg-info}/PKG-INFO +1 -1
  7. xobjects-0.6.4/xobjects/_version.py +0 -1
  8. {xobjects-0.6.4 → xobjects-0.6.5}/Architecture.md +0 -0
  9. {xobjects-0.6.4 → xobjects-0.6.5}/LICENSE +0 -0
  10. {xobjects-0.6.4 → xobjects-0.6.5}/MANIFEST.in +0 -0
  11. {xobjects-0.6.4 → xobjects-0.6.5}/README.md +0 -0
  12. {xobjects-0.6.4 → xobjects-0.6.5}/pyproject.toml +0 -0
  13. {xobjects-0.6.4 → xobjects-0.6.5}/setup.cfg +0 -0
  14. {xobjects-0.6.4 → xobjects-0.6.5}/setup.py +0 -0
  15. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_align.py +0 -0
  16. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_array.py +0 -0
  17. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_buffer.py +0 -0
  18. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_capi.py +0 -0
  19. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_chunk.py +0 -0
  20. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_common.py +0 -0
  21. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_context_opencl.py +0 -0
  22. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_hybrid_class.py +0 -0
  23. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_kernel.py +0 -0
  24. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_linked_array.py +0 -0
  25. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_nplike_arrays.py +0 -0
  26. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_ref.py +0 -0
  27. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_scalars.py +0 -0
  28. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_shared_memory.py +0 -0
  29. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_strides.py +0 -0
  30. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_string.py +0 -0
  31. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_struct.py +0 -0
  32. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_to_dict.py +0 -0
  33. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_typeutils.py +0 -0
  34. {xobjects-0.6.4 → xobjects-0.6.5}/tests/test_unionref.py +0 -0
  35. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/__init__.py +0 -0
  36. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/_patch_pyopencl_array.py +0 -0
  37. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/array.py +0 -0
  38. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/capi.py +0 -0
  39. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/context.py +0 -0
  40. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/context_cupy.py +0 -0
  41. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/context_pyopencl.py +0 -0
  42. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/general.py +0 -0
  43. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/headers/atomicadd.h +0 -0
  44. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/headers/common.h +0 -0
  45. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/hybrid_class.py +0 -0
  46. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/linkedarray.py +0 -0
  47. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/ref.py +0 -0
  48. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/scalar.py +0 -0
  49. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/specialize_source.py +0 -0
  50. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/string.py +0 -0
  51. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/typeutils.py +0 -0
  52. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects/union.py +0 -0
  53. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/SOURCES.txt +0 -0
  54. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/dependency_links.txt +0 -0
  55. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/entry_points.txt +0 -0
  56. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/requires.txt +0 -0
  57. {xobjects-0.6.4 → xobjects-0.6.5}/xobjects.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xobjects
3
- Version: 0.6.4
3
+ Version: 0.6.5
4
4
  Summary: In-memory serialization and code generator for CPU and GPU
5
5
  Home-page: https://xsuite.readthedocs.io/
6
6
  Download-URL: https://pypi.python.org/pypi/xobjects
@@ -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
- from xsuite import (
526
- get_suitable_kernel,
527
- XSK_PREBUILT_KERNELS_LOCATION,
528
- )
529
-
530
- kernel_info = get_suitable_kernel(
531
- config={},
532
- tracker_element_classes=[],
533
- classes=list(extra_classes) + [cls],
534
- context=context,
535
- )
536
- except ImportError:
537
- kernel_info = None
538
-
539
- Print.suppress = _print_state
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xobjects
3
- Version: 0.6.4
3
+ Version: 0.6.5
4
4
  Summary: In-memory serialization and code generator for CPU and GPU
5
5
  Home-page: https://xsuite.readthedocs.io/
6
6
  Download-URL: https://pypi.python.org/pypi/xobjects
@@ -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