xcoll 0.3.6__tar.gz → 0.4.0__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.

Potentially problematic release.


This version of xcoll might be problematic. Click here for more details.

Files changed (140) hide show
  1. {xcoll-0.3.6 → xcoll-0.4.0}/PKG-INFO +1 -1
  2. {xcoll-0.3.6 → xcoll-0.4.0}/pyproject.toml +1 -1
  3. xcoll-0.4.0/xcoll/__init__.py +23 -0
  4. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/beam_elements/__init__.py +7 -5
  5. xcoll-0.4.0/xcoll/beam_elements/absorber.py +73 -0
  6. xcoll-0.4.0/xcoll/beam_elements/base.py +1324 -0
  7. xcoll-0.4.0/xcoll/beam_elements/collimators_src/black_absorber.h +118 -0
  8. xcoll-0.4.0/xcoll/beam_elements/collimators_src/black_crystal.h +111 -0
  9. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/beam_elements/collimators_src/everest_block.h +40 -28
  10. xcoll-0.4.0/xcoll/beam_elements/collimators_src/everest_collimator.h +221 -0
  11. xcoll-0.4.0/xcoll/beam_elements/collimators_src/everest_crystal.h +259 -0
  12. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/beam_elements/everest.py +60 -113
  13. xcoll-0.4.0/xcoll/colldb.py +610 -0
  14. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/general.py +2 -2
  15. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/headers/checks.h +1 -1
  16. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/headers/particle_states.h +2 -2
  17. xcoll-0.4.0/xcoll/initial_distribution.py +195 -0
  18. xcoll-0.4.0/xcoll/install.py +177 -0
  19. xcoll-0.4.0/xcoll/interaction_record/__init__.py +1 -0
  20. xcoll-0.4.0/xcoll/interaction_record/interaction_record.py +252 -0
  21. xcoll-0.4.0/xcoll/interaction_record/interaction_record_src/interaction_record.h +98 -0
  22. {xcoll-0.3.6/xcoll/impacts → xcoll-0.4.0/xcoll/interaction_record}/interaction_types.py +11 -4
  23. xcoll-0.4.0/xcoll/line_tools.py +83 -0
  24. xcoll-0.4.0/xcoll/lossmap.py +209 -0
  25. xcoll-0.4.0/xcoll/manager.py +10 -0
  26. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/rf_sweep.py +1 -1
  27. xcoll-0.4.0/xcoll/scattering_routines/everest/amorphous.h +239 -0
  28. xcoll-0.4.0/xcoll/scattering_routines/everest/channeling.h +245 -0
  29. xcoll-0.4.0/xcoll/scattering_routines/everest/crystal_parameters.h +137 -0
  30. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/everest/everest.h +8 -30
  31. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/everest/everest.py +13 -10
  32. xcoll-0.4.0/xcoll/scattering_routines/everest/jaw.h +65 -0
  33. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/everest/materials.py +2 -0
  34. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +31 -10
  35. xcoll-0.4.0/xcoll/scattering_routines/everest/nuclear_interaction.h +86 -0
  36. xcoll-0.4.0/xcoll/scattering_routines/geometry/__init__.py +6 -0
  37. xcoll-0.4.0/xcoll/scattering_routines/geometry/collimator_geometry.h +219 -0
  38. xcoll-0.4.0/xcoll/scattering_routines/geometry/crystal_geometry.h +150 -0
  39. xcoll-0.4.0/xcoll/scattering_routines/geometry/geometry.py +26 -0
  40. xcoll-0.4.0/xcoll/scattering_routines/geometry/get_s.h +92 -0
  41. xcoll-0.4.0/xcoll/scattering_routines/geometry/methods.h +111 -0
  42. xcoll-0.4.0/xcoll/scattering_routines/geometry/objects.h +154 -0
  43. xcoll-0.4.0/xcoll/scattering_routines/geometry/rotation.h +23 -0
  44. xcoll-0.4.0/xcoll/scattering_routines/geometry/segments.h +226 -0
  45. xcoll-0.4.0/xcoll/scattering_routines/geometry/sort.h +184 -0
  46. xcoll-0.3.6/xcoll/__init__.py +0 -15
  47. xcoll-0.3.6/xcoll/beam_elements/absorber.py +0 -39
  48. xcoll-0.3.6/xcoll/beam_elements/base.py +0 -407
  49. xcoll-0.3.6/xcoll/beam_elements/collimators_src/absorber.h +0 -141
  50. xcoll-0.3.6/xcoll/beam_elements/collimators_src/everest_collimator.h +0 -142
  51. xcoll-0.3.6/xcoll/beam_elements/collimators_src/everest_crystal.h +0 -115
  52. xcoll-0.3.6/xcoll/colldb.py +0 -1110
  53. xcoll-0.3.6/xcoll/collimator_settings.py +0 -457
  54. xcoll-0.3.6/xcoll/impacts/__init__.py +0 -1
  55. xcoll-0.3.6/xcoll/impacts/impacts.py +0 -102
  56. xcoll-0.3.6/xcoll/impacts/impacts_src/impacts.h +0 -99
  57. xcoll-0.3.6/xcoll/manager.py +0 -945
  58. xcoll-0.3.6/xcoll/scattering_routines/everest/crystal.h +0 -1302
  59. xcoll-0.3.6/xcoll/scattering_routines/everest/jaw.h +0 -235
  60. xcoll-0.3.6/xcoll/scattering_routines/everest/scatter.h +0 -169
  61. xcoll-0.3.6/xcoll/scattering_routines/everest/scatter_crystal.h +0 -260
  62. {xcoll-0.3.6 → xcoll-0.4.0}/LICENSE +0 -0
  63. {xcoll-0.3.6 → xcoll-0.4.0}/NOTICE +0 -0
  64. {xcoll-0.3.6 → xcoll-0.4.0}/README.md +0 -0
  65. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/everest/__init__.py +0 -0
  66. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/everest/constants.h +0 -0
  67. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/everest/properties.h +0 -0
  68. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/build_fluka_input.py +0 -0
  69. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/.git +0 -0
  70. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/.gitignore +0 -0
  71. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/CMakeLists.txt +0 -0
  72. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/ComponentMakefile +0 -0
  73. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/Makefile +0 -0
  74. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/README +0 -0
  75. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/Doxyfile +0 -0
  76. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO.asciidoc +0 -0
  77. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO.epub +0 -0
  78. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO.html +0 -0
  79. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO.pdf +0 -0
  80. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO__1.png +0 -0
  81. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO__2.png +0 -0
  82. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO__3.png +0 -0
  83. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO__4.png +0 -0
  84. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO__5.png +0 -0
  85. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO__6.png +0 -0
  86. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/FlukaIO__7.png +0 -0
  87. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/Makefile +0 -0
  88. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/doc/docbook.xsl +0 -0
  89. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/include/Connection.h +0 -0
  90. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/include/FlukaIO.h +0 -0
  91. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/include/FlukaIOServer.h +0 -0
  92. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/include/FortranFlukaIO.h +0 -0
  93. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/include/Message.h +0 -0
  94. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/include/ParticleInfo.h +0 -0
  95. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/lib/libFlukaIO64.a +0 -0
  96. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/lib/libFlukaIO64.so +0 -0
  97. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/samples/ClientTest.c +0 -0
  98. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/samples/ServerTest.c +0 -0
  99. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/samples/fclient.f +0 -0
  100. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/samples/fserver.f +0 -0
  101. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/Connection.c +0 -0
  102. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/Connection.d +0 -0
  103. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/Connection.o +0 -0
  104. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIO.c +0 -0
  105. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIO.d +0 -0
  106. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIO.o +0 -0
  107. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIOHandshake.c +0 -0
  108. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIOHandshake.d +0 -0
  109. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIOHandshake.h +0 -0
  110. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIOHandshake.o +0 -0
  111. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIOServer.c +0 -0
  112. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIOServer.d +0 -0
  113. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIOServer.o +0 -0
  114. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIOServer_private.h +0 -0
  115. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FlukaIO_private.h +0 -0
  116. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FortranFlukaIO.c +0 -0
  117. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FortranFlukaIO.d +0 -0
  118. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/FortranFlukaIO.o +0 -0
  119. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/NetIO.c +0 -0
  120. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/NetIO.d +0 -0
  121. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/NetIO.h +0 -0
  122. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/NetIO.o +0 -0
  123. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/src/tags +0 -0
  124. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/AllTests.cpp +0 -0
  125. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/CommonTest.h +0 -0
  126. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/ConnectionTest.cpp +0 -0
  127. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/FlukaIOServerTest.cpp +0 -0
  128. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/FlukaIOTest.cpp +0 -0
  129. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/FortranFlukaIOTest.cpp +0 -0
  130. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeConnection.c +0 -0
  131. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeConnection.h +0 -0
  132. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeFlukaIO.c +0 -0
  133. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeFlukaIO.h +0 -0
  134. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeFlukaIOHandshake.c +0 -0
  135. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeFlukaIOHandshake.h +0 -0
  136. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeFlukaIOServer.c +0 -0
  137. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeFlukaIOServer.h +0 -0
  138. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeFortranFlukaIO.h +0 -0
  139. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeNetIO.c +0 -0
  140. {xcoll-0.3.6 → xcoll-0.4.0}/xcoll/scattering_routines/fluka/flukaio/tests/fakes/FakeNetIO.h +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xcoll
