Files
PINA/tests/test_model/test_average_neural_operator.py
Filippo Olivo 4177bfbb50 Fix Codacy Warnings (#477)
---------

Co-authored-by: Dario Coscia <dariocos99@gmail.com>
2025-03-19 17:48:18 +01:00

174 lines
4.9 KiB
Python

import torch
from pina.model import AveragingNeuralOperator
from pina import LabelTensor
import pytest
batch_size = 15
n_layers = 4
embedding_dim = 24
func = torch.nn.Tanh
coordinates_indices = ["p"]
field_indices = ["v"]
def test_constructor():
# working constructor
lifting_net = torch.nn.Linear(
len(coordinates_indices) + len(field_indices), embedding_dim
)
projecting_net = torch.nn.Linear(
embedding_dim + len(field_indices), len(field_indices)
)
AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=n_layers,
func=func,
)
# not working constructor
with pytest.raises(ValueError):
AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=3.2, # wrong
func=func,
)
AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=n_layers,
func=1,
) # wrong
AveragingNeuralOperator(
lifting_net=[0], # wrong
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=n_layers,
func=func,
)
AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=[0], # wront
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=n_layers,
func=func,
)
AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=[0], # wrong
field_indices=field_indices,
n_layers=n_layers,
func=func,
)
AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=[0], # wrong
n_layers=n_layers,
func=func,
)
lifting_net = torch.nn.Linear(len(coordinates_indices), embedding_dim)
AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=n_layers,
func=func,
)
lifting_net = torch.nn.Linear(
len(coordinates_indices) + len(field_indices), embedding_dim
)
projecting_net = torch.nn.Linear(embedding_dim, len(field_indices))
AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=n_layers,
func=func,
)
def test_forward():
lifting_net = torch.nn.Linear(
len(coordinates_indices) + len(field_indices), embedding_dim
)
projecting_net = torch.nn.Linear(
embedding_dim + len(field_indices), len(field_indices)
)
avno = AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=n_layers,
func=func,
)
input_ = LabelTensor(
torch.rand(
batch_size, 100, len(coordinates_indices) + len(field_indices)
),
["p", "v"],
)
out = avno(input_)
assert out.shape == torch.Size(
[batch_size, input_.shape[1], len(field_indices)]
)
def test_backward():
lifting_net = torch.nn.Linear(
len(coordinates_indices) + len(field_indices), embedding_dim
)
projecting_net = torch.nn.Linear(
embedding_dim + len(field_indices), len(field_indices)
)
avno = AveragingNeuralOperator(
lifting_net=lifting_net,
projecting_net=projecting_net,
coordinates_indices=coordinates_indices,
field_indices=field_indices,
n_layers=n_layers,
func=func,
)
input_ = LabelTensor(
torch.rand(
batch_size, 100, len(coordinates_indices) + len(field_indices)
),
["p", "v"],
)
input_ = input_.requires_grad_()
out = avno(input_)
tmp = torch.linalg.norm(out)
tmp.backward()
grad = input_.grad
assert grad.shape == torch.Size(
[
batch_size,
input_.shape[1],
len(coordinates_indices) + len(field_indices),
]
)