Skip to content

Refactoring solvers#541

Merged
dario-coscia merged 4 commits into
devfrom
new_solvers
Apr 9, 2025
Merged

Refactoring solvers#541
dario-coscia merged 4 commits into
devfrom
new_solvers

Conversation

@dario-coscia
Copy link
Copy Markdown
Collaborator

  • Simplify logic compile
  • Improve and update doc
  • Create SupervisedSolverInterface
  • Specialize SupervisedSolver and ReducedOrderModelSolver
  • Create EnsembleSolverInterface + EnsembleSupervisedSolver
  • Create tests ensemble solvers

* Simplify logic compile
* Improve and update doc
* Create SupervisedSolverInterface
* Specialize SupervisedSolver and ReducedOrderModelSolver
* Create EnsembleSolverInterface + EnsembleSupervisedSolver
* Create tests ensemble solvers
@dario-coscia dario-coscia added enhancement New feature or request pr-to-review Label for PR that are ready to been reviewed labels Apr 8, 2025
@dario-coscia dario-coscia self-assigned this Apr 8, 2025
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2025

badge

Code Coverage Summary

Filename                                                   Stmts    Miss  Cover    Missing
-------------------------------------------------------  -------  ------  -------  ---------------------------------------------------------------------------------------------------------------------
__init__.py                                                    7       0  100.00%
collector.py                                                  40       1  97.50%   46
graph.py                                                     114      11  90.35%   99-100, 112, 124, 126, 142, 144, 166, 169, 182, 271
label_tensor.py                                              248      32  87.10%   81, 121, 144-148, 165, 177, 182, 188-193, 273, 280, 332, 334, 348, 444-447, 490, 548, 632, 652-654, 667-676, 691, 713
operator.py                                                   68       5  92.65%   250-268, 457
operators.py                                                   6       6  0.00%    3-12
plotter.py                                                     1       1  0.00%    3
trainer.py                                                    75       6  92.00%   195-204, 293, 314, 318, 322
utils.py                                                      56       8  85.71%   113, 150, 153, 156, 192-195
adaptive_function/__init__.py                                  3       0  100.00%
adaptive_function/adaptive_function.py                        55       0  100.00%
adaptive_function/adaptive_function_interface.py              51       6  88.24%   98, 141, 148-151
adaptive_functions/__init__.py                                 6       6  0.00%    3-12
callback/__init__.py                                           5       0  100.00%
callback/adaptive_refinement_callback.py                       8       1  87.50%   37
callback/linear_weight_update_callback.py                     28       1  96.43%   63
callback/optimizer_callback.py                                22       1  95.45%   34
callback/processing_callback.py                               49       5  89.80%   42-43, 73, 168, 171
callbacks/__init__.py                                          6       6  0.00%    3-12
condition/__init__.py                                          7       0  100.00%
condition/condition.py                                        35       8  77.14%   23, 127-128, 131-132, 135-136, 151
condition/condition_interface.py                              32       3  90.62%   31, 76, 100
condition/data_condition.py                                   26       1  96.15%   56
condition/domain_equation_condition.py                        19       0  100.00%
condition/input_equation_condition.py                         44       1  97.73%   129
condition/input_target_condition.py                           44       1  97.73%   125
data/__init__.py                                               3       0  100.00%
data/data_module.py                                          204      22  89.22%   42-53, 133, 173, 194, 233, 314-318, 324-328, 400, 467, 547, 638, 640
data/dataset.py                                               80       6  92.50%   42, 123-126, 291
domain/__init__.py                                            10       0  100.00%
domain/cartesian.py                                          112      10  91.07%   37, 47, 75-76, 92, 97, 103, 246, 256, 264
domain/difference_domain.py                                   25       2  92.00%   54, 87
domain/domain_interface.py                                    20       5  75.00%   37-41
domain/ellipsoid.py                                          104      24  76.92%   52, 56, 127, 250-257, 269-282, 286-287, 290, 295
domain/exclusion_domain.py                                    28       1  96.43%   86
domain/intersection_domain.py                                 28       1  96.43%   85
domain/operation_interface.py                                 26       1  96.15%   88
domain/simplex.py                                             72      14  80.56%   62, 207-225, 246-247, 251, 256
domain/union_domain.py                                        25       2  92.00%   43, 114
equation/__init__.py                                           4       0  100.00%
equation/equation.py                                          11       0  100.00%
equation/equation_factory.py                                  24      10  58.33%   37, 62-75, 97-110, 132-145
equation/equation_interface.py                                 4       0  100.00%
equation/system_equation.py                                   22       0  100.00%
geometry/__init__.py                                           7       7  0.00%    3-15
loss/__init__.py                                               7       0  100.00%
loss/loss_interface.py                                        17       2  88.24%   45, 51
loss/lp_loss.py                                               15       0  100.00%
loss/ntk_weighting.py                                         26       0  100.00%
loss/power_loss.py                                            15       0  100.00%
loss/scalar_weighting.py                                      16       0  100.00%
loss/weighting_interface.py                                    6       0  100.00%
model/__init__.py                                             10       0  100.00%
model/average_neural_operator.py                              31       2  93.55%   73, 82
model/deeponet.py                                             93      13  86.02%   187-190, 209, 240, 283, 293, 303, 313, 323, 333, 488, 498
model/feed_forward.py                                         89      11  87.64%   58, 195, 200, 278-292
model/fourier_neural_operator.py                              78      10  87.18%   96-100, 110, 155-159, 218, 220, 242, 342
model/graph_neural_operator.py                                40       2  95.00%   58, 60
model/kernel_neural_operator.py                               34       6  82.35%   83-84, 103-104, 123-124
model/low_rank_neural_operator.py                             27       2  92.59%   89, 98
model/multi_feed_forward.py                                   12       5  58.33%   25-31
model/spline.py                                               89      37  58.43%   30, 41-66, 69, 128-132, 135, 159-177, 180
model/block/__init__.py                                       12       0  100.00%
model/block/average_neural_operator_block.py                  12       0  100.00%
model/block/convolution.py                                    64      13  79.69%   77, 81, 85, 91, 97, 111, 114, 151, 161, 171, 181, 191, 201
model/block/convolution_2d.py                                146      27  81.51%   155, 162, 282, 314, 379-433, 456
model/block/embedding.py                                      48       7  85.42%   93, 143-146, 155, 168
model/block/fourier_block.py                                  31       0  100.00%
model/block/gno_block.py                                      22       4  81.82%   73-77, 87
model/block/integral.py                                       18       4  77.78%   22-25, 71
model/block/low_rank_block.py                                 24       0  100.00%
model/block/orthogonal.py                                     37       0  100.00%
model/block/pod_block.py                                      65       9  86.15%   54-57, 69, 99, 134-139, 170, 195
model/block/rbf_block.py                                     179      25  86.03%   18, 42, 53, 64, 75, 86, 97, 223, 280, 282, 298, 301, 329, 335, 363, 367, 511-524
model/block/residual.py                                       46       0  100.00%
model/block/spectral.py                                       83       4  95.18%   132, 140, 262, 270
model/block/stride.py                                         28       7  75.00%   55, 58, 61, 67, 72-74
model/block/utils_convolution.py                              22       3  86.36%   58-60
model/layers/__init__.py                                       6       6  0.00%    3-12
optim/__init__.py                                              5       0  100.00%
optim/optimizer_interface.py                                   7       0  100.00%
optim/scheduler_interface.py                                   7       0  100.00%
optim/torch_optimizer.py                                      14       0  100.00%
optim/torch_scheduler.py                                      19       2  89.47%   5-6
problem/__init__.py                                            6       0  100.00%
problem/abstract_problem.py                                  104      14  86.54%   52, 61, 101-106, 135, 147, 165, 239, 243, 272
problem/inverse_problem.py                                    22       0  100.00%
problem/parametric_problem.py                                  8       1  87.50%   29
problem/spatial_problem.py                                     8       0  100.00%
problem/time_dependent_problem.py                              8       0  100.00%
problem/zoo/__init__.py                                        8       0  100.00%
problem/zoo/advection.py                                      33       7  78.79%   36-38, 52, 108-110
problem/zoo/allen_cahn.py                                     20       6  70.00%   20-22, 34-36
problem/zoo/diffusion_reaction.py                             29       5  82.76%   94-104
problem/zoo/helmholtz.py                                      30       6  80.00%   36-42, 103-107
problem/zoo/inverse_poisson_2d_square.py                      31       0  100.00%
problem/zoo/poisson_2d_square.py                              19       3  84.21%   65-70
problem/zoo/supervised_problem.py                             11       0  100.00%
solver/__init__.py                                             6       0  100.00%
solver/garom.py                                              107       2  98.13%   129-130
solver/solver.py                                             177       9  94.92%   184, 207, 264, 267-268, 327, 483, 524, 530
solver/ensemble_solver/__init__.py                             4       0  100.00%
solver/ensemble_solver/ensemble_pinn.py                       23       1  95.65%   104
solver/ensemble_solver/ensemble_solver_interface.py           27       0  100.00%
solver/ensemble_solver/ensemble_supervised.py                  9       0  100.00%
solver/physics_informed_solver/__init__.py                     8       0  100.00%
solver/physics_informed_solver/causal_pinn.py                 47       3  93.62%   157, 166-167
solver/physics_informed_solver/competitive_pinn.py            58       0  100.00%
solver/physics_informed_solver/gradient_pinn.py               17       0  100.00%
solver/physics_informed_solver/pinn.py                        18       0  100.00%
solver/physics_informed_solver/pinn_interface.py              66       0  100.00%
solver/physics_informed_solver/rba_pinn.py                    35       3  91.43%   155-158
solver/physics_informed_solver/self_adaptive_pinn.py          90       3  96.67%   315-318
solver/supervised_solver/__init__.py                           4       0  100.00%
solver/supervised_solver/reduced_order_model.py               24       1  95.83%   137
solver/supervised_solver/supervised.py                         7       0  100.00%
solver/supervised_solver/supervised_solver_interface.py       25       1  96.00%   90
solvers/__init__.py                                            6       6  0.00%    3-12
solvers/pinns/__init__.py                                      6       6  0.00%    3-12
TOTAL                                                       4465     493  88.96%

