Davout 0.1.1.dev167__tar.gz → 0.1.1.dev169__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. {davout-0.1.1.dev167/source/Davout.egg-info → davout-0.1.1.dev169}/PKG-INFO +3 -3
  2. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/README.md +2 -2
  3. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/pyproject.toml +1 -1
  4. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/neural_network_trainer.py +1 -1
  5. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/training_tools.py +353 -50
  6. davout-0.1.1.dev169/source/Davout/PythonicUtilities/function_tools.py +174 -0
  7. davout-0.1.1.dev169/source/Davout/PythonicUtilities/user_interaction_tools.py +296 -0
  8. {davout-0.1.1.dev167 → davout-0.1.1.dev169/source/Davout.egg-info}/PKG-INFO +3 -3
  9. davout-0.1.1.dev167/source/Davout/PythonicUtilities/function_tools.py +0 -91
  10. davout-0.1.1.dev167/source/Davout/PythonicUtilities/user_interaction_tools.py +0 -120
  11. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/LICENSE +0 -0
  12. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/setup.cfg +0 -0
  13. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/setup.py +0 -0
  14. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/__init__.py +0 -0
  15. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/__init__.py +0 -0
  16. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/non_transfinite/RVE_artery.py +0 -0
  17. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/non_transfinite/RVE_matrix_with_fiber.py +0 -0
  18. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/non_transfinite/__init__.py +0 -0
  19. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/non_transfinite/elastin_fiber_creator.py +0 -0
  20. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/RVE_artery_transfinite.py +0 -0
  21. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/RVE_matrix_with_fiber_transfinite.py +0 -0
  22. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/__init__.py +0 -0
  23. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/elastin_fiber_creator.py +0 -0
  24. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/RVEs/transfinite/spherical_RVE.py +0 -0
  25. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/__init__.py +0 -0
  26. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/artery/artery_macroscale.py +0 -0
  27. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/artery/artery_macroscale_ellipsoid.py +0 -0
  28. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/micropolar_meshes/__init__.py +0 -0
  29. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/micropolar_meshes/beam_micropolar_case_1.py +0 -0
  30. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/periodic_meshes/__init__.py +0 -0
  31. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/periodic_meshes/artery_parameters.py +0 -0
  32. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/periodic_meshes/fiber_matrix_parameters.py +0 -0
  33. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/periodic_meshes/periodic_structure.py +0 -0
  34. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/solids/__init__.py +0 -0
  35. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/solids/intervertebral_disc.py +0 -0
  36. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/aa_tests/solids/whole_ensemble_of_geometries.py +0 -0
  37. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/solids/__init__.py +0 -0
  38. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/solids/cuboid_cylinders.py +0 -0
  39. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/solids/cuboid_ellipsoids.py +0 -0
  40. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/solids/cuboid_generator.py +0 -0
  41. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/solids/cuboid_helicoids.py +0 -0
  42. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/solids/cuboid_prisms.py +0 -0
  43. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/tool_box/__init__.py +0 -0
  44. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/tool_box/geometric_tools.py +0 -0
  45. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/tool_box/mesh_data_retriever.py +0 -0
  46. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/tool_box/meshing_tools.py +0 -0
  47. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/tool_box/region_finder.py +0 -0
  48. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/CuboidGmsh/tool_box/verification_tools.py +0 -0
  49. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/PINNs/Physics/__init__.py +0 -0
  50. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/PINNs/Physics/elasticity_equation.py +0 -0
  51. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/PINNs/__init__.py +0 -0
  52. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/__init__.py +0 -0
  53. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/SVD_framework/box_with_imposed_displacement_gradient.py +0 -0
  54. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/SVD_framework/box_with_young_modulus_field.py +0 -0
  55. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/SVD_framework/dataset_generator.py +0 -0
  56. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/SVD_framework/input_data_filler.py +0 -0
  57. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/SVD_framework/kinematics_surrogate_model.py +0 -0
  58. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/SVD_framework/young_modulus_field_generator.py +0 -0
  59. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/heat_equation.py +0 -0
  60. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/box_with_imposed_displacement_gradient.py +0 -0
  61. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/box_with_young_modulus_field.py +0 -0
  62. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/dataset_generator.py +0 -0
  63. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/input_data_filler.py +0 -0
  64. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/mecsol_2026_quotient_space/young_modulus_field_generator.py +0 -0
  65. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_ANN_optimization.py +0 -0
  66. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_ANN_tools.py +0 -0
  67. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_SVD_based_NNs.py +0 -0
  68. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_SVD_tools.py +0 -0
  69. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_convex_and_partially_convex_input_NNs.py +0 -0
  70. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_math_tools.py +0 -0
  71. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_quotient_space_NNs.py +0 -0
  72. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/aa_tests/tests_tool_box/test_tensor_tools.py +0 -0
  73. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/custom_architectures/SVD_quotient_space.py +0 -0
  74. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/custom_architectures/__init__.py +0 -0
  75. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/custom_architectures/convexity_concerned_NNs.py +0 -0
  76. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/custom_architectures/gated_quotient_space.py +0 -0
  77. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/custom_architectures/generic_feed_forward.py +0 -0
  78. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/ANN_tools.py +0 -0
  79. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/SVD_tools.py +0 -0
  80. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/__init__.py +0 -0
  81. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/activation_function_utilities.py +0 -0
  82. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/custom_activation_functions.py +0 -0
  83. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/differentiation_tools.py +0 -0
  84. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/loss_assembler_classes.py +0 -0
  85. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/loss_tools.py +0 -0
  86. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/math_tools.py +0 -0
  87. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/numerical_tools.py +0 -0
  88. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/parameters_tools.py +0 -0
  89. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/DeepMech/tool_box/tensor_tools.py +0 -0
  90. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/__init__.py +0 -0
  91. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/REPL_experiments.py +0 -0
  92. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/__init__.py +0 -0
  93. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/optimization/__init__.py +0 -0
  94. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/optimization/tests_optimization_methods.py +0 -0
  95. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/tests_batching.py +0 -0
  96. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/tests_finite_elements.py +0 -0
  97. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/tests_loss_function.py +0 -0
  98. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/tests_physics.py +0 -0
  99. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/unidimensional/__init__.py +0 -0
  100. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/unidimensional/bar_fea.py +0 -0
  101. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/unidimensional/hyperelastic_1D_energies.py +0 -0
  102. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/aa_tests/unidimensional/variational_tools.py +0 -0
  103. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/assembly/__init__.py +0 -0
  104. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/assembly/body_forces_work.py +0 -0
  105. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/assembly/dirichlet_boundary_conditions_enforcer.py +0 -0
  106. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/assembly/hyperelastic_internal_work.py +0 -0
  107. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/assembly/surface_forces_work.py +0 -0
  108. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/constitutive_models/__init__.py +0 -0
  109. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/constitutive_models/hyperelastic_isotropic_models.py +0 -0
  110. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/finite_elements/__init__.py +0 -0
  111. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/finite_elements/elements_manager.py +0 -0
  112. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/finite_elements/finite_element_dispatcher.py +0 -0
  113. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/finite_elements/surface_elements/__init__.py +0 -0
  114. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/finite_elements/surface_elements/triangles.py +0 -0
  115. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/finite_elements/volume_elements/__init__.py +0 -0
  116. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/finite_elements/volume_elements/tetrahedrons.py +0 -0
  117. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/optimization/__init__.py +0 -0
  118. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/optimization/conditioning_matrices.py +0 -0
  119. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/optimization/loss_functions.py +0 -0
  120. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/optimization/neural_network_assembler.py +0 -0
  121. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/optimization/objective_function.py +0 -0
  122. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/physics/compressible_cauchy_hyperelasticy.py +0 -0
  123. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/__init__.py +0 -0
  124. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/constitutive_tools.py +0 -0
  125. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/dirichlet_loading_tools.py +0 -0
  126. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/math_tools.py +0 -0
  127. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/mesh_info_tools.py +0 -0
  128. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/mesh_tools.py +0 -0
  129. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/neumann_loading_tools.py +0 -0
  130. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/node_ordering.py +0 -0
  131. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/optimization_tools.py +0 -0
  132. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/parametric_curves_tools.py +0 -0
  133. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/sensitivity_tools.py +0 -0
  134. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/FENN/tool_box/tensorflow_utilities.py +0 -0
  135. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/__init__.py +0 -0
  136. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/__init__.py +0 -0
  137. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/cauchy_tetrahedron.py +0 -0
  138. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/continuum_mechanics_potato_collage.py +0 -0
  139. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/fake_book_spines.py +0 -0
  140. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/null_space_architecture.py +0 -0
  141. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/strain_tensors.py +0 -0
  142. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/tests_collage_tools.py +0 -0
  143. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/tests_delaunay.py +0 -0
  144. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/tests_paraview_tools.py +0 -0
  145. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/aa_tests/tests_plotting_tools.py +0 -0
  146. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/collage_tools.py +0 -0
  147. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/paraview_tools.py +0 -0
  148. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/plotting_tools.py +0 -0
  149. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/__init__.py +0 -0
  150. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/arrows_lines_tools.py +0 -0
  151. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/box_and_markers_classes.py +0 -0
  152. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/box_tools.py +0 -0
  153. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/collage_classes.py +0 -0
  154. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/curves_setter.py +0 -0
  155. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/image_tools.py +0 -0
  156. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/interactivity_tools.py +0 -0
  157. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/paraview_scripts.py +0 -0
  158. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/perspective_tools.py +0 -0
  159. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/GraphUtilities/tool_box/text_excerpt_tools.py +0 -0
  160. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/LaTeXUtilities.sty +0 -0
  161. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/__init__.py +0 -0
  162. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/aa_tests/__init__.py +0 -0
  163. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/aa_tests/latex_parser_tests.py +0 -0
  164. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/latex_parser.py +0 -0
  165. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/tool_box/__init__.py +0 -0
  166. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/tool_box/command_tools.py +0 -0
  167. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/tool_box/parsing_tools.py +0 -0
  168. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/LaTeXUtilities/tool_box/sty_file_tools.py +0 -0
  169. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/__init__.py +0 -0
  170. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/heat_transfer/heat_box.py +0 -0
  171. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/beam_with_fibers.py +0 -0
  172. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/box_with_young_modulus_field.py +0 -0
  173. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/disc_HGO.py +0 -0
  174. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/disc_neo_hookean.py +0 -0
  175. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/disc_neo_hookean_incompressible.py +0 -0
  176. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/hyperelastic_box.py +0 -0
  177. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/incompressible_hyperelastic_box.py +0 -0
  178. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/intervertebral_disc/cylindrical_coordinates_material_property.py +0 -0
  179. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/intervertebral_disc/disc_HGO.py +0 -0
  180. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/intervertebral_disc/local_coordinate_system_generation.py +0 -0
  181. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/parallel_hyperelastic_box.py +0 -0
  182. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/parallel_incompressible_box.py +0 -0
  183. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/read_dofs_in_volume.py +0 -0
  184. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/hyperelasticity/young_modulus_field.py +0 -0
  185. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/bending_case/beam_with_fibers_macroscale.py +0 -0
  186. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/bending_case/beam_with_fibers_microscale.py +0 -0
  187. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/deformation_laboratory/microscale_deformation_lab.py +0 -0
  188. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/disc_micropolar_neo_hookean.py +0 -0
  189. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Bauer_et_al/beam.py +0 -0
  190. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Bauer_et_al/beam_neo_hookean.py +0 -0
  191. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Bauer_et_al/beam_neo_hookean_pure_dolfin.py +0 -0
  192. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Bauer_et_al/beam_neo_hookean_pure_dolfin_old.py +0 -0
  193. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/Suh_et_al/suh_implementation.py +0 -0
  194. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/micropolar_with_homogenization.py +0 -0
  195. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/micropolar_with_homogenization_original.py +0 -0
  196. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/tools_homogenization.py +0 -0
  197. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/old_tests/tools_io.py +0 -0
  198. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/stress_plots.py +0 -0
  199. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/tangent_operators/numerical_differentiation.py +0 -0
  200. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/tangent_operators/numerical_differentiation_second_elasticity_tensor.py +0 -0
  201. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/tangent_operators/tangent_operator_plotter.py +0 -0
  202. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/torsion_case/beam_with_fibers_macroscale.py +0 -0
  203. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/torsion_case/beam_with_fibers_microscale.py +0 -0
  204. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/traction_case/beam_with_fibers_macroscale.py +0 -0
  205. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/micropolar/traction_case/beam_with_fibers_microscale.py +0 -0
  206. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/curve_fitting.py +0 -0
  207. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/cylindrical_coordinates_field.py +0 -0
  208. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/cylindrical_coordinates_material_property.py +0 -0
  209. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/elasticity_tensor.py +0 -0
  210. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/incompressible.py +0 -0
  211. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/linear_expression_test.py +0 -0
  212. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/petsc_2D.py +0 -0
  213. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/test_periodic.py +0 -0
  214. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/test_periodic_class.py +0 -0
  215. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/test_shifted_field.py +0 -0
  216. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/teste_afim.py +0 -0
  217. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/minimal_working_examples_forum/working_example_dictionaries.py +0 -0
  218. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/multiscale/hyperelasticity/beam_with_fibers_microscale.py +0 -0
  219. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/physics_prototypes/compressible_hyperelasticity.py +0 -0
  220. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/physics_prototypes/incompressible_hyperelasticity.py +0 -0
  221. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/test_meshes/beam_gmsh.py +0 -0
  222. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/test_meshes_paths.py +0 -0
  223. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/aa_tests_and_examples/various_physics_tests.py +0 -0
  224. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/constitutive_models/__init__.py +0 -0
  225. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/constitutive_models/heat_transfer/isotropic_heat_conduction.py +0 -0
  226. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/constitutive_models/hyperelasticity/__init__.py +0 -0
  227. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/constitutive_models/hyperelasticity/anisotropic_hyperelasticity.py +0 -0
  228. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/constitutive_models/hyperelasticity/isotropic_hyperelasticity.py +0 -0
  229. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/constitutive_models/hyperelasticity/micropolar_hyperelasticity.py +0 -0
  230. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/multiscale/__init__.py +0 -0
  231. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/multiscale/multiscale_boundary_conditions/__init__.py +0 -0
  232. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/multiscale/multiscale_boundary_conditions/multiscale_classes.py +0 -0
  233. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/multiscale/multiscale_boundary_conditions/multiscale_expressions.py +0 -0
  234. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/multiscale/multiscale_hyperelasticity.py +0 -0
  235. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/multiscale/multiscale_micropolar.py +0 -0
  236. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/physics/__init__.py +0 -0
  237. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/physics/hyperelastic_cauchy_continuum.py +0 -0
  238. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/physics/hyperelastic_incompressible_cauchy_continuum.py +0 -0
  239. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/physics/hyperelastic_micropolar_continuum.py +0 -0
  240. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/physics/steady_state_heat_transfer.py +0 -0
  241. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/post_processes/__init__.py +0 -0
  242. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/post_processes/post_processes_classes.py +0 -0
  243. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/post_processes/post_processes_functions.py +0 -0
  244. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/__init__.py +0 -0
  245. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/binary_tools.py +0 -0
  246. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/body_forces_loading_tools.py +0 -0
  247. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/boundary_conditions_tools.py +0 -0
  248. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/constitutive_tools.py +0 -0
  249. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/dirichlet_load_tools.py +0 -0
  250. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/expressions_tools.py +0 -0
  251. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/functional_tools.py +0 -0
  252. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/homogenization_tools.py +0 -0
  253. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/mesh_handling_tools.py +0 -0
  254. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/multiscale_boundary_conditions_tools.py +0 -0
  255. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/numerical_tools.py +0 -0
  256. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/parallelization_tools.py +0 -0
  257. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/post_processing_tools.py +0 -0
  258. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/pseudotime_stepping_tools.py +0 -0
  259. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/read_write_tools.py +0 -0
  260. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/surface_loading_tools.py +0 -0
  261. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/tensor_tools.py +0 -0
  262. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/variational_tools.py +0 -0
  263. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/MultiMech/tool_box/weak_boundary_conditions_tools.py +0 -0
  264. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/__init__.py +0 -0
  265. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/aa_tests/__init__.py +0 -0
  266. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/aa_tests/tests_template.py +0 -0
  267. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/aa_tests/txt_tests.py +0 -0
  268. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/coordinate_systems_tools.py +0 -0
  269. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/dictionary_tools.py +0 -0
  270. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/file_handling_tools.py +0 -0
  271. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/fonts/CMU_Serif_Roman.ttf +0 -0
  272. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/interpolation_tools.py +0 -0
  273. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/math_experiments.py +0 -0
  274. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/numpy_tools.py +0 -0
  275. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/package_tools.py +0 -0
  276. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/path_tools.py +0 -0
  277. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/programming_tools.py +0 -0
  278. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/recursion_tools.py +0 -0
  279. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/string_tools.py +0 -0
  280. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/tensor_and_math_tools.py +0 -0
  281. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/PythonicUtilities/testing_tools.py +0 -0
  282. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/StochasticUtilities/__init__.py +0 -0
  283. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/StochasticUtilities/aa_tests/__init__.py +0 -0
  284. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/StochasticUtilities/aa_tests/test_delaunay_tools.py +0 -0
  285. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/StochasticUtilities/domain_decomposition/__init__.py +0 -0
  286. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/StochasticUtilities/tool_box/__init__.py +0 -0
  287. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/StochasticUtilities/tool_box/delaunay_tools.py +0 -0
  288. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/StochasticUtilities/tool_box/sampling_tools.py +0 -0
  289. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/StochasticUtilities/tool_box/statistics_tools.py +0 -0
  290. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout/__init__.py +0 -0
  291. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout.egg-info/SOURCES.txt +0 -0
  292. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout.egg-info/dependency_links.txt +0 -0
  293. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/source/Davout.egg-info/requires.txt +0 -0
  294. {davout-0.1.1.dev167 → davout-0.1.1.dev169}/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.dev167
