xtrack 0.84.8__tar.gz → 0.86.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.
Files changed (318) hide show
  1. {xtrack-0.84.8/xtrack.egg-info → xtrack-0.86.0}/PKG-INFO +2 -1
  2. {xtrack-0.84.8 → xtrack-0.86.0}/pyproject.toml +1 -1
  3. {xtrack-0.84.8 → xtrack-0.86.0}/setup.py +3 -3
  4. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_elements_classflags.py +5 -0
  5. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_elements_thick.py +186 -21
  6. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_fcc_ee_solenoid_correction.py +7 -5
  7. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +8 -5
  8. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_line.py +26 -11
  9. xtrack-0.86.0/tests/test_load.py +153 -0
  10. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_mad_writer.py +2 -1
  11. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_magnet.py +1 -1
  12. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_native_madloader.py +5 -5
  13. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_radiation_equilibrium_emittances_thick.py +2 -2
  14. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_slice_elements.py +3 -3
  15. xtrack-0.86.0/tests/test_solenoid_bz_map_vs_boris.py +272 -0
  16. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_spin.py +63 -19
  17. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_thick_lhc.py +1 -0
  18. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/__init__.py +1 -0
  19. xtrack-0.86.0/xtrack/_version.py +1 -0
  20. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/__init__.py +5 -2
  21. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements.py +240 -5
  22. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/bend.h +2 -0
  23. xtrack-0.84.8/xtrack/beam_elements/elements_src/solenoid.h → xtrack-0.86.0/xtrack/beam_elements/elements_src/legacy_solenoid.h +4 -4
  24. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/magnet.h +2 -0
  25. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/magnet_edge.h +6 -4
  26. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/multipole.h +2 -0
  27. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/octupole.h +2 -0
  28. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/quadrupole.h +2 -0
  29. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/rbend.h +2 -0
  30. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/sextupole.h +2 -0
  31. xtrack-0.86.0/xtrack/beam_elements/elements_src/slnd.h +68 -0
  32. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thick_slice_bend.h +2 -0
  33. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +2 -0
  34. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +2 -0
  35. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +2 -0
  36. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +2 -0
  37. xtrack-0.86.0/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +83 -0
  38. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_bend.h +2 -0
  39. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +2 -0
  40. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +2 -0
  41. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +2 -0
  42. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +2 -0
  43. xtrack-0.86.0/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +51 -0
  44. xtrack-0.86.0/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +51 -0
  45. xtrack-0.84.8/xtrack/beam_elements/elements_src/track_solenoid.h → xtrack-0.86.0/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +2 -1
  46. xtrack-0.84.8/xtrack/beam_elements/elements_src/track_magnet_radiation.h → xtrack-0.86.0/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +3 -3
  47. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_magnet.h +122 -31
  48. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_magnet_drift.h +75 -0
  49. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_magnet_edge.h +25 -7
  50. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_magnet_kick.h +130 -9
  51. xtrack-0.86.0/xtrack/beam_elements/elements_src/track_magnet_radiation.h +336 -0
  52. xtrack-0.86.0/xtrack/beam_elements/elements_src/variable_solenoid.h +102 -0
  53. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/slice_elements.py +68 -1
  54. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/slice_elements_thick.py +33 -1
  55. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/environment.py +1 -1
  56. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/general.py +12 -0
  57. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/json.py +10 -1
  58. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/line.py +42 -17
  59. xtrack-0.86.0/xtrack/load.py +54 -0
  60. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/mad_loader.py +1 -2
  61. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/mad_parser/loader.py +11 -1
  62. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/mad_writer.py +1 -2
  63. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/madng_interface.py +28 -23
  64. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/tapering.py +4 -0
  65. {xtrack-0.84.8 → xtrack-0.86.0/xtrack.egg-info}/PKG-INFO +2 -1
  66. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack.egg-info/SOURCES.txt +12 -4
  67. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack.egg-info/requires.txt +1 -0
  68. xtrack-0.84.8/xtrack/_version.py +0 -1
  69. xtrack-0.84.8/xtrack/beam_elements/elements_src/thick_slice_solenoid.h +0 -39
  70. {xtrack-0.84.8 → xtrack-0.86.0}/LICENSE +0 -0
  71. {xtrack-0.84.8 → xtrack-0.86.0}/MANIFEST.in +0 -0
  72. {xtrack-0.84.8 → xtrack-0.86.0}/README.md +0 -0
  73. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/__init__.py +0 -0
  74. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/base_classes.py +0 -0
  75. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/BB6D.py +0 -0
  76. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  77. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/__init__.py +0 -0
  78. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/beambeam.py +0 -0
  79. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/boost.py +0 -0
  80. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  81. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  82. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/qgauss.py +0 -0
  83. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/slicing.py +0 -0
  84. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/be_beamfields/spacecharge.py +0 -0
  85. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/elements.py +0 -0
  86. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/line.py +0 -0
  87. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/mathlibs.py +0 -0
  88. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/particles.py +0 -0
  89. {xtrack-0.84.8 → xtrack-0.86.0}/ducktrack/temp_pyparticles.py +0 -0
  90. {xtrack-0.84.8 → xtrack-0.86.0}/setup.cfg +0 -0
  91. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_acceleration.py +0 -0
  92. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_amplitude_detuning.py +0 -0
  93. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_aperture_table.py +0 -0
  94. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  95. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_apertures.py +0 -0
  96. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_attr_replicas_and_slices.py +0 -0
  97. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_bucket_with_ref_energy_change.py +0 -0
  98. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_cavity_absolute_time.py +0 -0
  99. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_chromatic_functions_vs_madx.py +0 -0
  100. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_coasting.py +0 -0
  101. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_collective_tracker.py +0 -0
  102. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_collimation.py +0 -0
  103. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_electron_cooler.py +0 -0
  104. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_element_characterization_functions.py +0 -0
  105. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_element_internal_record.py +0 -0
  106. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_elements.py +0 -0
  107. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_environment.py +0 -0
  108. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_footprint.py +0 -0
  109. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_freeze_longitudinal.py +0 -0
  110. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_full_rings.py +0 -0
  111. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_h6_sps_beamline.py +0 -0
  112. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_hvkick.py +0 -0
  113. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_ions.py +0 -0
  114. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_legacy_multiline_to_env.py +0 -0
  115. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_lhc_env.py +0 -0
  116. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_lhc_match_phase_15.py +0 -0
  117. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_lumi.py +0 -0
  118. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_madloader.py +0 -0
  119. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_madnginterface.py +0 -0
  120. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_match_and_track_from_element.py +0 -0
  121. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_match_coupling_knob.py +0 -0
  122. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_match_nested.py +0 -0
  123. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_match_optics_and_ip_knob.py +0 -0
  124. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  125. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_match_orbit_bump.py +0 -0
  126. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_match_tune_chroma_cminus.py +0 -0
  127. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_monitor.py +0 -0
  128. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_multi_bunch_gauss.py +0 -0
  129. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_multiline.py +0 -0
  130. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_multisetter.py +0 -0
  131. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_multispecies.py +0 -0
  132. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_optimize_for_tracking.py +0 -0
  133. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_particles.py +0 -0
  134. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_particles_basics.py +0 -0
  135. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_particles_pdg.py +0 -0
  136. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  137. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_pipeline.py +0 -0
  138. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_prebuild_kernels.py +0 -0
  139. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_ps_against_ptc.py +0 -0
  140. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_ps_multiturn_twiss.py +0 -0
  141. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_psb_chicane.py +0 -0
  142. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_pyht_interface.py +0 -0
  143. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_radial_steering.py +0 -0
  144. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_radiation.py +0 -0
  145. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_radiation_equilibrium_emittances.py +0 -0
  146. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_radiation_integrals.py +0 -0
  147. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_random_gen.py +0 -0
  148. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_random_gen_exp.py +0 -0
  149. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_random_gen_gauss.py +0 -0
  150. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_random_gen_ruth.py +0 -0
  151. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_rbend_rbarc.py +0 -0
  152. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_rf_track.py +0 -0
  153. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_rotation_signs.py +0 -0
  154. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_second_order_taylor_map.py +0 -0
  155. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_seeds.py +0 -0
  156. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_slice_and_insert_with_replicas.py +0 -0
  157. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_slicing.py +0 -0
  158. /xtrack-0.84.8/tests/test_solenoid_bz_map_vs_boris.py → /xtrack-0.86.0/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
  159. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_spacecharge_in_ring.py +0 -0
  160. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_sps_thick.py +0 -0
  161. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_survey.py +0 -0
  162. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_tapering.py +0 -0
  163. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_tilt_shifts.py +0 -0
  164. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_tracker.py +0 -0
  165. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_trajectory_correcton.py +0 -0
  166. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_twiss.py +0 -0
  167. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_twiss_vs_madx_psb.py +0 -0
  168. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_vs_madx.py +0 -0
  169. {xtrack-0.84.8 → xtrack-0.86.0}/tests/test_xmask_orbit_correction.py +0 -0
  170. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/_temp/__init__.py +0 -0
  171. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  172. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  173. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  174. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/_temp/lhc_match/__init__.py +0 -0
  175. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  176. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  177. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  178. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/aperture_meas.py +0 -0
  179. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/base_element.py +0 -0
  180. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/apertures.py +0 -0
  181. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  182. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  183. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  184. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  185. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  186. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  187. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/beam_interaction.py +0 -0
  188. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  189. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  190. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
  191. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/drift.h +0 -0
  192. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  193. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  194. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  195. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  196. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
  197. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  198. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
  199. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/elens.h +0 -0
  200. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  201. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
  202. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
  203. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
  204. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
  205. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/marker.h +0 -0
  206. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
  207. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  208. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  209. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  210. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  211. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  212. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  213. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  214. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thick_slice_drift.h +0 -0
  215. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
  216. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
  217. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
  218. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
  219. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
  220. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
  221. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
  222. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
  223. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
  224. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
  225. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_bend.h +0 -0
  226. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
  227. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  228. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  229. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  230. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
  231. /xtrack-0.84.8/xtrack/beam_elements/elements_src/track_multipolar_components.h → /xtrack-0.86.0/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
  232. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
  233. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_multipole.h +0 -0
  234. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_quadrupole.h +0 -0
  235. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  236. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  237. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  238. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
  239. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  240. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  241. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/wedge.h +0 -0
  242. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/wire.h +0 -0
  243. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  244. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  245. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  246. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  247. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/exciter.py +0 -0
  248. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/magnets.py +0 -0
  249. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/beam_elements/rft_element.py +0 -0
  250. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/footprint.py +0 -0
  251. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/headers/atomicadd.h +0 -0
  252. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/headers/checks.h +0 -0
  253. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/headers/constants.h +0 -0
  254. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/headers/particle_states.h +0 -0
  255. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/headers/synrad_spectrum.h +0 -0
  256. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/headers/track.h +0 -0
  257. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/internal_record.py +0 -0
  258. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/linear_normal_form.py +0 -0
  259. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/loss_location_refinement/__init__.py +0 -0
  260. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
  261. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/lumi.py +0 -0
  262. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/mad_parser/__init__.py +0 -0
  263. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/mad_parser/madx.lark +0 -0
  264. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/mad_parser/parse.py +0 -0
  265. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/match.py +0 -0
  266. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/__init__.py +0 -0
  267. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/beam_position_monitor.h +0 -0
  268. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/beam_position_monitor.py +0 -0
  269. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/beam_profile_monitor.h +0 -0
  270. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/beam_profile_monitor.py +0 -0
  271. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/beam_size_monitor.h +0 -0
  272. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/beam_size_monitor.py +0 -0
  273. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/last_turns_monitor.h +0 -0
  274. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/last_turns_monitor.py +0 -0
  275. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/particles_monitor.h +0 -0
  276. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/monitors/particles_monitor.py +0 -0
  277. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/multiline.py +0 -0
  278. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/multiline_legacy/__init__.py +0 -0
  279. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
  280. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/multiline_legacy/shared_knobs.py +0 -0
  281. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/multisetter/__init__.py +0 -0
  282. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/multisetter/multisetter.py +0 -0
  283. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/particles/__init__.py +0 -0
  284. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/particles/constants.py +0 -0
  285. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/particles/masses.py +0 -0
  286. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/particles/particles.py +0 -0
  287. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/particles/pdg.py +0 -0
  288. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/particles/rng_src/base_rng.h +0 -0
  289. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/particles/rng_src/particles_rng.h +0 -0
  290. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/pipeline/__init__.py +0 -0
  291. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/pipeline/core.py +0 -0
  292. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/pipeline/manager.py +0 -0
  293. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/pipeline/multitracker.py +0 -0
  294. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/progress_indicator.py +0 -0
  295. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/random/__init__.py +0 -0
  296. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/random/random_generators.py +0 -0
  297. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/random/random_src/exponential.h +0 -0
  298. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  299. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/random/random_src/normal.h +0 -0
  300. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/random/random_src/rutherford.h +0 -0
  301. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/random/random_src/uniform.h +0 -0
  302. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/random/random_src/uniform_accurate.h +0 -0
  303. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/slicing.py +0 -0
  304. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/survey.py +0 -0
  305. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/svgutils/__init__.py +0 -0
  306. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/svgutils/parser.py +0 -0
  307. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/svgutils/path.py +0 -0
  308. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/svgutils/svgutils.py +0 -0
  309. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/synctime.py +0 -0
  310. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/targets.py +0 -0
  311. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/tracker.py +0 -0
  312. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/tracker_data.py +0 -0
  313. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/tracker_src/tracker.h +0 -0
  314. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/trajectory_correction.py +0 -0
  315. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/twiss.py +0 -0
  316. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack/twissplot.py +0 -0
  317. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack.egg-info/dependency_links.txt +0 -0
  318. {xtrack-0.84.8 → xtrack-0.86.0}/xtrack.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtrack
3
- Version: 0.84.8
3
+ Version: 0.86.0
4
4
  Summary: Tracking library for particle accelerators
5
5
  Home-page: https://xsuite.readthedocs.io/
6
6
  Download-URL: https://pypi.python.org/pypi/xtrack
@@ -23,6 +23,7 @@ Requires-Dist: PyHEADTAIL; extra == "tests"
23
23
  Requires-Dist: pytest; extra == "tests"
24
24
  Requires-Dist: pytest-mock; extra == "tests"
25
25
  Requires-Dist: pymadng; extra == "tests"
26
+ Requires-Dist: requests-mock; extra == "tests"
26
27
  Provides-Extra: notebooks
27
28
  Requires-Dist: jupyter; extra == "notebooks"
28
29
  Requires-Dist: ipympl; extra == "notebooks"
@@ -3,4 +3,4 @@ build-backend = 'setuptools.build_meta'
3
3
  requires = [
4
4
  'setuptools >= 43.0.0',
5
5
  'numpy',
6
- ]
6
+ ]
@@ -46,10 +46,10 @@ setup(
46
46
  'tqdm',
47
47
  'xobjects',
48
48
  'xdeps'
49
- ],
49
+ ],
50
50
  extras_require={
51
51
  'tests': ['cpymad', 'nafflib', 'PyHEADTAIL', 'pytest', 'pytest-mock',
52
- 'pymadng'],
52
+ 'pymadng', 'requests-mock'],
53
53
  'notebooks': ['jupyter', 'ipympl', 'xplt'],