Results for commit: f82085d

Minimum allowed coverage is 80.123%

♻️ This comment has been updated with latest results

@dario-coscia
Copy link
Copy Markdown
Collaborator Author

Tried to fix some codacy errors but there are two which we cannot fix:

  1. too-many-positional-arguments (R0917) -> unfortunately, this is something all solvers face
  2. redefined-builtin (W0622) -> I changed input_pts, output_pts to input, target, unfortunately input is also a builtin python method.

We can easily fix it my removing it from pylint, but let's discuss it and fix it in another PR in case

Copy link
Copy Markdown
Collaborator

@GiovanniCanali GiovanniCanali left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the nice enhancements, @dario-coscia!
I have left several minor comments. Please, address them before merging.

Comment thread pina/solver/__init__.py Outdated
Comment thread pina/solver/ensemble_solver/ensemble_pinn.py Outdated
Comment thread pina/solver/ensemble_solver/ensemble_pinn.py
Comment thread pina/solver/ensemble_solver/ensemble_pinn.py Outdated
Comment thread pina/solver/ensemble_solver/ensemble_solver_interface.py
Comment thread pina/solver/physics_informed_solver/pinn.py
Comment thread pina/solver/physics_informed_solver/pinn_interface.py Outdated
Comment thread pina/solver/supervised_solver/reduced_order_model.py
Comment thread tests/test_solver/test_ensemble_pinn.py Outdated
Comment thread tests/test_solver/test_ensemble_supervised_solver.py
Copy link
Copy Markdown
Member