3
+ Version: 0.1.1.dev169
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/blob/main/introduction_to_python_programming.pdf
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/blob/main/introduction_to_continuum_mechanics.pdf
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/blob/main/introduction_to_python_programming.pdf
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/blob/main/introduction_to_continuum_mechanics.pdf
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
 
@@ -63,7 +63,7 @@ build-backend = "setuptools.build_meta"
63
63
 
64
64
  [project]
65
65
  name = "Davout"
66
- version = "0.1.1.dev167"
66
+ version = "0.1.1.dev169"
67
67
  description = "Scientific computing utilities combining FEM, ANN and tooling"
68
68
  readme = "README.md"
69
69
  authors = [
@@ -515,7 +515,7 @@ if __name__=="__main__":
515
515
 
516
516
  n_best_samples = 10
517
517
 
518
- training_flag = False
518
+ training_flag = True
519
519
 
520
520
  test_flag = False
521
521
 
@@ -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
- float_type=tf.float32, verbose_deltaIterations=100, verbose=False,
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, tf.linalg.global_norm(gradients)
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, gradient_norm = self.train_step()
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,190 @@ 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
+
394
+ # Sets the hyperparameters
395
+
396
+ self.optimizer = optimizer_class(
397
+ **optimizer_additional_info)
398
+
399
+ # Sets the training method as the wrapper for automatic
400
+ # differentiation and the keras optimizer
401
+
402
+ self.set_training = self.set_keras_training
403
+
404
+ # Sets the loss function as the one appropriate for Ke-
405
+ # ras optimizers
406
+
407
+ self.loss_function = self.loss_function_keras
408
+
409
+ # Sets the flag that tells if a scipy optimizer will be
410
+ # used to False
411
+
412
+ self.use_scipy_optimizer = False
413
+
414
+ # Verifies if it is a scipy method
415
+
416
+ else:
417
+
418
+ # Gets the optimization methods available at scipy
419
+
420
+ available_scipy_optimizers = getattr(_minimize,'MINIMI'+
421
+ 'ZE_METHODS',{})
422
+
423
+ # Verifies if the given optimizer name is in the list of
424
+ # available methods
425
+
426
+ if not (optimizer_name.lower() in (
427
+ available_scipy_optimizers)):
428
+
429
+ # Gets the available methods in Keras
430
+
431
+ native_keras_optimizers = ""
432
+
433
+ for name, optimizer_object in inspect.getmembers(
434
+ tf.keras.optimizers):
435
+
436
+ if inspect.isclass(optimizer_object) and (
437
+ issubclass(optimizer_object,
438
+ tf.keras.optimizers.Optimizer)):
439
+
440
+ native_keras_optimizers += ("\n'"+str(name)+
441
+ "'")
442
+
443
+ # Gets the available methods in scipy
444
+
445
+ native_scipy_methods = ""
446
+
447
+ for name in available_scipy_optimizers:
448
+
449
+ native_scipy_methods += "\n'"+str(name)+"'"
450
+
451
+ raise NameError("'"+str(optimizer_name)+"' was not"+
452
+ " found in the native Keras' optimizers nor in the"+
453
+ " available optimizers at scipy. Check the availab"+
454
+ "le methods in Keras:\n"+native_keras_optimizers+
455
+ "\n\nand the methods available in scipy:\n"+
456
+ native_scipy_methods)
457
+
458
+ # Sets the method and the dictionary of additional in-
459
+ # formation
460
+
461
+ self.optimizer = optimizer_name.lower()
462
+
463
+ self.optimizer_additional_info = (
464
+ optimizer_additional_info)
465
+
466
+ # Sets the training method as the wrapper for scipy
467
+
468
+ self.set_training = self.set_scipy_training
469
+
470
+ # Sets the loss function as the one appropriate for sci-
471
+ # py using a flat tensor of trainable parameters of the
472
+ # model as input
473
+
474
+ self.loss_function = self.loss_function_scipy
475
+
476
+ # Sets the flag that tells if a scipy optimizer will be
477
+ # used to False
478
+
479
+ self.use_scipy_optimizer = True
480
+
481
+ # Otherwise, treats the given optimizer as a keras-native opti-
482
+ # mizer
483
+
484
+ else:
485
+
486
+ # Sets the training method as the wrapper for automatic dif-
487
+ # ferentiation and the keras optimizer
488
+
489
+ self.set_training = self.set_keras_training
490
+
491
+ # Sets the loss function as the one appropriate for Keras
492
+ # optimizers
493
+
494
+ self.loss_function = self.loss_function_keras
495
+
496
+ # Sets the flag that tells if a scipy optimizer will be used
497
+ # to False
498
+
499
+ self.use_scipy_optimizer = False
500
+
501
+ # If a scipy optimizer will be used, instantiates the class for
502
+ # the loss function and automatic differentiation, then takes
503
+ # the flat tensor of model parameters
504
+
505
+ if self.use_scipy_optimizer:
506
+
507
+ # Constructs a class to give the loss function, its gra-
508
+ # dient, and the instructions for parameters (weights and
509
+ # biases) flattening and reconstruction
510
+
511
+ self.loss_class, self.model_parameters = loss_tools.build_loss_gradient_varying_model_parameters(
512
+ self.model, self.loss_metric, self.training_input,
513
+ model_true_values=self.training_trueValues, verbose=verbose)
514
+
325
515
  # Defines a method to evaluate the hessian of each output neuron of
326
516
  # the model
327
517
 
@@ -382,14 +572,29 @@ class ModelCustomTraining:
382
572
 
383
573
  return hessian_matrices
384
574
 
385
- # Defines a method to evaluate the loss function
575
+ # Defines a function to evaluate the loss function from the input
576
+ # proper for use with Keras' optimizers
386
577
 
387
- def loss_function(self):
578
+ @tf.function
579
+ def loss_function_keras(self, model_parameters):
580
+
581
+ # Gets the model response
582
+
583
+ y_training = self.model(self.training_input)
584
+
585
+ # Gets the loss value
586
+
587
+ return self.loss_metric(self.training_trueValues, y_training)
588
+
589
+ # Defines a method to evaluate the loss function given the trainable
590
+ # parameters as input
591
+
592
+ def loss_function_scipy(self, model_parameters):
388
593
 
389
594
  # Gets the loss value and returns it
390
595
 
391
596
  return self.loss_class.evaluate_scalar_function(
392
- self.model_parameters)
597
+ model_parameters)
393
598
 