3
- Version: 0.3.6
3
+ Version: 0.4.0
4
4
  Summary: Xsuite collimation package
5
5
  Home-page: https://github.com/xsuite/xcoll
6
6
  License: Apache 2.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "xcoll"
3
- version = "0.3.6"
3
+ version = "0.4.0"
4
4
  description = "Xsuite collimation package"
5
5
  homepage = "https://github.com/xsuite/xcoll"
6
6
  repository = "https://github.com/xsuite/xcoll"
@@ -0,0 +1,23 @@
1
+ # copyright ############################### #
2
+ # This file is part of the Xcoll Package. #
3
+ # Copyright (c) CERN, 2024. #
4
+ # ######################################### #
5
+
6
+ from .general import _pkg_root, __version__, citation
7
+
8
+ from .beam_elements import BlackAbsorber, BlackCrystal, EverestBlock, EverestCollimator, EverestCrystal, element_classes
9
+ from .install import install_elements
10
+ from .line_tools import assign_optics_to_collimators, open_collimators, send_to_parking, enable_scattering, disable_scattering
11
+ from .scattering_routines.everest import materials, Material, CrystalMaterial
12
+ from .colldb import CollimatorDatabase
13
+ from .interaction_record import InteractionRecord
14
+ from .rf_sweep import RFSweep
15
+ from .initial_distribution import *
16
+ from .lossmap import LossMap
17
+
18
+ # Deprecated
19
+ from .manager import CollimatorManager
20
+
21
+ # print("If you use Xcoll in your simulations, please cite us :-)")
22
+ # print(citation)
23
+
@@ -3,14 +3,16 @@
3
3
  # Copyright (c) CERN, 2024. #
