ANYfeSolver 0.5.0a1__py3-none-any.whl

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 (751) hide show
  1. anyfesolver/__init__.py +1075 -0
  2. anyfesolver/_b2_attachment_elimination_dev.py +261 -0
  3. anyfesolver/_b2_f10_f11_point_attachment.py +163 -0
  4. anyfesolver/_b2_loaded_point_trace_dev.py +173 -0
  5. anyfesolver/_b2_physical_flexibility_linear.py +707 -0
  6. anyfesolver/_b2_physical_linear_batch_dev.py +491 -0
  7. anyfesolver/_b2_physical_linear_definition.py +415 -0
  8. anyfesolver/_b2_physical_load_bubbles.py +282 -0
  9. anyfesolver/_compensated_contractions.py +497 -0
  10. anyfesolver/_compensated_native.py +437 -0
  11. anyfesolver/_corotational_batch.py +219 -0
  12. anyfesolver/_director_trace.py +214 -0
  13. anyfesolver/_dyadic_bilinear.py +76 -0
  14. anyfesolver/_dyadic_factor_chain.py +25 -0
  15. anyfesolver/_ge_beam3_adaptive_arc_program.py +286 -0
  16. anyfesolver/_ge_beam3_analysis_combined.py +102 -0
  17. anyfesolver/_ge_beam3_analysis_fibre_translation.py +130 -0
  18. anyfesolver/_ge_beam3_analysis_modal_snapshot.py +27 -0
  19. anyfesolver/_ge_beam3_analysis_nodal_program.py +140 -0
  20. anyfesolver/_ge_beam3_analysis_translation.py +147 -0
  21. anyfesolver/_ge_beam3_analysis_translation_modal.py +84 -0
  22. anyfesolver/_ge_beam3_arc_geometry.py +89 -0
  23. anyfesolver/_ge_beam3_arc_program.py +304 -0
  24. anyfesolver/_ge_beam3_authoritative_cell_seed.py +25 -0
  25. anyfesolver/_ge_beam3_cell_identity.py +52 -0
  26. anyfesolver/_ge_beam3_centered_batched_finite_inertia.py +132 -0
  27. anyfesolver/_ge_beam3_centered_finite_inertia.py +171 -0
  28. anyfesolver/_ge_beam3_centered_mixed.py +104 -0
  29. anyfesolver/_ge_beam3_centered_reference.py +187 -0
  30. anyfesolver/_ge_beam3_centered_so3_strain.py +76 -0
  31. anyfesolver/_ge_beam3_complementary_section.py +122 -0
  32. anyfesolver/_ge_beam3_compliance_snapshot_guard.py +20 -0
  33. anyfesolver/_ge_beam3_connected_dynamic.py +486 -0
  34. anyfesolver/_ge_beam3_connected_trajectory.py +258 -0
  35. anyfesolver/_ge_beam3_conservative_backtrack.py +26 -0
  36. anyfesolver/_ge_beam3_controlled_fibre_modes.py +105 -0
  37. anyfesolver/_ge_beam3_coupled_beam_subdomain.py +128 -0
  38. anyfesolver/_ge_beam3_coupled_modes.py +256 -0
  39. anyfesolver/_ge_beam3_deterministic_reduction.py +264 -0
  40. anyfesolver/_ge_beam3_displacement_program.py +255 -0
  41. anyfesolver/_ge_beam3_durable_coupled.py +251 -0
  42. anyfesolver/_ge_beam3_dynamic_elastic_state.py +461 -0
  43. anyfesolver/_ge_beam3_effective_deadline.py +58 -0
  44. anyfesolver/_ge_beam3_elastic_seed_continuation.py +223 -0
  45. anyfesolver/_ge_beam3_elastic_seed_modal.py +139 -0
  46. anyfesolver/_ge_beam3_equilibrium_line_program.py +98 -0
  47. anyfesolver/_ge_beam3_equilibrium_schur_solver.py +96 -0
  48. anyfesolver/_ge_beam3_factor_chain_modes.py +103 -0
  49. anyfesolver/_ge_beam3_fibre_cell.py +408 -0
  50. anyfesolver/_ge_beam3_fibre_distributed_couples.py +191 -0
  51. anyfesolver/_ge_beam3_fibre_kinematic_cell.py +75 -0
  52. anyfesolver/_ge_beam3_fibre_line_program.py +157 -0
  53. anyfesolver/_ge_beam3_fibre_line_work.py +87 -0
  54. anyfesolver/_ge_beam3_fibre_reference_modal.py +104 -0
  55. anyfesolver/_ge_beam3_fibre_schur_solver.py +134 -0
  56. anyfesolver/_ge_beam3_fibre_section.py +286 -0
  57. anyfesolver/_ge_beam3_fibre_static_boundary.py +113 -0
  58. anyfesolver/_ge_beam3_g1_analysis.py +307 -0
  59. anyfesolver/_ge_beam3_g1_elastic.py +161 -0
  60. anyfesolver/_ge_beam3_g1_element.py +185 -0
  61. anyfesolver/_ge_beam3_g1_operator.py +137 -0
  62. anyfesolver/_ge_beam3_g2_analysis.py +176 -0
  63. anyfesolver/_ge_beam3_g2_constraints.py +162 -0
  64. anyfesolver/_ge_beam3_g3_analysis.py +385 -0
  65. anyfesolver/_ge_beam3_g3_constraints.py +168 -0
  66. anyfesolver/_ge_beam3_g3b_owner.py +296 -0
  67. anyfesolver/_ge_beam3_g3b_q4_reference.py +186 -0
  68. anyfesolver/_ge_beam3_g3b_reference.py +206 -0
  69. anyfesolver/_ge_beam3_g3b_result_schema.py +107 -0
  70. anyfesolver/_ge_beam3_g3b_s3_reference.py +185 -0
  71. anyfesolver/_ge_beam3_g3b_weighted_reference.py +193 -0
  72. anyfesolver/_ge_beam3_g3c_affine_q4_chart.py +58 -0
  73. anyfesolver/_ge_beam3_g3c_affine_q4_increment_chart.py +257 -0
  74. anyfesolver/_ge_beam3_g3c_affine_q4_recovery.py +434 -0
  75. anyfesolver/_ge_beam3_g3c_affine_q4_registry.py +127 -0
  76. anyfesolver/_ge_beam3_g3c_b2_physical.py +153 -0
  77. anyfesolver/_ge_beam3_g3c_b2_physical_adapter.py +160 -0
  78. anyfesolver/_ge_beam3_g3c_definition.py +117 -0
  79. anyfesolver/_ge_beam3_g3c_local_beam.py +188 -0
  80. anyfesolver/_ge_beam3_g3c_local_shell.py +371 -0
  81. anyfesolver/_ge_beam3_g3c_owner.py +400 -0
  82. anyfesolver/_ge_beam3_g3c_physical_authority.py +203 -0
  83. anyfesolver/_ge_beam3_g3c_physical_owner.py +556 -0
  84. anyfesolver/_ge_beam3_g3c_recovery.py +91 -0
  85. anyfesolver/_ge_beam3_g3c_so3_numerics.py +81 -0
  86. anyfesolver/_ge_beam3_g3c_stable/__init__.py +1 -0
  87. anyfesolver/_ge_beam3_g3c_stable/authority.py +152 -0
  88. anyfesolver/_ge_beam3_g3c_stable/beam.py +196 -0
  89. anyfesolver/_ge_beam3_g3c_stable/boundary.py +38 -0
  90. anyfesolver/_ge_beam3_g3c_stable/chart.py +23 -0
  91. anyfesolver/_ge_beam3_g3c_stable/compensated.py +46 -0
  92. anyfesolver/_ge_beam3_g3c_stable/element.py +190 -0
  93. anyfesolver/_ge_beam3_g3c_stable/fit.py +54 -0
  94. anyfesolver/_ge_beam3_g3c_stable/joint.py +255 -0
  95. anyfesolver/_ge_beam3_g3c_stable/line_work.py +92 -0
  96. anyfesolver/_ge_beam3_g3c_stable/operator.py +147 -0
  97. anyfesolver/_ge_beam3_g3c_stable/owner.py +415 -0
  98. anyfesolver/_ge_beam3_g3c_stable/shell.py +358 -0
  99. anyfesolver/_ge_beam3_g4_completion.py +186 -0
  100. anyfesolver/_ge_beam3_g4a_station_transaction.py +385 -0
  101. anyfesolver/_ge_beam3_g5_completion.py +68 -0
  102. anyfesolver/_ge_beam3_g6_domain.py +354 -0
  103. anyfesolver/_ge_beam3_generalized_cell.py +172 -0
  104. anyfesolver/_ge_beam3_generalized_ellipsoid_section.py +215 -0
  105. anyfesolver/_ge_beam3_generalized_static_boundary.py +233 -0
  106. anyfesolver/_ge_beam3_lifted_kinetic_factor.py +26 -0
  107. anyfesolver/_ge_beam3_line_fibre_modes.py +121 -0
  108. anyfesolver/_ge_beam3_load_program.py +275 -0
  109. anyfesolver/_ge_beam3_loaded_modal.py +225 -0
  110. anyfesolver/_ge_beam3_mixed_ad.py +286 -0
  111. anyfesolver/_ge_beam3_native_analysis.py +484 -0
  112. anyfesolver/_ge_beam3_native_arc.py +269 -0
  113. anyfesolver/_ge_beam3_native_arc_adaptive.py +251 -0
  114. anyfesolver/_ge_beam3_native_arc_restart.py +88 -0
  115. anyfesolver/_ge_beam3_native_arc_source.py +62 -0
  116. anyfesolver/_ge_beam3_native_buckling.py +206 -0
  117. anyfesolver/_ge_beam3_native_combined_couples.py +179 -0
  118. anyfesolver/_ge_beam3_native_combined_restart.py +205 -0
  119. anyfesolver/_ge_beam3_native_definition.py +238 -0
  120. anyfesolver/_ge_beam3_native_distributed_element.py +220 -0
  121. anyfesolver/_ge_beam3_native_distributed_loading.py +92 -0
  122. anyfesolver/_ge_beam3_native_distributed_program.py +165 -0
  123. anyfesolver/_ge_beam3_native_distributed_recovery.py +34 -0
  124. anyfesolver/_ge_beam3_native_distributed_restart.py +221 -0
  125. anyfesolver/_ge_beam3_native_dynamic_analysis.py +149 -0
  126. anyfesolver/_ge_beam3_native_dynamic_restart.py +261 -0
  127. anyfesolver/_ge_beam3_native_fibre_current_modal.py +104 -0
  128. anyfesolver/_ge_beam3_native_fibre_recovery.py +34 -0
  129. anyfesolver/_ge_beam3_native_fibre_restart.py +211 -0
  130. anyfesolver/_ge_beam3_native_fibre_static_element.py +193 -0
  131. anyfesolver/_ge_beam3_native_force_adaptation.py +56 -0
  132. anyfesolver/_ge_beam3_native_generalized_combined_couples.py +188 -0
  133. anyfesolver/_ge_beam3_native_generalized_combined_restart.py +207 -0
  134. anyfesolver/_ge_beam3_native_generalized_element.py +222 -0
  135. anyfesolver/_ge_beam3_native_generalized_factor_modal.py +122 -0
  136. anyfesolver/_ge_beam3_native_generalized_loading.py +92 -0
  137. anyfesolver/_ge_beam3_native_generalized_modal.py +274 -0
  138. anyfesolver/_ge_beam3_native_generalized_paired_modal.py +13 -0
  139. anyfesolver/_ge_beam3_native_generalized_parameter.py +89 -0
  140. anyfesolver/_ge_beam3_native_generalized_program.py +196 -0
  141. anyfesolver/_ge_beam3_native_generalized_recovery.py +34 -0
  142. anyfesolver/_ge_beam3_native_generalized_restart.py +243 -0
  143. anyfesolver/_ge_beam3_native_history_profile.py +53 -0
  144. anyfesolver/_ge_beam3_native_line_loading.py +93 -0
  145. anyfesolver/_ge_beam3_native_line_program.py +150 -0
  146. anyfesolver/_ge_beam3_native_line_recovery.py +34 -0
  147. anyfesolver/_ge_beam3_native_line_restart.py +197 -0
  148. anyfesolver/_ge_beam3_native_line_static_element.py +220 -0
  149. anyfesolver/_ge_beam3_native_load_admission.py +37 -0
  150. anyfesolver/_ge_beam3_native_midpoint.py +1004 -0
  151. anyfesolver/_ge_beam3_native_multi_shell_contact.py +539 -0
  152. anyfesolver/_ge_beam3_native_pair_contact.py +236 -0
  153. anyfesolver/_ge_beam3_native_shell_contact.py +357 -0
  154. anyfesolver/_ge_beam3_native_spatial_couples.py +176 -0
  155. anyfesolver/_ge_beam3_native_spatial_restart.py +204 -0
  156. anyfesolver/_ge_beam3_native_transient.py +467 -0
  157. anyfesolver/_ge_beam3_native_translation.py +225 -0
  158. anyfesolver/_ge_beam3_native_translation_restart.py +54 -0
  159. anyfesolver/_ge_beam3_operator_validation_scope.py +53 -0
  160. anyfesolver/_ge_beam3_p5/__init__.py +11 -0
  161. anyfesolver/_ge_beam3_p5/algebra.py +91 -0
  162. anyfesolver/_ge_beam3_p5/arrays.py +29 -0
  163. anyfesolver/_ge_beam3_p5/chart.py +45 -0
  164. anyfesolver/_ge_beam3_p5/codec.py +82 -0
  165. anyfesolver/_ge_beam3_p5/committed_modal.py +191 -0
  166. anyfesolver/_ge_beam3_p5/compensated.py +118 -0
  167. anyfesolver/_ge_beam3_p5/compensated_coordinates.py +44 -0
  168. anyfesolver/_ge_beam3_p5/core.py +159 -0
  169. anyfesolver/_ge_beam3_p5/element.py +207 -0
  170. anyfesolver/_ge_beam3_p5/factors.py +61 -0
  171. anyfesolver/_ge_beam3_p5/inertia.py +120 -0
  172. anyfesolver/_ge_beam3_p5/mass.py +70 -0
  173. anyfesolver/_ge_beam3_p5/mixed.py +256 -0
  174. anyfesolver/_ge_beam3_p5/reference_modal.py +73 -0
  175. anyfesolver/_ge_beam3_p5/section.py +139 -0
  176. anyfesolver/_ge_beam3_p5/typed_schema.py +111 -0
  177. anyfesolver/_ge_beam3_p5_centered/__init__.py +6 -0
  178. anyfesolver/_ge_beam3_p5_centered/codec.py +84 -0
  179. anyfesolver/_ge_beam3_p5_centered/committed_modal.py +192 -0
  180. anyfesolver/_ge_beam3_p5_centered/core.py +171 -0
  181. anyfesolver/_ge_beam3_p5_centered/element.py +216 -0
  182. anyfesolver/_ge_beam3_p5_centered/mass.py +99 -0
  183. anyfesolver/_ge_beam3_p5_centered/positions.py +34 -0
  184. anyfesolver/_ge_beam3_p5_centered/reference_modal.py +73 -0
  185. anyfesolver/_ge_beam3_p5_coordinates/__init__.py +6 -0
  186. anyfesolver/_ge_beam3_p5_coordinates/codec.py +84 -0
  187. anyfesolver/_ge_beam3_p5_coordinates/committed_modal.py +192 -0
  188. anyfesolver/_ge_beam3_p5_coordinates/core.py +163 -0
  189. anyfesolver/_ge_beam3_p5_coordinates/element.py +213 -0
  190. anyfesolver/_ge_beam3_p5_coordinates/positions.py +102 -0
  191. anyfesolver/_ge_beam3_p5_coordinates/reference_modal.py +73 -0
  192. anyfesolver/_ge_beam3_p5_loads/__init__.py +7 -0
  193. anyfesolver/_ge_beam3_p5_loads/codec.py +85 -0
  194. anyfesolver/_ge_beam3_p5_loads/core.py +192 -0
  195. anyfesolver/_ge_beam3_p5_loads/element.py +243 -0
  196. anyfesolver/_ge_beam3_p5_loads/state.py +120 -0
  197. anyfesolver/_ge_beam3_p5_loads/work.py +45 -0
  198. anyfesolver/_ge_beam3_p5_seeded/__init__.py +9 -0
  199. anyfesolver/_ge_beam3_p5_seeded/codec.py +87 -0
  200. anyfesolver/_ge_beam3_p5_seeded/core.py +197 -0
  201. anyfesolver/_ge_beam3_p5_seeded/element.py +245 -0
  202. anyfesolver/_ge_beam3_p5_seeded/state.py +122 -0
  203. anyfesolver/_ge_beam3_p5_seeded/work.py +47 -0
  204. anyfesolver/_ge_beam3_pose_joint.py +268 -0
  205. anyfesolver/_ge_beam3_precise_geometric_work.py +147 -0
  206. anyfesolver/_ge_beam3_reassembled_signed_modes.py +101 -0
  207. anyfesolver/_ge_beam3_reference_identity.py +92 -0
  208. anyfesolver/_ge_beam3_refined_fibre_schur_solver.py +104 -0
  209. anyfesolver/_ge_beam3_refinement_capacity.py +19 -0
  210. anyfesolver/_ge_beam3_relative_virgin_reference_modes.py +60 -0
  211. anyfesolver/_ge_beam3_retained_arc.py +350 -0
  212. anyfesolver/_ge_beam3_retained_arc_geometry.py +66 -0
  213. anyfesolver/_ge_beam3_retained_arc_modal.py +125 -0
  214. anyfesolver/_ge_beam3_retained_elastic.py +134 -0
  215. anyfesolver/_ge_beam3_retained_fibre.py +209 -0
  216. anyfesolver/_ge_beam3_retained_fibre_control.py +270 -0
  217. anyfesolver/_ge_beam3_retained_fibre_element.py +58 -0
  218. anyfesolver/_ge_beam3_retained_fibre_modal.py +155 -0
  219. anyfesolver/_ge_beam3_retained_fibre_modes.py +189 -0
  220. anyfesolver/_ge_beam3_retained_fibre_program.py +68 -0
  221. anyfesolver/_ge_beam3_retained_fibre_state.py +268 -0
  222. anyfesolver/_ge_beam3_retained_force_program.py +72 -0
  223. anyfesolver/_ge_beam3_retained_generalized.py +186 -0
  224. anyfesolver/_ge_beam3_retained_generalized_modal.py +171 -0
  225. anyfesolver/_ge_beam3_retained_generalized_program.py +63 -0
  226. anyfesolver/_ge_beam3_retained_generalized_state.py +281 -0
  227. anyfesolver/_ge_beam3_retained_nodal_loading.py +111 -0
  228. anyfesolver/_ge_beam3_retained_plastic.py +116 -0
  229. anyfesolver/_ge_beam3_retained_plastic_modes.py +144 -0
  230. anyfesolver/_ge_beam3_retained_plastic_program.py +69 -0
  231. anyfesolver/_ge_beam3_retained_plastic_state.py +165 -0
  232. anyfesolver/_ge_beam3_retained_state.py +194 -0
  233. anyfesolver/_ge_beam3_retained_translation_control.py +345 -0
  234. anyfesolver/_ge_beam3_retained_translation_modal.py +137 -0
  235. anyfesolver/_ge_beam3_schur_line_program.py +98 -0
  236. anyfesolver/_ge_beam3_seeded_fibre_control.py +175 -0
  237. anyfesolver/_ge_beam3_seeded_load_program.py +301 -0
  238. anyfesolver/_ge_beam3_seeded_loaded_modal.py +226 -0
  239. anyfesolver/_ge_beam3_seeded_signed_modes.py +150 -0
  240. anyfesolver/_ge_beam3_shared_kinematic_split.py +53 -0
  241. anyfesolver/_ge_beam3_shell_joint_state.py +396 -0
  242. anyfesolver/_ge_beam3_shell_joint_trial.py +217 -0
  243. anyfesolver/_ge_beam3_signed_loaded_modes.py +140 -0
  244. anyfesolver/_ge_beam3_spatial_fibre_program.py +113 -0
  245. anyfesolver/_ge_beam3_spatial_nodal_moments.py +38 -0
  246. anyfesolver/_ge_beam3_station_resultant_cell.py +235 -0
  247. anyfesolver/_ge_beam3_variational_shell.py +211 -0
  248. anyfesolver/_ge_beam3_virgin_reference_modes.py +60 -0
  249. anyfesolver/_impact_coupling.py +162 -0
  250. anyfesolver/_native_authority_dag.py +77 -0
  251. anyfesolver/_native_dyadic_interval_inertia.py +64 -0
  252. anyfesolver/_native_exact_shift_chain_modes.py +140 -0
  253. anyfesolver/_native_exact_shift_inertia.py +86 -0
  254. anyfesolver/_native_factor_chain_modes.py +192 -0
  255. anyfesolver/_native_guard.cpp +828 -0
  256. anyfesolver/_native_guard_dispatch.py +140 -0
  257. anyfesolver/_native_large_factor_chain.py +55 -0
  258. anyfesolver/_native_material_protocol.py +51 -0
  259. anyfesolver/_native_midpoint_controller.py +90 -0
  260. anyfesolver/_native_modal_capacity.py +26 -0
  261. anyfesolver/_native_paired_factor_chain_modes.py +244 -0
  262. anyfesolver/_native_reassembled_factor_modes.py +185 -0
  263. anyfesolver/_native_reference_factor_spectrum.py +102 -0
  264. anyfesolver/_native_reference_modal.py +180 -0
  265. anyfesolver/_native_relative_factor_chain_modes.py +204 -0
  266. anyfesolver/_native_relative_reference_factor_spectrum.py +110 -0
  267. anyfesolver/_native_retained_step.py +15 -0
  268. anyfesolver/_native_rotation_state.py +797 -0
  269. anyfesolver/_native_signed_factor_modes.py +257 -0
  270. anyfesolver/_native_signed_kinetic_factor_modes.py +279 -0
  271. anyfesolver/_native_stationary_spectrum.py +79 -0
  272. anyfesolver/_nonlinear_events.py +150 -0
  273. anyfesolver/_nonlinear_seed.py +80 -0
  274. anyfesolver/_paired_modal_arithmetic.py +71 -0
  275. anyfesolver/_plate_stability_continuation.py +171 -0
  276. anyfesolver/_q4_assumed_strain_plasticity.py +502 -0
  277. anyfesolver/_qualified_authority_epoch.py +561 -0
  278. anyfesolver/_relative_reference_svd.py +44 -0
  279. anyfesolver/_stiffened_shell_affine_endpoint.py +232 -0
  280. anyfesolver/_stiffened_shell_algorithmic_pullback.py +38 -0
  281. anyfesolver/_stiffened_shell_arc_checkpoint.py +422 -0
  282. anyfesolver/_stiffened_shell_arc_control.py +108 -0
  283. anyfesolver/_stiffened_shell_arc_metric.py +222 -0
  284. anyfesolver/_stiffened_shell_arc_publication.py +153 -0
  285. anyfesolver/_stiffened_shell_arc_trial.py +310 -0
  286. anyfesolver/_stiffened_shell_b2_affine_resolution.py +101 -0
  287. anyfesolver/_stiffened_shell_b2_assembly_diagnostics.py +172 -0
  288. anyfesolver/_stiffened_shell_b2_definition_ownership.py +189 -0
  289. anyfesolver/_stiffened_shell_b2_experimental.py +153 -0
  290. anyfesolver/_stiffened_shell_b2_nodal_footprint.py +273 -0
  291. anyfesolver/_stiffened_shell_b2_physical_rigid_footprint.py +237 -0
  292. anyfesolver/_stiffened_shell_b2_q4_panel_experimental.py +2447 -0
  293. anyfesolver/_stiffened_shell_b2_q4_point_experimental.py +251 -0
  294. anyfesolver/_stiffened_shell_b2_reference_buckling.py +413 -0
  295. anyfesolver/_stiffened_shell_b3_chart.py +70 -0
  296. anyfesolver/_stiffened_shell_b3_local_adapter.py +141 -0
  297. anyfesolver/_stiffened_shell_beam_history.py +107 -0
  298. anyfesolver/_stiffened_shell_bl5_local_experimental.py +173 -0
  299. anyfesolver/_stiffened_shell_bl5_native_elastic.py +28 -0
  300. anyfesolver/_stiffened_shell_branch_event_trial.py +58 -0
  301. anyfesolver/_stiffened_shell_consumer_capabilities.py +124 -0
  302. anyfesolver/_stiffened_shell_coordinate_support.py +110 -0
  303. anyfesolver/_stiffened_shell_displacement_adaptive.py +327 -0
  304. anyfesolver/_stiffened_shell_displacement_checkpoint.py +360 -0
  305. anyfesolver/_stiffened_shell_displacement_control.py +326 -0
  306. anyfesolver/_stiffened_shell_displacement_corrector.py +293 -0
  307. anyfesolver/_stiffened_shell_displacement_increment.py +121 -0
  308. anyfesolver/_stiffened_shell_distributing_footprint.py +354 -0
  309. anyfesolver/_stiffened_shell_distributing_pose.py +267 -0
  310. anyfesolver/_stiffened_shell_f06_increment_arithmetic.py +205 -0
  311. anyfesolver/_stiffened_shell_ge_body_load.py +300 -0
  312. anyfesolver/_stiffened_shell_ge_checkpoint_binary.py +472 -0
  313. anyfesolver/_stiffened_shell_ge_distributed_load.py +210 -0
  314. anyfesolver/_stiffened_shell_ge_distributed_programme.py +175 -0
  315. anyfesolver/_stiffened_shell_ge_distributing_finite.py +242 -0
  316. anyfesolver/_stiffened_shell_ge_distributing_reference.py +296 -0
  317. anyfesolver/_stiffened_shell_ge_experimental.py +2454 -0
  318. anyfesolver/_stiffened_shell_ge_finite_experimental.py +2714 -0
  319. anyfesolver/_stiffened_shell_ge_mixed_modal_mass.py +33 -0
  320. anyfesolver/_stiffened_shell_ge_point_buckling.py +723 -0
  321. anyfesolver/_stiffened_shell_ge_pressure_load.py +366 -0
  322. anyfesolver/_stiffened_shell_ge_reference_modal.py +580 -0
  323. anyfesolver/_stiffened_shell_generalized_recovery.py +150 -0
  324. anyfesolver/_stiffened_shell_increment_control.py +217 -0
  325. anyfesolver/_stiffened_shell_l1_assembly_experimental.py +420 -0
  326. anyfesolver/_stiffened_shell_l1_local_experimental.py +284 -0
  327. anyfesolver/_stiffened_shell_l1_supported_work_experimental.py +146 -0
  328. anyfesolver/_stiffened_shell_native_distributed_load.py +120 -0
  329. anyfesolver/_stiffened_shell_native_gravity.py +236 -0
  330. anyfesolver/_stiffened_shell_nodal_footprint.py +255 -0
  331. anyfesolver/_stiffened_shell_physical_q4_mass.py +98 -0
  332. anyfesolver/_stiffened_shell_physical_s3_mass.py +53 -0
  333. anyfesolver/_stiffened_shell_point_recovery.py +49 -0
  334. anyfesolver/_stiffened_shell_q4_algorithmic_pullback.py +88 -0
  335. anyfesolver/_stiffened_shell_q4_material_event.py +114 -0
  336. anyfesolver/_stiffened_shell_q4_reference.py +65 -0
  337. anyfesolver/_stiffened_shell_rotation_charts.py +58 -0
  338. anyfesolver/_stiffened_shell_s3_algorithmic_pullback.py +59 -0
  339. anyfesolver/_stiffened_shell_s3_conservative_buckling.py +28 -0
  340. anyfesolver/_stiffened_shell_s3_dead_work_candidate.py +107 -0
  341. anyfesolver/_stiffened_shell_s3_material_event.py +30 -0
  342. anyfesolver/_stiffened_shell_same_parent_trial.py +224 -0
  343. anyfesolver/_stiffened_shell_selected_recovery.py +113 -0
  344. anyfesolver/_stiffened_shell_staged_load_experimental.py +392 -0
  345. anyfesolver/_stiffened_shell_stress_free_reference.py +204 -0
  346. anyfesolver/_wire_types.py +17 -0
  347. anyfesolver/activity.py +1537 -0
  348. anyfesolver/algebraic_dynamics.py +2864 -0
  349. anyfesolver/analysis_session.py +897 -0
  350. anyfesolver/anystructure_fem_mode.py +1637 -0
  351. anyfesolver/arc_length.py +2587 -0
  352. anyfesolver/assembly.py +1830 -0
  353. anyfesolver/b3_ge.py +179 -0
  354. anyfesolver/baselines.py +303 -0
  355. anyfesolver/beam_sections.py +292 -0
  356. anyfesolver/beam_shell_verification.py +4685 -0
  357. anyfesolver/beam_validity.py +110 -0
  358. anyfesolver/benchmarks.py +495 -0
  359. anyfesolver/boundary.py +1680 -0
  360. anyfesolver/buckling.py +2136 -0
  361. anyfesolver/buckling_validity.py +91 -0
  362. anyfesolver/capacity_workflow.py +431 -0
  363. anyfesolver/capsule_runtime_guard.py +99 -0
  364. anyfesolver/cases.py +173 -0
  365. anyfesolver/composite_strip_verification.py +297 -0
  366. anyfesolver/concentrated_mass.py +84 -0
  367. anyfesolver/constraint_audit.py +553 -0
  368. anyfesolver/contact.py +4785 -0
  369. anyfesolver/contact_performance.py +301 -0
  370. anyfesolver/control.py +206 -0
  371. anyfesolver/corotational.py +1935 -0
  372. anyfesolver/corotational_performance.py +157 -0
  373. anyfesolver/current_state_tangent.py +2780 -0
  374. anyfesolver/cylinder_benchmarks.py +369 -0
  375. anyfesolver/damage_matrix_performance.py +617 -0
  376. anyfesolver/dynamics.py +2833 -0
  377. anyfesolver/e4_pl_element.py +8265 -0
  378. anyfesolver/e4_pl_enriched.py +194 -0
  379. anyfesolver/e4_pl_enriched_nonlinear.py +159 -0
  380. anyfesolver/e4_pl_s3_element.py +9752 -0
  381. anyfesolver/e4_pl_s3_initial_fields.py +101 -0
  382. anyfesolver/e4_pl_s3_state.py +4723 -0
  383. anyfesolver/e4_pl_s3_v2_element.py +1844 -0
  384. anyfesolver/e4_pl_s3_v2b_element.py +1936 -0
  385. anyfesolver/e4_pl_s3_v2c_element.py +2196 -0
  386. anyfesolver/e4_pl_s3_v2d_element.py +2621 -0
  387. anyfesolver/e4_pl_s3_v2d_state.py +376 -0
  388. anyfesolver/element_capabilities.py +159 -0
  389. anyfesolver/element_qualification.py +432 -0
  390. anyfesolver/elements.py +6327 -0
  391. anyfesolver/experimental_csr_assembly.py +238 -0
  392. anyfesolver/external_references.py +1253 -0
  393. anyfesolver/fe_core.py +832 -0
  394. anyfesolver/floating_pressure_regions.py +119 -0
  395. anyfesolver/floating_response.py +486 -0
  396. anyfesolver/floating_transient.py +1281 -0
  397. anyfesolver/fracture.py +621 -0
  398. anyfesolver/ge_beam3_curved_reference.py +725 -0
  399. anyfesolver/ge_beam3_element.py +885 -0
  400. anyfesolver/ge_beam3_mixed_element.py +1216 -0
  401. anyfesolver/ge_beam3_mixed_state.py +814 -0
  402. anyfesolver/ge_beam3_native.py +129 -0
  403. anyfesolver/ge_beam3_native_connected_dynamics.py +24 -0
  404. anyfesolver/ge_beam3_native_dynamics.py +70 -0
  405. anyfesolver/ge_beam3_state.py +672 -0
  406. anyfesolver/general_contact/__init__.py +151 -0
  407. anyfesolver/general_contact/_enriched_multitarget_empty.py +202 -0
  408. anyfesolver/general_contact/_enriched_multitarget_trial.py +183 -0
  409. anyfesolver/general_contact/_results_archive_common.py +65 -0
  410. anyfesolver/general_contact/algebraic_path.py +206 -0
  411. anyfesolver/general_contact/arc_contact.py +237 -0
  412. anyfesolver/general_contact/arc_results_archive.py +158 -0
  413. anyfesolver/general_contact/augmentation.py +157 -0
  414. anyfesolver/general_contact/automatic_domain.py +621 -0
  415. anyfesolver/general_contact/beam_chain_consistent.py +357 -0
  416. anyfesolver/general_contact/beam_chain_end_geometry.py +237 -0
  417. anyfesolver/general_contact/beam_chain_ends.py +220 -0
  418. anyfesolver/general_contact/beam_chain_pair.py +416 -0
  419. anyfesolver/general_contact/beam_curve_end_geometry.py +254 -0
  420. anyfesolver/general_contact/beam_curve_ends.py +237 -0
  421. anyfesolver/general_contact/beam_curve_pair.py +794 -0
  422. anyfesolver/general_contact/beam_curve_pair_static.py +303 -0
  423. anyfesolver/general_contact/beam_end_radial_geometry.py +221 -0
  424. anyfesolver/general_contact/beam_end_topology.py +15 -0
  425. anyfesolver/general_contact/beam_hemisphere_coupled_tool.py +61 -0
  426. anyfesolver/general_contact/beam_hemisphere_cylinder.py +134 -0
  427. anyfesolver/general_contact/beam_hemisphere_cylinder_motion.py +89 -0
  428. anyfesolver/general_contact/beam_hemisphere_cylinder_work.py +216 -0
  429. anyfesolver/general_contact/beam_hemisphere_plane.py +175 -0
  430. anyfesolver/general_contact/beam_hemisphere_s3_support.py +152 -0
  431. anyfesolver/general_contact/beam_hemisphere_sphere.py +135 -0
  432. anyfesolver/general_contact/beam_hemisphere_sphere_work.py +114 -0
  433. anyfesolver/general_contact/beam_hemisphere_support.py +211 -0
  434. anyfesolver/general_contact/beam_pair.py +523 -0
  435. anyfesolver/general_contact/beam_pair_end_geometry.py +269 -0
  436. anyfesolver/general_contact/beam_pair_ends.py +222 -0
  437. anyfesolver/general_contact/beam_plane.py +425 -0
  438. anyfesolver/general_contact/beam_radial.py +500 -0
  439. anyfesolver/general_contact/beam_radial_ends.py +223 -0
  440. anyfesolver/general_contact/beam_s3_directional_rates.py +196 -0
  441. anyfesolver/general_contact/beam_s3_rotational_transient.py +126 -0
  442. anyfesolver/general_contact/beam_s3_transient.py +139 -0
  443. anyfesolver/general_contact/beam_shell.py +648 -0
  444. anyfesolver/general_contact/beam_shell_patch.py +395 -0
  445. anyfesolver/general_contact/beam_temporal_bounds.py +230 -0
  446. anyfesolver/general_contact/capability.py +101 -0
  447. anyfesolver/general_contact/capped_cylinder.py +618 -0
  448. anyfesolver/general_contact/contact_search.py +95 -0
  449. anyfesolver/general_contact/core.py +1769 -0
  450. anyfesolver/general_contact/curved_s3_q4_work.py +238 -0
  451. anyfesolver/general_contact/curved_shell_skin.py +520 -0
  452. anyfesolver/general_contact/d1_interior_profile.py +427 -0
  453. anyfesolver/general_contact/deformable_beam_s3_caps.py +143 -0
  454. anyfesolver/general_contact/deformable_beam_s3_line.py +211 -0
  455. anyfesolver/general_contact/deformable_beam_s3_static.py +152 -0
  456. anyfesolver/general_contact/descriptor_rates.py +61 -0
  457. anyfesolver/general_contact/enriched_cold_predictor.py +161 -0
  458. anyfesolver/general_contact/enriched_moment_batch.py +337 -0
  459. anyfesolver/general_contact/enriched_multitarget.py +308 -0
  460. anyfesolver/general_contact/enriched_multitarget_gap.py +156 -0
  461. anyfesolver/general_contact/enriched_multitarget_moments.py +194 -0
  462. anyfesolver/general_contact/enriched_multitarget_topology.py +171 -0
  463. anyfesolver/general_contact/enriched_nonlinear.py +440 -0
  464. anyfesolver/general_contact/enriched_overlap.py +299 -0
  465. anyfesolver/general_contact/enriched_path.py +253 -0
  466. anyfesolver/general_contact/enriched_small_cut.py +310 -0
  467. anyfesolver/general_contact/enriched_static.py +481 -0
  468. anyfesolver/general_contact/enriched_union.py +320 -0
  469. anyfesolver/general_contact/equilibrated_pressure_pivot.py +140 -0
  470. anyfesolver/general_contact/event_subdivision.py +273 -0
  471. anyfesolver/general_contact/finite_mixed_state.py +133 -0
  472. anyfesolver/general_contact/finite_rigid_patch.py +196 -0
  473. anyfesolver/general_contact/finite_rigid_support.py +129 -0
  474. anyfesolver/general_contact/finite_rigid_sweep.py +53 -0
  475. anyfesolver/general_contact/finite_rotation_predictor.py +171 -0
  476. anyfesolver/general_contact/finite_rotation_skin.py +212 -0
  477. anyfesolver/general_contact/finite_rotation_state.py +106 -0
  478. anyfesolver/general_contact/finite_rotation_sweep.py +161 -0
  479. anyfesolver/general_contact/finite_v2d_state.py +104 -0
  480. anyfesolver/general_contact/fixed_projection_graph.py +205 -0
  481. anyfesolver/general_contact/fixed_projection_s3_events.py +235 -0
  482. anyfesolver/general_contact/free_rigid.py +134 -0
  483. anyfesolver/general_contact/friction_point.py +378 -0
  484. anyfesolver/general_contact/gap_extrema.py +119 -0
  485. anyfesolver/general_contact/guided_pair_transient_geometry.py +138 -0
  486. anyfesolver/general_contact/initial_contact_seed.py +368 -0
  487. anyfesolver/general_contact/linearized_pivot.py +595 -0
  488. anyfesolver/general_contact/material_work_diagnostics.py +159 -0
  489. anyfesolver/general_contact/moment_batch_ad.py +129 -0
  490. anyfesolver/general_contact/moment_batch_points.py +75 -0
  491. anyfesolver/general_contact/moving.py +1031 -0
  492. anyfesolver/general_contact/multiple_beam_rigid.py +248 -0
  493. anyfesolver/general_contact/multiple_beam_s3_caps.py +199 -0
  494. anyfesolver/general_contact/multiple_beam_s3_transient.py +223 -0
  495. anyfesolver/general_contact/multiple_projected_pairs.py +196 -0
  496. anyfesolver/general_contact/multiple_shell_planes.py +226 -0
  497. anyfesolver/general_contact/native_activation_static.py +143 -0
  498. anyfesolver/general_contact/native_checkpoint_results.py +213 -0
  499. anyfesolver/general_contact/native_curve_union.py +268 -0
  500. anyfesolver/general_contact/native_curved_geometry.py +374 -0
  501. anyfesolver/general_contact/native_curved_pair_partition.py +590 -0
  502. anyfesolver/general_contact/native_curved_plane_work.py +864 -0
  503. anyfesolver/general_contact/native_curved_s3_work.py +472 -0
  504. anyfesolver/general_contact/native_event_polynomial.py +164 -0
  505. anyfesolver/general_contact/native_fibre_context.py +173 -0
  506. anyfesolver/general_contact/native_fibre_results.py +74 -0
  507. anyfesolver/general_contact/native_initial_guess.py +122 -0
  508. anyfesolver/general_contact/native_material_activation.py +108 -0
  509. anyfesolver/general_contact/native_material_plane.py +111 -0
  510. anyfesolver/general_contact/native_material_s3.py +209 -0
  511. anyfesolver/general_contact/native_multi_s3_static.py +722 -0
  512. anyfesolver/general_contact/native_normal_angles.py +233 -0
  513. anyfesolver/general_contact/native_pair_error_budget.py +49 -0
  514. anyfesolver/general_contact/native_replay_arithmetic.py +103 -0
  515. anyfesolver/general_contact/native_replay_diagnostics.py +90 -0
  516. anyfesolver/general_contact/native_retained_body_junction.py +99 -0
  517. anyfesolver/general_contact/native_retained_body_pair.py +220 -0
  518. anyfesolver/general_contact/native_retained_body_projection.py +160 -0
  519. anyfesolver/general_contact/native_retained_body_static.py +62 -0
  520. anyfesolver/general_contact/native_retained_cell_pair.py +185 -0
  521. anyfesolver/general_contact/native_retained_curve_cell.py +102 -0
  522. anyfesolver/general_contact/native_retained_line_plane.py +210 -0
  523. anyfesolver/general_contact/native_retained_line_s3.py +440 -0
  524. anyfesolver/general_contact/native_retained_line_s3_work.py +91 -0
  525. anyfesolver/general_contact/native_retained_pair_static.py +845 -0
  526. anyfesolver/general_contact/native_retained_s3_static.py +554 -0
  527. anyfesolver/general_contact/native_retained_static.py +478 -0
  528. anyfesolver/general_contact/native_retained_station.py +222 -0
  529. anyfesolver/general_contact/native_retained_whole_pair.py +2120 -0
  530. anyfesolver/general_contact/native_s3_swept.py +149 -0
  531. anyfesolver/general_contact/native_shell_static_driver.py +144 -0
  532. anyfesolver/general_contact/native_surface_activation.py +391 -0
  533. anyfesolver/general_contact/native_surface_bounds.py +198 -0
  534. anyfesolver/general_contact/native_surface_contributor.py +121 -0
  535. anyfesolver/general_contact/native_surface_crossing.py +81 -0
  536. anyfesolver/general_contact/native_surface_event_sequence.py +320 -0
  537. anyfesolver/general_contact/native_surface_extrema.py +72 -0
  538. anyfesolver/general_contact/native_surface_friction_integral.py +1724 -0
  539. anyfesolver/general_contact/native_surface_front.py +742 -0
  540. anyfesolver/general_contact/native_surface_front_boundary.py +160 -0
  541. anyfesolver/general_contact/native_surface_front_precision.py +78 -0
  542. anyfesolver/general_contact/native_surface_front_work.py +118 -0
  543. anyfesolver/general_contact/native_surface_history.py +334 -0
  544. anyfesolver/general_contact/native_surface_normal.py +324 -0
  545. anyfesolver/general_contact/native_surface_patch.py +213 -0
  546. anyfesolver/general_contact/native_surface_path.py +348 -0
  547. anyfesolver/general_contact/native_surface_quadrature.py +212 -0
  548. anyfesolver/general_contact/native_surface_s3_friction.py +340 -0
  549. anyfesolver/general_contact/native_surface_support.py +776 -0
  550. anyfesolver/general_contact/native_surface_transaction.py +198 -0
  551. anyfesolver/general_contact/native_transient_multi_shell.py +108 -0
  552. anyfesolver/general_contact/native_transient_pair.py +61 -0
  553. anyfesolver/general_contact/native_transient_shell.py +44 -0
  554. anyfesolver/general_contact/normal_s3_skin_path.py +163 -0
  555. anyfesolver/general_contact/overlap.py +443 -0
  556. anyfesolver/general_contact/pair.py +466 -0
  557. anyfesolver/general_contact/patch_broadphase.py +111 -0
  558. anyfesolver/general_contact/patch_mortar.py +593 -0
  559. anyfesolver/general_contact/patch_sliding.py +644 -0
  560. anyfesolver/general_contact/plane_newmark_events.py +278 -0
  561. anyfesolver/general_contact/pointwise_patch.py +288 -0
  562. anyfesolver/general_contact/polynomial_roots.py +312 -0
  563. anyfesolver/general_contact/pressure_basis.py +241 -0
  564. anyfesolver/general_contact/pressure_diagnostics.py +155 -0
  565. anyfesolver/general_contact/pressure_overlay.py +182 -0
  566. anyfesolver/general_contact/pressure_space.py +51 -0
  567. anyfesolver/general_contact/q4_material_checkpoint.py +276 -0
  568. anyfesolver/general_contact/q4_overlap_local_bound.py +1111 -0
  569. anyfesolver/general_contact/q4_q4_overlap_derivatives.py +234 -0
  570. anyfesolver/general_contact/q4_q4_swept_bound.py +58 -0
  571. anyfesolver/general_contact/q4_s3_overlap_derivatives.py +1159 -0
  572. anyfesolver/general_contact/q4_s3_tiny_wedge.py +180 -0
  573. anyfesolver/general_contact/q4_skin_work.py +87 -0
  574. anyfesolver/general_contact/q4_source_mortar_energy.py +181 -0
  575. anyfesolver/general_contact/q4_source_overlap.py +401 -0
  576. anyfesolver/general_contact/q4_target_overlap.py +181 -0
  577. anyfesolver/general_contact/request_identity.py +192 -0
  578. anyfesolver/general_contact/rigid_translation.py +199 -0
  579. anyfesolver/general_contact/runtime.py +27 -0
  580. anyfesolver/general_contact/s3_friction_chart_interval.py +104 -0
  581. anyfesolver/general_contact/s3_friction_coverage.py +165 -0
  582. anyfesolver/general_contact/s3_friction_dyadic_interval.py +39 -0
  583. anyfesolver/general_contact/s3_friction_history_path.py +111 -0
  584. anyfesolver/general_contact/s3_friction_mesh_coverage.py +145 -0
  585. anyfesolver/general_contact/s3_friction_mesh_gap.py +74 -0
  586. anyfesolver/general_contact/s3_friction_mesh_monolithic.py +150 -0
  587. anyfesolver/general_contact/s3_friction_monolithic.py +121 -0
  588. anyfesolver/general_contact/s3_friction_moving_coverage.py +114 -0
  589. anyfesolver/general_contact/s3_friction_pair.py +237 -0
  590. anyfesolver/general_contact/s3_friction_point.py +129 -0
  591. anyfesolver/general_contact/s3_friction_prepared_path.py +254 -0
  592. anyfesolver/general_contact/s3_friction_replay.py +1094 -0
  593. anyfesolver/general_contact/s3_friction_rim_path.py +69 -0
  594. anyfesolver/general_contact/s3_friction_rim_transaction.py +23 -0
  595. anyfesolver/general_contact/s3_friction_static.py +267 -0
  596. anyfesolver/general_contact/s3_friction_swept_gap.py +112 -0
  597. anyfesolver/general_contact/s3_friction_touch.py +94 -0
  598. anyfesolver/general_contact/s3_friction_weak_pressure.py +66 -0
  599. anyfesolver/general_contact/s3_overlap_derivatives.py +220 -0
  600. anyfesolver/general_contact/s3_overlap_hermite_gap.py +180 -0
  601. anyfesolver/general_contact/s3_pair_static.py +343 -0
  602. anyfesolver/general_contact/s3_patch_augmented.py +2056 -0
  603. anyfesolver/general_contact/s3_patch_mortar_energy.py +545 -0
  604. anyfesolver/general_contact/s3_patch_static.py +1725 -0
  605. anyfesolver/general_contact/s3_pressure_hermite_bounds.py +395 -0
  606. anyfesolver/general_contact/s3_pressure_polygon_bounds.py +73 -0
  607. anyfesolver/general_contact/s3_q4_gap_resolution.py +191 -0
  608. anyfesolver/general_contact/s3_q4_overlap_derivatives.py +252 -0
  609. anyfesolver/general_contact/s3_q4_swept.py +56 -0
  610. anyfesolver/general_contact/s3_skin_work.py +101 -0
  611. anyfesolver/general_contact/s3_sliding_friction.py +640 -0
  612. anyfesolver/general_contact/s3_stable_plane_gap.py +43 -0
  613. anyfesolver/general_contact/seed_path_vertex_interval.py +323 -0
  614. anyfesolver/general_contact/semismooth.py +133 -0
  615. anyfesolver/general_contact/semismooth_block.py +147 -0
  616. anyfesolver/general_contact/semismooth_path.py +871 -0
  617. anyfesolver/general_contact/shell_pair_hermite_sweep.py +336 -0
  618. anyfesolver/general_contact/shell_sphere_temporal_bounds.py +305 -0
  619. anyfesolver/general_contact/skin_geometry.py +106 -0
  620. anyfesolver/general_contact/sliding.py +349 -0
  621. anyfesolver/general_contact/sphere.py +691 -0
  622. anyfesolver/general_contact/sphere_temporal_bounds.py +241 -0
  623. anyfesolver/general_contact/static_path.py +2608 -0
  624. anyfesolver/general_contact/static_results_archive.py +140 -0
  625. anyfesolver/general_contact/structural_state_bridge.py +196 -0
  626. anyfesolver/general_contact/supported_schur.py +594 -0
  627. anyfesolver/general_contact/swept_patch_broadphase.py +160 -0
  628. anyfesolver/general_contact/transient.py +2921 -0
  629. anyfesolver/general_contact/transient_results_archive.py +491 -0
  630. anyfesolver/general_contact/triangle_mortar_energy.py +280 -0
  631. anyfesolver/general_contact/triangle_pair_energy.py +211 -0
  632. anyfesolver/general_contact/triangulated_rigid.py +94 -0
  633. anyfesolver/general_contact/triangulated_rigid_static.py +399 -0
  634. anyfesolver/general_contact/warped_q4_plane.py +185 -0
  635. anyfesolver/general_contact/warped_q4_skin.py +302 -0
  636. anyfesolver/general_contact/warped_q4_static.py +331 -0
  637. anyfesolver/impact_performance.py +273 -0
  638. anyfesolver/impact_reduced_assembly.py +294 -0
  639. anyfesolver/imperfections.py +397 -0
  640. anyfesolver/inertia_relief.py +676 -0
  641. anyfesolver/initial_field_state.py +54 -0
  642. anyfesolver/jit_compiler.py +135 -0
  643. anyfesolver/kernel_warmup.py +228 -0
  644. anyfesolver/linalg.py +1002 -0
  645. anyfesolver/marine_contributions.py +634 -0
  646. anyfesolver/marine_coupled_equilibrium.py +292 -0
  647. anyfesolver/marine_equilibrium.py +405 -0
  648. anyfesolver/marine_hydro_coordinates.py +346 -0
  649. anyfesolver/marine_linear.py +549 -0
  650. anyfesolver/marine_link.py +306 -0
  651. anyfesolver/marine_mechanical.py +923 -0
  652. anyfesolver/marine_mooring.py +533 -0
  653. anyfesolver/marine_morison.py +331 -0
  654. anyfesolver/marine_potential_flow.py +403 -0
  655. anyfesolver/marine_rigid.py +397 -0
  656. anyfesolver/marine_seabed.py +122 -0
  657. anyfesolver/mass_properties.py +352 -0
  658. anyfesolver/material_curves.py +52 -0
  659. anyfesolver/materials.py +43 -0
  660. anyfesolver/matrix_assembly.py +7330 -0
  661. anyfesolver/mesh_gen.py +904 -0
  662. anyfesolver/mesh_load_bc_verification.py +612 -0
  663. anyfesolver/modal.py +2494 -0
  664. anyfesolver/nonlinear.py +341 -0
  665. anyfesolver/nonlinear_analysis_diagnostics.py +466 -0
  666. anyfesolver/nonlinear_element_evaluation.py +126 -0
  667. anyfesolver/nonlinear_performance.py +2094 -0
  668. anyfesolver/nonlinear_performance_batch_b.py +1173 -0
  669. anyfesolver/nonlinear_performance_batch_c.py +850 -0
  670. anyfesolver/nonlinear_performance_bootstrap.py +164 -0
  671. anyfesolver/nonlinear_reduced_assembly.py +806 -0
  672. anyfesolver/nonlinear_restart.py +1708 -0
  673. anyfesolver/nonlinear_state.py +2800 -0
  674. anyfesolver/nonlinear_static.py +9407 -0
  675. anyfesolver/outcomes.py +694 -0
  676. anyfesolver/plasticity.py +2087 -0
  677. anyfesolver/plasticity_qualification.py +758 -0
  678. anyfesolver/prepared_static.py +1129 -0
  679. anyfesolver/prepared_static_envelopes.py +389 -0
  680. anyfesolver/prepared_static_loads.py +1180 -0
  681. anyfesolver/prepared_static_measures.py +18 -0
  682. anyfesolver/prepared_static_numeric.py +247 -0
  683. anyfesolver/prepared_static_q4.py +297 -0
  684. anyfesolver/prepared_static_recovery.py +2068 -0
  685. anyfesolver/prepared_static_response.py +1013 -0
  686. anyfesolver/prepared_static_shared.py +226 -0
  687. anyfesolver/prepared_static_snapshot.py +323 -0
  688. anyfesolver/prepared_static_vectorized.py +866 -0
  689. anyfesolver/pressure_regions.py +287 -0
  690. anyfesolver/production_readiness.py +343 -0
  691. anyfesolver/quality_control.py +1487 -0
  692. anyfesolver/quantities.py +1289 -0
  693. anyfesolver/recovery.py +4217 -0
  694. anyfesolver/recovery_batches.py +1985 -0
  695. anyfesolver/recovery_policy.py +205 -0
  696. anyfesolver/recovery_s4.py +289 -0
  697. anyfesolver/recovery_shell_frames.py +102 -0
  698. anyfesolver/reference_cases.py +366 -0
  699. anyfesolver/result_capsule.py +2175 -0
  700. anyfesolver/results.py +752 -0
  701. anyfesolver/runtime.py +9819 -0
  702. anyfesolver/s3_reference_batch.py +1338 -0
  703. anyfesolver/s3_v2c_fast_assembly.py +544 -0
  704. anyfesolver/s3_v2d_fast_assembly.py +447 -0
  705. anyfesolver/s4_validity.py +354 -0
  706. anyfesolver/sections.py +67 -0
  707. anyfesolver/sesam_fem/__init__.py +55 -0
  708. anyfesolver/sesam_fem/__main__.py +80 -0
  709. anyfesolver/sesam_fem/diagnostics.py +5 -0
  710. anyfesolver/sesam_fem/document.py +39 -0
  711. anyfesolver/sesam_fem/exporter.py +9 -0
  712. anyfesolver/sesam_fem/importer.py +228 -0
  713. anyfesolver/sesam_fem/records.py +21 -0
  714. anyfesolver/sesam_fem/schema.py +35 -0
  715. anyfesolver/sesam_fem/sif_importer.py +9 -0
  716. anyfesolver/sesam_fem/validation.py +5 -0
  717. anyfesolver/sestra_deep_diagnostics.py +173 -0
  718. anyfesolver/sestra_mixed_verification.py +146 -0
  719. anyfesolver/sestra_structure_benchmarks.py +270 -0
  720. anyfesolver/sestra_three_case.py +215 -0
  721. anyfesolver/sestra_verification.py +523 -0
  722. anyfesolver/shell_benchmarks.py +367 -0
  723. anyfesolver/shell_formulations/director_field.py +799 -0
  724. anyfesolver/shell_formulations/geometry_provenance.py +921 -0
  725. anyfesolver/shell_formulations/mitc4_plus_d_quality.py +318 -0
  726. anyfesolver/shell_formulations/mitc4_plus_d_reference.py +837 -0
  727. anyfesolver/shell_formulations/mitc4_plus_d_scalar.py +209 -0
  728. anyfesolver/shell_formulations/protocol.py +222 -0
  729. anyfesolver/shell_formulations/q4_common.py +271 -0
  730. anyfesolver/shell_formulations/s4_restricted_policy.py +78 -0
  731. anyfesolver/shell_sections.py +394 -0
  732. anyfesolver/solid_submodel.py +930 -0
  733. anyfesolver/static_batch.py +662 -0
  734. anyfesolver/static_envelopes.py +250 -0
  735. anyfesolver/stiffened_shell.py +388 -0
  736. anyfesolver/submodel_transfer.py +1306 -0
  737. anyfesolver/test_cases.py +610 -0
  738. anyfesolver/threading_policy.py +431 -0
  739. anyfesolver/validation.py +719 -0
  740. anyfesolver/vectorized_beam.py +139 -0
  741. anyfesolver/vectorized_generalized_shell.py +448 -0
  742. anyfesolver/vectorized_hill48.py +956 -0
  743. anyfesolver/vectorized_nonlinear.py +360 -0
  744. anyfesolver/vectorized_stiffness.py +694 -0
  745. anyfesolver-0.5.0a1.dist-info/METADATA +374 -0
  746. anyfesolver-0.5.0a1.dist-info/RECORD +751 -0
  747. anyfesolver-0.5.0a1.dist-info/WHEEL +5 -0
  748. anyfesolver-0.5.0a1.dist-info/licenses/COPYRIGHT +1 -0
  749. anyfesolver-0.5.0a1.dist-info/licenses/LICENSE +373 -0
  750. anyfesolver-0.5.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +32 -0
  751. anyfesolver-0.5.0a1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,140 @@