394
599
  # Defines a function to evaluate the loss function on other sets of
395
600
  # data
@@ -452,19 +657,91 @@ class ModelCustomTraining:
452
657
  # Defines a method for training, it assembles the optimization pro-
453
658
  # blem and runs it
454
659
 
455
- def set_training(self, n_max_iterations):
660
+ def set_scipy_training(self, n_max_iterations):
661
+
662
+ # Updates the dictionary of options
663
+
664
+ self.optimizer_additional_info["maxiter"] = n_max_iterations
456
665
 
457
666
  # Sets the minimization problem using the minimize class from
458
667
  # scipy
459
668
 
460
669
  minimization_problem = minimize(self.loss_class,
461
670
  self.model_parameters, method=self.optimizer, jac=True, tol=
462
- self.gradient_tolerance, options={"maxiter": n_max_iterations},
671
+ self.gradient_tolerance, options=self.optimizer_additional_info,
463
672
  callback=self.callback)
464
673
 
465
674
  # Updates the model parameters
466
675
 
467
676
  self.model_parameters = minimization_problem.x
677
+
678
+ return None, None
679
+
680
+ # Defines a method for the train step using native keras optimizers
681
+
682
+ def set_keras_training(self, n_max_iterations):
683
+
684
+ # Initializes the last evaluations of loss and gradient vectors
685
+
686
+ loss_evaluation = None
687
+
688
+ gradient_evaluation = None
689
+
690
+ # Iterates through the maximum number of iterations
691
+
692
+ for i in range(n_max_iterations):
693
+
694
+ loss_evaluation, gradient_evaluation = self.keras_training_step()
695
+
696
+ # Evaluates the gradient's norm
697
+
698
+ gradient_norm = tf.linalg.global_norm(gradient_evaluation)
699
+
700
+ if gradient_norm.numpy()<=self.gradient_tolerance:
701
+
702
+ print("The gradient's norm has reached the value of "+
703
+ str(gradient_norm.numpy())+", which is less than the t"+
704
+ "hreshold of "+str(self.gradient_tolerance)+". Thus, s"+
705
+ "tops the optimization procedure at iteration "+str(i)+
706
+ "\n")
707
+
708
+ break
709
+
710
+ # Prints the callback
711
+
712
+ self.callback(None)
713
+
714
+ # Updates the flat tensor of trainable parameters from the upda-
715
+ # ted parameters of the model
716
+
717
+ self.model_parameters, _ = parameters_tools.model_parameters_to_flat_tensor_and_shapes(
718
+ self.model)
719
+
720
+ # Returns the last evaluations of the loss function and of the
721
+ # gradient vector
722
+
723
+ return loss_evaluation, gradient_evaluation
724
+
725
+ # Defines a function to compute a single training step using a nati-
726
+ # ve keras optimizer
727
+
728
+ @tf.function
729
+ def keras_training_step(self):
730
+
731
+ # Computes the gradient using automatic differentiation
732
+
733
+ with tf.GradientTape() as tape:
734
+
735
+ loss = self.loss_function_keras()
736
+
737
+ gradients = tape.gradient(loss, self.model.trainable_variables)
738
+
739
+ # Applies the gradient vector to the optimizer
740
+
741
+ self.optimizer.apply_gradients(zip(gradients,
742
+ self.model.trainable_variables))
743
+
744
+ return loss, gradients
468
745
 