54
54
  },
55
- )
55
+ )
@@ -13,6 +13,8 @@ checks = [
13
13
  (xt.SRotation, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=None , _inherit_strengths=None)),
14
14
  (xt.YRotation, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=None , _inherit_strengths=None)),
15
15
  (xt.Solenoid, dict(isthick=True , allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
16
+ (xt.UniformSolenoid, dict(isthick=True , allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
17
+ (xt.VariableSolenoid, dict(isthick=True , allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
16
18
  (xt.RFMultipole, dict(isthick=False, allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
17
19
  (xt.DipoleEdge, dict(isthick=False, allow_rot_and_shift=True , rot_and_shift_from_parent=None , _inherit_strengths=None)),
18
20
  (xt.SimpleThinBend, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=None , _inherit_strengths=None)),
@@ -31,6 +33,7 @@ checks = [
31
33
  (xt.DriftSliceSextupole, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=False, _inherit_strengths=False)),
32
34
  (xt.ThickSliceBend, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
33
35
  (xt.ThickSliceOctupole, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
36
+ (xt.ThickSliceUniformSolenoid,dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
34
37
  (xt.ThickSliceQuadrupole, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
35
38
  (xt.ThickSliceSextupole, dict(isthick=True, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
36
39
  (xt.ThinSliceBend, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
@@ -39,6 +42,8 @@ checks = [
39
42
  (xt.ThinSliceOctupole, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
40
43
  (xt.ThinSliceQuadrupole, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
41
44
  (xt.ThinSliceSextupole, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=True )),
45
+ (xt.ThinSliceUniformSolenoidEntry, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=False)),
46
+ (xt.ThinSliceUniformSolenoidExit, dict(isthick=False, allow_rot_and_shift=False, rot_and_shift_from_parent=True , _inherit_strengths=False)),
42
47
  ]
43
48
 
44
49
  def test_elements_classflags():
@@ -1318,7 +1318,7 @@ def test_solenoid_against_madx(test_context, ks, ksi, length):
1318
1318
 
1319
1319
  @for_all_test_contexts
1320
1320
  def test_solenoid_thick_drift_like(test_context):
1321
- solenoid = xt.Solenoid(ks=1.001e-9, length=1, _context=test_context)
1321
+ solenoid = xt.UniformSolenoid(ks=1.001e-9, length=1, _context=test_context)
1322
1322
  l_drift = xt.Line(elements=[xt.Drift(length=1)])
1323
1323
  l_drift.config.XTRACK_USE_EXACT_DRIFTS = True
1324
1324
  l_drift.build_tracker(_context=test_context)
@@ -1353,7 +1353,7 @@ def test_solenoid_thick_drift_like(test_context):
1353
1353
  ],
1354
1354
  )
1355
1355
  def test_solenoid_thick_analytic(test_context, length, expected):
1356
- solenoid = xt.Solenoid(
1356
+ solenoid = xt.UniformSolenoid(
1357
1357
  ks=1,
1358
1358
  length=length,
1359
1359
  _context=test_context,
@@ -1392,8 +1392,9 @@ def test_solenoid_with_mult_kicks(test_context, backtrack):
1392
1392
  knl = np.array([0.1, 0.4, 0.5])
1393
1393
  ksl = np.array([0.2, 0.3, 0.6])
1394
1394
 
1395
- solenoid_with_kicks = xt.Solenoid(
1395
+ solenoid_with_kicks = xt.UniformSolenoid(
1396
1396
  length=length,
1397
+ integrator='uniform',
1397
1398
  ks=ks,
1398
1399
  num_multipole_kicks=num_kicks,
1399
1400
  knl=knl,
@@ -1402,11 +1403,11 @@ def test_solenoid_with_mult_kicks(test_context, backtrack):
1402
1403
 
1403
1404
  line_ref = xt.Line(
1404
1405
  elements=[
1405
- xt.Solenoid(length=length / (num_kicks + 1), ks=ks),
1406
+ xt.UniformSolenoid(length=length / (num_kicks)/2, ks=ks),
1406
1407
  xt.Multipole(knl=knl / num_kicks, ksl=ksl / num_kicks),
1407
- xt.Solenoid(length=length / (num_kicks + 1), ks=ks),
1408
+ xt.UniformSolenoid(length=length / (num_kicks), ks=ks),
1408
1409
  xt.Multipole(knl=knl / num_kicks, ksl=ksl / num_kicks),
1409
- xt.Solenoid(length=length / (num_kicks + 1), ks=ks),
1410
+ xt.UniformSolenoid(length=length / (num_kicks) /2, ks=ks),
1410
1411
  ],
1411
1412
  element_names=[
1412
1413
  'sol_0', 'kick_0', 'sol_1', 'kick_1', 'sol_2',
@@ -1457,7 +1458,7 @@ def test_solenoid_shifted_and_rotated_multipolar_kick(test_context):
1457
1458
  mult_rot_y_rad = 0.2
1458
1459
  mult_shift_x = 0.3
1459
1460
 
1460
- solenoid = xt.Solenoid(
1461
+ solenoid = xt.Solenoid( # Need to use legacy one
1461
1462
  ks=ks,
1462
1463
  length=length,
1463
1464
  knl=knl,
@@ -1467,7 +1468,7 @@ def test_solenoid_shifted_and_rotated_multipolar_kick(test_context):
1467
1468
  mult_shift_x=mult_shift_x,
1468
1469
  )
1469
1470
 
1470
- solenoid_no_kick = xt.Solenoid(ks=0.9, length=0.25)
1471
+ solenoid_no_kick = xt.UniformSolenoid(ks=0.9, length=0.25)
1471
1472
  kick = xt.Multipole(knl=np.array(knl) / 3, ksl=np.array(ksl) / 3)
1472
1473
 
1473
1474
  line_test = xt.Line(elements=[solenoid])
@@ -1527,11 +1528,11 @@ def test_solenoid_multipole_shifts(shift_x, shift_y, test_element_name):
1527
1528
  quad = xt.Quadrupole(length=1, k1=K1)
1528
1529
  sext = xt.Sextupole(length=1, k2=K2)
1529
1530
 
1530
- bend_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS,
1531
+ bend_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS, # need legacy
1531
1532
  knl=[K0 * (1 / N_SLICES), 0, 0], num_multipole_kicks=1)
1532
- quad_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS,
1533
+ quad_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS, # need legacy
1533
1534
  knl=[0, K1 * (1 / N_SLICES), 0], num_multipole_kicks=1)
1534
- sext_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS,
1535
+ sext_sol = xt.Solenoid(length=1 / N_SLICES, ks=KS, # need legacy
1535
1536
  knl=[0, 0, K2 * (1 / N_SLICES)], num_multipole_kicks=1)
1536
1537
 
1537
1538
  ################################################################################
@@ -1588,8 +1589,8 @@ def test_solenoid_multipole_shifts(shift_x, shift_y, test_element_name):
1588
1589
  ########################################
1589
1590
  # Assertions
1590
1591
  ########################################
1591
- assert np.isclose(tw.x[-1], tw_sol.x[-1], rtol=1E-6)
1592
- assert np.isclose(tw.y[-1], tw_sol.y[-1], rtol=1E-6)
1592
+ xo.assert_allclose(tw.x[-1], tw_sol.x[-1], rtol=2E-6)
1593
+ xo.assert_allclose(tw.y[-1], tw_sol.y[-1], rtol=2E-6)
1593
1594
 
1594
1595
 
1595
1596
  def test_solenoid_multipole_rotations():
@@ -1613,7 +1614,7 @@ def test_solenoid_multipole_rotations():
1613
1614
  bl_components_out = [env.new('bl_drift1', xt.Drift, length=1)]
1614
1615
 
1615
1616
  bl_components_sol = [
1616
- env.new(f'bl_sol.{i}', xt.Solenoid,
1617
+ env.new(f'bl_sol.{i}', xt.UniformSolenoid,
1617
1618
  length=(L_SOL / N_SLICES),
1618
1619
  ks=0,
1619
1620
  knl=[K0 * (L_SOL / N_SLICES), 0, 0],
@@ -1637,7 +1638,7 @@ def test_solenoid_multipole_rotations():
1637
1638
  env.new('hrot_drift1', xt.Drift, length=1)]
1638
1639
 
1639
1640
  hrot_components_sol = [
1640
- env.new(f'hrot_sol.{i}', xt.Solenoid,
1641
+ env.new(f'hrot_sol.{i}', xt.Solenoid, # need legacy
1641
1642
  length=(L_SOL / N_SLICES) * np.cos(XING_RAD),
1642
1643
  ks=0,
1643
1644
  knl=[K0 * (L_SOL / N_SLICES), 0, 0],
@@ -1663,7 +1664,7 @@ def test_solenoid_multipole_rotations():
1663
1664
  env.new('vrot_drift1', xt.Drift, length=1)]
1664
1665
 
1665
1666
  vrot_components_sol = [
1666
- env.new(f'vrot_sol.{i}', xt.Solenoid,
1667
+ env.new(f'vrot_sol.{i}', xt.Solenoid, # need legacy
1667
1668
  length=(L_SOL / N_SLICES) * np.cos(XING_RAD),
1668
1669
  ks=0,
1669
1670
  knl=[K0 * (L_SOL / N_SLICES), 0, 0],
@@ -1753,7 +1754,7 @@ def test_drift_like_solenoid_with_kicks_radiation(radiation_mode, config):
1753
1754
  ])
1754
1755
 
1755
1756
  line_ref = xt.Line(elements=[
1756
- xt.Solenoid(ks=0, length=1, knl=knl, ksl=ksl, num_multipole_kicks=1)
1757
+ xt.UniformSolenoid(ks=0, length=1, knl=knl, ksl=ksl, num_multipole_kicks=1)
1757
1758
  ])
1758
1759
 
1759
1760
  coords = np.linspace(-0.05, 0.05, 10)
@@ -1809,9 +1810,9 @@ def test_solenoid_with_kicks_radiation(radiation_mode, config):
1809
1810
  knl = [0.1, 0.4, 0.5]
1810
1811
  ksl = [0.2, 0.3, 0.6]
1811
1812
 
1812
- sol_ref = xt.Solenoid(ks=ks, length=l)
1813
- sol_1 = xt.Solenoid(ks=ks, length=l, knl=knl, ksl=ksl, num_multipole_kicks=1)
1814
- sol_3 = xt.Solenoid(ks=ks, length=l, knl=knl, ksl=ksl, num_multipole_kicks=3)
1813
+ sol_ref = xt.UniformSolenoid(ks=ks, length=l)
1814
+ sol_1 = xt.UniformSolenoid(ks=ks, length=l, knl=knl, ksl=ksl, num_multipole_kicks=1)
1815
+ sol_3 = xt.UniformSolenoid(ks=ks, length=l, knl=knl, ksl=ksl, num_multipole_kicks=3)
1815
1816
 
1816
1817
  line_ref = xt.Line(elements=[sol_ref])
1817
1818
  line_1 = xt.Line(elements=[sol_1])
@@ -1852,7 +1853,7 @@ def test_solenoid_with_kicks_radiation(radiation_mode, config):
1852
1853
  d_delta_3 = p_3.delta - p0.delta
1853
1854
 
1854
1855
  xo.assert_allclose(
1855
- d_delta_1 - d_delta_ref, d_delta_3 - d_delta_ref, rtol=0.01, atol=1e-15
1856
+ d_delta_1 - d_delta_ref, d_delta_3 - d_delta_ref, rtol=0.01, atol=2e-15
1856
1857
  )
1857
1858
 
1858
1859
 
@@ -2197,3 +2198,167 @@ def test_configure_model():
2197
2198
  assert line['o1'].edge_exit_active == False
2198
2199
  assert line['o1'].integrator == 'uniform'
2199
2200
  assert line['o1'].num_multipole_kicks == 7
2201
+
2202
+ @for_all_test_contexts
2203
+ @pytest.mark.parametrize('reference', ['legacy', 'variable'])
2204
+ def test_uniform_solenoid_with_slices(test_context, reference):
2205
+
2206
+ length = 3.
2207
+ ks = 2.
2208
+
2209
+ sol = xt.UniformSolenoid(length=length, ks=ks, _context=test_context)
2210
+
2211
+ if reference == 'legacy':
2212
+ # Check against legacy solenoid
2213
+ ref_sol = xt.Solenoid(length=length, ks=ks) # Old solenoid
2214
+ elif reference == 'variable':
2215
+ # Check against variable solenoid
2216
+ ref_sol = xt.VariableSolenoid(length=length, ks_profile=[ks, ks])
2217
+ else:
2218
+ raise ValueError("Reference must be 'legacy' or 'variable'")
2219
+
2220
+ p0 = xt.Particles(p0c=1e9, x=1e-3, y=2e-3)
2221
+
2222
+ p = p0.copy(_context=test_context)
2223
+ p_ref = p0.copy()
2224
+
2225
+ sol.track(p)
2226
+ ref_sol.track(p_ref)
2227
+
2228
+ xo.assert_allclose(p.x, p_ref.x, rtol=0, atol=1e-10)
2229
+ xo.assert_allclose(p.y, p_ref.y, rtol=0, atol=1e-10)
2230
+ xo.assert_allclose(p.px, p_ref.px, rtol=0, atol=1e-10)
2231
+ xo.assert_allclose(p.py, p_ref.py, rtol=0, atol=1e-10)
2232
+ xo.assert_allclose(p.delta, p_ref.delta, rtol=0, atol=1e-10)
2233
+ xo.assert_allclose(p.ax, 0., rtol=0, atol=1e-10)
2234
+ xo.assert_allclose(p.ay, 0., rtol=0, atol=1e-10)
2235
+ xo.assert_allclose(p.kin_px, p_ref.px, rtol=0, atol=1e-10)
2236
+ xo.assert_allclose(p.kin_py, p_ref.py, rtol=0, atol=1e-10)
2237
+
2238
+ sol.edge_exit_active = False
2239
+ p = p0.copy(_context=test_context)
2240
+ sol.track(p)
2241
+
2242
+ xo.assert_allclose(p.x, p_ref.x, rtol=0, atol=1e-10)
2243
+ xo.assert_allclose(p.y, p_ref.y, rtol=0, atol=1e-10)
2244
+ xo.assert_allclose(p.px, p_ref.px, rtol=0, atol=1e-10)
2245
+ xo.assert_allclose(p.py, p_ref.py, rtol=0, atol=1e-10)
2246
+ xo.assert_allclose(p.delta, p_ref.delta, rtol=0, atol=1e-10)
2247
+ xo.assert_allclose(p.ax, p_ref.ax, rtol=0, atol=1e-10)
2248
+ xo.assert_allclose(p.ay, p_ref.ay, rtol=0, atol=1e-10)
2249
+ xo.assert_allclose(p.kin_px, p_ref.kin_px, rtol=0, atol=1e-10)
2250
+ xo.assert_allclose(p.kin_py, p_ref.kin_py, rtol=0, atol=1e-10)
2251
+
2252
+ p0_for_backtrack = p.copy()
2253
+ p_for_backtrack = p0_for_backtrack.copy(_context=test_context)
2254
+ lsol = xt.Line([sol])
2255
+ lsol.build_tracker(_context=test_context)
2256
+
2257
+ sol.edge_entry_active = True
2258
+ sol.edge_exit_active = True
2259
+
2260
+ lsol.track(p_for_backtrack, backtrack=True)
2261
+ xo.assert_allclose(p_for_backtrack.x, p0.x, rtol=0, atol=1e-10)
2262
+ xo.assert_allclose(p_for_backtrack.y, p0.y, rtol=0, atol=1e-10)
2263
+ xo.assert_allclose(p_for_backtrack.px, p0.px, rtol=0, atol=1e-10)
2264
+ xo.assert_allclose(p_for_backtrack.py, p0.py, rtol=0, atol=1e-10)
2265
+ xo.assert_allclose(p_for_backtrack.delta, p0.delta, rtol=0, atol=1e-10)
2266
+ xo.assert_allclose(p_for_backtrack.ax, 0., rtol=0, atol=1e-10)
2267
+ xo.assert_allclose(p_for_backtrack.ay, 0., rtol=0, atol=1e-10)
2268
+ xo.assert_allclose(p_for_backtrack.kin_px, p0.px, rtol=0, atol=1e-10)
2269
+ xo.assert_allclose(p_for_backtrack.kin_py, p0.py, rtol=0, atol=1e-10)
2270
+
2271
+ sol.edge_entry_active = False
2272
+ p_for_backtrack = p0_for_backtrack.copy(_context=test_context)
2273
+ lsol.track(p_for_backtrack, backtrack=True)
2274
+ xo.assert_allclose(p_for_backtrack.x, p0.x, rtol=0, atol=1e-10)
2275
+ xo.assert_allclose(p_for_backtrack.y, p0.y, rtol=0, atol=1e-10)
2276
+ xo.assert_allclose(p_for_backtrack.px, p0.px, rtol=0, atol=1e-10)
2277
+ xo.assert_allclose(p_for_backtrack.py, p0.py, rtol=0, atol=1e-10)
2278
+ xo.assert_allclose(p_for_backtrack.delta, p0.delta, rtol=0, atol=1e-10)
2279
+ xo.assert_allclose(p_for_backtrack.ax, -ks /2 *p0.y, rtol=0, atol=1e-10)
2280
+ xo.assert_allclose(p_for_backtrack.ay, ks /2 *p0.x, rtol=0, atol=1e-10)
2281
+ xo.assert_allclose(p_for_backtrack.kin_px, p0.px + ks /2 *p0.y, rtol=0, atol=1e-10)
2282
+ xo.assert_allclose(p_for_backtrack.kin_py, p0.py - ks /2 *p0.x, rtol=0, atol=1e-10)
2283
+
2284
+
2285
+ sol.edge_entry_active = True
2286
+ sol.edge_exit_active = True
2287
+
2288
+ lsol_sliced = lsol.copy(shallow=True)
2289
+ lsol_sliced.cut_at_s([length / 3, 2 * length / 3])
2290
+ lsol_sliced.build_tracker(_context=test_context)
2291
+ tt_sliced = lsol_sliced.get_table(attr=True)
2292
+
2293
+ assert np.all(tt_sliced.name == np.array(
2294
+ ['e0_entry', 'e0..entry_map', 'e0..0', 'e0..1', 'e0..2',
2295
+ 'e0..exit_map', 'e0_exit', '_end_point']))
2296
+
2297
+ xo.assert_allclose(tt_sliced.s, np.array([0., 0., 0., 1., 2., 3., 3., 3.]),
2298
+ rtol=0, atol=1e-10)
2299
+
2300
+ assert np.all(tt_sliced.element_type == np.array(
2301
+ ['Marker', 'ThinSliceUniformSolenoidEntry',
2302
+ 'ThickSliceUniformSolenoid', 'ThickSliceUniformSolenoid',
2303
+ 'ThickSliceUniformSolenoid', 'ThinSliceUniformSolenoidExit',
2304
+ 'Marker', '']))
2305
+
2306
+ lsol_sliced.particle_ref = xt.Particles(p0c=100e9)
2307
+ tw = lsol_sliced.twiss(x=p0.x, px=p0.px, y=p0.y, py=p0.py, betx=1, bety=1)
2308
+ p_ref = p0.copy()
2309
+ ref_sol.track(p_ref)
2310
+
2311
+ xo.assert_allclose(tw.x[-1], p_ref.x, rtol=0, atol=1e-10)
2312
+ xo.assert_allclose(tw.px[-1], p_ref.px, rtol=0, atol=1e-10)
2313
+ xo.assert_allclose(tw.y[-1], p_ref.y, rtol=0, atol=1e-10)
2314
+ xo.assert_allclose(tw.py[-1], p_ref.py, rtol=0, atol=1e-10)
2315
+ xo.assert_allclose(tw.delta[-1], p_ref.delta, rtol=0, atol=1e-10)
2316
+
2317
+ tw['ax'] = tw.px - tw.kin_px
2318
+ tw['ay'] = tw.py - tw.kin_py
2319
+
2320
+ # tw.cols['ax ay'] should look as follows:
2321
+ # TwissTable: 8 rows, 3 cols
2322
+ # name ax ay
2323
+ # e0_entry 0 0
2324
+ # e0..entry_map 0 0
2325
+ # e0..0 -0.002 0.001
2326
+ # e0..1 -0.000129201 0.00120122
2327
+ # e0..2 -0.000724768 -0.000583627
2328
+ # e0..exit_map -0.00209988 0.000700686
2329
+ # e0_exit 0 0
2330
+ # _end_point 0 0
2331
+
2332
+ tw_before = tw.rows[:'e0..entry_map']
2333
+ tw_inside = tw.rows['e0..0':'e0..exit_map']
2334
+ tw_after = tw.rows['e0_exit':]
2335
+
2336
+ xo.assert_allclose(tw_before.ax, 0, rtol=0, atol=1e-20)
2337
+ xo.assert_allclose(tw_before.ay, 0, rtol=0, atol=1e-20)
2338
+ xo.assert_allclose(tw_inside.ax, -0.5 * ks * tw_inside.y, rtol=0, atol=1e-15)
2339
+ xo.assert_allclose(tw_inside.ay, 0.5 * ks * tw_inside.x, rtol=0, atol=1e-15)
2340
+ xo.assert_allclose(tw_after.ax, 0, rtol=0, atol=1e-20)
2341
+ xo.assert_allclose(tw_after.ay, 0, rtol=0, atol=1e-20)
2342
+
2343
+ # Twiss backwards
2344
+ tw_back = lsol_sliced.twiss(init=tw.get_twiss_init('e0_exit'))
2345
+ tw_back['ax'] = tw_back.px - tw_back.kin_px
2346
+ tw_back['ay'] = tw_back.py - tw_back.kin_py
2347
+
2348
+ xo.assert_allclose(tw_back.x, tw.x, rtol=0, atol=1e-10)
2349
+ xo.assert_allclose(tw_back.px, tw.px, rtol=0, atol=1e-10)
2350
+ xo.assert_allclose(tw_back.y, tw.y, rtol=0, atol=1e-10)
2351
+ xo.assert_allclose(tw_back.py, tw.py, rtol=0, atol=1e-10)
2352
+ xo.assert_allclose(tw_back.delta, tw.delta, rtol=0, atol=1e-10)
2353
+ xo.assert_allclose(tw_back.ax, tw.ax, rtol=0, atol=1e-10)
2354
+ xo.assert_allclose(tw_back.ay, tw.ay, rtol=0, atol=1e-10)
2355
+
2356
+ sol.edge_entry_active = False
2357
+ tw_back = lsol_sliced.twiss(init=tw.get_twiss_init('e0_exit'))
2358
+ tw_back['ax'] = tw_back.px - tw_back.kin_px
2359
+ tw_back['ay'] = tw_back.py - tw_back.kin_py
2360
+
2361
+ xo.assert_allclose(tw_back.rows[:'e0..0'].ax, tw['ax', 'e0..0'],
2362
+ rtol=0, atol=1e-10)
2363
+ xo.assert_allclose(tw_back.rows[:'e0..0'].ay, tw['ay', 'e0..0'],
2364
+ rtol=0, atol=1e-10)
@@ -60,13 +60,14 @@ def test_fcc_ee_solenoid_correction():
60
60
 
61
61
  P0_J = line.particle_ref.p0c[0] * qe / clight
62
62
  brho = P0_J / qe / line.particle_ref.q0
63
- ks = 0.5 * (bz_sol_slices[:-1] + bz_sol_slices[1:]) / brho
63
+ ks_entry = bz_sol_slices[:-1] / brho
64
+ ks_exit = bz_sol_slices[1:] / brho
64
65
  l_sol_slices = np.diff(s_sol_slices)
65
66
  s_sol_slices_entry = s_sol_slices[:-1]
66
67
 
67
68
  sol_slices = []
68
69
  for ii in range(len(s_sol_slices_entry)):
69
- sol_slices.append(xt.Solenoid(length=l_sol_slices[ii], ks=0)) # Off for now
70
+ sol_slices.append(xt.VariableSolenoid(length=l_sol_slices[ii], ks_profile=[0, 0])) # Off for now
70
71
 
71
72
  s_ip = tt['s', ip_sol]
72
73
 
@@ -86,8 +87,8 @@ def test_fcc_ee_solenoid_correction():
86
87
  line.element_dict['sol_start_shift_'+ip_sol] = sol_start_shift
87
88
  line.element_dict['sol_end_shift_'+ip_sol] = sol_end_shift
88
89
 
89
- line.element_dict['sol_entry_'+ip_sol] = xt.Solenoid(length=0, ks=0)
90
- line.element_dict['sol_exit_'+ip_sol] = xt.Solenoid(length=0, ks=0)
90
+ line.element_dict['sol_entry_'+ip_sol] = xt.Marker()
91
+ line.element_dict['sol_exit_'+ip_sol] = xt.Marker()
91
92
 
92
93
  sol_slice_names = []
93
94
  sol_slice_names.append('sol_entry_'+ip_sol)
@@ -123,7 +124,8 @@ def test_fcc_ee_solenoid_correction():
123
124
  line.vars['on_sol_'+ip_sol] = 0
124
125
  for ii in range(len(s_sol_slices_entry)):
125
126
  nn = f'sol_slice_{ii}_{ip_sol}'
126
- line.element_refs[nn].ks = ks[ii] * line.vars['on_sol_'+ip_sol]
127
+ line.element_refs[nn].ks_profile[0] = ks_entry[ii] * line.vars['on_sol_'+ip_sol]
128
+ line.element_refs[nn].ks_profile[1] = ks_exit[ii] * line.vars['on_sol_'+ip_sol]
127
129
 
128
130
  tt = line.get_table()
129
131
 
@@ -60,13 +60,14 @@ def test_fcc_ee_solenoid_correction_new_optimizer_api():
60
60
 
61
61
  P0_J = line.particle_ref.p0c[0] * qe / clight
62
62
  brho = P0_J / qe / line.particle_ref.q0
63
- ks = 0.5 * (bz_sol_slices[:-1] + bz_sol_slices[1:]) / brho
63
+ ks_entry = bz_sol_slices[:-1] / brho
64
+ ks_exit = bz_sol_slices[1:] / brho
64
65
  l_sol_slices = np.diff(s_sol_slices)
65
66
  s_sol_slices_entry = s_sol_slices[:-1]
66
67
 
67
68
  sol_slices = []
68
69
  for ii in range(len(s_sol_slices_entry)):
69
- sol_slices.append(xt.Solenoid(length=l_sol_slices[ii], ks=0)) # Off for now
70
+ sol_slices.append(xt.VariableSolenoid(length=l_sol_slices[ii], ks_profile=[0, 0])) # Off for now
70
71
 
71
72
  s_ip = tt['s', ip_sol]
72
73
 
@@ -86,8 +87,8 @@ def test_fcc_ee_solenoid_correction_new_optimizer_api():
86
87
  line.element_dict['sol_start_shift_'+ip_sol] = sol_start_shift
87
88
  line.element_dict['sol_end_shift_'+ip_sol] = sol_end_shift
88
89
 
89
- line.element_dict['sol_entry_'+ip_sol] = xt.Solenoid(length=0, ks=0)
90
- line.element_dict['sol_exit_'+ip_sol] = xt.Solenoid(length=0, ks=0)
90
+ line.element_dict['sol_entry_'+ip_sol] = xt.Marker()
91
+ line.element_dict['sol_exit_'+ip_sol] = xt.Marker()
91
92
 
92
93
  sol_slice_names = []
93
94
  sol_slice_names.append('sol_entry_'+ip_sol)
@@ -123,7 +124,9 @@ def test_fcc_ee_solenoid_correction_new_optimizer_api():
123
124
  line.vars['on_sol_'+ip_sol] = 0
124
125
  for ii in range(len(s_sol_slices_entry)):
125
126
  nn = f'sol_slice_{ii}_{ip_sol}'
126
- line.element_refs[nn].ks = ks[ii] * line.vars['on_sol_'+ip_sol]
127
+ line.element_refs[nn].ks_profile[0] = ks_entry[ii] * line.vars['on_sol_'+ip_sol]
128
+ line.element_refs[nn].ks_profile[1] = ks_exit[ii] * line.vars['on_sol_'+ip_sol]
129
+
127
130
 
128
131
  tt = line.get_table()
129
132
 
@@ -880,6 +880,7 @@ def test_insert_thin_elements_at_s_lhc(test_context):
880
880
  Teapot = xt.Teapot
881
881
  slicing_strategies = [
882
882
  Strategy(slicing=Teapot(1)), # Default catch-all as in MAD-X
883
+ Strategy(slicing=None, element_type=xt.UniformSolenoid),
883
884
  Strategy(slicing=Teapot(4), element_type=xt.Bend),
884
885
  Strategy(slicing=Teapot(20), element_type=xt.Quadrupole),
885
886
  Strategy(slicing=Teapot(2), name=r'^mb\..*'),
@@ -1143,8 +1144,8 @@ def test_line_table_unique_names():
1143
1144
 
1144
1145
  def test_extend_knl_ksl():
1145
1146
 
1146
- classes_to_check = ['Bend', 'Quadrupole', 'Sextupole', 'Octupole', 'Solenoid',
1147
- 'Multipole']
1147
+ classes_to_check = ['Bend', 'Quadrupole', 'Sextupole', 'Octupole', 'UniformSolenoid',
1148
+ 'VariableSolenoid', 'Multipole']
1148
1149
 
1149
1150
  for cc in classes_to_check:
1150
1151
 
@@ -1188,7 +1189,9 @@ def test_extend_knl_ksl():
1188
1189
  'a', 'b', 'c'], ksl=['d', 'e', 'f']),
1189
1190
  env.new('o1', xt.Octupole, length=1, knl=[
1190
1191
  'a', 'b', 'c'], ksl=['d', 'e', 'f']),
1191
- env.new('s2', xt.Solenoid, length=1, knl=[
1192
+ env.new('u1', xt.UniformSolenoid, length=1, knl=[
1193
+ 'a', 'b', 'c'], ksl=['d', 'e', 'f']),
1194
+ env.new('v1', xt.VariableSolenoid, length=1, knl=[
1192
1195
  'a', 'b', 'c'], ksl=['d', 'e', 'f']),
1193
1196
  env.new('m1', xt.Multipole, length=1, knl=[
1194
1197
  'a', 'b', 'c'], ksl=['d', 'e', 'f']),
@@ -1210,7 +1213,7 @@ def test_extend_knl_ksl():
1210
1213
  assert line['q1'].order == order
1211
1214
  assert line['s1'].order == 5
1212
1215
  assert line['o1'].order == 5
1213
- assert line['s2'].order == 5
1216
+ assert line['u1'].order == 5
1214
1217
  assert line['m1'].order == 2
1215
1218
 
1216
1219
  xo.assert_allclose(line['b1'].inv_factorial_order,
@@ -1221,7 +1224,9 @@ def test_extend_knl_ksl():
1221
1224
  1/math.factorial(5), rtol=0, atol=1e-15)
1222
1225
  xo.assert_allclose(line['o1'].inv_factorial_order,
1223
1226
  1/math.factorial(5), rtol=0, atol=1e-15)
1224
- xo.assert_allclose(line['s2'].inv_factorial_order,
1227
+ xo.assert_allclose(line['u1'].inv_factorial_order,
1228
+ 1/math.factorial(5), rtol=0, atol=1e-15)
1229
+ xo.assert_allclose(line['v1'].inv_factorial_order,
1225
1230
  1/math.factorial(5), rtol=0, atol=1e-15)
1226
1231
  xo.assert_allclose(line['m1'].inv_factorial_order,
1227
1232
  1/math.factorial(2), rtol=0, atol=1e-15)
@@ -1242,9 +1247,13 @@ def test_extend_knl_ksl():
1242
1247
  0., 0., 0.], rtol=0, atol=1e-15)
1243
1248
  xo.assert_allclose(line['o1'].ksl, [4., 5., 6.,
1244
1249
  0., 0., 0.], rtol=0, atol=1e-15)
1245
- xo.assert_allclose(line['s2'].knl, [3., 2., 1.,
1250
+ xo.assert_allclose(line['u1'].knl, [3., 2., 1.,
1251
+ 0., 0., 0.], rtol=0, atol=1e-15)
1252
+ xo.assert_allclose(line['u1'].ksl, [4., 5., 6.,
1246
1253
  0., 0., 0.], rtol=0, atol=1e-15)
1247
- xo.assert_allclose(line['s2'].ksl, [4., 5., 6.,
1254
+ xo.assert_allclose(line['v1'].knl, [3., 2., 1.,
1255
+ 0., 0., 0.], rtol=0, atol=1e-15)
1256
+ xo.assert_allclose(line['v1'].ksl, [4., 5., 6.,
1248
1257
  0., 0., 0.], rtol=0, atol=1e-15)
1249
1258
  xo.assert_allclose(line['m1'].knl, [3., 2., 1.], rtol=0, atol=1e-15)
1250
1259
  xo.assert_allclose(line['m1'].ksl, [4., 5., 6.], rtol=0, atol=1e-15)
@@ -1255,13 +1264,15 @@ def test_extend_knl_ksl():
1255
1264
  assert line['q1'].order == 11
1256
1265
  assert line['s1'].order == 11
1257
1266
  assert line['o1'].order == 11
1258
- assert line['s2'].order == 11
1267
+ assert line['u1'].order == 11
1268
+ assert line['v1'].order == 11
1259
1269
  assert line['m1'].order == 11
1260
1270
  assert line['b1'].inv_factorial_order == 1/math.factorial(11)
1261
1271
  assert line['q1'].inv_factorial_order == 1/math.factorial(11)
1262
1272
  assert line['s1'].inv_factorial_order == 1/math.factorial(11)
1263
1273
  assert line['o1'].inv_factorial_order == 1/math.factorial(11)
1264
- assert line['s2'].inv_factorial_order == 1/math.factorial(11)
1274
+ assert line['u1'].inv_factorial_order == 1/math.factorial(11)
1275
+ assert line['v1'].inv_factorial_order == 1/math.factorial(11)
1265
1276
  assert line['m1'].inv_factorial_order == 1/math.factorial(11)
1266
1277
  xo.assert_allclose(line['b1'].knl, [3., 2., 1., 0.,
1267
1278
  0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
@@ -1279,9 +1290,13 @@ def test_extend_knl_ksl():
1279
1290
  0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
1280
1291
  xo.assert_allclose(line['o1'].ksl, [4., 5., 6., 0.,
1281
1292
  0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
1282
- xo.assert_allclose(line['s2'].knl, [3., 2., 1., 0.,
1293
+ xo.assert_allclose(line['u1'].knl, [3., 2., 1., 0.,
1294
+ 0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
1295
+ xo.assert_allclose(line['v1'].ksl, [4., 5., 6., 0.,
1296
+ 0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
1297
+ xo.assert_allclose(line['v1'].knl, [3., 2., 1., 0.,
1283
1298
  0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
1284
- xo.assert_allclose(line['s2'].ksl, [4., 5., 6., 0.,
1299
+ xo.assert_allclose(line['u1'].ksl, [4., 5., 6., 0.,
1285
1300
  0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)
1286
1301
  xo.assert_allclose(line['m1'].knl, [3., 2., 1., 0.,
1287
1302
  0., 0., 0., 0., 0., 0., 0., 0.], rtol=0, atol=1e-15)