1
+ """Optional expected-fact accelerator. Every decline uses the literal guard."""
2
+ import base64
3
+ import csv
4
+ import hashlib
5
+ import importlib
6
+ import importlib.metadata
7
+ import os
8
+ from pathlib import Path
9
+ import platform
10
+ import sys
11
+ import types
12
+
13
+ _MODULE_TYPE=types.ModuleType
14
+ _BUILTIN_FUNCTION_TYPE=types.BuiltinFunctionType
15
+ _MODULES=sys.modules
16
+ _DICT_TYPE=dict
17
+ _STATE=None
18
+ _COUNTERS=[0,0] # Diagnostic values only; the owned container identity is fixed.
19
+
20
+ def initialise(classes,helpers,missing,literal_roots):
21
+ global _STATE
22
+ if _STATE is not None:
23
+ raise RuntimeError('native guard already initialised')
24
+ if (sys.platform!='win32' or sys.version_info[:2]!=(3,11)
25
+ or platform.machine().upper() not in ('AMD64','X86_64')
26
+ or os.environ.get('ANYSOLVER_NATIVE_GUARD')=='python'):
27
+ _STATE=('fallback','unsupported_abi_or_explicit_python')
28
+ return
29
+ try:
30
+ module=importlib.import_module('anyfesolver._native_guard')
31
+ except ModuleNotFoundError as error:
32
+ if error.name!='anyfesolver._native_guard':
33
+ raise
34
+ _STATE=('fallback','extension_absent')
35
+ return
36
+ except ImportError as error:
37
+ _STATE=('refusal',str(error))
38
+ return
39
+ try:
40
+ if type(module) is not _MODULE_TYPE:
41
+ raise ValueError('native module type changed')
42
+ if any(type(key) is not str for key in module.__dict__):
43
+ _STATE=('fallback','unsupported_native_namespace')
44
+ return
45
+ names=('make_plan','compare','build_info','binary_identity','entry_identity','statistics','reset_statistics')
46
+ entries=tuple((name,module.__dict__[name]) for name in names)
47
+ # Do not call a module-supplied proof function until every entry is an
48
+ # actual C builtin owned by this exact native module. Python functions
49
+ # cannot manufacture an entry/image proof at cold admission.
50
+ if any(type(entry) is not _BUILTIN_FUNCTION_TYPE or entry.__self__ is not module or entry.__name__!=name
51
+ for name,entry in entries):
52
+ raise ValueError('native entries are not canonical module-owned C functions')
53
+ identity=module.entry_identity
54
+ entry_facts=tuple((name,entry,identity(entry),entry.__module__) for name,entry in entries)
55
+ if any(facts is NotImplemented or facts[0]!=name or facts[1] is not module for name,_,facts,_ in entry_facts):
56
+ raise ValueError('native entry ownership mismatch')
57
+ image=module.binary_identity()
58
+ api,abi,source_sha=module.build_info()
59
+ if api!=1 or abi!='cp311-win_amd64' or image is NotImplemented:
60
+ raise ValueError('native build ABI mismatch')
61
+ mapped=Path(image[0]).resolve(strict=True)
62
+ if mapped.parent!=Path(__file__).resolve().parent or mapped.suffix.lower()!='.pyd':
63
+ raise ValueError('mapped native image is outside the owning package')
64
+ binary_sha=hashlib.sha256(mapped.read_bytes()).hexdigest()
65
+ source=Path(__file__).with_name('_native_guard.cpp')
66
+ if hashlib.sha256(source.read_bytes()).hexdigest()!=source_sha:
67
+ raise ValueError('native compiled source identity mismatch')
68
+ distribution=importlib.metadata.distribution('ANYfeSolver')
69
+ record=distribution.read_text('RECORD')
70
+ if record is None:
71
+ _STATE=('fallback','unadmitted_no_binary_record')
72
+ return
73
+ matches=[]
74
+ for member,digest,size in csv.reader(record.splitlines()):
75
+ if Path(distribution.locate_file(member)).resolve()==mapped:
76
+ matches.append((digest,size))
77
+ expected='sha256='+base64.urlsafe_b64encode(bytes.fromhex(binary_sha)).decode().rstrip('=')
78
+ if not matches:
79
+ # Editable/source layouts may build a valid in-place extension but
80
+ # do not record it in installed wheel metadata. Never fast-pass an
81
+ # unrecorded binary; the complete literal guard remains available.
82
+ _STATE=('fallback','unadmitted_no_binary_record')
83
+ return
84
+ if len(matches)!=1 or matches[0]!=(expected,str(mapped.stat().st_size)):
85
+ raise ValueError('mapped native binary does not match installed wheel RECORD')
86
+ plan=module.make_plan(classes,helpers,missing,literal_roots)
87
+ if plan is NotImplemented:
88
+ _STATE=('fallback','unsupported_expected_grammar')
89
+ return
90
+ attributes=tuple((name,module.__dict__.get(name)) for name in ('__name__','__spec__','__loader__','__package__','__file__'))
91
+ _STATE=('native',module,plan,entry_facts,image,(api,abi,source_sha),binary_sha,str(mapped),attributes)
92
+ except (KeyError,ValueError,OSError,importlib.metadata.PackageNotFoundError) as error:
93
+ _STATE=('refusal',str(error))
94
+
95
+ def try_compare(classes,helpers):
96
+ state=_STATE
97
+ if state[0]=='fallback':
98
+ _COUNTERS[0]+=1
99
+ return NotImplemented
100
+ if state[0]!='native':
101
+ return 2
102
+ _,module,plan,entries,image,build,binary_sha,path,attributes=state
103
+ if (type(module) is not _MODULE_TYPE or type(sys) is not _MODULE_TYPE
104
+ or type(_MODULES) is not _DICT_TYPE):
105
+ return 2
106
+ if any(type(key) is not str for key in sys.__dict__) or any(type(key) is not str for key in _MODULES):
107
+ return NotImplemented
108
+ if sys.__dict__.get('modules') is not _MODULES or _MODULES.get('anyfesolver._native_guard') is not module:
109
+ return 2
110
+ namespace=module.__dict__
111
+ if any(type(key) is not str for key in namespace):
112
+ return NotImplemented
113
+ for name,value in attributes:
114
+ if namespace.get(name) is not value:
115
+ return 2
116
+ # Exact native module dictionary: no custom getattr is called here.
117
+ for name,entry,facts,label in entries:
118
+ if namespace.get(name) is not entry or entry.__module__ is not label:
119
+ return 2
120
+ identity=entries[4][1]
121
+ for name,entry,facts,label in entries:
122
+ if identity(entry)!=facts:
123
+ return 2
124
+ if entries[2][1]()!=build:
125
+ return 2
126
+ result=entries[1][1](plan,classes,helpers)
127
+ if result is True:
128
+ _COUNTERS[1]+=1
129
+ elif result is False or result is NotImplemented:
130
+ _COUNTERS[0]+=1
131
+ return result
132
+
133
+ def diagnostics():
134
+ state=_STATE
135
+ result={'backend':state[0] if state else 'uninitialised','python_fallbacks':_COUNTERS[0],'native_passes':_COUNTERS[1]}
136
+ if state and state[0]=='native':
137
+ result.update(binary_sha256=state[6],mapped_image=state[7],build=state[5],native=state[3][5][1]())
138
+ elif state:
139
+ result['reason']=state[1]
140
+ return result
@@ -0,0 +1,55 @@
1
+ """Sparse exact integer products; reassociate before dense modal congruence.
2
+
3
+ No binary64 Gram matrix is formed. Integer products/sums are exact, and each
4
+ final projected entry is rounded once, as in the historical implementation.
5
+ """
6
+ from math import fsum
7
+ import numpy as np
8
+ from ._dyadic_bilinear import _Matrix,_capture,_transpose,_add,_rounded
9
+
10
+
11
+ def multiply(a,b,checkpoint):
12
+ if len(a.rows[0])!=len(b.rows):raise ValueError('matching exact factor dimensions')
13
+ left=[tuple((k,x) for k,x in enumerate(row) if x) for row in a.rows]
14
+ columns=tuple(zip(*b.rows))
15
+ right=[tuple((k,x) for k,x in enumerate(col) if x) for col in columns]
16
+ rows=[]
17
+ for i,row in enumerate(left):
18
+ checkpoint();values=[]
19
+ for j,col in enumerate(right):
20
+ if len(row)<=len(col):value=sum(x*columns[j][k] for k,x in row)
21
+ else:value=sum(a.rows[i][k]*x for k,x in col)
22
+ values.append(value)
23
+ rows.append(tuple(values))
24
+ return _Matrix(tuple(rows),a.power+b.power)
25
+
26
+
27
+ def gram(a,checkpoint):
28
+ width=len(a.rows[0]);rows=[[0]*width for _ in range(width)]
29
+ for row in a.rows:
30
+ checkpoint();items=[(i,x) for i,x in enumerate(row) if x]
31
+ for k,(i,x) in enumerate(items):
32
+ for j,y in items[k:]:rows[i][j]+=x*y
33
+ for i in range(width):
34
+ for j in range(i):rows[i][j]=rows[j][i]
35
+ return _Matrix(tuple(map(tuple,rows)),2*a.power)
36
+
37
+
38
+ def reassemble(left,right,g,b,mapping,checkpoint):
39
+ ll,rr,gg,bb,v=(_capture(a,checkpoint) for a in (left,right,g,b,mapping))
40
+ material=gram(multiply(ll,rr,checkpoint),checkpoint)
41
+ signed=_add(material,gg);mass=gram(bb,checkpoint)
42
+ vt=_transpose(v)
43
+ h=multiply(vt,multiply(signed,v,checkpoint),checkpoint)
44
+ m=multiply(vt,multiply(mass,v,checkpoint),checkpoint)
45
+ checkpoint();return _rounded(h),_rounded(m)
46
+
47
+
48
+ def sparse_float_product(a,b,dot_terms,checkpoint):
49
+ rows=[];columns=b.T
50
+ for row in a:
51
+ checkpoint();indices=np.flatnonzero(row);values=[]
52
+ left=row[indices]
53
+ for column in columns:values.append(fsum(dot_terms(left,column[indices])))
54
+ rows.append(values)
55
+ return np.array(rows)
@@ -0,0 +1,51 @@
1
+ """Internal opt-in station-state validation for native nonlinear elements.
2
+
3
+ No mechanics, default routing, or implicit registration lives here. Validators
4
+ operate on owned state copies before the store publishes accepted history.
5
+ """
6
+
7
+ from dataclasses import dataclass, fields
8
+ from typing import Any, Callable
9
+
10
+ import numpy as np
11
+
12
+
13
+ PROTOCOL = "ANY_NATIVE_MATERIAL_VALIDATION_V1"
14
+
15
+
16
+ @dataclass(frozen=True)
17
+ class NativeMaterialValidator:
18
+ validate: Callable[..., None]
19
+
20
+ def __post_init__(self) -> None:
21
+ if not callable(self.validate):
22
+ raise TypeError("Native material validation requires a callable")
23
+
24
+
25
+ @dataclass(frozen=True)
26
+ class NativeMaterialContext:
27
+ """Live solver-owned authority, unlike a detached immutable rotation view."""
28
+
29
+ store: Any
30
+ token: Any
31
+ element_id: int
32
+ node_ids: tuple[int, ...]
33
+ reference_directors: np.ndarray
34
+
35
+ def require_view(self, view: Any) -> None:
36
+ issued = self.store.native_material_context(self.token, self.element_id)
37
+ if (self.node_ids != issued.node_ids
38
+ or not np.array_equal(self.reference_directors, issued.reference_directors)):
39
+ raise ValueError("Native material context does not match the model binding")
40
+ fresh = self.store.native_element_rotation_view(
41
+ self.token, self.element_id, issued.node_ids, issued.reference_directors
42
+ )
43
+ if type(view) is not type(fresh):
44
+ raise ValueError("Native material context requires its exact rotation view")
45
+ for field in fields(fresh):
46
+ expected = getattr(fresh, field.name)
47
+ actual = getattr(view, field.name)
48
+ equal = (np.array_equal(actual, expected) if isinstance(expected, np.ndarray)
49
+ else actual == expected)
50
+ if not equal:
51
+ raise ValueError("Detached or mismatched native material rotation view")
@@ -0,0 +1,90 @@
1
+ """Shared native midpoint trajectory transaction engine; no physics/codec."""
2
+ from .control import cancellation_safe_point, SolveCancelled
3
+
4
+ def advance(analysis, state, t_end, identity, contract, controller, native, token, published, adapter):
5
+ NativeTransientError = adapter.error
6
+ _RETRYABLE = adapter.retryable
7
+ _result = adapter.result
8
+ settings = contract['settings']
9
+ while state.time < t_end:
10
+ candidate = None
11
+ commit_endpoint = None
12
+ commit_attempted = False
13
+ try:
14
+ cancellation_safe_point(token, 'native_transient.before_step')
15
+ if controller['accepted_steps'] >= settings['max_steps']:
16
+ raise NativeTransientError('native trajectory accepted step budget exhausted')
17
+ planned = controller['next_dt']
18
+ remaining = float(t_end-state.time)
19
+ dt = min(planned, remaining)
20
+ truncated = remaining < planned
21
+ if not dt > 0 or not state.time+dt > state.time or state.time+dt > t_end:
22
+ raise NativeTransientError('requested native endpoint is not representable without overshoot')
23
+ failures = []
24
+ def receive_candidate(issued):
25
+ nonlocal candidate
26
+ candidate = issued
27
+ for cut in range(settings['max_cutbacks']+1):
28
+ candidate = None
29
+ try:
30
+ analysis._prepare_trial(state, dt=dt, cancellation_token=token,
31
+ prepare=receive_candidate)
32
+ if candidate is None:
33
+ raise NativeTransientError('native trial did not provide its issued receipt')
34
+ break
35
+ except ValueError as error:
36
+ if candidate is not None:
37
+ analysis._discard_prepared_trial(candidate)
38
+ candidate = None
39
+ if str(error) not in _RETRYABLE:
40
+ raise
41
+ failures.append(dict(dt=dt, reason=str(error)))
42
+ if cut == settings['max_cutbacks'] or .5*dt < settings['minimum_dt']:
43
+ raise NativeTransientError('native trajectory cutback budget/floor exhausted') from error
44
+ dt *= .5
45
+ # Prepare ALL disposable work, accounting, controller/result bytes
46
+ # and native capsule before the one native commit. None of these
47
+ # objects is published as an accepted step until commit succeeds.
48
+ next_controller, next_native, prepared = adapter.prepare_step(
49
+ analysis, state, t_end, identity, contract, controller, candidate,
50
+ dt, failures, planned, truncated, settings, token)
51
+ cancellation_safe_point(token, 'native_transient.before_commit')
52
+ commit_endpoint = candidate.endpoint
53
+ commit_attempted = True
54
+ analysis.commit(candidate, cancellation_token=token)
55
+ # The native owner's visible endpoint, rather than a return value,
56
+ # is authoritative after its atomic commit has completed.
57
+ if analysis.current is not commit_endpoint:
58
+ raise NativeTransientError('native commit did not publish its issued endpoint')
59
+ state = commit_endpoint
60
+ controller, native, published = next_controller, next_native, prepared
61
+ candidate = None
62
+ except BaseException as error:
63
+ if commit_attempted and analysis.current is commit_endpoint:
64
+ # Commit may have completed before its caller is interrupted.
65
+ # Publish only bytes fully prepared before that authentic commit;
66
+ # never discard or roll back an already accepted native endpoint.
67
+ state = commit_endpoint
68
+ controller, native, published = next_controller, next_native, prepared
69
+ candidate = None
70
+ if candidate is not None:
71
+ try:
72
+ analysis._discard_prepared_trial(candidate)
73
+ except BaseException as discard_error:
74
+ if isinstance(error, Exception) and not isinstance(error, SolveCancelled):
75
+ raise NativeTransientError('native candidate cleanup failed: '+str(discard_error),
76
+ partial=published, native_checkpoint=native, accepted_state=state) from error
77
+ error.cleanup_error = discard_error
78
+ if isinstance(error, SolveCancelled):
79
+ error.partial = published
80
+ error.native_checkpoint = native
81
+ error.accepted_state = state
82
+ raise
83
+ if not isinstance(error, Exception):
84
+ error.partial = published
85
+ error.native_checkpoint = native
86
+ error.accepted_state = state
87
+ raise
88
+ raise NativeTransientError(str(error), partial=published,
89
+ native_checkpoint=native, accepted_state=state) from error
90
+ return published
@@ -0,0 +1,26 @@
1
+ """Explicit bounded larger factor domain; historical defaults are unchanged."""
2
+ from contextlib import contextmanager
3
+ from contextvars import ContextVar
4
+
5
+ POLICY='GE_BEAM3_LARGE_EXACT_FACTOR_MODAL_CAPACITY_V1'
6
+ _ACTIVE=ContextVar('native_large_factor_modal_capacity',default=False)
7
+
8
+ def limits():
9
+ return (640,12288,640) if _ACTIVE.get() else (256,8192,512)
10
+
11
+ def active():return _ACTIVE.get()
12
+
13
+ @contextmanager
14
+ def large_modal_capacity():
15
+ if _ACTIVE.get():raise ValueError('nested large modal capacity forbidden')
16
+ token=_ACTIVE.set(True)
17
+ try:yield
18
+ finally:_ACTIVE.reset(token)
19
+
20
+ def solve_large_factor_chain_modes(*args,**kwargs):
21
+ from ._native_paired_factor_chain_modes import solve_paired_factor_chain_modes
22
+ with large_modal_capacity():return solve_paired_factor_chain_modes(*args,**kwargs)
23
+
24
+ def apply_large_mode_map(*args,**kwargs):
25
+ from ._native_paired_factor_chain_modes import apply_mode_map
26
+ with large_modal_capacity():return apply_mode_map(*args,**kwargs)
@@ -0,0 +1,244 @@
1
+ """Private paired-vector successor of the preserved relative factor kernel.
2
+
3
+ The preserved factor reduction is a preconditioner, not eigenvalue authority.
4
+ Reassemble the ORIGINAL signed bilinear form and kinetic Gram matrix in its
5
+ complete dynamic map, then bracket the generalized pencil. No truncated Ritz
6
+ subspace, clipping, mass floor, mechanics, state transaction or qualification.
7
+ """
8
+ from dataclasses import dataclass, fields, replace
9
+ from hashlib import sha256
10
+ import json
11
+ from ._paired_modal_arithmetic import orthogonal_coordinates, paired_expansion, paired_actions, paired_map
12
+ from math import fsum, isfinite
13
+ import math
14
+ from fractions import Fraction
15
+ _fma = getattr(math, 'fma', None)
16
+ from time import monotonic
17
+ import numpy as np
18
+ from scipy import linalg
19
+ from anyfesolver._native_signed_kinetic_factor_modes import _reduce, _orthonormalize
20
+ from anyfesolver._native_reference_modal import _owned
21
+ from anyfesolver.control import cancellation_safe_point
22
+ from anyfesolver._dyadic_factor_chain import reassemble_chain_exact_binary64
23
+
24
+
25
+ def product_error(x, y, product):
26
+ # Python <3.13 portability without changing package requirements. Exact
27
+ # rational reconstruction rounds the same residual as fused multiply-add.
28
+ # This is an arithmetic backend, never a mechanical/legacy fallback.
29
+ if _fma is not None:
30
+ return _fma(x, y, -product)
31
+ return float(Fraction(x)*Fraction(y)-Fraction(product))
32
+
33
+
34
+ def dot_terms(a,b):
35
+ terms=[]
36
+ for x,y in zip(a,b):
37
+ x,y=float(x),float(y); product=x*y
38
+ if not isfinite(product): raise ValueError('nonfinite compensated product')
39
+ if product==0. and x!=0. and y!=0.: raise ValueError('underflowed compensated product')
40
+ terms.extend((product,product_error(x,y,product)))
41
+ return terms
42
+
43
+
44
+ def mm(a,b,checkpoint=lambda:None):
45
+ if a.ndim!=2 or b.ndim!=2 or a.shape[1]!=b.shape[0]: raise ValueError('matching matrix dimensions')
46
+ from ._native_modal_capacity import active
47
+ if active() and np.count_nonzero(a)*2<a.size:
48
+ from ._native_large_factor_chain import sparse_float_product
49
+ return sparse_float_product(a,b,dot_terms,checkpoint)
50
+ rows=[]
51
+ for row in a:
52
+ checkpoint(); rows.append([fsum(dot_terms(row,col)) for col in b.T])
53
+ return np.array(rows)
54
+
55
+
56
+ def reassemble(left,right,g,b,mapping,checkpoint=lambda:None):
57
+ return reassemble_chain_exact_binary64(left,right,g,b,mapping,checkpoint)
58
+
59
+
60
+ def shifted(h,mass,shift):
61
+ n=len(h)
62
+ a=np.array([[fsum([float(h[i,j]), *dot_terms([-shift],[mass[i,j]])])
63
+ for j in range(n)] for i in range(n)])
64
+ size=np.abs(np.diag(a)); size=np.where(size==0.,np.max(np.abs(a),axis=1),size)
65
+ scale=np.sqrt(size)
66
+ if np.any(scale==0.): raise ValueError('unresolved shifted sign')
67
+ return a/scale[:,None]/scale[None,:],scale
68
+
69
+
70
+ def inertia(h,mass,shift):
71
+ a,_=shifted(h,mass,shift); values=linalg.eigvalsh(a)
72
+ margin=64*np.finfo(float).eps*len(h)*max(1.,np.max(np.abs(values)))
73
+ if np.min(np.abs(values))<=margin: raise ValueError('unresolved shifted sign')
74
+ return int(np.count_nonzero(values<0.))
75
+
76
+
77
+ def brackets(h,mass,bounds,count,absolute,relative,checkpoint):
78
+ if inertia(h,mass,bounds[0])!=0 or inertia(h,mass,bounds[1])<count:
79
+ raise ValueError('bounds do not enclose lowest requested roots')
80
+ results=[];widths=[]
81
+ for index in range(count):
82
+ lo,hi=bounds
83
+ for _ in range(192):
84
+ checkpoint()
85
+ mid=lo+(hi-lo)/2
86
+ width=absolute+relative*abs(mid)
87
+ if hi-lo<=width:break
88
+ try:negative=inertia(h,mass,mid)
89
+ except ValueError as exc:
90
+ if str(exc)!='unresolved shifted sign':raise
91
+ left,right=max(lo,mid-width/4),min(hi,mid+width/4)
92
+ a,b=inertia(h,mass,left),inertia(h,mass,right)
93
+ if a>b:raise ValueError('nonmonotone relative shifted inertia')
94
+ if a<=index<b:
95
+ lo,hi=left,right;break
96
+ if index<a:
97
+ hi=left;continue
98
+ if b<=index:
99
+ lo=right;continue
100
+ raise ValueError('relative shifted signs unresolved') from exc
101
+ if negative<=index:lo=mid
102
+ else:hi=mid
103
+ else:raise ValueError('relative signed search iteration limit')
104
+ width=absolute+relative*abs(lo+(hi-lo)/2)
105
+ if hi-lo>width:raise ValueError('relative signed search width not achieved')
106
+ results.append((lo,hi));widths.append(width)
107
+ return np.array(results),np.array(widths)
108
+
109
+
110
+ @dataclass(frozen=True)
111
+ class PairedFactorChainModes:
112
+ eigenvalues: np.ndarray
113
+ high_modes: np.ndarray
114
+ low_modes: np.ndarray
115
+ numerical_brackets: np.ndarray
116
+ spectral_residual: float
117
+ full_backward_residual: float
118
+ original_ritz_residual: float
119
+ policy: str='PRIVATE_COMPLETE_MAP_PAIRED_FACTOR_CHAIN_SIGNED_MODES_V1'
120
+ bracket_absolute_width: float=1e-10
121
+ bracket_relative_width: float=1e-12
122
+ bilinear_arithmetic: str='EXACT_DYADIC_FACTOR_CHAIN_CONGRUENCE_ROUNDED_ONCE'
123
+ negative_eigenvalues_retained: bool=True
124
+ certified_intervals: bool=False
125
+ production_qualified: bool=False
126
+ fingerprint: str=''
127
+
128
+ @property
129
+ def full_modes(self):
130
+ raise AttributeError('paired modes require explicit high/low action; no validated high-only array')
131
+
132
+
133
+ def _fingerprint(result):
134
+ payload={f.name:getattr(result,f.name) for f in fields(result) if f.name!='fingerprint'}
135
+ return sha256(json.dumps(payload,sort_keys=True,separators=(',',':'),allow_nan=False,
136
+ default=lambda a:a.tolist()).encode()).hexdigest()
137
+
138
+
139
+ def validate_modes(result):
140
+ if type(result) is not PairedFactorChainModes or _fingerprint(result)!=result.fingerprint:
141
+ raise ValueError('paired modal result identity changed')
142
+ if (result.high_modes.shape!=result.low_modes.shape or result.high_modes.shape[1]!=len(result.eigenvalues)
143
+ or any(a.flags.writeable for a in (result.high_modes,result.low_modes,result.eigenvalues,result.numerical_brackets))):
144
+ raise ValueError('owned matching immutable paired modal arrays required')
145
+ return result
146
+
147
+
148
+ def apply_mode_map(result,operator,checkpoint=lambda:None):
149
+ validate_modes(result)
150
+ output=paired_map(operator,result.high_modes,result.low_modes,checkpoint)
151
+ validate_modes(result)
152
+ return _owned(output)
153
+
154
+
155
+ def solve_paired_factor_chain_modes(left_factor,right_factor,geometric,kinetic,free,algebraic,*,bounds,num_modes=6,root_width=1e-10,relative_width=1e-12,cancellation_token=None):
156
+ from ._native_modal_capacity import limits
157
+ coordinates,rows,links=limits()
158
+ start=monotonic()
159
+ def checkpoint(stage='reassembly'):
160
+ cancellation_safe_point(cancellation_token,'compensated_spectrum.'+stage)
161
+ if monotonic()-start>600.: raise ValueError('compensated spectrum deadline')
162
+ checkpoint('capture')
163
+ left,right,g,b=(_owned(x) for x in (left_factor,right_factor,geometric,kinetic))
164
+ if (left.ndim!=2 or right.ndim!=2 or not 1<=left.shape[0]<=rows
165
+ or not 1<=right.shape[0]<=links or not 1<=right.shape[1]<=coordinates
166
+ or left.shape[1]!=right.shape[0]):
167
+ raise ValueError('bounded matching owned factor chain')
168
+ # Rounded expansion is only a preconditioner for a complete dynamic map.
169
+ # The signed pencil and returned-vector audit use the original chain.
170
+ f=mm(left,right,checkpoint)
171
+ if (b.ndim!=2 or f.ndim!=2 or not 1<=b.shape[0]<=rows or not 1<=b.shape[1]<=coordinates
172
+ or f.shape[1]!=b.shape[1]): raise ValueError('bounded matching factors')
173
+ if (type(bounds) is not tuple or len(bounds)!=2 or any(type(v) not in (float,int) or not isfinite(v) for v in bounds)
174
+ or bounds[0]>=bounds[1] or type(num_modes) is not int or num_modes<1
175
+ or type(root_width) is not float or not isfinite(root_width) or root_width<=0.
176
+ or type(relative_width) is not float or not isfinite(relative_width) or not 0<relative_width<=1e-10):
177
+ raise ValueError('explicit finite root controls required')
178
+ dense_mass=b.T@b
179
+ _,_,mapping=_reduce(f,g,dense_mass,free,algebraic,checkpoint,b)
180
+ h,mass=reassemble(left,right,g,b,mapping,checkpoint)
181
+ if num_modes>len(h): raise ValueError('mode count exceeds dynamic coordinates')
182
+ linalg.cholesky(mass)
183
+ intervals,widths=brackets(h,mass,bounds,num_modes,root_width,relative_width,checkpoint)
184
+ coordinates=[]; values=[]; index=0
185
+ while index<num_modes:
186
+ end=index+1
187
+ while end<num_modes and intervals[end,0]-intervals[end-1,1]<=8*max(widths[end],widths[end-1]): end+=1
188
+ if inertia(h,mass,intervals[index,0])!=index or inertia(h,mass,intervals[end-1,1])!=end:
189
+ raise ValueError('requested modes truncate a cluster')
190
+ cluster_width=float(np.max(widths[index:end]))
191
+ shifted_matrix,scale=shifted(h,mass,float(intervals[index,0]-2*cluster_width))
192
+ roots,vectors=linalg.eigh(shifted_matrix); raw=vectors/scale[:,None]
193
+ scores=np.abs(roots)/np.einsum('ij,ij->j',raw,mass@raw)
194
+ basis=_orthonormalize(raw[:,np.argsort(scores,kind='stable')[:end-index]])
195
+ lu=linalg.lu_factor(shifted_matrix)
196
+ for _ in range(2):
197
+ checkpoint('inverse')
198
+ basis=_orthonormalize(linalg.lu_solve(lu,mm(mass,basis,checkpoint)/scale[:,None])/scale[:,None])
199
+ # Complete-map pencil, not the earlier approximate material singular values.
200
+ small_h=mm(basis.T,mm(h,basis,checkpoint),checkpoint); small_m=mm(basis.T,mm(mass,basis,checkpoint),checkpoint)
201
+ rv,ru=linalg.eigh(small_h,small_m); actual=mm(basis,ru,checkpoint)
202
+ if np.any(rv<intervals[index:end,0]-widths[index:end]) or np.any(rv>intervals[index:end,1]+widths[index:end]):
203
+ raise ValueError('reassembled Ritz roots leave numerical brackets')
204
+ coordinates.append(actual); values.extend(rv); index=end
205
+ c=orthogonal_coordinates(np.column_stack(coordinates),mass,checkpoint); values=np.array(values)
206
+ hc=mm(h,c,checkpoint); mc=mm(mass,c,checkpoint)
207
+ residual=hc-mc*values
208
+ # Preserve the separate material/geometric ACTION scale. Scaling by the
209
+ # already cancelled tangent action asks for absolute force accuracy when
210
+ # large material and prestress forces balance. Never use the norm of an
211
+ # unrelated stiff direction as the denominator.
212
+ strain=mm(left,mm(right,mapping,checkpoint),checkpoint); material_action=mm(strain.T,mm(strain,c,checkpoint),checkpoint)
213
+ geometric_action=mm(mapping.T,mm(g,mm(mapping,c,checkpoint),checkpoint),checkpoint)
214
+ scale=np.maximum(1.,np.maximum(np.linalg.norm(material_action,axis=0),
215
+ np.maximum(np.linalg.norm(geometric_action,axis=0),np.linalg.norm(mc*values,axis=0))))
216
+ if not np.isfinite(scale).all(): raise ValueError('nonfinite reassembled action scale')
217
+ error=float(np.max(np.linalg.norm(residual,axis=0)/scale))
218
+ if not isfinite(error) or error>1e-11: raise ValueError('reassembled action residual')
219
+ high,low=paired_expansion(mapping,c,checkpoint)
220
+ original_h,original_m,full_action,material_full,geometric_full,inertia_full=paired_actions(
221
+ left,right,g,b,high,low,values,checkpoint)
222
+ if np.linalg.norm(original_m-np.eye(num_modes))>1e-11:
223
+ raise ValueError('physical modal mass normalization')
224
+ # Audit the ORIGINAL signed form using both physical vector halves.
225
+ ritz_difference=original_h-original_m*values[None,:]
226
+ ritz_scale=np.maximum(1.,np.sqrt(np.abs(values))[:,None]*np.sqrt(np.abs(values))[None,:])
227
+ original_error=float(np.max(np.abs(ritz_difference)/ritz_scale))
228
+ if not isfinite(original_error) or original_error>1e-11:
229
+ raise ValueError('original signed bilinear Ritz identity failed')
230
+ for j in range(num_modes):
231
+ if high[int(np.argmax(np.abs(high[:,j]))),j]<0.:
232
+ high[:,j]*=-1.;low[:,j]*=-1.
233
+ # Same normwise full backward threshold as the preserved kernel, now
234
+ # with exact original-chain actions rather than an expanded Gram product.
235
+ scale=max(1.,(np.linalg.norm(f)**2+np.linalg.norm(g))*np.linalg.norm(high),
236
+ np.linalg.norm(dense_mass)*np.linalg.norm(high*values))
237
+ if not isfinite(scale): raise ValueError('nonfinite full backward scale')
238
+ backward=float(np.linalg.norm(full_action[list(free)])/scale)
239
+ if not isfinite(backward) or backward>1e-11: raise ValueError('full backward residual')
240
+ checkpoint('output')
241
+ result=PairedFactorChainModes(_owned(values),_owned(high),_owned(low),_owned(intervals),
242
+ error,backward,original_error,bracket_absolute_width=root_width,bracket_relative_width=relative_width)
243
+ result=replace(result,fingerprint=_fingerprint(result))
244
+ return validate_modes(result)