469
746
  # Defines a method for the optimization loop. But names it call so
470
747
  # that it is called as soon as the class is created
@@ -475,8 +752,7 @@ class ModelCustomTraining:
475
752
 
476
753
  start_time = time.time()
477
754
 
478
- initial_loss = self.loss_class.evaluate_scalar_function(
479
- self.model_parameters).numpy()
755
+ initial_loss = self.loss_function(self.model_parameters).numpy()
480
756
 
481
757
  # Iterates through the optimization loop
482
758
 
@@ -516,18 +792,32 @@ class ModelCustomTraining:
516
792
  # Calls the optimization procedure. Using the custom op-
517
793
  # timizer
518
794
 
519
- self.set_training(self.verbose_deltaIterations)
795
+ loss_value, evaluated_gradient = self.set_training(
796
+ self.verbose_deltaIterations)
797
+
798
+ # If the loss value is None, it signifies that a custom
799
+ # optimizer was used and the loss function and gradient
800
+ # vector must be evaluated from the model parameters
801
+
802
+ if self.use_scipy_optimizer:
520
803
 
521
- # Gets the loss function value and the gradient
804
+ # Gets the loss function value and the gradient
522
805
 
523
- loss_value = self.loss_class.evaluate_scalar_function(
524
- self.model_parameters)
806
+ loss_value = self.loss_function(
807
+ self.model_parameters)
525
808
 