@FilippoOlivo FilippoOlivo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally, I do not like the the way in which the solver are subdivided. Specifically, I would avoid the ensemble solver folder, while, I will put ensemble_supervised into supervised_solver folder and ensemble_pinn into pinn physics_informed_solver

Comment thread pina/solver/__init__.py Outdated
@dario-coscia
Copy link
Copy Markdown
Collaborator Author

Personally, I do not like the the way in which the solver are subdivided. Specifically, I would avoid the ensemble solver folder, while, I will put ensemble_supervised into supervised_solver folder and ensemble_pinn into pinn physics_informed_solver

I did this to have flexibility in the future, I think other ensemble methods will be added. Like this, we have a dedicated module for ensembles, which is reasonable to me

Comment thread pina/solver/ensemble_solver/ensemble_solver_interface.py
Comment thread pina/solver/supervised_solver/supervised_solver_interface.py
@FilippoOlivo
Copy link
Copy Markdown
Member

Personally, I do not like the the way in which the solver are subdivided. Specifically, I would avoid the ensemble solver folder, while, I will put ensemble_supervised into supervised_solver folder and ensemble_pinn into pinn physics_informed_solver

I did this to have flexibility in the future, I think other ensemble methods will be added. Like this, we have a dedicated module for ensembles, which is reasonable to me

I get what you mean but, in my opinion they still belong to supervised/physics_informed solvers. @GiovanniCanali @ndem0 what do you think?

@dario-coscia
Copy link
Copy Markdown
Collaborator Author

@GiovanniCanali I fixed the issues, check the one unresolved if you agree. Also I speeded up a bit the test by decreasing number of points evaluations in the solvers, now we go a 15% faster in testing

