Davout 0.1.1.dev168__tar.gz → 0.1.1.dev170__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {davout-0.1.1.dev168/source/Davout.egg-info → davout-0.1.1.dev170}/PKG-INFO +3 -3
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/README.md +2 -2
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/pyproject.toml +1 -1
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/neural_network_trainer.py +9 -5
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/training_tools.py +356 -46
- davout-0.1.1.dev170/source/Davout/PythonicUtilities/function_tools.py +175 -0
- davout-0.1.1.dev170/source/Davout/PythonicUtilities/user_interaction_tools.py +295 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170/source/Davout.egg-info}/PKG-INFO +3 -3
- davout-0.1.1.dev168/source/Davout/PythonicUtilities/function_tools.py +0 -91
- davout-0.1.1.dev168/source/Davout/PythonicUtilities/user_interaction_tools.py +0 -120
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/LICENSE +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/setup.cfg +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/setup.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/non_transfinite/RVE_artery.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/non_transfinite/RVE_matrix_with_fiber.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/non_transfinite/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/non_transfinite/elastin_fiber_creator.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/RVE_artery_transfinite.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/RVE_matrix_with_fiber_transfinite.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/elastin_fiber_creator.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/spherical_RVE.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/artery/artery_macroscale.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/artery/artery_macroscale_ellipsoid.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/micropolar_meshes/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/micropolar_meshes/beam_micropolar_case_1.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/periodic_meshes/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/periodic_meshes/artery_parameters.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/periodic_meshes/fiber_matrix_parameters.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/periodic_meshes/periodic_structure.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/solids/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/solids/intervertebral_disc.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/aa_tests/solids/whole_ensemble_of_geometries.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/solids/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/solids/cuboid_cylinders.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/solids/cuboid_ellipsoids.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/solids/cuboid_generator.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/solids/cuboid_helicoids.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/solids/cuboid_prisms.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/tool_box/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/tool_box/geometric_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/tool_box/mesh_data_retriever.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/tool_box/meshing_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/tool_box/region_finder.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/CuboidGmsh/tool_box/verification_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/PINNs/Physics/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/PINNs/Physics/elasticity_equation.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/PINNs/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/SVD_framework/box_with_imposed_displacement_gradient.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/SVD_framework/box_with_young_modulus_field.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/SVD_framework/dataset_generator.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/SVD_framework/input_data_filler.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/SVD_framework/kinematics_surrogate_model.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/SVD_framework/young_modulus_field_generator.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/heat_equation.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/box_with_imposed_displacement_gradient.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/box_with_young_modulus_field.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/dataset_generator.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/input_data_filler.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/young_modulus_field_generator.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_ANN_optimization.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_ANN_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_SVD_based_NNs.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_SVD_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_convex_and_partially_convex_input_NNs.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_math_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_quotient_space_NNs.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_tensor_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/custom_architectures/SVD_quotient_space.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/custom_architectures/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/custom_architectures/convexity_concerned_NNs.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/custom_architectures/gated_quotient_space.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/custom_architectures/generic_feed_forward.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/ANN_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/SVD_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/activation_function_utilities.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/custom_activation_functions.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/differentiation_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/loss_assembler_classes.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/loss_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/math_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/numerical_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/parameters_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/tensor_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/REPL_experiments.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/optimization/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/optimization/tests_optimization_methods.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/tests_batching.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/tests_finite_elements.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/tests_loss_function.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/tests_physics.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/unidimensional/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/unidimensional/bar_fea.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/unidimensional/hyperelastic_1D_energies.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/aa_tests/unidimensional/variational_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/assembly/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/assembly/body_forces_work.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/assembly/dirichlet_boundary_conditions_enforcer.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/assembly/hyperelastic_internal_work.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/assembly/surface_forces_work.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/constitutive_models/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/constitutive_models/hyperelastic_isotropic_models.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/finite_elements/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/finite_elements/elements_manager.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/finite_elements/finite_element_dispatcher.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/finite_elements/surface_elements/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/finite_elements/surface_elements/triangles.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/finite_elements/volume_elements/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/finite_elements/volume_elements/tetrahedrons.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/optimization/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/optimization/conditioning_matrices.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/optimization/loss_functions.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/optimization/neural_network_assembler.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/optimization/objective_function.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/physics/compressible_cauchy_hyperelasticy.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/constitutive_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/dirichlet_loading_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/math_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/mesh_info_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/mesh_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/neumann_loading_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/node_ordering.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/optimization_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/parametric_curves_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/sensitivity_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/FENN/tool_box/tensorflow_utilities.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/cauchy_tetrahedron.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/continuum_mechanics_potato_collage.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/fake_book_spines.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/null_space_architecture.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/strain_tensors.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/tests_collage_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/tests_delaunay.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/tests_paraview_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/aa_tests/tests_plotting_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/collage_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/paraview_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/plotting_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/arrows_lines_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/box_and_markers_classes.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/box_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/collage_classes.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/curves_setter.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/image_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/interactivity_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/paraview_scripts.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/perspective_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/GraphUtilities/tool_box/text_excerpt_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/LaTeXUtilities.sty +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/aa_tests/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/aa_tests/latex_parser_tests.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/latex_parser.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/tool_box/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/tool_box/command_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/tool_box/parsing_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/LaTeXUtilities/tool_box/sty_file_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/heat_transfer/heat_box.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/beam_with_fibers.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/box_with_young_modulus_field.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/disc_HGO.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/disc_neo_hookean.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/disc_neo_hookean_incompressible.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/hyperelastic_box.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/incompressible_hyperelastic_box.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/intervertebral_disc/cylindrical_coordinates_material_property.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/intervertebral_disc/disc_HGO.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/intervertebral_disc/local_coordinate_system_generation.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/parallel_hyperelastic_box.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/parallel_incompressible_box.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/read_dofs_in_volume.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/young_modulus_field.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/bending_case/beam_with_fibers_macroscale.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/bending_case/beam_with_fibers_microscale.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/deformation_laboratory/microscale_deformation_lab.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/disc_micropolar_neo_hookean.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Bauer_et_al/beam.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Bauer_et_al/beam_neo_hookean.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Bauer_et_al/beam_neo_hookean_pure_dolfin.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Bauer_et_al/beam_neo_hookean_pure_dolfin_old.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Suh_et_al/suh_implementation.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/micropolar_with_homogenization.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/micropolar_with_homogenization_original.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/tools_homogenization.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/tools_io.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/stress_plots.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/tangent_operators/numerical_differentiation.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/tangent_operators/numerical_differentiation_second_elasticity_tensor.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/tangent_operators/tangent_operator_plotter.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/torsion_case/beam_with_fibers_macroscale.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/torsion_case/beam_with_fibers_microscale.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/traction_case/beam_with_fibers_macroscale.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/traction_case/beam_with_fibers_microscale.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/curve_fitting.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/cylindrical_coordinates_field.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/cylindrical_coordinates_material_property.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/elasticity_tensor.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/incompressible.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/linear_expression_test.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/petsc_2D.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/test_periodic.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/test_periodic_class.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/test_shifted_field.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/teste_afim.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/working_example_dictionaries.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/multiscale/hyperelasticity/beam_with_fibers_microscale.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/physics_prototypes/compressible_hyperelasticity.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/physics_prototypes/incompressible_hyperelasticity.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/test_meshes/beam_gmsh.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/test_meshes_paths.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/aa_tests_and_examples/various_physics_tests.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/constitutive_models/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/constitutive_models/heat_transfer/isotropic_heat_conduction.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/constitutive_models/hyperelasticity/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/constitutive_models/hyperelasticity/anisotropic_hyperelasticity.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/constitutive_models/hyperelasticity/isotropic_hyperelasticity.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/constitutive_models/hyperelasticity/micropolar_hyperelasticity.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/multiscale/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/multiscale/multiscale_boundary_conditions/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/multiscale/multiscale_boundary_conditions/multiscale_classes.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/multiscale/multiscale_boundary_conditions/multiscale_expressions.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/multiscale/multiscale_hyperelasticity.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/multiscale/multiscale_micropolar.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/physics/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/physics/hyperelastic_cauchy_continuum.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/physics/hyperelastic_incompressible_cauchy_continuum.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/physics/hyperelastic_micropolar_continuum.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/physics/steady_state_heat_transfer.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/post_processes/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/post_processes/post_processes_classes.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/post_processes/post_processes_functions.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/binary_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/body_forces_loading_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/boundary_conditions_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/constitutive_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/dirichlet_load_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/expressions_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/functional_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/homogenization_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/mesh_handling_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/multiscale_boundary_conditions_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/numerical_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/parallelization_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/post_processing_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/pseudotime_stepping_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/read_write_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/surface_loading_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/tensor_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/variational_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/MultiMech/tool_box/weak_boundary_conditions_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/aa_tests/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/aa_tests/tests_template.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/aa_tests/txt_tests.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/coordinate_systems_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/dictionary_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/file_handling_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/fonts/CMU_Serif_Roman.ttf +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/interpolation_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/math_experiments.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/numpy_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/package_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/path_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/programming_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/recursion_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/string_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/tensor_and_math_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/PythonicUtilities/testing_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/StochasticUtilities/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/StochasticUtilities/aa_tests/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/StochasticUtilities/aa_tests/test_delaunay_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/StochasticUtilities/domain_decomposition/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/StochasticUtilities/tool_box/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/StochasticUtilities/tool_box/delaunay_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/StochasticUtilities/tool_box/sampling_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/StochasticUtilities/tool_box/statistics_tools.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/__init__.py +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout.egg-info/SOURCES.txt +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout.egg-info/dependency_links.txt +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout.egg-info/requires.txt +0 -0
- {davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Davout
|
|
3
|
-
Version: 0.1.1.
|
|
3
|
+
Version: 0.1.1.dev170
|
|
4
4
|
Summary: Scientific computing utilities combining FEM, ANN and tooling
|
|
5
5
|
Author: Matheus Janczkowski
|
|
6
6
|
Author-email: Matheus Janczkowski <matheusj2009@hotmail.com>
|
|
@@ -23,11 +23,11 @@ to the repository and source files: https://github.com/Matheus-Janczkowski/Davou
|
|
|
23
23
|
|
|
24
24
|
1. Link to the booklet on installation of a miscelaneous of software: https://www.overleaf.com/read/wbxhncmtnmkm#0eb73b
|
|
25
25
|
|
|
26
|
-
2. Link to the book on python programming: https://github.com/Matheus-Janczkowski/CompMechSelfStudy/
|
|
26
|
+
2. Link to the book on python programming: https://github.com/Matheus-Janczkowski/CompMechSelfStudy/tree/main/introduction_to_python_programming
|
|
27
27
|
|
|
28
28
|
3. Link to the booklet on writing using LaTeX: https://www.overleaf.com/read/sdrvfrpdjhft#66d6f9
|
|
29
29
|
|
|
30
|
-
4. Link to the book on continuum mechanics: https://github.com/Matheus-Janczkowski/CompMechSelfStudy/
|
|
30
|
+
4. Link to the book on continuum mechanics: https://github.com/Matheus-Janczkowski/CompMechSelfStudy/tree/main/introduction_to_continuum_mechanics
|
|
31
31
|
|
|
32
32
|
4. Link for the presentation template: https://www.overleaf.com/read/sbgxdphxswmm#6d7d64
|
|
33
33
|
|
|
@@ -4,11 +4,11 @@ to the repository and source files: https://github.com/Matheus-Janczkowski/Davou
|
|
|
4
4
|
|
|
5
5
|
1. Link to the booklet on installation of a miscelaneous of software: https://www.overleaf.com/read/wbxhncmtnmkm#0eb73b
|
|
6
6
|
|
|
7
|
-
2. Link to the book on python programming: https://github.com/Matheus-Janczkowski/CompMechSelfStudy/
|
|
7
|
+
2. Link to the book on python programming: https://github.com/Matheus-Janczkowski/CompMechSelfStudy/tree/main/introduction_to_python_programming
|
|
8
8
|
|
|
9
9
|
3. Link to the booklet on writing using LaTeX: https://www.overleaf.com/read/sdrvfrpdjhft#66d6f9
|
|
10
10
|
|
|
11
|
-
4. Link to the book on continuum mechanics: https://github.com/Matheus-Janczkowski/CompMechSelfStudy/
|
|
11
|
+
4. Link to the book on continuum mechanics: https://github.com/Matheus-Janczkowski/CompMechSelfStudy/tree/main/introduction_to_continuum_mechanics
|
|
12
12
|
|
|
13
13
|
4. Link for the presentation template: https://www.overleaf.com/read/sbgxdphxswmm#6d7d64
|
|
14
14
|
|
|
@@ -24,7 +24,7 @@ class SurrogateModel:
|
|
|
24
24
|
def __init__(self, displacement_data_file, input_data_file,
|
|
25
25
|
saved_model_file, results_path, n_training_samples,
|
|
26
26
|
quotient_space_dimension, n_monte_carlo_realizations, n_best_models,
|
|
27
|
-
n_best_samples, mesh_file_name, screenshots_path):
|
|
27
|
+
n_best_samples, mesh_file_name, screenshots_path, optimizer):
|
|
28
28
|
|
|
29
29
|
# Stores the data
|
|
30
30
|
|
|
@@ -50,6 +50,8 @@ class SurrogateModel:
|
|
|
50
50
|
|
|
51
51
|
self.screenshots_path = screenshots_path
|
|
52
52
|
|
|
53
|
+
self.optimizer = optimizer
|
|
54
|
+
|
|
53
55
|
# Reads the two files
|
|
54
56
|
|
|
55
57
|
self.output_data = np.load(self.results_path+"//"+
|
|
@@ -60,7 +62,7 @@ class SurrogateModel:
|
|
|
60
62
|
# Sets a list of layers and the activation functions
|
|
61
63
|
|
|
62
64
|
self.activations_list = [{"elu": {"number of neurons": 100}}, {
|
|
63
|
-
"elu": {"number of neurons":
|
|
65
|
+
"elu": {"number of neurons": 100}}, {"linear":
|
|
64
66
|
self.n_output_neurons}]
|
|
65
67
|
|
|
66
68
|
# Defines a function to train the neural network model
|
|
@@ -113,7 +115,7 @@ class SurrogateModel:
|
|
|
113
115
|
maximum_iterations, verbose_deltaIterations=
|
|
114
116
|
verbose_delta_iterations, save_model_file=self.saved_model_file,
|
|
115
117
|
match_data_float_type_to_trainables=True, parent_path=
|
|
116
|
-
self.results_path)
|
|
118
|
+
self.results_path, optimizer=self.optimizer)
|
|
117
119
|
|
|
118
120
|
t_initial = time()
|
|
119
121
|
|
|
@@ -515,7 +517,9 @@ if __name__=="__main__":
|
|
|
515
517
|
|
|
516
518
|
n_best_samples = 10
|
|
517
519
|
|
|
518
|
-
|
|
520
|
+
optimizer = "Adam"
|
|
521
|
+
|
|
522
|
+
training_flag = True
|
|
519
523
|
|
|
520
524
|
test_flag = False
|
|
521
525
|
|
|
@@ -532,7 +536,7 @@ if __name__=="__main__":
|
|
|
532
536
|
surrogate_model_class = SurrogateModel(displacement_data_file,
|
|
533
537
|
input_data_file, saved_model_file, results_path, n_training_samples,
|
|
534
538
|
quotient_space_dimension, n_monte_carlo_realizations, n_best_models,
|
|
535
|
-
n_best_samples, mesh_file_name, screenshots_path)
|
|
539
|
+
n_best_samples, mesh_file_name, screenshots_path, optimizer)
|
|
536
540
|
|
|
537
541
|
# Sets training forth if it is the case
|
|
538
542
|
|
{davout-0.1.1.dev168 → davout-0.1.1.dev170}/source/Davout/DeepMech/tool_box/training_tools.py
RENAMED
|
@@ -4,6 +4,8 @@ import tensorflow as tf
|
|
|
4
4
|
|
|
5
5
|
import sys
|
|
6
6
|
|
|
7
|
+
import inspect
|
|
8
|
+
|
|
7
9
|
import numpy as np
|
|
8
10
|
|
|
9
11
|
from tqdm import tqdm
|
|
@@ -14,7 +16,7 @@ import time
|
|
|
14
16
|
|
|
15
17
|
from copy import deepcopy
|
|
16
18
|
|
|
17
|
-
from scipy.optimize import minimize
|
|
19
|
+
from scipy.optimize import minimize, _minimize
|
|
18
20
|
|
|
19
21
|
from scipy import stats
|
|
20
22
|
|
|
@@ -26,6 +28,10 @@ from ...PythonicUtilities import path_tools
|
|
|
26
28
|
|
|
27
29
|
from ...PythonicUtilities import string_tools
|
|
28
30
|
|
|
31
|
+
from ...PythonicUtilities.function_tools import verify_dictionary_as_function_argument
|
|
32
|
+
|
|
33
|
+
from ...PythonicUtilities.user_interaction_tools import PrintForLoopInfo
|
|
34
|
+
|
|
29
35
|
# Defines a class to optimize the model's parameters
|
|
30
36
|
|
|
31
37
|
class ModelTraining:
|
|
@@ -33,8 +39,8 @@ class ModelTraining:
|
|
|
33
39
|
def __init__(self, model, training_inputArray, training_trueArray,
|
|
34
40
|
loss_metric=tf.keras.losses.MeanAbsoluteError(), optimizer=
|
|
35
41
|
tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.9, nesterov=
|
|
36
|
-
True), n_iterations=1000, gradient_tolerance=1E-3,
|
|
37
|
-
|
|
42
|
+
True), n_iterations=1000, gradient_tolerance=1E-3, float_type=
|
|
43
|
+
tf.float32, verbose_deltaIterations=100, verbose=False,
|
|
38
44
|
save_model_file="trained_model.keras", parent_path="get current pa"+
|
|
39
45
|
"th"):
|
|
40
46
|
|
|
@@ -99,7 +105,6 @@ class ModelTraining:
|
|
|
99
105
|
# tor to create a map for compilation, hence, speeding it up
|
|
100
106
|
|
|
101
107
|
@tf.function
|
|
102
|
-
|
|
103
108
|
def train_step(self):
|
|
104
109
|
|
|
105
110
|
with tf.GradientTape() as tape:
|
|
@@ -111,7 +116,7 @@ class ModelTraining:
|
|
|
111
116
|
self.optimizer.apply_gradients(zip(gradients,
|
|
112
117
|
self.model.trainable_variables))
|
|
113
118
|
|
|
114
|
-
return loss,
|
|
119
|
+
return loss, gradients
|
|
115
120
|
|
|
116
121
|
# Defines a method for the optimization loop. But names it call so
|
|
117
122
|
# that it is called as soon as the class is created
|
|
@@ -130,7 +135,11 @@ class ModelTraining:
|
|
|
130
135
|
|
|
131
136
|
for i in range(self.n_iterations):
|
|
132
137
|
|
|
133
|
-
loss_value,
|
|
138
|
+
loss_value, gradient_vector = self.train_step()
|
|
139
|
+
|
|
140
|
+
# Evaluates the gradient's norm
|
|
141
|
+
|
|
142
|
+
gradient_norm = tf.linalg.global_norm(gradient_vector)
|
|
134
143
|
|
|
135
144
|
if gradient_norm.numpy()<=self.gradient_tolerance:
|
|
136
145
|
|
|
@@ -148,13 +157,18 @@ class ModelTraining:
|
|
|
148
157
|
|
|
149
158
|
if i%self.verbose_deltaIterations==0:
|
|
150
159
|
|
|
160
|
+
gradient_maximum_component = tf.reduce_max(tf.abs(
|
|
161
|
+
gradient_vector)).numpy()
|
|
162
|
+
|
|
151
163
|
print("Iteration "+integer_toString(i, max_digits)+
|
|
152
164
|
": loss="+format(loss_value.numpy(), '.5e')+", gra"+
|
|
153
165
|
"dient norm: "+format(gradient_norm.numpy(), '.5e')+
|
|
154
166
|
", gradient norm divided by the square root of the"+
|
|
155
167
|
" number of trainable parameters: "+format(
|
|
156
168
|
gradient_norm.numpy()/
|
|
157
|
-
self.number_trainable_parameters, '.5e')
|
|
169
|
+
self.number_trainable_parameters, '.5e')+"\nThe ma"+
|
|
170
|
+
"ximum component of the gradient in absolute value"+
|
|
171
|
+
" is: "+format(gradient_maximum_component, '.5e'))
|
|
158
172
|
|
|
159
173
|
# Evaluates the elapsed time
|
|
160
174
|
|
|
@@ -303,14 +317,6 @@ class ModelCustomTraining:
|
|
|
303
317
|
self.training_trueValues = tf.constant(training_trueArray, dtype
|
|
304
318
|
=self.float_type)
|
|
305
319
|
|
|
306
|
-
# Construct a class to give the loss function, its gradient, and
|
|
307
|
-
# the instructions for parameters (weights and biases) flattening
|
|
308
|
-
# and reconstruction
|
|
309
|
-
|
|
310
|
-
self.loss_class, self.model_parameters = loss_tools.build_loss_gradient_varying_model_parameters(
|
|
311
|
-
self.model, self.loss_metric, self.training_input,
|
|
312
|
-
model_true_values=self.training_trueValues, verbose=verbose)
|
|
313
|
-
|
|
314
320
|
# Gets the number of output neurons. Tries to get first via a
|
|
315
321
|
# custom attribute
|
|
316
322
|
|
|
@@ -322,6 +328,198 @@ class ModelCustomTraining:
|
|
|
322
328
|
|
|
323
329
|
self.n_outputs = self.model.trainable_variables[-1].shape[0]
|
|
324
330
|
|
|
331
|
+
# Verifies if the optimizer is a dictionary
|
|
332
|
+
|
|
333
|
+
optimizer_name = None
|
|
334
|
+
|
|
335
|
+
optimizer_additional_info = {}
|
|
336
|
+
|
|
337
|
+
if isinstance(self.optimizer, dict):
|
|
338
|
+
|
|
339
|
+
# Verifies if there is a key for the optimizer's name
|
|
340
|
+
|
|
341
|
+
if "name" in self.optimizer:
|
|
342
|
+
|
|
343
|
+
# Gets the name
|
|
344
|
+
|
|
345
|
+
optimizer_name = self.optimizer["name"]
|
|
346
|
+
|
|
347
|
+
# Otherwise, throws an error
|
|
348
|
+
|
|
349
|
+
else:
|
|
350
|
+
|
|
351
|
+
raise KeyError("There is no key 'name' in the dictiona"+
|
|
352
|
+
"ry 'optimizer' in 'ModelCustomTraining'. The name mus"+
|
|
353
|
+
"t be provided to tell the optimization method")
|
|
354
|
+
|
|
355
|
+
# Copies all additional information
|
|
356
|
+
|
|
357
|
+
for key, value in self.optimizer.items():
|
|
358
|
+
|
|
359
|
+
# Excludes the key 'name'
|
|
360
|
+
|
|
361
|
+
if key!="name":
|
|
362
|
+
|
|
363
|
+
optimizer_additional_info[key] = value
|
|
364
|
+
|
|
365
|
+
# Verifies if the optimizer variable is a string
|
|
366
|
+
|
|
367
|
+
elif isinstance(self.optimizer, str):
|
|
368
|
+
|
|
369
|
+
# Copies the optimizer name
|
|
370
|
+
|
|
371
|
+
optimizer_name = str(self.optimizer)
|
|
372
|
+
|
|
373
|
+
# If an optimizer name was recovered, tracks if it is an optimi-
|
|
374
|
+
# zer native to Keras or native to scipy
|
|
375
|
+
|
|
376
|
+
if optimizer_name is not None:
|
|
377
|
+
|
|
378
|
+
# Verifies if it is from Keras
|
|
379
|
+
|
|
380
|
+
if hasattr(tf.keras.optimizers, optimizer_name):
|
|
381
|
+
|
|
382
|
+
# Sets the optimizer from Keras as an instance of the
|
|
383
|
+
# corresponding class
|
|
384
|
+
|
|
385
|
+
optimizer_class = getattr(tf.keras.optimizers,
|
|
386
|
+
optimizer_name)
|
|
387
|
+
|
|
388
|
+
# Verifies if the user-given parameters of the optimizer
|
|
389
|
+
# are consistent
|
|
390
|
+
|
|
391
|
+
verify_dictionary_as_function_argument(
|
|
392
|
+
optimizer_class.__init__, optimizer_additional_info,
|
|
393
|
+
list_of_arguments_not_to_be_verified=["self", "kwargs"])
|
|
394
|
+
|
|
395
|
+
# Sets the hyperparameters
|
|
396
|
+
|
|
397
|
+
self.optimizer = optimizer_class(
|
|
398
|
+
**optimizer_additional_info)
|
|
399
|
+
|
|
400
|
+
# Sets the training method as the wrapper for automatic
|
|
401
|
+
# differentiation and the keras optimizer
|
|
402
|
+
|
|
403
|
+
self.set_training = self.set_keras_training
|
|
404
|
+
|
|
405
|
+
# Sets the loss function as the one appropriate for Ke-
|
|
406
|
+
# ras optimizers
|
|
407
|
+
|
|
408
|
+
self.loss_function = self.loss_function_keras
|
|
409
|
+
|
|
410
|
+
# Sets the flag that tells if a scipy optimizer will be
|
|
411
|
+
# used to False
|
|
412
|
+
|
|
413
|
+
self.use_scipy_optimizer = False
|
|
414
|
+
|
|
415
|
+
# Verifies if it is a scipy method
|
|
416
|
+
|
|
417
|
+
else:
|
|
418
|
+
|
|
419
|
+
# Gets the optimization methods available at scipy
|
|
420
|
+
|
|
421
|
+
available_scipy_optimizers = getattr(_minimize,'MINIMI'+
|
|
422
|
+
'ZE_METHODS',{})
|
|
423
|
+
|
|
424
|
+
# Verifies if the given optimizer name is in the list of
|
|
425
|
+
# available methods
|
|
426
|
+
|
|
427
|
+
if not (optimizer_name.lower() in (
|
|
428
|
+
available_scipy_optimizers)):
|
|
429
|
+
|
|
430
|
+
# Gets the available methods in Keras
|
|
431
|
+
|
|
432
|
+
native_keras_optimizers = ""
|
|
433
|
+
|
|
434
|
+
for name, optimizer_object in inspect.getmembers(
|
|
435
|
+
tf.keras.optimizers):
|
|
436
|
+
|
|
437
|
+
if inspect.isclass(optimizer_object) and (
|
|
438
|
+
issubclass(optimizer_object,
|
|
439
|
+
tf.keras.optimizers.Optimizer)):
|
|
440
|
+
|
|
441
|
+
native_keras_optimizers += ("\n'"+str(name)+
|
|
442
|
+
"'")
|
|
443
|
+
|
|
444
|
+
# Gets the available methods in scipy
|
|
445
|
+
|
|
446
|
+
native_scipy_methods = ""
|
|
447
|
+
|
|
448
|
+
for name in available_scipy_optimizers:
|
|
449
|
+
|
|
450
|
+
native_scipy_methods += "\n'"+str(name)+"'"
|
|
451
|
+
|
|
452
|
+
raise NameError("'"+str(optimizer_name)+"' was not"+
|
|
453
|
+
" found in the native Keras' optimizers nor in the"+
|
|
454
|
+
" available optimizers at scipy. Check the availab"+
|
|
455
|
+
"le methods in Keras:\n"+native_keras_optimizers+
|
|
456
|
+
"\n\nand the methods available in scipy:\n"+
|
|
457
|
+
native_scipy_methods)
|
|
458
|
+
|
|
459
|
+
# Sets the method and the dictionary of additional in-
|
|
460
|
+
# formation
|
|
461
|
+
|
|
462
|
+
self.optimizer = optimizer_name.lower()
|
|
463
|
+
|
|
464
|
+
self.optimizer_additional_info = (
|
|
465
|
+
optimizer_additional_info)
|
|
466
|
+
|
|
467
|
+
# Sets the training method as the wrapper for scipy
|
|
468
|
+
|
|
469
|
+
self.set_training = self.set_scipy_training
|
|
470
|
+
|
|
471
|
+
# Sets the loss function as the one appropriate for sci-
|
|
472
|
+
# py using a flat tensor of trainable parameters of the
|
|
473
|
+
# model as input
|
|
474
|
+
|
|
475
|
+
self.loss_function = self.loss_function_scipy
|
|
476
|
+
|
|
477
|
+
# Sets the flag that tells if a scipy optimizer will be
|
|
478
|
+
# used to False
|
|
479
|
+
|
|
480
|
+
self.use_scipy_optimizer = True
|
|
481
|
+
|
|
482
|
+
# Otherwise, treats the given optimizer as a keras-native opti-
|
|
483
|
+
# mizer
|
|
484
|
+
|
|
485
|
+
else:
|
|
486
|
+
|
|
487
|
+
# Sets the training method as the wrapper for automatic dif-
|
|
488
|
+
# ferentiation and the keras optimizer
|
|
489
|
+
|
|
490
|
+
self.set_training = self.set_keras_training
|
|
491
|
+
|
|
492
|
+
# Sets the loss function as the one appropriate for Keras
|
|
493
|
+
# optimizers
|
|
494
|
+
|
|
495
|
+
self.loss_function = self.loss_function_keras
|
|
496
|
+
|
|
497
|
+
# Sets the flag that tells if a scipy optimizer will be used
|
|
498
|
+
# to False
|
|
499
|
+
|
|
500
|
+
self.use_scipy_optimizer = False
|
|
501
|
+
|
|
502
|
+
# If a scipy optimizer will be used, instantiates the class for
|
|
503
|
+
# the loss function and automatic differentiation, then takes
|
|
504
|
+
# the flat tensor of model parameters
|
|
505
|
+
|
|
506
|
+
if self.use_scipy_optimizer:
|
|
507
|
+
|
|
508
|
+
# Constructs a class to give the loss function, its gra-
|
|
509
|
+
# dient, and the instructions for parameters (weights and
|
|
510
|
+
# biases) flattening and reconstruction
|
|
511
|
+
|
|
512
|
+
self.loss_class, self.model_parameters = loss_tools.build_loss_gradient_varying_model_parameters(
|
|
513
|
+
self.model, self.loss_metric, self.training_input,
|
|
514
|
+
model_true_values=self.training_trueValues, verbose=verbose)
|
|
515
|
+
|
|
516
|
+
# Otherwise, initializes the flat tensor of model parameters as
|
|
517
|
+
# a None object
|
|
518
|
+
|
|
519
|
+
else:
|
|
520
|
+
|
|
521
|
+
self.model_parameters = None
|
|
522
|
+
|
|
325
523
|
# Defines a method to evaluate the hessian of each output neuron of
|
|
326
524
|
# the model
|
|
327
525
|
|
|
@@ -382,9 +580,24 @@ class ModelCustomTraining:
|
|
|
382
580
|
|
|
383
581
|
return hessian_matrices
|
|
384
582
|
|
|
385
|
-
# Defines a
|
|
583
|
+
# Defines a function to evaluate the loss function from the input
|
|
584
|
+
# proper for use with Keras' optimizers
|
|
386
585
|
|
|
387
|
-
|
|
586
|
+
@tf.function
|
|
587
|
+
def loss_function_keras(self):
|
|
588
|
+
|
|
589
|
+
# Gets the model response
|
|
590
|
+
|
|
591
|
+
y_training = self.model(self.training_input)
|
|
592
|
+
|
|
593
|
+
# Gets the loss value
|
|
594
|
+
|
|
595
|
+
return self.loss_metric(self.training_trueValues, y_training)
|
|
596
|
+
|
|
597
|
+
# Defines a method to evaluate the loss function given the trainable
|
|
598
|
+
# parameters as input
|
|
599
|
+
|
|
600
|
+
def loss_function_scipy(self):
|
|
388
601
|
|
|
389
602
|
# Gets the loss value and returns it
|
|
390
603
|
|
|
@@ -452,19 +665,91 @@ class ModelCustomTraining:
|
|
|
452
665
|
# Defines a method for training, it assembles the optimization pro-
|
|
453
666
|
# blem and runs it
|
|
454
667
|
|
|
455
|
-
def
|
|
668
|
+
def set_scipy_training(self, n_max_iterations):
|
|
669
|
+
|
|
670
|
+
# Updates the dictionary of options
|
|
671
|
+
|
|
672
|
+
self.optimizer_additional_info["maxiter"] = n_max_iterations
|
|
456
673
|
|
|
457
674
|
# Sets the minimization problem using the minimize class from
|
|
458
675
|
# scipy
|
|
459
676
|
|
|
460
677
|
minimization_problem = minimize(self.loss_class,
|
|
461
678
|
self.model_parameters, method=self.optimizer, jac=True, tol=
|
|
462
|
-
self.gradient_tolerance, options=
|
|
679
|
+
self.gradient_tolerance, options=self.optimizer_additional_info,
|
|
463
680
|
callback=self.callback)
|
|
464
681
|
|
|
465
682
|
# Updates the model parameters
|
|
466
683
|
|
|
467
684
|
self.model_parameters = minimization_problem.x
|
|
685
|
+
|
|
686
|
+
return None, None
|
|
687
|
+
|
|
688
|
+
# Defines a method for the train step using native keras optimizers
|
|
689
|
+
|
|
690
|
+
def set_keras_training(self, n_max_iterations):
|
|
691
|
+
|
|
692
|
+
# Initializes the last evaluations of loss and gradient vectors
|
|
693
|
+
|
|
694
|
+
loss_evaluation = None
|
|
695
|
+
|
|
696
|
+
gradient_evaluation = None
|
|
697
|
+
|
|
698
|
+
# Iterates through the maximum number of iterations
|
|
699
|
+
|
|
700
|
+
for i in range(n_max_iterations):
|
|
701
|
+
|
|
702
|
+
loss_evaluation, gradient_evaluation = self.keras_training_step()
|
|
703
|
+
|
|
704
|
+
# Evaluates the gradient's norm
|
|
705
|
+
|
|
706
|
+
gradient_norm = tf.linalg.global_norm(gradient_evaluation)
|
|
707
|
+
|
|
708
|
+
if gradient_norm.numpy()<=self.gradient_tolerance:
|
|
709
|
+
|
|
710
|
+
print("The gradient's norm has reached the value of "+
|
|
711
|
+
str(gradient_norm.numpy())+", which is less than the t"+
|
|
712
|
+
"hreshold of "+str(self.gradient_tolerance)+". Thus, s"+
|
|
713
|
+
"tops the optimization procedure at iteration "+str(i)+
|
|
714
|
+
"\n")
|
|
715
|
+
|
|
716
|
+
break
|
|
717
|
+
|
|
718
|
+
# Prints the callback
|
|
719
|
+
|
|
720
|
+
self.callback(None)
|
|
721
|
+
|
|
722
|
+
# Updates the flat tensor of trainable parameters from the upda-
|
|
723
|
+
# ted parameters of the model
|
|
724
|
+
|
|
725
|
+
self.model_parameters, _ = parameters_tools.model_parameters_to_flat_tensor_and_shapes(
|
|
726
|
+
self.model)
|
|
727
|
+
|
|
728
|
+
# Returns the last evaluations of the loss function and of the
|
|
729
|
+
# gradient vector
|
|
730
|
+
|
|
731
|
+
return loss_evaluation, gradient_evaluation
|
|
732
|
+
|
|
733
|
+
# Defines a function to compute a single training step using a nati-
|
|
734
|
+
# ve keras optimizer
|
|
735
|
+
|
|
736
|
+
@tf.function
|
|
737
|
+
def keras_training_step(self):
|
|
738
|
+
|
|
739
|
+
# Computes the gradient using automatic differentiation
|
|
740
|
+
|
|
741
|
+
with tf.GradientTape() as tape:
|
|
742
|
+
|
|
743
|
+
loss = self.loss_function_keras()
|
|
744
|
+
|
|
745
|
+
gradients = tape.gradient(loss, self.model.trainable_variables)
|
|
746
|
+
|
|
747
|
+
# Applies the gradient vector to the optimizer
|
|
748
|
+
|
|
749
|
+
self.optimizer.apply_gradients(zip(gradients,
|
|
750
|
+
self.model.trainable_variables))
|
|
751
|
+
|
|
752
|
+
return loss, gradients
|
|
468
753
|
|
|
469
754
|
# Defines a method for the optimization loop. But names it call so
|
|
470
755
|
# that it is called as soon as the class is created
|
|
@@ -475,8 +760,7 @@ class ModelCustomTraining:
|
|
|
475
760
|
|
|
476
761
|
start_time = time.time()
|
|
477
762
|
|
|
478
|
-
initial_loss = self.
|
|
479
|
-
self.model_parameters).numpy()
|
|
763
|
+
initial_loss = self.loss_function().numpy()
|
|
480
764
|
|
|
481
765
|
# Iterates through the optimization loop
|
|
482
766
|
|
|
@@ -516,18 +800,34 @@ class ModelCustomTraining:
|
|
|
516
800
|
# Calls the optimization procedure. Using the custom op-
|
|
517
801
|
# timizer
|
|
518
802
|
|
|
519
|
-
self.set_training(
|
|
803
|
+
loss_value, evaluated_gradient = self.set_training(
|
|
804
|
+
self.verbose_deltaIterations)
|
|
805
|
+
|
|
806
|
+
# If the loss value is None, it signifies that a custom
|
|
807
|
+
# optimizer was used and the loss function and gradient
|
|
808
|
+
# vector must be evaluated from the model parameters
|
|
809
|
+
|
|
810
|
+
if self.use_scipy_optimizer:
|
|
811
|
+
|
|
812
|
+
# Gets the loss function value and the gradient
|
|
813
|
+
|
|
814
|
+
loss_value = self.loss_function()
|
|
520
815
|
|
|
521
|
-
|
|
816
|
+
# Gets the gradient from the second position of the
|
|
817
|
+
# call method
|
|
522
818
|
|
|
523
|
-
|
|
524
|
-
|
|
819
|
+
evaluated_gradient = self.loss_class(
|
|
820
|
+
self.model_parameters)[1]
|
|
525
821
|
|
|
526
|
-
#
|
|
527
|
-
#
|
|
822
|
+
# If it is a Keras' optimizer, the gradient must be
|
|
823
|
+
# flattened
|
|
528
824
|
|
|
529
|
-
|
|
530
|
-
|
|
825
|
+
else:
|
|
826
|
+
|
|
827
|
+
evaluated_gradient = tf.concat([tf.reshape(tensor,
|
|
828
|
+
[-1]) for tensor in evaluated_gradient], axis=0)
|
|
829
|
+
|
|
830
|
+
# Gets the gradient norm
|
|
531
831
|
|
|
532
832
|
gradient_value = tf.norm(evaluated_gradient).numpy()
|
|
533
833
|
|
|
@@ -544,11 +844,11 @@ class ModelCustomTraining:
|
|
|
544
844
|
|
|
545
845
|
break
|
|
546
846
|
|
|
547
|
-
print("
|
|
548
|
-
+": loss="+format(loss_value.numpy(), '.5e')+
|
|
549
|
-
"
|
|
550
|
-
" norm divided by the square root of the
|
|
551
|
-
"
|
|
847
|
+
print("\nIteration group "+integer_toString(i,
|
|
848
|
+
max_digits)+": loss="+format(loss_value.numpy(), '.5e')+
|
|
849
|
+
", gradient norm: "+format(gradient_value, '.5e')+",\n"+
|
|
850
|
+
"gradient norm divided by the square root of the numbe"+
|
|
851
|
+
"r of trainable parameters: "+format(gradient_value/
|
|
552
852
|
self.number_trainable_parameters, '.5e')+"\nThe maximu"+
|
|
553
853
|
"m component of the gradient in absolute value is: "+
|
|
554
854
|
format(gradient_maximum_component, '.5e')+"\nThis cycl"+
|
|
@@ -573,8 +873,7 @@ class ModelCustomTraining:
|
|
|
573
873
|
|
|
574
874
|
# Gets the final loss function
|
|
575
875
|
|
|
576
|
-
final_loss = self.
|
|
577
|
-
self.model_parameters).numpy()
|
|
876
|
+
final_loss = self.loss_function().numpy()
|
|
578
877
|
|
|
579
878
|
print("\n#################################################"+
|
|
580
879
|
"#######################\n# Trainin"+
|
|
@@ -588,10 +887,13 @@ class ModelCustomTraining:
|
|
|
588
887
|
|
|
589
888
|
print("Training time: "+str(self.elapsed_time)+" seconds.\n")
|
|
590
889
|
|
|
591
|
-
# Gets the trained parameters and reassigns them to the model
|
|
890
|
+
# Gets the trained parameters and reassigns them to the model if
|
|
891
|
+
# the model was trained using optimizers from scipy
|
|
592
892
|
|
|
593
|
-
self.
|
|
594
|
-
|
|
893
|
+
if self.use_scipy_optimizer:
|
|
894
|
+
|
|
895
|
+
self.loss_class.model_output_given_parameters.update_model_parameters(
|
|
896
|
+
self.model, self.model_parameters)
|
|
595
897
|
|
|
596
898
|
# Saves the model automatically and returns it as well
|
|
597
899
|
|
|
@@ -645,7 +947,12 @@ class ModelCustomTraining:
|
|
|
645
947
|
|
|
646
948
|
for i in range(best_models_rank_size):
|
|
647
949
|
|
|
648
|
-
models_ranking_dict[i] = np.inf
|
|
950
|
+
models_ranking_dict[i+1] = np.inf
|
|
951
|
+
|
|
952
|
+
# Instantiates the class that prints information
|
|
953
|
+
|
|
954
|
+
print_class = PrintForLoopInfo(["Initializes the realization o"+
|
|
955
|
+
"f number "])
|
|
649
956
|
|
|
650
957
|
# Initializes a variable to store the elapsed time for training
|
|
651
958
|
# each model at each realization
|
|
@@ -657,6 +964,11 @@ class ModelCustomTraining:
|
|
|
657
964
|
for i in tqdm(range(n_realizations), desc="Training realizatio"+
|
|
658
965
|
"ns"):
|
|
659
966
|
|
|
967
|
+
# Prints information on terminal that tells that this reali-
|
|
968
|
+
# zatio is being initialized
|
|
969
|
+
|
|
970
|
+
print_class([i+1])
|
|
971
|
+
|
|
660
972
|
# Reinitializes the model parameters using the same initia-
|
|
661
973
|
# lizers that were assigned when the model was first created
|
|
662
974
|
|
|
@@ -703,13 +1015,11 @@ class ModelCustomTraining:
|
|
|
703
1015
|
# Iterates through the best ranking models to check if the
|
|
704
1016
|
# current one outperforms any of them
|
|
705
1017
|
|
|
706
|
-
for model_number in models_ranking_dict.
|
|
1018
|
+
for model_number, model_loss in models_ranking_dict.items():
|
|
707
1019
|
|
|
708
1020
|
# Gets the model loss and compares it to the loss value
|
|
709
1021
|
# of the current model
|
|
710
1022
|
|
|
711
|
-
model_loss = models_ranking_dict[model_number]
|
|
712
|
-
|
|
713
1023
|
if model_loss>training_loss:
|
|
714
1024
|
|
|
715
1025
|
# Deletes the worst performing model, which is the
|
|
@@ -734,8 +1044,8 @@ class ModelCustomTraining:
|
|
|
734
1044
|
|
|
735
1045
|
# And renames the model file
|
|
736
1046
|
|
|
737
|
-
path_tools.rename_file(str(j)+"_best_"+
|
|
738
|
-
model_base_name+".keras", str(j
|
|
1047
|
+
path_tools.rename_file(str(j-1)+"_best_"+
|
|
1048
|
+
model_base_name+".keras", str(j)+"_best_"+
|
|
739
1049
|
model_base_name+".keras", parent_path=
|
|
740
1050
|
self.parent_path, saving_function=
|
|
741
1051
|
self.model.save)
|
|
@@ -748,7 +1058,7 @@ class ModelCustomTraining:
|
|
|
748
1058
|
# Saves this model
|
|
749
1059
|
|
|
750
1060
|
path_tools.rename_file(self.save_model_file, str(
|
|
751
|
-
model_number
|
|
1061
|
+
model_number)+"_best_"+model_base_name+".keras",
|
|
752
1062
|
saving_function=self.model.save)
|
|
753
1063
|
|
|
754
1064
|
# Breaks the loop
|