526
- # Gets the gradient from the second position of the call
527
- # method
809
+ # Gets the gradient from the second position of the
810
+ # call method
528
811
 
529
- gradient_value = tf.norm(self.loss_class(
530
- self.model_parameters)[1]).numpy()
812
+ evaluated_gradient = self.loss_class(
813
+ self.model_parameters)[1]
814
+
815
+ # Gets the gradient norm
816
+
817
+ gradient_value = tf.norm(evaluated_gradient).numpy()
818
+
819
+ gradient_maximum_component = tf.reduce_max(
820
+ tf.abs(evaluated_gradient)).numpy()
531
821
 
532
822
  if gradient_value<=self.gradient_tolerance:
533
823
 
@@ -539,14 +829,16 @@ class ModelCustomTraining:
539
829
 
540
830
  break
541
831
 
542
- print("Iteration group "+integer_toString(i, max_digits)
543
- +": loss="+format(loss_value.numpy(), '.5e')+", gradie"+
544
- "nt norm: "+format(gradient_value, '.5e')+", gradient "+
545
- "norm divided by the square root of the number of trai"+
546
- "nable parameters: "+format(gradient_value/
547
- self.number_trainable_parameters, '.5e')+"\nThis cycle"+
548
- " took "+str(time.time()-self.initial_time)+" to compl"+
549
- "ete\n")
832
+ print("\nIteration group "+integer_toString(i,
833
+ max_digits)+": loss="+format(loss_value.numpy(), '.5e')+
834
+ ", gradient norm: "+format(gradient_value, '.5e')+",\n"+
835
+ "gradient norm divided by the square root of the numbe"+
836
+ "r of trainable parameters: "+format(gradient_value/
837
+ self.number_trainable_parameters, '.5e')+"\nThe maximu"+
838
+ "m component of the gradient in absolute value is: "+
839
+ format(gradient_maximum_component, '.5e')+"\nThis cycl"+
840
+ "e took "+str(time.time()-self.initial_time)+" to comp"+
841
+ "lete\n")
550
842
 
551
843
  # Otherwise, just call the training function
552
844
 
@@ -566,8 +858,8 @@ class ModelCustomTraining:
566
858
 
567
859
  # Gets the final loss function
568
860
 
569
- final_loss = self.loss_class.evaluate_scalar_function(
570
- self.model_parameters).numpy()
861
+ final_loss = self.loss_function(self.model_parameters
862
+ ).numpy()
571
863
 
572
864
  print("\n#################################################"+
573
865
  "#######################\n# Trainin"+
@@ -581,10 +873,13 @@ class ModelCustomTraining:
581
873
 
582
874
  print("Training time: "+str(self.elapsed_time)+" seconds.\n")
583
875
 
584
- # Gets the trained parameters and reassigns them to the model
876
+ # Gets the trained parameters and reassigns them to the model if
877
+ # the model was trained using optimizers from scipy
585
878
 
586
- self.loss_class.model_output_given_parameters.update_model_parameters(
587
- self.model, self.model_parameters)
879
+ if self.use_scipy_optimizer:
880
+
881
+ self.loss_class.model_output_given_parameters.update_model_parameters(
882
+ self.model, self.model_parameters)
588
883
 
589
884
  # Saves the model automatically and returns it as well
590
885
 
@@ -638,7 +933,12 @@ class ModelCustomTraining:
638
933
 
639
934
  for i in range(best_models_rank_size):
640
935
 
641
- models_ranking_dict[i] = np.inf
936
+ models_ranking_dict[i+1] = np.inf
937
+
938
+ # Instantiates the class that prints information
939
+
940
+ print_class = PrintForLoopInfo(["Initializes the realization o"+
941
+ "f number "])
642
942
 
643
943
  # Initializes a variable to store the elapsed time for training
644
944
  # each model at each realization
@@ -650,6 +950,11 @@ class ModelCustomTraining:
650
950
  for i in tqdm(range(n_realizations), desc="Training realizatio"+
651
951
  "ns"):
652
952
 
953
+ # Prints information on terminal that tells that this reali-
954
+ # zatio is being initialized
955
+
956
+ print_class([i+1])
957
+
653
958
  # Reinitializes the model parameters using the same initia-
654
959
  # lizers that were assigned when the model was first created
655
960
 
@@ -696,13 +1001,11 @@ class ModelCustomTraining:
696
1001
  # Iterates through the best ranking models to check if the
697
1002
  # current one outperforms any of them
698
1003
 
699
- for model_number in models_ranking_dict.keys():
1004
+ for model_number, model_loss in models_ranking_dict.items():
700
1005
 
701
1006
  # Gets the model loss and compares it to the loss value
702
1007
  # of the current model
703
1008
 
704
- model_loss = models_ranking_dict[model_number]
705
-
706
1009
  if model_loss>training_loss:
707
1010
 
708
1011
  # Deletes the worst performing model, which is the
@@ -727,8 +1030,8 @@ class ModelCustomTraining:
727
1030
 
728
1031
  # And renames the model file
729
1032
 
730
- path_tools.rename_file(str(j)+"_best_"+
731
- model_base_name+".keras", str(j+1)+"_best_"+
1033
+ path_tools.rename_file(str(j-1)+"_best_"+
1034
+ model_base_name+".keras", str(j)+"_best_"+
732
1035
  model_base_name+".keras", parent_path=
733
1036
  self.parent_path, saving_function=
734
1037
  self.model.save)
@@ -741,7 +1044,7 @@ class ModelCustomTraining:
741
1044
  # Saves this model
742
1045
 
743
1046
  path_tools.rename_file(self.save_model_file, str(
744
- model_number+1)+"_best_"+model_base_name+".keras",
1047
+ model_number)+"_best_"+model_base_name+".keras",
745
1048
  saving_function=self.model.save)
746
1049
 
747
1050
  # Breaks the loop