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.
- anyfesolver/__init__.py +1075 -0
- anyfesolver/_b2_attachment_elimination_dev.py +261 -0
- anyfesolver/_b2_f10_f11_point_attachment.py +163 -0
- anyfesolver/_b2_loaded_point_trace_dev.py +173 -0
- anyfesolver/_b2_physical_flexibility_linear.py +707 -0
- anyfesolver/_b2_physical_linear_batch_dev.py +491 -0
- anyfesolver/_b2_physical_linear_definition.py +415 -0
- anyfesolver/_b2_physical_load_bubbles.py +282 -0
- anyfesolver/_compensated_contractions.py +497 -0
- anyfesolver/_compensated_native.py +437 -0
- anyfesolver/_corotational_batch.py +219 -0
- anyfesolver/_director_trace.py +214 -0
- anyfesolver/_dyadic_bilinear.py +76 -0
- anyfesolver/_dyadic_factor_chain.py +25 -0
- anyfesolver/_ge_beam3_adaptive_arc_program.py +286 -0
- anyfesolver/_ge_beam3_analysis_combined.py +102 -0
- anyfesolver/_ge_beam3_analysis_fibre_translation.py +130 -0
- anyfesolver/_ge_beam3_analysis_modal_snapshot.py +27 -0
- anyfesolver/_ge_beam3_analysis_nodal_program.py +140 -0
- anyfesolver/_ge_beam3_analysis_translation.py +147 -0
- anyfesolver/_ge_beam3_analysis_translation_modal.py +84 -0
- anyfesolver/_ge_beam3_arc_geometry.py +89 -0
- anyfesolver/_ge_beam3_arc_program.py +304 -0
- anyfesolver/_ge_beam3_authoritative_cell_seed.py +25 -0
- anyfesolver/_ge_beam3_cell_identity.py +52 -0
- anyfesolver/_ge_beam3_centered_batched_finite_inertia.py +132 -0
- anyfesolver/_ge_beam3_centered_finite_inertia.py +171 -0
- anyfesolver/_ge_beam3_centered_mixed.py +104 -0
- anyfesolver/_ge_beam3_centered_reference.py +187 -0
- anyfesolver/_ge_beam3_centered_so3_strain.py +76 -0
- anyfesolver/_ge_beam3_complementary_section.py +122 -0
- anyfesolver/_ge_beam3_compliance_snapshot_guard.py +20 -0
- anyfesolver/_ge_beam3_connected_dynamic.py +486 -0
- anyfesolver/_ge_beam3_connected_trajectory.py +258 -0
- anyfesolver/_ge_beam3_conservative_backtrack.py +26 -0
- anyfesolver/_ge_beam3_controlled_fibre_modes.py +105 -0
- anyfesolver/_ge_beam3_coupled_beam_subdomain.py +128 -0
- anyfesolver/_ge_beam3_coupled_modes.py +256 -0
- anyfesolver/_ge_beam3_deterministic_reduction.py +264 -0
- anyfesolver/_ge_beam3_displacement_program.py +255 -0
- anyfesolver/_ge_beam3_durable_coupled.py +251 -0
- anyfesolver/_ge_beam3_dynamic_elastic_state.py +461 -0
- anyfesolver/_ge_beam3_effective_deadline.py +58 -0
- anyfesolver/_ge_beam3_elastic_seed_continuation.py +223 -0
- anyfesolver/_ge_beam3_elastic_seed_modal.py +139 -0
- anyfesolver/_ge_beam3_equilibrium_line_program.py +98 -0
- anyfesolver/_ge_beam3_equilibrium_schur_solver.py +96 -0
- anyfesolver/_ge_beam3_factor_chain_modes.py +103 -0
- anyfesolver/_ge_beam3_fibre_cell.py +408 -0
- anyfesolver/_ge_beam3_fibre_distributed_couples.py +191 -0
- anyfesolver/_ge_beam3_fibre_kinematic_cell.py +75 -0
- anyfesolver/_ge_beam3_fibre_line_program.py +157 -0
- anyfesolver/_ge_beam3_fibre_line_work.py +87 -0
- anyfesolver/_ge_beam3_fibre_reference_modal.py +104 -0
- anyfesolver/_ge_beam3_fibre_schur_solver.py +134 -0
- anyfesolver/_ge_beam3_fibre_section.py +286 -0
- anyfesolver/_ge_beam3_fibre_static_boundary.py +113 -0
- anyfesolver/_ge_beam3_g1_analysis.py +307 -0
- anyfesolver/_ge_beam3_g1_elastic.py +161 -0
- anyfesolver/_ge_beam3_g1_element.py +185 -0
- anyfesolver/_ge_beam3_g1_operator.py +137 -0
- anyfesolver/_ge_beam3_g2_analysis.py +176 -0
- anyfesolver/_ge_beam3_g2_constraints.py +162 -0
- anyfesolver/_ge_beam3_g3_analysis.py +385 -0
- anyfesolver/_ge_beam3_g3_constraints.py +168 -0
- anyfesolver/_ge_beam3_g3b_owner.py +296 -0
- anyfesolver/_ge_beam3_g3b_q4_reference.py +186 -0
- anyfesolver/_ge_beam3_g3b_reference.py +206 -0
- anyfesolver/_ge_beam3_g3b_result_schema.py +107 -0
- anyfesolver/_ge_beam3_g3b_s3_reference.py +185 -0
- anyfesolver/_ge_beam3_g3b_weighted_reference.py +193 -0
- anyfesolver/_ge_beam3_g3c_affine_q4_chart.py +58 -0
- anyfesolver/_ge_beam3_g3c_affine_q4_increment_chart.py +257 -0
- anyfesolver/_ge_beam3_g3c_affine_q4_recovery.py +434 -0
- anyfesolver/_ge_beam3_g3c_affine_q4_registry.py +127 -0
- anyfesolver/_ge_beam3_g3c_b2_physical.py +153 -0
- anyfesolver/_ge_beam3_g3c_b2_physical_adapter.py +160 -0
- anyfesolver/_ge_beam3_g3c_definition.py +117 -0
- anyfesolver/_ge_beam3_g3c_local_beam.py +188 -0
- anyfesolver/_ge_beam3_g3c_local_shell.py +371 -0
- anyfesolver/_ge_beam3_g3c_owner.py +400 -0
- anyfesolver/_ge_beam3_g3c_physical_authority.py +203 -0
- anyfesolver/_ge_beam3_g3c_physical_owner.py +556 -0
- anyfesolver/_ge_beam3_g3c_recovery.py +91 -0
- anyfesolver/_ge_beam3_g3c_so3_numerics.py +81 -0
- anyfesolver/_ge_beam3_g3c_stable/__init__.py +1 -0
- anyfesolver/_ge_beam3_g3c_stable/authority.py +152 -0
- anyfesolver/_ge_beam3_g3c_stable/beam.py +196 -0
- anyfesolver/_ge_beam3_g3c_stable/boundary.py +38 -0
- anyfesolver/_ge_beam3_g3c_stable/chart.py +23 -0
- anyfesolver/_ge_beam3_g3c_stable/compensated.py +46 -0
- anyfesolver/_ge_beam3_g3c_stable/element.py +190 -0
- anyfesolver/_ge_beam3_g3c_stable/fit.py +54 -0
- anyfesolver/_ge_beam3_g3c_stable/joint.py +255 -0
- anyfesolver/_ge_beam3_g3c_stable/line_work.py +92 -0
- anyfesolver/_ge_beam3_g3c_stable/operator.py +147 -0
- anyfesolver/_ge_beam3_g3c_stable/owner.py +415 -0
- anyfesolver/_ge_beam3_g3c_stable/shell.py +358 -0
- anyfesolver/_ge_beam3_g4_completion.py +186 -0
- anyfesolver/_ge_beam3_g4a_station_transaction.py +385 -0
- anyfesolver/_ge_beam3_g5_completion.py +68 -0
- anyfesolver/_ge_beam3_g6_domain.py +354 -0
- anyfesolver/_ge_beam3_generalized_cell.py +172 -0
- anyfesolver/_ge_beam3_generalized_ellipsoid_section.py +215 -0
- anyfesolver/_ge_beam3_generalized_static_boundary.py +233 -0
- anyfesolver/_ge_beam3_lifted_kinetic_factor.py +26 -0
- anyfesolver/_ge_beam3_line_fibre_modes.py +121 -0
- anyfesolver/_ge_beam3_load_program.py +275 -0
- anyfesolver/_ge_beam3_loaded_modal.py +225 -0
- anyfesolver/_ge_beam3_mixed_ad.py +286 -0
- anyfesolver/_ge_beam3_native_analysis.py +484 -0
- anyfesolver/_ge_beam3_native_arc.py +269 -0
- anyfesolver/_ge_beam3_native_arc_adaptive.py +251 -0
- anyfesolver/_ge_beam3_native_arc_restart.py +88 -0
- anyfesolver/_ge_beam3_native_arc_source.py +62 -0
- anyfesolver/_ge_beam3_native_buckling.py +206 -0
- anyfesolver/_ge_beam3_native_combined_couples.py +179 -0
- anyfesolver/_ge_beam3_native_combined_restart.py +205 -0
- anyfesolver/_ge_beam3_native_definition.py +238 -0
- anyfesolver/_ge_beam3_native_distributed_element.py +220 -0
- anyfesolver/_ge_beam3_native_distributed_loading.py +92 -0
- anyfesolver/_ge_beam3_native_distributed_program.py +165 -0
- anyfesolver/_ge_beam3_native_distributed_recovery.py +34 -0
- anyfesolver/_ge_beam3_native_distributed_restart.py +221 -0
- anyfesolver/_ge_beam3_native_dynamic_analysis.py +149 -0
- anyfesolver/_ge_beam3_native_dynamic_restart.py +261 -0
- anyfesolver/_ge_beam3_native_fibre_current_modal.py +104 -0
- anyfesolver/_ge_beam3_native_fibre_recovery.py +34 -0
- anyfesolver/_ge_beam3_native_fibre_restart.py +211 -0
- anyfesolver/_ge_beam3_native_fibre_static_element.py +193 -0
- anyfesolver/_ge_beam3_native_force_adaptation.py +56 -0
- anyfesolver/_ge_beam3_native_generalized_combined_couples.py +188 -0
- anyfesolver/_ge_beam3_native_generalized_combined_restart.py +207 -0
- anyfesolver/_ge_beam3_native_generalized_element.py +222 -0
- anyfesolver/_ge_beam3_native_generalized_factor_modal.py +122 -0
- anyfesolver/_ge_beam3_native_generalized_loading.py +92 -0
- anyfesolver/_ge_beam3_native_generalized_modal.py +274 -0
- anyfesolver/_ge_beam3_native_generalized_paired_modal.py +13 -0
- anyfesolver/_ge_beam3_native_generalized_parameter.py +89 -0
- anyfesolver/_ge_beam3_native_generalized_program.py +196 -0
- anyfesolver/_ge_beam3_native_generalized_recovery.py +34 -0
- anyfesolver/_ge_beam3_native_generalized_restart.py +243 -0
- anyfesolver/_ge_beam3_native_history_profile.py +53 -0
- anyfesolver/_ge_beam3_native_line_loading.py +93 -0
- anyfesolver/_ge_beam3_native_line_program.py +150 -0
- anyfesolver/_ge_beam3_native_line_recovery.py +34 -0
- anyfesolver/_ge_beam3_native_line_restart.py +197 -0
- anyfesolver/_ge_beam3_native_line_static_element.py +220 -0
- anyfesolver/_ge_beam3_native_load_admission.py +37 -0
- anyfesolver/_ge_beam3_native_midpoint.py +1004 -0
- anyfesolver/_ge_beam3_native_multi_shell_contact.py +539 -0
- anyfesolver/_ge_beam3_native_pair_contact.py +236 -0
- anyfesolver/_ge_beam3_native_shell_contact.py +357 -0
- anyfesolver/_ge_beam3_native_spatial_couples.py +176 -0
- anyfesolver/_ge_beam3_native_spatial_restart.py +204 -0
- anyfesolver/_ge_beam3_native_transient.py +467 -0
- anyfesolver/_ge_beam3_native_translation.py +225 -0
- anyfesolver/_ge_beam3_native_translation_restart.py +54 -0
- anyfesolver/_ge_beam3_operator_validation_scope.py +53 -0
- anyfesolver/_ge_beam3_p5/__init__.py +11 -0
- anyfesolver/_ge_beam3_p5/algebra.py +91 -0
- anyfesolver/_ge_beam3_p5/arrays.py +29 -0
- anyfesolver/_ge_beam3_p5/chart.py +45 -0
- anyfesolver/_ge_beam3_p5/codec.py +82 -0
- anyfesolver/_ge_beam3_p5/committed_modal.py +191 -0
- anyfesolver/_ge_beam3_p5/compensated.py +118 -0
- anyfesolver/_ge_beam3_p5/compensated_coordinates.py +44 -0
- anyfesolver/_ge_beam3_p5/core.py +159 -0
- anyfesolver/_ge_beam3_p5/element.py +207 -0
- anyfesolver/_ge_beam3_p5/factors.py +61 -0
- anyfesolver/_ge_beam3_p5/inertia.py +120 -0
- anyfesolver/_ge_beam3_p5/mass.py +70 -0
- anyfesolver/_ge_beam3_p5/mixed.py +256 -0
- anyfesolver/_ge_beam3_p5/reference_modal.py +73 -0
- anyfesolver/_ge_beam3_p5/section.py +139 -0
- anyfesolver/_ge_beam3_p5/typed_schema.py +111 -0
- anyfesolver/_ge_beam3_p5_centered/__init__.py +6 -0
- anyfesolver/_ge_beam3_p5_centered/codec.py +84 -0
- anyfesolver/_ge_beam3_p5_centered/committed_modal.py +192 -0
- anyfesolver/_ge_beam3_p5_centered/core.py +171 -0
- anyfesolver/_ge_beam3_p5_centered/element.py +216 -0
- anyfesolver/_ge_beam3_p5_centered/mass.py +99 -0
- anyfesolver/_ge_beam3_p5_centered/positions.py +34 -0
- anyfesolver/_ge_beam3_p5_centered/reference_modal.py +73 -0
- anyfesolver/_ge_beam3_p5_coordinates/__init__.py +6 -0
- anyfesolver/_ge_beam3_p5_coordinates/codec.py +84 -0
- anyfesolver/_ge_beam3_p5_coordinates/committed_modal.py +192 -0
- anyfesolver/_ge_beam3_p5_coordinates/core.py +163 -0
- anyfesolver/_ge_beam3_p5_coordinates/element.py +213 -0
- anyfesolver/_ge_beam3_p5_coordinates/positions.py +102 -0
- anyfesolver/_ge_beam3_p5_coordinates/reference_modal.py +73 -0
- anyfesolver/_ge_beam3_p5_loads/__init__.py +7 -0
- anyfesolver/_ge_beam3_p5_loads/codec.py +85 -0
- anyfesolver/_ge_beam3_p5_loads/core.py +192 -0
- anyfesolver/_ge_beam3_p5_loads/element.py +243 -0
- anyfesolver/_ge_beam3_p5_loads/state.py +120 -0
- anyfesolver/_ge_beam3_p5_loads/work.py +45 -0
- anyfesolver/_ge_beam3_p5_seeded/__init__.py +9 -0
- anyfesolver/_ge_beam3_p5_seeded/codec.py +87 -0
- anyfesolver/_ge_beam3_p5_seeded/core.py +197 -0
- anyfesolver/_ge_beam3_p5_seeded/element.py +245 -0
- anyfesolver/_ge_beam3_p5_seeded/state.py +122 -0
- anyfesolver/_ge_beam3_p5_seeded/work.py +47 -0
- anyfesolver/_ge_beam3_pose_joint.py +268 -0
- anyfesolver/_ge_beam3_precise_geometric_work.py +147 -0
- anyfesolver/_ge_beam3_reassembled_signed_modes.py +101 -0
- anyfesolver/_ge_beam3_reference_identity.py +92 -0
- anyfesolver/_ge_beam3_refined_fibre_schur_solver.py +104 -0
- anyfesolver/_ge_beam3_refinement_capacity.py +19 -0
- anyfesolver/_ge_beam3_relative_virgin_reference_modes.py +60 -0
- anyfesolver/_ge_beam3_retained_arc.py +350 -0
- anyfesolver/_ge_beam3_retained_arc_geometry.py +66 -0
- anyfesolver/_ge_beam3_retained_arc_modal.py +125 -0
- anyfesolver/_ge_beam3_retained_elastic.py +134 -0
- anyfesolver/_ge_beam3_retained_fibre.py +209 -0
- anyfesolver/_ge_beam3_retained_fibre_control.py +270 -0
- anyfesolver/_ge_beam3_retained_fibre_element.py +58 -0
- anyfesolver/_ge_beam3_retained_fibre_modal.py +155 -0
- anyfesolver/_ge_beam3_retained_fibre_modes.py +189 -0
- anyfesolver/_ge_beam3_retained_fibre_program.py +68 -0
- anyfesolver/_ge_beam3_retained_fibre_state.py +268 -0
- anyfesolver/_ge_beam3_retained_force_program.py +72 -0
- anyfesolver/_ge_beam3_retained_generalized.py +186 -0
- anyfesolver/_ge_beam3_retained_generalized_modal.py +171 -0
- anyfesolver/_ge_beam3_retained_generalized_program.py +63 -0
- anyfesolver/_ge_beam3_retained_generalized_state.py +281 -0
- anyfesolver/_ge_beam3_retained_nodal_loading.py +111 -0
- anyfesolver/_ge_beam3_retained_plastic.py +116 -0
- anyfesolver/_ge_beam3_retained_plastic_modes.py +144 -0
- anyfesolver/_ge_beam3_retained_plastic_program.py +69 -0
- anyfesolver/_ge_beam3_retained_plastic_state.py +165 -0
- anyfesolver/_ge_beam3_retained_state.py +194 -0
- anyfesolver/_ge_beam3_retained_translation_control.py +345 -0
- anyfesolver/_ge_beam3_retained_translation_modal.py +137 -0
- anyfesolver/_ge_beam3_schur_line_program.py +98 -0
- anyfesolver/_ge_beam3_seeded_fibre_control.py +175 -0
- anyfesolver/_ge_beam3_seeded_load_program.py +301 -0
- anyfesolver/_ge_beam3_seeded_loaded_modal.py +226 -0
- anyfesolver/_ge_beam3_seeded_signed_modes.py +150 -0
- anyfesolver/_ge_beam3_shared_kinematic_split.py +53 -0
- anyfesolver/_ge_beam3_shell_joint_state.py +396 -0
- anyfesolver/_ge_beam3_shell_joint_trial.py +217 -0
- anyfesolver/_ge_beam3_signed_loaded_modes.py +140 -0
- anyfesolver/_ge_beam3_spatial_fibre_program.py +113 -0
- anyfesolver/_ge_beam3_spatial_nodal_moments.py +38 -0
- anyfesolver/_ge_beam3_station_resultant_cell.py +235 -0
- anyfesolver/_ge_beam3_variational_shell.py +211 -0
- anyfesolver/_ge_beam3_virgin_reference_modes.py +60 -0
- anyfesolver/_impact_coupling.py +162 -0
- anyfesolver/_native_authority_dag.py +77 -0
- anyfesolver/_native_dyadic_interval_inertia.py +64 -0
- anyfesolver/_native_exact_shift_chain_modes.py +140 -0
- anyfesolver/_native_exact_shift_inertia.py +86 -0
- anyfesolver/_native_factor_chain_modes.py +192 -0
- anyfesolver/_native_guard.cpp +828 -0
- anyfesolver/_native_guard_dispatch.py +140 -0
- anyfesolver/_native_large_factor_chain.py +55 -0
- anyfesolver/_native_material_protocol.py +51 -0
- anyfesolver/_native_midpoint_controller.py +90 -0
- anyfesolver/_native_modal_capacity.py +26 -0
- anyfesolver/_native_paired_factor_chain_modes.py +244 -0
- anyfesolver/_native_reassembled_factor_modes.py +185 -0
- anyfesolver/_native_reference_factor_spectrum.py +102 -0
- anyfesolver/_native_reference_modal.py +180 -0
- anyfesolver/_native_relative_factor_chain_modes.py +204 -0
- anyfesolver/_native_relative_reference_factor_spectrum.py +110 -0
- anyfesolver/_native_retained_step.py +15 -0
- anyfesolver/_native_rotation_state.py +797 -0
- anyfesolver/_native_signed_factor_modes.py +257 -0
- anyfesolver/_native_signed_kinetic_factor_modes.py +279 -0
- anyfesolver/_native_stationary_spectrum.py +79 -0
- anyfesolver/_nonlinear_events.py +150 -0
- anyfesolver/_nonlinear_seed.py +80 -0
- anyfesolver/_paired_modal_arithmetic.py +71 -0
- anyfesolver/_plate_stability_continuation.py +171 -0
- anyfesolver/_q4_assumed_strain_plasticity.py +502 -0
- anyfesolver/_qualified_authority_epoch.py +561 -0
- anyfesolver/_relative_reference_svd.py +44 -0
- anyfesolver/_stiffened_shell_affine_endpoint.py +232 -0
- anyfesolver/_stiffened_shell_algorithmic_pullback.py +38 -0
- anyfesolver/_stiffened_shell_arc_checkpoint.py +422 -0
- anyfesolver/_stiffened_shell_arc_control.py +108 -0
- anyfesolver/_stiffened_shell_arc_metric.py +222 -0
- anyfesolver/_stiffened_shell_arc_publication.py +153 -0
- anyfesolver/_stiffened_shell_arc_trial.py +310 -0
- anyfesolver/_stiffened_shell_b2_affine_resolution.py +101 -0
- anyfesolver/_stiffened_shell_b2_assembly_diagnostics.py +172 -0
- anyfesolver/_stiffened_shell_b2_definition_ownership.py +189 -0
- anyfesolver/_stiffened_shell_b2_experimental.py +153 -0
- anyfesolver/_stiffened_shell_b2_nodal_footprint.py +273 -0
- anyfesolver/_stiffened_shell_b2_physical_rigid_footprint.py +237 -0
- anyfesolver/_stiffened_shell_b2_q4_panel_experimental.py +2447 -0
- anyfesolver/_stiffened_shell_b2_q4_point_experimental.py +251 -0
- anyfesolver/_stiffened_shell_b2_reference_buckling.py +413 -0
- anyfesolver/_stiffened_shell_b3_chart.py +70 -0
- anyfesolver/_stiffened_shell_b3_local_adapter.py +141 -0
- anyfesolver/_stiffened_shell_beam_history.py +107 -0
- anyfesolver/_stiffened_shell_bl5_local_experimental.py +173 -0
- anyfesolver/_stiffened_shell_bl5_native_elastic.py +28 -0
- anyfesolver/_stiffened_shell_branch_event_trial.py +58 -0
- anyfesolver/_stiffened_shell_consumer_capabilities.py +124 -0
- anyfesolver/_stiffened_shell_coordinate_support.py +110 -0
- anyfesolver/_stiffened_shell_displacement_adaptive.py +327 -0
- anyfesolver/_stiffened_shell_displacement_checkpoint.py +360 -0
- anyfesolver/_stiffened_shell_displacement_control.py +326 -0
- anyfesolver/_stiffened_shell_displacement_corrector.py +293 -0
- anyfesolver/_stiffened_shell_displacement_increment.py +121 -0
- anyfesolver/_stiffened_shell_distributing_footprint.py +354 -0
- anyfesolver/_stiffened_shell_distributing_pose.py +267 -0
- anyfesolver/_stiffened_shell_f06_increment_arithmetic.py +205 -0
- anyfesolver/_stiffened_shell_ge_body_load.py +300 -0
- anyfesolver/_stiffened_shell_ge_checkpoint_binary.py +472 -0
- anyfesolver/_stiffened_shell_ge_distributed_load.py +210 -0
- anyfesolver/_stiffened_shell_ge_distributed_programme.py +175 -0
- anyfesolver/_stiffened_shell_ge_distributing_finite.py +242 -0
- anyfesolver/_stiffened_shell_ge_distributing_reference.py +296 -0
- anyfesolver/_stiffened_shell_ge_experimental.py +2454 -0
- anyfesolver/_stiffened_shell_ge_finite_experimental.py +2714 -0
- anyfesolver/_stiffened_shell_ge_mixed_modal_mass.py +33 -0
- anyfesolver/_stiffened_shell_ge_point_buckling.py +723 -0
- anyfesolver/_stiffened_shell_ge_pressure_load.py +366 -0
- anyfesolver/_stiffened_shell_ge_reference_modal.py +580 -0
- anyfesolver/_stiffened_shell_generalized_recovery.py +150 -0
- anyfesolver/_stiffened_shell_increment_control.py +217 -0
- anyfesolver/_stiffened_shell_l1_assembly_experimental.py +420 -0
- anyfesolver/_stiffened_shell_l1_local_experimental.py +284 -0
- anyfesolver/_stiffened_shell_l1_supported_work_experimental.py +146 -0
- anyfesolver/_stiffened_shell_native_distributed_load.py +120 -0
- anyfesolver/_stiffened_shell_native_gravity.py +236 -0
- anyfesolver/_stiffened_shell_nodal_footprint.py +255 -0
- anyfesolver/_stiffened_shell_physical_q4_mass.py +98 -0
- anyfesolver/_stiffened_shell_physical_s3_mass.py +53 -0
- anyfesolver/_stiffened_shell_point_recovery.py +49 -0
- anyfesolver/_stiffened_shell_q4_algorithmic_pullback.py +88 -0
- anyfesolver/_stiffened_shell_q4_material_event.py +114 -0
- anyfesolver/_stiffened_shell_q4_reference.py +65 -0
- anyfesolver/_stiffened_shell_rotation_charts.py +58 -0
- anyfesolver/_stiffened_shell_s3_algorithmic_pullback.py +59 -0
- anyfesolver/_stiffened_shell_s3_conservative_buckling.py +28 -0
- anyfesolver/_stiffened_shell_s3_dead_work_candidate.py +107 -0
- anyfesolver/_stiffened_shell_s3_material_event.py +30 -0
- anyfesolver/_stiffened_shell_same_parent_trial.py +224 -0
- anyfesolver/_stiffened_shell_selected_recovery.py +113 -0
- anyfesolver/_stiffened_shell_staged_load_experimental.py +392 -0
- anyfesolver/_stiffened_shell_stress_free_reference.py +204 -0
- anyfesolver/_wire_types.py +17 -0
- anyfesolver/activity.py +1537 -0
- anyfesolver/algebraic_dynamics.py +2864 -0
- anyfesolver/analysis_session.py +897 -0
- anyfesolver/anystructure_fem_mode.py +1637 -0
- anyfesolver/arc_length.py +2587 -0
- anyfesolver/assembly.py +1830 -0
- anyfesolver/b3_ge.py +179 -0
- anyfesolver/baselines.py +303 -0
- anyfesolver/beam_sections.py +292 -0
- anyfesolver/beam_shell_verification.py +4685 -0
- anyfesolver/beam_validity.py +110 -0
- anyfesolver/benchmarks.py +495 -0
- anyfesolver/boundary.py +1680 -0
- anyfesolver/buckling.py +2136 -0
- anyfesolver/buckling_validity.py +91 -0
- anyfesolver/capacity_workflow.py +431 -0
- anyfesolver/capsule_runtime_guard.py +99 -0
- anyfesolver/cases.py +173 -0
- anyfesolver/composite_strip_verification.py +297 -0
- anyfesolver/concentrated_mass.py +84 -0
- anyfesolver/constraint_audit.py +553 -0
- anyfesolver/contact.py +4785 -0
- anyfesolver/contact_performance.py +301 -0
- anyfesolver/control.py +206 -0
- anyfesolver/corotational.py +1935 -0
- anyfesolver/corotational_performance.py +157 -0
- anyfesolver/current_state_tangent.py +2780 -0
- anyfesolver/cylinder_benchmarks.py +369 -0
- anyfesolver/damage_matrix_performance.py +617 -0
- anyfesolver/dynamics.py +2833 -0
- anyfesolver/e4_pl_element.py +8265 -0
- anyfesolver/e4_pl_enriched.py +194 -0
- anyfesolver/e4_pl_enriched_nonlinear.py +159 -0
- anyfesolver/e4_pl_s3_element.py +9752 -0
- anyfesolver/e4_pl_s3_initial_fields.py +101 -0
- anyfesolver/e4_pl_s3_state.py +4723 -0
- anyfesolver/e4_pl_s3_v2_element.py +1844 -0
- anyfesolver/e4_pl_s3_v2b_element.py +1936 -0
- anyfesolver/e4_pl_s3_v2c_element.py +2196 -0
- anyfesolver/e4_pl_s3_v2d_element.py +2621 -0
- anyfesolver/e4_pl_s3_v2d_state.py +376 -0
- anyfesolver/element_capabilities.py +159 -0
- anyfesolver/element_qualification.py +432 -0
- anyfesolver/elements.py +6327 -0
- anyfesolver/experimental_csr_assembly.py +238 -0
- anyfesolver/external_references.py +1253 -0
- anyfesolver/fe_core.py +832 -0
- anyfesolver/floating_pressure_regions.py +119 -0
- anyfesolver/floating_response.py +486 -0
- anyfesolver/floating_transient.py +1281 -0
- anyfesolver/fracture.py +621 -0
- anyfesolver/ge_beam3_curved_reference.py +725 -0
- anyfesolver/ge_beam3_element.py +885 -0
- anyfesolver/ge_beam3_mixed_element.py +1216 -0
- anyfesolver/ge_beam3_mixed_state.py +814 -0
- anyfesolver/ge_beam3_native.py +129 -0
- anyfesolver/ge_beam3_native_connected_dynamics.py +24 -0
- anyfesolver/ge_beam3_native_dynamics.py +70 -0
- anyfesolver/ge_beam3_state.py +672 -0
- anyfesolver/general_contact/__init__.py +151 -0
- anyfesolver/general_contact/_enriched_multitarget_empty.py +202 -0
- anyfesolver/general_contact/_enriched_multitarget_trial.py +183 -0
- anyfesolver/general_contact/_results_archive_common.py +65 -0
- anyfesolver/general_contact/algebraic_path.py +206 -0
- anyfesolver/general_contact/arc_contact.py +237 -0
- anyfesolver/general_contact/arc_results_archive.py +158 -0
- anyfesolver/general_contact/augmentation.py +157 -0
- anyfesolver/general_contact/automatic_domain.py +621 -0
- anyfesolver/general_contact/beam_chain_consistent.py +357 -0
- anyfesolver/general_contact/beam_chain_end_geometry.py +237 -0
- anyfesolver/general_contact/beam_chain_ends.py +220 -0
- anyfesolver/general_contact/beam_chain_pair.py +416 -0
- anyfesolver/general_contact/beam_curve_end_geometry.py +254 -0
- anyfesolver/general_contact/beam_curve_ends.py +237 -0
- anyfesolver/general_contact/beam_curve_pair.py +794 -0
- anyfesolver/general_contact/beam_curve_pair_static.py +303 -0
- anyfesolver/general_contact/beam_end_radial_geometry.py +221 -0
- anyfesolver/general_contact/beam_end_topology.py +15 -0
- anyfesolver/general_contact/beam_hemisphere_coupled_tool.py +61 -0
- anyfesolver/general_contact/beam_hemisphere_cylinder.py +134 -0
- anyfesolver/general_contact/beam_hemisphere_cylinder_motion.py +89 -0
- anyfesolver/general_contact/beam_hemisphere_cylinder_work.py +216 -0
- anyfesolver/general_contact/beam_hemisphere_plane.py +175 -0
- anyfesolver/general_contact/beam_hemisphere_s3_support.py +152 -0
- anyfesolver/general_contact/beam_hemisphere_sphere.py +135 -0
- anyfesolver/general_contact/beam_hemisphere_sphere_work.py +114 -0
- anyfesolver/general_contact/beam_hemisphere_support.py +211 -0
- anyfesolver/general_contact/beam_pair.py +523 -0
- anyfesolver/general_contact/beam_pair_end_geometry.py +269 -0
- anyfesolver/general_contact/beam_pair_ends.py +222 -0
- anyfesolver/general_contact/beam_plane.py +425 -0
- anyfesolver/general_contact/beam_radial.py +500 -0
- anyfesolver/general_contact/beam_radial_ends.py +223 -0
- anyfesolver/general_contact/beam_s3_directional_rates.py +196 -0
- anyfesolver/general_contact/beam_s3_rotational_transient.py +126 -0
- anyfesolver/general_contact/beam_s3_transient.py +139 -0
- anyfesolver/general_contact/beam_shell.py +648 -0
- anyfesolver/general_contact/beam_shell_patch.py +395 -0
- anyfesolver/general_contact/beam_temporal_bounds.py +230 -0
- anyfesolver/general_contact/capability.py +101 -0
- anyfesolver/general_contact/capped_cylinder.py +618 -0
- anyfesolver/general_contact/contact_search.py +95 -0
- anyfesolver/general_contact/core.py +1769 -0
- anyfesolver/general_contact/curved_s3_q4_work.py +238 -0
- anyfesolver/general_contact/curved_shell_skin.py +520 -0
- anyfesolver/general_contact/d1_interior_profile.py +427 -0
- anyfesolver/general_contact/deformable_beam_s3_caps.py +143 -0
- anyfesolver/general_contact/deformable_beam_s3_line.py +211 -0
- anyfesolver/general_contact/deformable_beam_s3_static.py +152 -0
- anyfesolver/general_contact/descriptor_rates.py +61 -0
- anyfesolver/general_contact/enriched_cold_predictor.py +161 -0
- anyfesolver/general_contact/enriched_moment_batch.py +337 -0
- anyfesolver/general_contact/enriched_multitarget.py +308 -0
- anyfesolver/general_contact/enriched_multitarget_gap.py +156 -0
- anyfesolver/general_contact/enriched_multitarget_moments.py +194 -0
- anyfesolver/general_contact/enriched_multitarget_topology.py +171 -0
- anyfesolver/general_contact/enriched_nonlinear.py +440 -0
- anyfesolver/general_contact/enriched_overlap.py +299 -0
- anyfesolver/general_contact/enriched_path.py +253 -0
- anyfesolver/general_contact/enriched_small_cut.py +310 -0
- anyfesolver/general_contact/enriched_static.py +481 -0
- anyfesolver/general_contact/enriched_union.py +320 -0
- anyfesolver/general_contact/equilibrated_pressure_pivot.py +140 -0
- anyfesolver/general_contact/event_subdivision.py +273 -0
- anyfesolver/general_contact/finite_mixed_state.py +133 -0
- anyfesolver/general_contact/finite_rigid_patch.py +196 -0
- anyfesolver/general_contact/finite_rigid_support.py +129 -0
- anyfesolver/general_contact/finite_rigid_sweep.py +53 -0
- anyfesolver/general_contact/finite_rotation_predictor.py +171 -0
- anyfesolver/general_contact/finite_rotation_skin.py +212 -0
- anyfesolver/general_contact/finite_rotation_state.py +106 -0
- anyfesolver/general_contact/finite_rotation_sweep.py +161 -0
- anyfesolver/general_contact/finite_v2d_state.py +104 -0
- anyfesolver/general_contact/fixed_projection_graph.py +205 -0
- anyfesolver/general_contact/fixed_projection_s3_events.py +235 -0
- anyfesolver/general_contact/free_rigid.py +134 -0
- anyfesolver/general_contact/friction_point.py +378 -0
- anyfesolver/general_contact/gap_extrema.py +119 -0
- anyfesolver/general_contact/guided_pair_transient_geometry.py +138 -0
- anyfesolver/general_contact/initial_contact_seed.py +368 -0
- anyfesolver/general_contact/linearized_pivot.py +595 -0
- anyfesolver/general_contact/material_work_diagnostics.py +159 -0
- anyfesolver/general_contact/moment_batch_ad.py +129 -0
- anyfesolver/general_contact/moment_batch_points.py +75 -0
- anyfesolver/general_contact/moving.py +1031 -0
- anyfesolver/general_contact/multiple_beam_rigid.py +248 -0
- anyfesolver/general_contact/multiple_beam_s3_caps.py +199 -0
- anyfesolver/general_contact/multiple_beam_s3_transient.py +223 -0
- anyfesolver/general_contact/multiple_projected_pairs.py +196 -0
- anyfesolver/general_contact/multiple_shell_planes.py +226 -0
- anyfesolver/general_contact/native_activation_static.py +143 -0
- anyfesolver/general_contact/native_checkpoint_results.py +213 -0
- anyfesolver/general_contact/native_curve_union.py +268 -0
- anyfesolver/general_contact/native_curved_geometry.py +374 -0
- anyfesolver/general_contact/native_curved_pair_partition.py +590 -0
- anyfesolver/general_contact/native_curved_plane_work.py +864 -0
- anyfesolver/general_contact/native_curved_s3_work.py +472 -0
- anyfesolver/general_contact/native_event_polynomial.py +164 -0
- anyfesolver/general_contact/native_fibre_context.py +173 -0
- anyfesolver/general_contact/native_fibre_results.py +74 -0
- anyfesolver/general_contact/native_initial_guess.py +122 -0
- anyfesolver/general_contact/native_material_activation.py +108 -0
- anyfesolver/general_contact/native_material_plane.py +111 -0
- anyfesolver/general_contact/native_material_s3.py +209 -0
- anyfesolver/general_contact/native_multi_s3_static.py +722 -0
- anyfesolver/general_contact/native_normal_angles.py +233 -0
- anyfesolver/general_contact/native_pair_error_budget.py +49 -0
- anyfesolver/general_contact/native_replay_arithmetic.py +103 -0
- anyfesolver/general_contact/native_replay_diagnostics.py +90 -0
- anyfesolver/general_contact/native_retained_body_junction.py +99 -0
- anyfesolver/general_contact/native_retained_body_pair.py +220 -0
- anyfesolver/general_contact/native_retained_body_projection.py +160 -0
- anyfesolver/general_contact/native_retained_body_static.py +62 -0
- anyfesolver/general_contact/native_retained_cell_pair.py +185 -0
- anyfesolver/general_contact/native_retained_curve_cell.py +102 -0
- anyfesolver/general_contact/native_retained_line_plane.py +210 -0
- anyfesolver/general_contact/native_retained_line_s3.py +440 -0
- anyfesolver/general_contact/native_retained_line_s3_work.py +91 -0
- anyfesolver/general_contact/native_retained_pair_static.py +845 -0
- anyfesolver/general_contact/native_retained_s3_static.py +554 -0
- anyfesolver/general_contact/native_retained_static.py +478 -0
- anyfesolver/general_contact/native_retained_station.py +222 -0
- anyfesolver/general_contact/native_retained_whole_pair.py +2120 -0
- anyfesolver/general_contact/native_s3_swept.py +149 -0
- anyfesolver/general_contact/native_shell_static_driver.py +144 -0
- anyfesolver/general_contact/native_surface_activation.py +391 -0
- anyfesolver/general_contact/native_surface_bounds.py +198 -0
- anyfesolver/general_contact/native_surface_contributor.py +121 -0
- anyfesolver/general_contact/native_surface_crossing.py +81 -0
- anyfesolver/general_contact/native_surface_event_sequence.py +320 -0
- anyfesolver/general_contact/native_surface_extrema.py +72 -0
- anyfesolver/general_contact/native_surface_friction_integral.py +1724 -0
- anyfesolver/general_contact/native_surface_front.py +742 -0
- anyfesolver/general_contact/native_surface_front_boundary.py +160 -0
- anyfesolver/general_contact/native_surface_front_precision.py +78 -0
- anyfesolver/general_contact/native_surface_front_work.py +118 -0
- anyfesolver/general_contact/native_surface_history.py +334 -0
- anyfesolver/general_contact/native_surface_normal.py +324 -0
- anyfesolver/general_contact/native_surface_patch.py +213 -0
- anyfesolver/general_contact/native_surface_path.py +348 -0
- anyfesolver/general_contact/native_surface_quadrature.py +212 -0
- anyfesolver/general_contact/native_surface_s3_friction.py +340 -0
- anyfesolver/general_contact/native_surface_support.py +776 -0
- anyfesolver/general_contact/native_surface_transaction.py +198 -0
- anyfesolver/general_contact/native_transient_multi_shell.py +108 -0
- anyfesolver/general_contact/native_transient_pair.py +61 -0
- anyfesolver/general_contact/native_transient_shell.py +44 -0
- anyfesolver/general_contact/normal_s3_skin_path.py +163 -0
- anyfesolver/general_contact/overlap.py +443 -0
- anyfesolver/general_contact/pair.py +466 -0
- anyfesolver/general_contact/patch_broadphase.py +111 -0
- anyfesolver/general_contact/patch_mortar.py +593 -0
- anyfesolver/general_contact/patch_sliding.py +644 -0
- anyfesolver/general_contact/plane_newmark_events.py +278 -0
- anyfesolver/general_contact/pointwise_patch.py +288 -0
- anyfesolver/general_contact/polynomial_roots.py +312 -0
- anyfesolver/general_contact/pressure_basis.py +241 -0
- anyfesolver/general_contact/pressure_diagnostics.py +155 -0
- anyfesolver/general_contact/pressure_overlay.py +182 -0
- anyfesolver/general_contact/pressure_space.py +51 -0
- anyfesolver/general_contact/q4_material_checkpoint.py +276 -0
- anyfesolver/general_contact/q4_overlap_local_bound.py +1111 -0
- anyfesolver/general_contact/q4_q4_overlap_derivatives.py +234 -0
- anyfesolver/general_contact/q4_q4_swept_bound.py +58 -0
- anyfesolver/general_contact/q4_s3_overlap_derivatives.py +1159 -0
- anyfesolver/general_contact/q4_s3_tiny_wedge.py +180 -0
- anyfesolver/general_contact/q4_skin_work.py +87 -0
- anyfesolver/general_contact/q4_source_mortar_energy.py +181 -0
- anyfesolver/general_contact/q4_source_overlap.py +401 -0
- anyfesolver/general_contact/q4_target_overlap.py +181 -0
- anyfesolver/general_contact/request_identity.py +192 -0
- anyfesolver/general_contact/rigid_translation.py +199 -0
- anyfesolver/general_contact/runtime.py +27 -0
- anyfesolver/general_contact/s3_friction_chart_interval.py +104 -0
- anyfesolver/general_contact/s3_friction_coverage.py +165 -0
- anyfesolver/general_contact/s3_friction_dyadic_interval.py +39 -0
- anyfesolver/general_contact/s3_friction_history_path.py +111 -0
- anyfesolver/general_contact/s3_friction_mesh_coverage.py +145 -0
- anyfesolver/general_contact/s3_friction_mesh_gap.py +74 -0
- anyfesolver/general_contact/s3_friction_mesh_monolithic.py +150 -0
- anyfesolver/general_contact/s3_friction_monolithic.py +121 -0
- anyfesolver/general_contact/s3_friction_moving_coverage.py +114 -0
- anyfesolver/general_contact/s3_friction_pair.py +237 -0
- anyfesolver/general_contact/s3_friction_point.py +129 -0
- anyfesolver/general_contact/s3_friction_prepared_path.py +254 -0
- anyfesolver/general_contact/s3_friction_replay.py +1094 -0
- anyfesolver/general_contact/s3_friction_rim_path.py +69 -0
- anyfesolver/general_contact/s3_friction_rim_transaction.py +23 -0
- anyfesolver/general_contact/s3_friction_static.py +267 -0
- anyfesolver/general_contact/s3_friction_swept_gap.py +112 -0
- anyfesolver/general_contact/s3_friction_touch.py +94 -0
- anyfesolver/general_contact/s3_friction_weak_pressure.py +66 -0
- anyfesolver/general_contact/s3_overlap_derivatives.py +220 -0
- anyfesolver/general_contact/s3_overlap_hermite_gap.py +180 -0
- anyfesolver/general_contact/s3_pair_static.py +343 -0
- anyfesolver/general_contact/s3_patch_augmented.py +2056 -0
- anyfesolver/general_contact/s3_patch_mortar_energy.py +545 -0
- anyfesolver/general_contact/s3_patch_static.py +1725 -0
- anyfesolver/general_contact/s3_pressure_hermite_bounds.py +395 -0
- anyfesolver/general_contact/s3_pressure_polygon_bounds.py +73 -0
- anyfesolver/general_contact/s3_q4_gap_resolution.py +191 -0
- anyfesolver/general_contact/s3_q4_overlap_derivatives.py +252 -0
- anyfesolver/general_contact/s3_q4_swept.py +56 -0
- anyfesolver/general_contact/s3_skin_work.py +101 -0
- anyfesolver/general_contact/s3_sliding_friction.py +640 -0
- anyfesolver/general_contact/s3_stable_plane_gap.py +43 -0
- anyfesolver/general_contact/seed_path_vertex_interval.py +323 -0
- anyfesolver/general_contact/semismooth.py +133 -0
- anyfesolver/general_contact/semismooth_block.py +147 -0
- anyfesolver/general_contact/semismooth_path.py +871 -0
- anyfesolver/general_contact/shell_pair_hermite_sweep.py +336 -0
- anyfesolver/general_contact/shell_sphere_temporal_bounds.py +305 -0
- anyfesolver/general_contact/skin_geometry.py +106 -0
- anyfesolver/general_contact/sliding.py +349 -0
- anyfesolver/general_contact/sphere.py +691 -0
- anyfesolver/general_contact/sphere_temporal_bounds.py +241 -0
- anyfesolver/general_contact/static_path.py +2608 -0
- anyfesolver/general_contact/static_results_archive.py +140 -0
- anyfesolver/general_contact/structural_state_bridge.py +196 -0
- anyfesolver/general_contact/supported_schur.py +594 -0
- anyfesolver/general_contact/swept_patch_broadphase.py +160 -0
- anyfesolver/general_contact/transient.py +2921 -0
- anyfesolver/general_contact/transient_results_archive.py +491 -0
- anyfesolver/general_contact/triangle_mortar_energy.py +280 -0
- anyfesolver/general_contact/triangle_pair_energy.py +211 -0
- anyfesolver/general_contact/triangulated_rigid.py +94 -0
- anyfesolver/general_contact/triangulated_rigid_static.py +399 -0
- anyfesolver/general_contact/warped_q4_plane.py +185 -0
- anyfesolver/general_contact/warped_q4_skin.py +302 -0
- anyfesolver/general_contact/warped_q4_static.py +331 -0
- anyfesolver/impact_performance.py +273 -0
- anyfesolver/impact_reduced_assembly.py +294 -0
- anyfesolver/imperfections.py +397 -0
- anyfesolver/inertia_relief.py +676 -0
- anyfesolver/initial_field_state.py +54 -0
- anyfesolver/jit_compiler.py +135 -0
- anyfesolver/kernel_warmup.py +228 -0
- anyfesolver/linalg.py +1002 -0
- anyfesolver/marine_contributions.py +634 -0
- anyfesolver/marine_coupled_equilibrium.py +292 -0
- anyfesolver/marine_equilibrium.py +405 -0
- anyfesolver/marine_hydro_coordinates.py +346 -0
- anyfesolver/marine_linear.py +549 -0
- anyfesolver/marine_link.py +306 -0
- anyfesolver/marine_mechanical.py +923 -0
- anyfesolver/marine_mooring.py +533 -0
- anyfesolver/marine_morison.py +331 -0
- anyfesolver/marine_potential_flow.py +403 -0
- anyfesolver/marine_rigid.py +397 -0
- anyfesolver/marine_seabed.py +122 -0
- anyfesolver/mass_properties.py +352 -0
- anyfesolver/material_curves.py +52 -0
- anyfesolver/materials.py +43 -0
- anyfesolver/matrix_assembly.py +7330 -0
- anyfesolver/mesh_gen.py +904 -0
- anyfesolver/mesh_load_bc_verification.py +612 -0
- anyfesolver/modal.py +2494 -0
- anyfesolver/nonlinear.py +341 -0
- anyfesolver/nonlinear_analysis_diagnostics.py +466 -0
- anyfesolver/nonlinear_element_evaluation.py +126 -0
- anyfesolver/nonlinear_performance.py +2094 -0
- anyfesolver/nonlinear_performance_batch_b.py +1173 -0
- anyfesolver/nonlinear_performance_batch_c.py +850 -0
- anyfesolver/nonlinear_performance_bootstrap.py +164 -0
- anyfesolver/nonlinear_reduced_assembly.py +806 -0
- anyfesolver/nonlinear_restart.py +1708 -0
- anyfesolver/nonlinear_state.py +2800 -0
- anyfesolver/nonlinear_static.py +9407 -0
- anyfesolver/outcomes.py +694 -0
- anyfesolver/plasticity.py +2087 -0
- anyfesolver/plasticity_qualification.py +758 -0
- anyfesolver/prepared_static.py +1129 -0
- anyfesolver/prepared_static_envelopes.py +389 -0
- anyfesolver/prepared_static_loads.py +1180 -0
- anyfesolver/prepared_static_measures.py +18 -0
- anyfesolver/prepared_static_numeric.py +247 -0
- anyfesolver/prepared_static_q4.py +297 -0
- anyfesolver/prepared_static_recovery.py +2068 -0
- anyfesolver/prepared_static_response.py +1013 -0
- anyfesolver/prepared_static_shared.py +226 -0
- anyfesolver/prepared_static_snapshot.py +323 -0
- anyfesolver/prepared_static_vectorized.py +866 -0
- anyfesolver/pressure_regions.py +287 -0
- anyfesolver/production_readiness.py +343 -0
- anyfesolver/quality_control.py +1487 -0
- anyfesolver/quantities.py +1289 -0
- anyfesolver/recovery.py +4217 -0
- anyfesolver/recovery_batches.py +1985 -0
- anyfesolver/recovery_policy.py +205 -0
- anyfesolver/recovery_s4.py +289 -0
- anyfesolver/recovery_shell_frames.py +102 -0
- anyfesolver/reference_cases.py +366 -0
- anyfesolver/result_capsule.py +2175 -0
- anyfesolver/results.py +752 -0
- anyfesolver/runtime.py +9819 -0
- anyfesolver/s3_reference_batch.py +1338 -0
- anyfesolver/s3_v2c_fast_assembly.py +544 -0
- anyfesolver/s3_v2d_fast_assembly.py +447 -0
- anyfesolver/s4_validity.py +354 -0
- anyfesolver/sections.py +67 -0
- anyfesolver/sesam_fem/__init__.py +55 -0
- anyfesolver/sesam_fem/__main__.py +80 -0
- anyfesolver/sesam_fem/diagnostics.py +5 -0
- anyfesolver/sesam_fem/document.py +39 -0
- anyfesolver/sesam_fem/exporter.py +9 -0
- anyfesolver/sesam_fem/importer.py +228 -0
- anyfesolver/sesam_fem/records.py +21 -0
- anyfesolver/sesam_fem/schema.py +35 -0
- anyfesolver/sesam_fem/sif_importer.py +9 -0
- anyfesolver/sesam_fem/validation.py +5 -0
- anyfesolver/sestra_deep_diagnostics.py +173 -0
- anyfesolver/sestra_mixed_verification.py +146 -0
- anyfesolver/sestra_structure_benchmarks.py +270 -0
- anyfesolver/sestra_three_case.py +215 -0
- anyfesolver/sestra_verification.py +523 -0
- anyfesolver/shell_benchmarks.py +367 -0
- anyfesolver/shell_formulations/director_field.py +799 -0
- anyfesolver/shell_formulations/geometry_provenance.py +921 -0
- anyfesolver/shell_formulations/mitc4_plus_d_quality.py +318 -0
- anyfesolver/shell_formulations/mitc4_plus_d_reference.py +837 -0
- anyfesolver/shell_formulations/mitc4_plus_d_scalar.py +209 -0
- anyfesolver/shell_formulations/protocol.py +222 -0
- anyfesolver/shell_formulations/q4_common.py +271 -0
- anyfesolver/shell_formulations/s4_restricted_policy.py +78 -0
- anyfesolver/shell_sections.py +394 -0
- anyfesolver/solid_submodel.py +930 -0
- anyfesolver/static_batch.py +662 -0
- anyfesolver/static_envelopes.py +250 -0
- anyfesolver/stiffened_shell.py +388 -0
- anyfesolver/submodel_transfer.py +1306 -0
- anyfesolver/test_cases.py +610 -0
- anyfesolver/threading_policy.py +431 -0
- anyfesolver/validation.py +719 -0
- anyfesolver/vectorized_beam.py +139 -0
- anyfesolver/vectorized_generalized_shell.py +448 -0
- anyfesolver/vectorized_hill48.py +956 -0
- anyfesolver/vectorized_nonlinear.py +360 -0
- anyfesolver/vectorized_stiffness.py +694 -0
- anyfesolver-0.5.0a1.dist-info/METADATA +374 -0
- anyfesolver-0.5.0a1.dist-info/RECORD +751 -0
- anyfesolver-0.5.0a1.dist-info/WHEEL +5 -0
- anyfesolver-0.5.0a1.dist-info/licenses/COPYRIGHT +1 -0
- anyfesolver-0.5.0a1.dist-info/licenses/LICENSE +373 -0
- anyfesolver-0.5.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +32 -0
- 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)
|