PINA icon indicating copy to clipboard operation
PINA copied to clipboard

Message Passing Module

Open dario-coscia opened this issue 1 year ago • 1 comments

Fixes #515

Tentative RoadMap

  • [ ] MessagePassingInterface: handles the shared methods and attributes, can be overridden from MessagePassing from PyG. Possible additional features it might contain are if the graph is equivariant/invariant, the associated symmetry group, and others ...
  • [ ] InteractionNetworkBlock: implements the interaction network (See sec.2 of https://arxiv.org/pdf/1704.01212)
  • [ ] DeepTensorNetworkBlock: implements the Deep Tensor Neural Networks block (See sec.2 of https://arxiv.org/pdf/1704.01212)
  • [ ] EGNNBlock: implements the E(n) Equivariant Graph Neural Network block(See sec.3 of https://arxiv.org/pdf/2102.09844)
  • [ ] RadialFieldBlock: implements the radial field network block (See Tab1. of https://arxiv.org/pdf/2102.09844)
  • [ ] TensorFieldBlock: implements the tensor field block (See Tab1. of https://arxiv.org/pdf/2102.09844)
  • [ ] SchnetBlock: implements the schnet block (See Tab1. of https://arxiv.org/pdf/2102.09844)

dario-coscia avatar Mar 21 '25 10:03 dario-coscia

badge

Code Coverage Summary

Filename                                                       Stmts    Miss  Cover    Missing
-----------------------------------------------------------  -------  ------  -------  ---------------------------------------------------------------------------------------------------------------------
__init__.py                                                        7       0  100.00%
graph.py                                                         114      11  90.35%   99-100, 112, 124, 126, 142, 144, 166, 169, 182, 271
label_tensor.py                                                  251      32  87.25%   81, 121, 144-148, 165, 177, 182, 188-193, 273, 280, 332, 334, 348, 444-447, 490, 537, 629, 649-651, 664-673, 688, 710
operator.py                                                       72       5  93.06%   250-268, 459
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                                                          60       8  86.67%   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/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
callback/refinement/__init__.py                                    3       0  100.00%
callback/refinement/r3_refinement.py                              28       1  96.43%   88
callback/refinement/refinement_interface.py                       50       5  90.00%   32, 59, 67, 72, 78
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                                  37       4  89.19%   31, 76, 100, 122
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                                              201      22  89.05%   41-52, 132, 172, 193, 232, 313-317, 323-327, 399, 466, 546, 637, 639
data/dataset.py                                                   85       7  91.76%   42, 123-126, 256, 307
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       1  96.00%   43
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                                          73      10  86.30%   55-58, 70, 83, 113, 148-153, 187, 212
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/block/message_passing/__init__.py                            6       0  100.00%
model/block/message_passing/deep_tensor_network_block.py          21       0  100.00%
model/block/message_passing/en_equivariant_network_block.py       39       0  100.00%
model/block/message_passing/interaction_network_block.py          23       0  100.00%
model/block/message_passing/radial_field_network_block.py         20       0  100.00%
model/block/message_passing/schnet_block.py                       25       0  100.00%
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                                      117      18  84.62%   39-40, 59-70, 115-120, 149, 161, 179, 253, 257, 286
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                                                 188      10  94.68%   192, 215, 287, 290-291, 350, 432, 515, 556, 562
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                  47       1  97.87%   130
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       0  100.00%
solvers/__init__.py                                                6       6  0.00%    3-12
solvers/pinns/__init__.py                                          6       6  0.00%    3-12
TOTAL                                                           4663     504  89.19%

Results for commit: fbc0382cc50d211dd3c1bcaa9406b0fd49794902

Minimum allowed coverage is 80.123%

:recycle: This comment has been updated with latest results

github-actions[bot] avatar Mar 21 '25 10:03 github-actions[bot]

Hi @AleDinve @GiovanniCanali ! How is it going with this?

dario-coscia avatar Apr 10 '25 16:04 dario-coscia

Hi @AleDinve @GiovanniCanali ! How is it going with this?

Hi @dario-coscia, I need to fix some minor issues with InteractionNetwork, and then I will fix EGNN. Also, tests will be implemented. @AleDinve agreed to take care of the remaining classes.

GiovanniCanali avatar Apr 10 '25 17:04 GiovanniCanali

Hi @AleDinve @GiovanniCanali ! How is it going with this?

Hi @dario-coscia, I need to fix some minor issues with InteractionNetwork, and then I will fix EGNN. Also, tests will be implemented. @AleDinve agreed to take care of the remaining classes.

Yes, I confirm, I will have a tentative implementation of the classes assigned to me by the weekend.

AleDinve avatar Apr 10 '25 17:04 AleDinve

@dario-coscia loops and hyperlinks have been fixed.

There are two last things left:

  • fix the forward of the Equivariant Network. I will take care of it asap.
  • implement equivariance tests for the very same model.

GiovanniCanali avatar May 30 '25 12:05 GiovanniCanali

Fixed EGNN and added equivariance test. Ready for final review @dario-coscia.

GiovanniCanali avatar Jun 01 '25 08:06 GiovanniCanali

❤️

AleDinve avatar Jun 01 '25 11:06 AleDinve