@GiovanniCanali
Copy link
Copy Markdown
Collaborator

Personally, I do not like the the way in which the solver are subdivided. Specifically, I would avoid the ensemble solver folder, while, I will put ensemble_supervised into supervised_solver folder and ensemble_pinn into pinn physics_informed_solver

I did this to have flexibility in the future, I think other ensemble methods will be added. Like this, we have a dedicated module for ensembles, which is reasonable to me

I get what you mean but, in my opinion they still belong to supervised/physics_informed solvers. @GiovanniCanali @ndem0 what do you think?

Personally, I appreciate the proposed logic. Anyway, I will spend some time thinking about this.

Copy link
Copy Markdown
Collaborator

@GiovanniCanali GiovanniCanali left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No further suggestions. Thank you @dario-coscia!

Comment thread pina/solver/ensemble_solver/ensemble_solver_interface.py
@dario-coscia dario-coscia removed the request for review from FilippoOlivo April 9, 2025 11:12
@FilippoOlivo FilippoOlivo self-requested a review April 9, 2025 11:25
@dario-coscia dario-coscia merged commit ed1b64c into dev Apr 9, 2025
18 of 19 checks passed
@dario-coscia dario-coscia deleted the new_solvers branch April 9, 2025 12:51
dario-coscia added a commit that referenced this pull request Apr 14, 2025
* Refactoring solvers

* Simplify logic compile
* Improve and update doc
* Create SupervisedSolverInterface
* Specialize SupervisedSolver and ReducedOrderModelSolver
* Create EnsembleSolverInterface + EnsembleSupervisedSolver
* Create tests ensemble solvers

* formatter

* codacy

* fix issues + speedup test
FilippoOlivo pushed a commit to FilippoOlivo/PINA that referenced this pull request Apr 17, 2025
* Refactoring solvers

* Simplify logic compile
* Improve and update doc
* Create SupervisedSolverInterface
* Specialize SupervisedSolver and ReducedOrderModelSolver
* Create EnsembleSolverInterface + EnsembleSupervisedSolver
* Create tests ensemble solvers

* formatter

* codacy

* fix issues + speedup test
dario-coscia added a commit that referenced this pull request Apr 17, 2025
* Refactoring solvers

* Simplify logic compile
* Improve and update doc
* Create SupervisedSolverInterface
* Specialize SupervisedSolver and ReducedOrderModelSolver
* Create EnsembleSolverInterface + EnsembleSupervisedSolver
* Create tests ensemble solvers

* formatter

* codacy

* fix issues + speedup test
@dario-coscia dario-coscia mentioned this pull request Apr 23, 2025
dario-coscia added a commit that referenced this pull request Apr 23, 2025
* Refactoring solvers

* Simplify logic compile
* Improve and update doc
* Create SupervisedSolverInterface
* Specialize SupervisedSolver and ReducedOrderModelSolver
* Create EnsembleSolverInterface + EnsembleSupervisedSolver
* Create tests ensemble solvers

* formatter

* codacy

* fix issues + speedup test
GiovanniCanali pushed a commit to GiovanniCanali/PINA that referenced this pull request Dec 2, 2025
* Refactoring solvers

* Simplify logic compile
* Improve and update doc
* Create SupervisedSolverInterface
* Specialize SupervisedSolver and ReducedOrderModelSolver
* Create EnsembleSolverInterface + EnsembleSupervisedSolver
* Create tests ensemble solvers

* formatter

* codacy

* fix issues + speedup test
GiovanniCanali pushed a commit to GiovanniCanali/PINA that referenced this pull request Dec 2, 2025
* Refactoring solvers

* Simplify logic compile
* Improve and update doc
* Create SupervisedSolverInterface
* Specialize SupervisedSolver and ReducedOrderModelSolver
* Create EnsembleSolverInterface + EnsembleSupervisedSolver
* Create tests ensemble solvers

* formatter

* codacy

* fix issues + speedup test
GiovanniCanali pushed a commit to GiovanniCanali/PINA that referenced this pull request Dec 2, 2025
* Refactoring solvers

* Simplify logic compile
* Improve and update doc
* Create SupervisedSolverInterface
* Specialize SupervisedSolver and ReducedOrderModelSolver
* Create EnsembleSolverInterface + EnsembleSupervisedSolver
* Create tests ensemble solvers

* formatter

* codacy

* fix issues + speedup test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request pr-to-review Label for PR that are ready to been reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants