xtrack 0.86.4__tar.gz → 0.87.1__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 (317) hide show
  1. {xtrack-0.86.4/xtrack.egg-info → xtrack-0.87.1}/PKG-INFO +1 -1
  2. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_elements.py +3 -3
  3. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_elements_thick.py +79 -79
  4. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_ions.py +1 -1
  5. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_line.py +1 -1
  6. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_madloader.py +2 -2
  7. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_madnginterface.py +30 -0
  8. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_native_madloader.py +37 -37
  9. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_particles_basics.py +1 -1
  10. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_slice_and_insert_with_replicas.py +8 -4
  11. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_twiss.py +71 -7
  12. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_vs_madx.py +3 -3
  13. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_xmask_orbit_correction.py +4 -4
  14. xtrack-0.87.1/xtrack/_version.py +1 -0
  15. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +2 -1
  16. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/line.py +5 -2
  17. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/load.py +4 -0
  18. xtrack-0.87.1/xtrack/mad_writer.py +644 -0
  19. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/madng_interface.py +66 -35
  20. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/tracker_data.py +16 -1
  21. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/twiss.py +257 -36
  22. {xtrack-0.86.4 → xtrack-0.87.1/xtrack.egg-info}/PKG-INFO +1 -1
  23. xtrack-0.86.4/xtrack/_version.py +0 -1
  24. xtrack-0.86.4/xtrack/mad_writer.py +0 -330
  25. {xtrack-0.86.4 → xtrack-0.87.1}/LICENSE +0 -0
  26. {xtrack-0.86.4 → xtrack-0.87.1}/MANIFEST.in +0 -0
  27. {xtrack-0.86.4 → xtrack-0.87.1}/README.md +0 -0
  28. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/__init__.py +0 -0
  29. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/base_classes.py +0 -0
  30. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/BB6D.py +0 -0
  31. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  32. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/__init__.py +0 -0
  33. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/beambeam.py +0 -0
  34. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/boost.py +0 -0
  35. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  36. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  37. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/qgauss.py +0 -0
  38. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/slicing.py +0 -0
  39. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/be_beamfields/spacecharge.py +0 -0
  40. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/elements.py +0 -0
  41. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/line.py +0 -0
  42. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/mathlibs.py +0 -0
  43. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/particles.py +0 -0
  44. {xtrack-0.86.4 → xtrack-0.87.1}/ducktrack/temp_pyparticles.py +0 -0
  45. {xtrack-0.86.4 → xtrack-0.87.1}/pyproject.toml +0 -0
  46. {xtrack-0.86.4 → xtrack-0.87.1}/setup.cfg +0 -0
  47. {xtrack-0.86.4 → xtrack-0.87.1}/setup.py +0 -0
  48. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_acceleration.py +0 -0
  49. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_amplitude_detuning.py +0 -0
  50. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_aperture_table.py +0 -0
  51. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  52. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_apertures.py +0 -0
  53. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_attr_replicas_and_slices.py +0 -0
  54. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_bucket_with_ref_energy_change.py +0 -0
  55. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_cavity_absolute_time.py +0 -0
  56. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_chromatic_functions_vs_madx.py +0 -0
  57. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_coasting.py +0 -0
  58. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_collective_tracker.py +0 -0
  59. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_collimation.py +0 -0
  60. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_electron_cooler.py +0 -0
  61. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_element_characterization_functions.py +0 -0
  62. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_element_internal_record.py +0 -0
  63. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_elements_classflags.py +0 -0
  64. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_environment.py +0 -0
  65. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_fcc_ee_solenoid_correction.py +0 -0
  66. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
  67. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_footprint.py +0 -0
  68. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_freeze_longitudinal.py +0 -0
  69. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_full_rings.py +0 -0
  70. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_h6_sps_beamline.py +0 -0
  71. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_hvkick.py +0 -0
  72. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_legacy_multiline_to_env.py +0 -0
  73. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_lhc_env.py +0 -0
  74. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_lhc_match_phase_15.py +0 -0
  75. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_load.py +0 -0
  76. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_lumi.py +0 -0
  77. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_mad_writer.py +0 -0
  78. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_magnet.py +0 -0
  79. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_match_and_track_from_element.py +0 -0
  80. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_match_coupling_knob.py +0 -0
  81. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_match_nested.py +0 -0
  82. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_match_optics_and_ip_knob.py +0 -0
  83. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  84. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_match_orbit_bump.py +0 -0
  85. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_match_tune_chroma_cminus.py +0 -0
  86. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_monitor.py +0 -0
  87. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_multi_bunch_gauss.py +0 -0
  88. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_multiline.py +0 -0
  89. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_multisetter.py +0 -0
  90. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_multispecies.py +0 -0
  91. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_optimize_for_tracking.py +0 -0
  92. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_particles.py +0 -0
  93. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_particles_pdg.py +0 -0
  94. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  95. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_pipeline.py +0 -0
  96. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_prebuild_kernels.py +0 -0
  97. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_ps_against_ptc.py +0 -0
  98. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_ps_multiturn_twiss.py +0 -0
  99. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_psb_chicane.py +0 -0
  100. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_pyht_interface.py +0 -0
  101. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_radial_steering.py +0 -0
  102. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_radiation.py +0 -0
  103. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_radiation_equilibrium_emittances.py +0 -0
  104. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
  105. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_radiation_integrals.py +0 -0
  106. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_random_gen.py +0 -0
  107. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_random_gen_exp.py +0 -0
  108. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_random_gen_gauss.py +0 -0
  109. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_random_gen_ruth.py +0 -0
  110. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_rbend_rbarc.py +0 -0
  111. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_rf_track.py +0 -0
  112. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_rotation_signs.py +0 -0
  113. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_second_order_taylor_map.py +0 -0
  114. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_seeds.py +0 -0
  115. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_slice_elements.py +0 -0
  116. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_slicing.py +0 -0
  117. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
  118. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
  119. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_spacecharge_in_ring.py +0 -0
  120. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_spin.py +0 -0
  121. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_sps_thick.py +0 -0
  122. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_survey.py +0 -0
  123. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_tapering.py +0 -0
  124. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_thick_lhc.py +0 -0
  125. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_tilt_shifts.py +0 -0
  126. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_tracker.py +0 -0
  127. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_trajectory_correcton.py +0 -0
  128. {xtrack-0.86.4 → xtrack-0.87.1}/tests/test_twiss_vs_madx_psb.py +0 -0
  129. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/__init__.py +0 -0
  130. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/_temp/__init__.py +0 -0
  131. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  132. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  133. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  134. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/_temp/lhc_match/__init__.py +0 -0
  135. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  136. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  137. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  138. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/aperture_meas.py +0 -0
  139. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/base_element.py +0 -0
  140. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/__init__.py +0 -0
  141. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/apertures.py +0 -0
  142. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  143. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  144. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  145. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  146. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  147. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  148. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/beam_interaction.py +0 -0
  149. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements.py +0 -0
  150. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/bend.h +0 -0
  151. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  152. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
  153. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  154. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
  155. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/drift.h +0 -0
  156. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  157. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  158. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  159. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  160. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
  161. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  162. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
  163. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
  164. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/elens.h +0 -0
  165. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  166. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
  167. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
  168. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
  169. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/magnet.h +0 -0
  170. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
  171. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
  172. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
  173. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/marker.h +0 -0
  174. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/multipole.h +0 -0
  175. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
  176. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  177. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/octupole.h +0 -0
  178. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
  179. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/rbend.h +0 -0
  180. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  181. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  182. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  183. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
  184. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  185. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  186. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/slnd.h +0 -0
  187. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  188. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
  189. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
  190. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
  191. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
  192. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
  193. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
  194. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
  195. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
  196. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
  197. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
  198. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
  199. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
  200. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
  201. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
  202. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
  203. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
  204. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
  205. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
  206. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
  207. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
  208. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
  209. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
  210. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
  211. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
  212. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  213. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  214. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  215. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
  216. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
  217. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
  218. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
  219. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
  220. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
  221. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
  222. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
  223. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
  224. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  225. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  226. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  227. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
  228. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  229. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  230. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
  231. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/wedge.h +0 -0
  232. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/wire.h +0 -0
  233. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  234. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  235. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  236. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  237. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/exciter.py +0 -0
  238. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/magnets.py +0 -0
  239. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/rft_element.py +0 -0
  240. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/slice_elements_edge.py +0 -0
  241. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/slice_elements_thick.py +0 -0
  242. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/beam_elements/slice_elements_thin.py +0 -0
  243. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/environment.py +0 -0
  244. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/footprint.py +0 -0
  245. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/general.py +0 -0
  246. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/headers/atomicadd.h +0 -0
  247. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/headers/checks.h +0 -0
  248. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/headers/constants.h +0 -0
  249. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/headers/particle_states.h +0 -0
  250. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/headers/synrad_spectrum.h +0 -0
  251. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/headers/track.h +0 -0
  252. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/internal_record.py +0 -0
  253. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/json.py +0 -0
  254. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/linear_normal_form.py +0 -0
  255. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/loss_location_refinement/__init__.py +0 -0
  256. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
  257. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/lumi.py +0 -0
  258. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/mad_loader.py +0 -0
  259. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/mad_parser/__init__.py +0 -0
  260. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/mad_parser/loader.py +0 -0
  261. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/mad_parser/madx.lark +0 -0
  262. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/mad_parser/parse.py +0 -0
  263. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/match.py +0 -0
  264. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/__init__.py +0 -0
  265. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/beam_position_monitor.h +0 -0
  266. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/beam_position_monitor.py +0 -0
  267. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/beam_profile_monitor.h +0 -0
  268. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/beam_profile_monitor.py +0 -0
  269. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/beam_size_monitor.h +0 -0
  270. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/beam_size_monitor.py +0 -0
  271. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/last_turns_monitor.h +0 -0
  272. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/last_turns_monitor.py +0 -0
  273. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/particles_monitor.h +0 -0
  274. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/monitors/particles_monitor.py +0 -0
  275. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/multiline.py +0 -0
  276. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/multiline_legacy/__init__.py +0 -0
  277. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
  278. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/multiline_legacy/shared_knobs.py +0 -0
  279. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/multisetter/__init__.py +0 -0
  280. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/multisetter/multisetter.py +0 -0
  281. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/particles/__init__.py +0 -0
  282. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/particles/constants.py +0 -0
  283. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/particles/masses.py +0 -0
  284. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/particles/particles.py +0 -0
  285. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/particles/pdg.py +0 -0
  286. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/particles/rng_src/base_rng.h +0 -0
  287. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/particles/rng_src/particles_rng.h +0 -0
  288. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/pipeline/__init__.py +0 -0
  289. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/pipeline/core.py +0 -0
  290. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/pipeline/manager.py +0 -0
  291. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/pipeline/multitracker.py +0 -0
  292. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/progress_indicator.py +0 -0
  293. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/random/__init__.py +0 -0
  294. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/random/random_generators.py +0 -0
  295. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/random/random_src/exponential.h +0 -0
  296. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  297. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/random/random_src/normal.h +0 -0
  298. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/random/random_src/rutherford.h +0 -0
  299. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/random/random_src/uniform.h +0 -0
  300. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/random/random_src/uniform_accurate.h +0 -0
  301. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/slicing.py +0 -0
  302. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/survey.py +0 -0
  303. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/svgutils/__init__.py +0 -0
  304. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/svgutils/parser.py +0 -0
  305. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/svgutils/path.py +0 -0
  306. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/svgutils/svgutils.py +0 -0
  307. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/synctime.py +0 -0
  308. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/tapering.py +0 -0
  309. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/targets.py +0 -0
  310. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/tracker.py +0 -0
  311. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/tracker_src/tracker.h +0 -0
  312. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/trajectory_correction.py +0 -0
  313. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack/twissplot.py +0 -0
  314. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack.egg-info/SOURCES.txt +0 -0
  315. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack.egg-info/dependency_links.txt +0 -0
  316. {xtrack-0.86.4 → xtrack-0.87.1}/xtrack.egg-info/requires.txt +0 -0
  317. {xtrack-0.86.4 → xtrack-0.87.1}/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.86.4
3
+ Version: 0.87.1
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
@@ -492,19 +492,19 @@ def test_exciter(test_context):
492
492
  expected_px = np.array([0.1, 0.2, 0.3])
493
493
  particles.move(_context=xo.context_default)
494
494
 
495
- xo.assert_allclose(particles.px, expected_px)
495
+ xo.assert_allclose(particles.px, expected_px, atol=1e-14)
496
496
 
497
497
  particles.move(_context=test_context)
498
498
  line.track(particles, num_turns=1)
499
499
  expected_px += np.array([0.2, 0.3, 0.1])
500
500
  particles.move(_context=xo.context_default)
501
- xo.assert_allclose(particles.px, expected_px)
501
+ xo.assert_allclose(particles.px, expected_px, atol=1e-14)
502
502
 
503
503
  particles.move(_context=test_context)
504
504
  line.track(particles, num_turns=1)
505
505
  expected_px += np.array([0.3, 0.1, 0])
506
506
  particles.move(_context=xo.context_default)
507
- xo.assert_allclose(particles.px, expected_px)
507
+ xo.assert_allclose(particles.px, expected_px, atol=1e-14)
508
508
 
509
509
 
510
510
  test_source = r"""
@@ -627,29 +627,29 @@ def test_import_thick_bend_from_madx(use_true_thick_bends, with_knobs, bend_type
627
627
  assert elem.model == {False: 'mat-kick-mat', True: 'full'}[use_true_thick_bends]
628
628
 
629
629
  # Element:
630
- xo.assert_allclose(elem.length, 2.0, atol=1e-16)
630
+ xo.assert_allclose(elem.length, 2.0, atol=1e-14)
631
631
  # The below is not strictly compatible with MAD-X, but is a corner case
632
632
  # that hopefully will never be relevant: if k0 is governed by an expression
633
633
  # we assume k0_from_h=False, even if its value evaluates to zero. In MAD-X
634
634
  # k0 = h if k0 is zero, but this is not feasible to implement in Xtrack now.
635
- xo.assert_allclose(elem.k0, 0 if with_knobs else 0.05, atol=1e-16)
636
- xo.assert_allclose(elem.h, 0.05, atol=1e-16) # h = angle / L
637
- xo.assert_allclose(elem.ksl, 0.0, atol=1e-16)
635
+ xo.assert_allclose(elem.k0, 0 if with_knobs else 0.05, atol=1e-14)
636
+ xo.assert_allclose(elem.h, 0.05, atol=1e-14) # h = angle / L
637
+ xo.assert_allclose(elem.ksl, 0.0, atol=1e-14)
638
638
 
639
639
  xo.assert_allclose(
640
640
  elem.knl,
641
641
  np.array([0, 0, 0.8, 0, 0, 0]), # knl = [0, 0, k2 * L, 0, 0]
642
- atol=1e-16,
642
+ atol=1e-14,
643
643
  )
644
644
 
645
645
  # Edges:
646
- xo.assert_allclose(elem.edge_entry_fint, 0.5, atol=1e-16)
647
- xo.assert_allclose(elem.edge_entry_hgap, 0.6, atol=1e-16)
648
- xo.assert_allclose(elem.edge_entry_angle, 0.7, atol=1e-16)
646
+ xo.assert_allclose(elem.edge_entry_fint, 0.5, atol=1e-14)
647
+ xo.assert_allclose(elem.edge_entry_hgap, 0.6, atol=1e-14)
648
+ xo.assert_allclose(elem.edge_entry_angle, 0.7, atol=1e-14)
649
649
 
650
- xo.assert_allclose(elem.edge_exit_fint, 0.5, atol=1e-16)
651
- xo.assert_allclose(elem.edge_exit_hgap, 0.6, atol=1e-16)
652
- xo.assert_allclose(elem.edge_exit_angle, 0.8, atol=1e-16)
650
+ xo.assert_allclose(elem.edge_exit_fint, 0.5, atol=1e-14)
651
+ xo.assert_allclose(elem.edge_exit_hgap, 0.6, atol=1e-14)
652
+ xo.assert_allclose(elem.edge_exit_angle, 0.8, atol=1e-14)
653
653
 
654
654
  # Finish the test here if we are not using knobs
655
655
  if not with_knobs:
@@ -665,26 +665,26 @@ def test_import_thick_bend_from_madx(use_true_thick_bends, with_knobs, bend_type
665
665
 
666
666
  # Verify that the line has been adjusted correctly
667
667
  # Element:
668
- xo.assert_allclose(elem.length, 3.0, atol=1e-16)
669
- xo.assert_allclose(elem.k0, 0.4, atol=1e-16)
670
- xo.assert_allclose(elem.h, 0.2 / 3.0, atol=1e-16) # h = angle / length
671
- xo.assert_allclose(elem.ksl, 0.0, atol=1e-16)
668
+ xo.assert_allclose(elem.length, 3.0, atol=1e-14)
669
+ xo.assert_allclose(elem.k0, 0.4, atol=1e-14)
670
+ xo.assert_allclose(elem.h, 0.2 / 3.0, atol=1e-14) # h = angle / length
671
+ xo.assert_allclose(elem.ksl, 0.0, atol=1e-14)
672
672
 
673
673
  xo.assert_allclose(
674
674
  elem.knl,
675
675
  np.array([0, 0, 2.4, 0, 0, 0]), # knl = [0, 0, k2 * L, 0, 0]
676
- atol=1e-16,
676
+ atol=1e-14,
677
677
  )
678
678
 
679
679
  # Edges:
680
- xo.assert_allclose(elem.edge_entry_fint, 1.0, atol=1e-16)
681
- xo.assert_allclose(elem.edge_entry_hgap, 1.2, atol=1e-16)
682
- xo.assert_allclose(elem.edge_entry_angle, 1.4, atol=1e-16)
683
- xo.assert_allclose(elem.k0, 0.4, atol=1e-16)
680
+ xo.assert_allclose(elem.edge_entry_fint, 1.0, atol=1e-14)
681
+ xo.assert_allclose(elem.edge_entry_hgap, 1.2, atol=1e-14)
682
+ xo.assert_allclose(elem.edge_entry_angle, 1.4, atol=1e-14)
683
+ xo.assert_allclose(elem.k0, 0.4, atol=1e-14)
684
684
 
685
- xo.assert_allclose(elem.edge_exit_fint, 1.0, atol=1e-16)
686
- xo.assert_allclose(elem.edge_exit_hgap, 1.2, atol=1e-16)
687
- xo.assert_allclose(elem.edge_exit_angle, 1.6, atol=1e-16)
685
+ xo.assert_allclose(elem.edge_exit_fint, 1.0, atol=1e-14)
686
+ xo.assert_allclose(elem.edge_exit_hgap, 1.2, atol=1e-14)
687
+ xo.assert_allclose(elem.edge_exit_angle, 1.6, atol=1e-14)
688
688
 
689
689
 
690
690
  @pytest.mark.parametrize('with_knobs', [False, True])
@@ -710,9 +710,9 @@ def test_import_thick_quad_from_madx(with_knobs):
710
710
  elem = line['elem']
711
711
 
712
712
  # Verify that the line has been imported correctly
713
- xo.assert_allclose(elem.length, 2.0, atol=1e-16)
714
- xo.assert_allclose(elem.k1, 0.1, atol=1e-16)
715
- xo.assert_allclose(elem.k1s, 0.2, atol=1e-16)
713
+ xo.assert_allclose(elem.length, 2.0, atol=1e-14)
714
+ xo.assert_allclose(elem.k1, 0.1, atol=1e-14)
715
+ xo.assert_allclose(elem.k1s, 0.2, atol=1e-14)
716
716
 
717
717
  # Finish the test here if we are not using knobs
718
718
  if not with_knobs:
@@ -726,9 +726,9 @@ def test_import_thick_quad_from_madx(with_knobs):
726
726
  line.vars['knob_b'] = 3.0
727
727
 
728
728
  # Verify that the line has been adjusted correctly
729
- xo.assert_allclose(elem.length, 3.0, atol=1e-16)
730
- xo.assert_allclose(elem.k1, 1.1, atol=1e-16)
731
- xo.assert_allclose(elem.k1s, 1.2, atol=1e-16)
729
+ xo.assert_allclose(elem.length, 3.0, atol=1e-14)
730
+ xo.assert_allclose(elem.k1, 1.1, atol=1e-14)
731
+ xo.assert_allclose(elem.k1s, 1.2, atol=1e-14)
732
732
 
733
733
 
734
734
  @pytest.mark.parametrize(
@@ -776,16 +776,16 @@ def test_import_thick_bend_from_madx_and_slice(
776
776
  'sbend': xt.ThinSliceBend,
777
777
  }[bend_type]
778
778
  assert isinstance(elem, slice_class)
779
- xo.assert_allclose(elem.weight, 0.5, atol=1e-16)
780
- xo.assert_allclose(elem._parent.length, 2.0, atol=1e-16)
781
- xo.assert_allclose(elem._parent.k0, 0.2, atol=1e-16)
782
- xo.assert_allclose(elem._parent.knl, [0., 0, 0.8, 0, 0, 0], atol=1e-16)
783
- xo.assert_allclose(elem._parent.ksl, 0, atol=1e-16)
784
- xo.assert_allclose(elem._parent.h, 0.05, atol=1e-16)
779
+ xo.assert_allclose(elem.weight, 0.5, atol=1e-14)
780
+ xo.assert_allclose(elem._parent.length, 2.0, atol=1e-14)
781
+ xo.assert_allclose(elem._parent.k0, 0.2, atol=1e-14)
782
+ xo.assert_allclose(elem._parent.knl, [0., 0, 0.8, 0, 0, 0], atol=1e-14)
783
+ xo.assert_allclose(elem._parent.ksl, 0, atol=1e-14)
784
+ xo.assert_allclose(elem._parent.h, 0.05, atol=1e-14)
785
785
 
786
786
  for drift in drifts:
787
- xo.assert_allclose(drift._parent.length, 2., atol=1e-16)
788
- xo.assert_allclose(drift.weight, 1./3., atol=1e-16)
787
+ xo.assert_allclose(drift._parent.length, 2., atol=1e-14)
788
+ xo.assert_allclose(drift.weight, 1./3., atol=1e-14)
789
789
 
790
790
  # Finish the test here if we are not using knobs
791
791
  if not with_knobs:
@@ -800,26 +800,26 @@ def test_import_thick_bend_from_madx_and_slice(
800
800
 
801
801
  # Verify that the line has been adjusted correctly
802
802
  for elem in elems:
803
- xo.assert_allclose(elem.weight, 0.5, atol=1e-16)
804
- xo.assert_allclose(elem._parent.length, 3.0, atol=1e-16)
805
- xo.assert_allclose(elem._parent.k0, 0.4, atol=1e-16)
806
- xo.assert_allclose(elem._parent.knl, [0., 0, 2.4, 0, 0, 0], atol=1e-16)
807
- xo.assert_allclose(elem._parent.ksl, 0, atol=1e-16)
808
- xo.assert_allclose(elem._parent.h, 0.2/3, atol=1e-16)
809
-
810
- xo.assert_allclose(elem._xobject.weight, 0.5, atol=1e-16)
811
- xo.assert_allclose(elem._xobject._parent.length, 3.0, atol=1e-16)
812
- xo.assert_allclose(elem._xobject._parent.k0, 0.4, atol=1e-16)
813
- xo.assert_allclose(elem._xobject._parent.knl, [0., 0, 2.4, 0, 0, 0], atol=1e-16)
814
- xo.assert_allclose(elem._xobject._parent.ksl, 0, atol=1e-16)
815
- xo.assert_allclose(elem._xobject._parent.h, 0.2/3, atol=1e-16)
803
+ xo.assert_allclose(elem.weight, 0.5, atol=1e-14)
804
+ xo.assert_allclose(elem._parent.length, 3.0, atol=1e-14)
805
+ xo.assert_allclose(elem._parent.k0, 0.4, atol=1e-14)
806
+ xo.assert_allclose(elem._parent.knl, [0., 0, 2.4, 0, 0, 0], atol=1e-14)
807
+ xo.assert_allclose(elem._parent.ksl, 0, atol=1e-14)
808
+ xo.assert_allclose(elem._parent.h, 0.2/3, atol=1e-14)
809
+
810
+ xo.assert_allclose(elem._xobject.weight, 0.5, atol=1e-14)
811
+ xo.assert_allclose(elem._xobject._parent.length, 3.0, atol=1e-14)
812
+ xo.assert_allclose(elem._xobject._parent.k0, 0.4, atol=1e-14)
813
+ xo.assert_allclose(elem._xobject._parent.knl, [0., 0, 2.4, 0, 0, 0], atol=1e-14)
814
+ xo.assert_allclose(elem._xobject._parent.ksl, 0, atol=1e-14)
815
+ xo.assert_allclose(elem._xobject._parent.h, 0.2/3, atol=1e-14)
816
816
 
817
817
  assert elem._parent._buffer is line._buffer
818
818
  assert elem._xobject._parent._buffer is line._buffer
819
819
 
820
820
  for drift in drifts:
821
- xo.assert_allclose(drift._parent.length, 3, atol=1e-16)
822
- xo.assert_allclose(drift.weight, 1./3., atol=1e-16)
821
+ xo.assert_allclose(drift._parent.length, 3, atol=1e-14)
822
+ xo.assert_allclose(drift.weight, 1./3., atol=1e-14)
823
823
 
824
824
  assert drift._parent._buffer is line._buffer
825
825
  assert drift._xobject._parent._buffer is line._buffer
@@ -856,14 +856,14 @@ def test_import_thick_quad_from_madx_and_slice(with_knobs):
856
856
 
857
857
  # Verify that the slices are correct
858
858
  for elem in elems:
859
- xo.assert_allclose(elem.weight, 0.5, atol=1e-16)
860
- xo.assert_allclose(elem._parent.length, 2.0, atol=1e-16)
861
- xo.assert_allclose(elem._parent.k1, 0.1, atol=1e-16)
862
- xo.assert_allclose(elem._parent.k1s, 0.2, atol=1e-16)
859
+ xo.assert_allclose(elem.weight, 0.5, atol=1e-14)
860
+ xo.assert_allclose(elem._parent.length, 2.0, atol=1e-14)
861
+ xo.assert_allclose(elem._parent.k1, 0.1, atol=1e-14)
862
+ xo.assert_allclose(elem._parent.k1s, 0.2, atol=1e-14)
863
863
 
864
864
  for drift in drifts:
865
- xo.assert_allclose(drift._parent.length, 2., atol=1e-16)
866
- xo.assert_allclose(drift.weight, 1./3., atol=1e-16)
865
+ xo.assert_allclose(drift._parent.length, 2., atol=1e-14)
866
+ xo.assert_allclose(drift.weight, 1./3., atol=1e-14)
867
867
 
868
868
  # Finish the test here if we are not using knobs
869
869
  if not with_knobs:
@@ -878,25 +878,25 @@ def test_import_thick_quad_from_madx_and_slice(with_knobs):
878
878
 
879
879
  # Verify that the line has been adjusted correctly
880
880
  for elem in elems:
881
- xo.assert_allclose(elem.weight, 0.5, atol=1e-16)
882
- xo.assert_allclose(elem._parent.length, 3.0, atol=1e-16)
883
- xo.assert_allclose(elem._parent.k1, 2.1, atol=1e-16)
884
- xo.assert_allclose(elem._parent.k1s, 2.2, atol=1e-16)
881
+ xo.assert_allclose(elem.weight, 0.5, atol=1e-14)
882
+ xo.assert_allclose(elem._parent.length, 3.0, atol=1e-14)
883
+ xo.assert_allclose(elem._parent.k1, 2.1, atol=1e-14)
884
+ xo.assert_allclose(elem._parent.k1s, 2.2, atol=1e-14)
885
885
 
886
- xo.assert_allclose(elem._xobject.weight, 0.5, atol=1e-16)
887
- xo.assert_allclose(elem._xobject._parent.length, 3.0, atol=1e-16)
888
- xo.assert_allclose(elem._xobject._parent.k1, 2.1, atol=1e-16)
889
- xo.assert_allclose(elem._xobject._parent.k1s, 2.2, atol=1e-16)
886
+ xo.assert_allclose(elem._xobject.weight, 0.5, atol=1e-14)
887
+ xo.assert_allclose(elem._xobject._parent.length, 3.0, atol=1e-14)
888
+ xo.assert_allclose(elem._xobject._parent.k1, 2.1, atol=1e-14)
889
+ xo.assert_allclose(elem._xobject._parent.k1s, 2.2, atol=1e-14)
890
890
 
891
891
  assert elem._parent._buffer is line._buffer
892
892
  assert elem._xobject._parent._buffer is line._buffer
893
893
 
894
894
  for drift in drifts:
895
- xo.assert_allclose(drift._parent.length, 3., atol=1e-16)
896
- xo.assert_allclose(drift.weight, 1./3., atol=1e-16)
895
+ xo.assert_allclose(drift._parent.length, 3., atol=1e-14)
896
+ xo.assert_allclose(drift.weight, 1./3., atol=1e-14)
897
897
 
898
- xo.assert_allclose(drift._xobject._parent.length, 3., atol=1e-16)
899
- xo.assert_allclose(drift._xobject.weight, 1./3., atol=1e-16)
898
+ xo.assert_allclose(drift._xobject._parent.length, 3., atol=1e-14)
899
+ xo.assert_allclose(drift._xobject.weight, 1./3., atol=1e-14)
900
900
 
901
901
  assert drift._parent._buffer is line._buffer
902
902
  assert drift._xobject._parent._buffer is line._buffer
@@ -1064,7 +1064,7 @@ def test_import_thick_with_apertures_and_slice():
1064
1064
 
1065
1065
 
1066
1066
  def _assert_eq(a, b):
1067
- xo.assert_allclose(a, b, atol=1e-16)
1067
+ xo.assert_allclose(a, b, atol=1e-14)
1068
1068
 
1069
1069
  _assert_eq(line[f'elm_aper'].rot_s_rad, 0.1)
1070
1070
  _assert_eq(line[f'elm_aper'].shift_x, 0.2)
@@ -1492,12 +1492,12 @@ def test_solenoid_shifted_and_rotated_multipolar_kick(test_context):
1492
1492
  line_test.track(p_test)
1493
1493
  line_ref.track(p_ref)
1494
1494
 
1495
- xo.assert_allclose(p_test.x, p_ref.x, rtol=0, atol=1e-16)
1496
- xo.assert_allclose(p_test.px, p_ref.px, rtol=0, atol=1e-16)
1497
- xo.assert_allclose(p_test.y, p_ref.y, rtol=0, atol=1e-16)
1498
- xo.assert_allclose(p_test.py, p_ref.py, rtol=0, atol=1e-16)
1499
- xo.assert_allclose(p_test.zeta, p_ref.zeta, rtol=0, atol=1e-16)
1500
- xo.assert_allclose(p_test.delta, p_ref.delta, rtol=0, atol=1e-16)
1495
+ xo.assert_allclose(p_test.x, p_ref.x, rtol=0, atol=1e-14)
1496
+ xo.assert_allclose(p_test.px, p_ref.px, rtol=0, atol=1e-14)
1497
+ xo.assert_allclose(p_test.y, p_ref.y, rtol=0, atol=1e-14)
1498
+ xo.assert_allclose(p_test.py, p_ref.py, rtol=0, atol=1e-14)
1499
+ xo.assert_allclose(p_test.zeta, p_ref.zeta, rtol=0, atol=1e-14)
1500
+ xo.assert_allclose(p_test.delta, p_ref.delta, rtol=0, atol=1e-14)
1501
1501
 
1502
1502
 
1503
1503
  @pytest.mark.parametrize('shift_x', (0, 1e-3))
@@ -1589,8 +1589,8 @@ def test_solenoid_multipole_shifts(shift_x, shift_y, test_element_name):
1589
1589
  ########################################
1590
1590
  # Assertions
1591
1591
  ########################################
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)
1592
+ xo.assert_allclose(tw.x[-1], tw_sol.x[-1], rtol=2e-6, atol=1e-12)
1593
+ xo.assert_allclose(tw.y[-1], tw_sol.y[-1], rtol=2e-6, atol=1e-12)
1594
1594
 
1595
1595
 
1596
1596
  def test_solenoid_multipole_rotations():
@@ -88,7 +88,7 @@ def test_ions(test_context):
88
88
  q0=mad.sequence.sps.beam.charge,
89
89
  gamma0=mad.sequence.sps.beam.gamma)
90
90
 
91
- xo.assert_allclose(line['actcse.31632'].voltage, V_RF, atol=1e-10)
91
+ xo.assert_allclose(line['actcse.31632'].voltage, V_RF, atol=1e-10, rtol=1e-15)
92
92
 
93
93
  line.build_tracker()
94
94
 
@@ -994,7 +994,7 @@ def test_elements_intersecting_s():
994
994
  }
995
995
  result = line._elements_intersecting_s(cuts)
996
996
  for kk in expected.keys() | result.keys():
997
- xo.assert_allclose(expected[kk], result[kk], atol=1e-16)
997
+ xo.assert_allclose(expected[kk], result[kk], atol=1e-14)
998
998
 
999
999
 
1000
1000
  def test_slicing_at_custom_s():
@@ -664,8 +664,8 @@ def test_mad_elements_import():
664
664
  x_1, x_2, y_1, y_2 = 3, 2 * np.sqrt(3), np.sqrt(3), 6
665
665
  expected_x_vertices = [x_1, x_2, -x_2, -x_1, -x_1, -x_2, x_2, x_1]
666
666
  expected_y_vertices = [y_1, y_2, y_2, y_1, -y_1, -y_2, -y_2, -y_1]
667
- xo.assert_allclose(line['oct_aper'].x_vertices, expected_x_vertices)
668
- xo.assert_allclose(line['oct_aper'].y_vertices, expected_y_vertices)
667
+ xo.assert_allclose(line['oct_aper'].x_vertices, expected_x_vertices, atol=1e-14)
668
+ xo.assert_allclose(line['oct_aper'].y_vertices, expected_y_vertices, atol=1e-14)
669
669
 
670
670
 
671
671
  def test_selective_expr_import_and_replace_in_expr():
@@ -97,3 +97,33 @@ def test_madng_interface_with_multipole_errors_and_misalignments():
97
97
  xo.assert_allclose(tw.ay_chrom, tw.ay_ng, atol=5e-3*tw.wy_chrom.max(), rtol=0)
98
98
  xo.assert_allclose(tw.bx_chrom, tw.bx_ng, atol=5e-3*tw.wx_chrom.max(), rtol=0)
99
99
  xo.assert_allclose(tw.by_chrom, tw.by_ng, atol=5e-3*tw.wy_chrom.max(), rtol=0)
100
+
101
+ def test_madng_survey():
102
+ line = xt.Line.from_json(test_data_folder /
103
+ 'hllhc15_thick/lhc_thick_with_knobs.json')
104
+ survey = line.madng_survey()
105
+
106
+ # Check that columns exist:
107
+ SURVEY_COLS = ['X', 'Y', 'Z', 'theta', 'phi', 'psi', 'name', 's', 'length', 'slc',
108
+ 'turn', 'tdir', 'eidx', 'ename', 'element_type', 'angle', 'tilt']
109
+ assert isinstance(survey, xt.survey.SurveyTable)
110
+ assert len(survey.cols) == len(SURVEY_COLS)
111
+ for col in SURVEY_COLS:
112
+ assert col in survey.cols, f"Column '{col}' not found in survey"
113
+
114
+ # Compare MAD-NG survey with Xsuite survey
115
+ xsurvey = line.survey()
116
+
117
+ assert len(survey) == len(xsurvey), "Length of MAD-NG survey and Xsuite survey do not match"
118
+
119
+ xo.assert_allclose(survey.X, xsurvey.X, atol=1e-5, rtol=0)
120
+ xo.assert_allclose(survey.Y, xsurvey.Y, atol=1e-5, rtol=0)
121
+ xo.assert_allclose(survey.Z, xsurvey.Z, atol=1e-5, rtol=0)
122
+ xo.assert_allclose(survey.theta, xsurvey.theta, atol=1e-5, rtol=0)
123
+ xo.assert_allclose(survey.phi, xsurvey.phi, atol=1e-5, rtol=0)
124
+ xo.assert_allclose(survey.psi, xsurvey.psi, atol=1e-5, rtol=0)
125
+ xo.assert_allclose(survey.s, xsurvey.s, atol=1e-5, rtol=0)
126
+ xo.assert_allclose(survey.angle, xsurvey.angle, atol=1e-5, rtol=0)
127
+ xo.assert_allclose(survey.tilt, xsurvey.tilt, atol=1e-5, rtol=0)
128
+ # Length doesn't work because of multipoles.
129
+ #xo.assert_allclose(survey.length, xsurvey.length, atol=1e-5, rtol=0)