4
4
  # ######################################### #
5
5
 
6
- from .base import BaseBlock, BaseCollimator
7
- from .absorber import BlackAbsorber
6
+ from .base import BaseBlock, BaseCollimator, BaseCrystal
7
+ from .absorber import BlackAbsorber, BlackCrystal
8
8
  from .everest import EverestBlock, EverestCollimator, EverestCrystal
9
9
 
10
- _all_collimator_types = {BlackAbsorber, EverestCollimator, EverestCrystal}
11
-
12
10
  block_classes = tuple(v for v in globals().values()
13
11
  if isinstance(v, type) and issubclass(v, BaseBlock) and v != BaseBlock)
12
+ # Includes crystals
14
13
  collimator_classes = tuple(v for v in globals().values()
15
- if isinstance(v, type) and issubclass(v, BaseCollimator) and v != BaseCollimator)
14
+ if isinstance(v, type) and (issubclass(v, BaseCollimator) or issubclass(v, BaseCrystal))
15
+ and v != BaseCollimator and v != BaseCrystal)
16
+ crystal_classes = tuple(v for v in globals().values()
17
+ if isinstance(v, type) and issubclass(v, BaseCrystal) and v != BaseCrystal)
16
18
  element_classes = block_classes + collimator_classes
@@ -0,0 +1,73 @@
1
+ # copyright ############################### #
2
+ # This file is part of the Xcoll Package. #
3
+ # Copyright (c) CERN, 2024. #
4
+ # ######################################### #
5
+
6
+ import xtrack as xt
7
+ import xobjects as xo
8
+ from .base import BaseCollimator, BaseCrystal, InvalidXcoll
9
+ from ..scattering_routines.geometry import XcollGeometry
10
+ from ..general import _pkg_root
11
+
12
+
13
+ class BlackAbsorber(BaseCollimator):
14
+ _xofields = { **BaseCollimator._xofields,
15
+ '_tracking': xo.Int8
16
+ }
17
+
18
+ isthick = True
19
+ allow_track = True
20
+ behaves_like_drift = True
21
+ skip_in_loss_location_refinement = True
22
+
23
+ _depends_on = [BaseCollimator, XcollGeometry]
24
+
25
+ _extra_c_sources = [
26
+ _pkg_root.joinpath('beam_elements','collimators_src','black_absorber.h')
27
+ ]
28
+
29
+ _skip_in_to_dict = BaseCollimator._skip_in_to_dict
30
+ _store_in_to_dict = BaseCollimator._store_in_to_dict
31
+ _internal_record_class = BaseCollimator._internal_record_class
32
+
33
+ def __init__(self, **kwargs):
34
+ if '_xobject' not in kwargs:
35
+ kwargs.setdefault('_tracking', True)
36
+ super().__init__(**kwargs)
37
+ if not isinstance(self._context, xo.ContextCpu):
38
+ raise ValueError('BlackAbsorber is currently not supported on GPU.')
39
+
40
+ def get_backtrack_element(self, _context=None, _buffer=None, _offset=None):
41
+ return InvalidXcoll(length=-self.length, _context=_context, _buffer=_buffer, _offset=_offset)
42
+
43
+
44
+ class BlackCrystal(BaseCrystal):
45
+ _xofields = { **BaseCrystal._xofields,
46
+ '_tracking': xo.Int8
47
+ }
48
+
49
+ isthick = True
50
+ allow_track = True
51
+ behaves_like_drift = True
52
+ skip_in_loss_location_refinement = True
53
+
54
+ _depends_on = [BaseCrystal, XcollGeometry]
55
+
56
+ _extra_c_sources = [
57
+ _pkg_root.joinpath('beam_elements','collimators_src','black_crystal.h')
58
+ ]
59
+
60
+ _skip_in_to_dict = BaseCrystal._skip_in_to_dict
61
+ _store_in_to_dict = BaseCrystal._store_in_to_dict
62
+ _internal_record_class = BaseCrystal._internal_record_class
63
+
64
+ def __init__(self, **kwargs):
65
+ if '_xobject' not in kwargs:
66
+ kwargs.setdefault('_tracking', True)
67
+ super().__init__(**kwargs)
68
+ if not isinstance(self._context, xo.ContextCpu):
69
+ raise ValueError('BlackCrystal is currently not supported on GPU.')
70
+
71
+ def get_backtrack_element(self, _context=None, _buffer=None, _offset=None):
72
+ return InvalidXcoll(length=-self.length, _context=_context, _buffer=_buffer, _offset=_offset)
73
+