Improve conditions and refactor dataset classes (#475)

* Reimplement conditions

* Refactor datasets and implement LabelBatch

---------

Co-authored-by: Dario Coscia <dariocos99@gmail.com>
This commit is contained in:
Filippo Olivo
2025-03-07 11:24:09 +01:00
committed by Nicola Demo
parent bdad144461
commit a0cbf1c44a
40 changed files with 943 additions and 550 deletions

View File

@@ -11,8 +11,8 @@ from pina.problem.zoo import (
InverseDiffusionReactionProblem
)
from pina.condition import (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)
from torch._dynamo.eval_frame import OptimizedModule
@@ -43,8 +43,8 @@ input_pts = LabelTensor(input_pts, problem.input_variables)
output_pts = torch.rand(50, len(problem.output_variables))
output_pts = LabelTensor(output_pts, problem.output_variables)
problem.conditions['data'] = Condition(
input_points=input_pts,
output_points=output_pts
input=input_pts,
target=output_pts
)
@@ -56,8 +56,8 @@ def test_constructor(problem, eps):
solver = CausalPINN(model=model, problem=problem, eps=eps)
assert solver.accepted_conditions_types == (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)

View File

@@ -10,8 +10,8 @@ from pina.problem.zoo import (
InversePoisson2DSquareProblem as InversePoisson
)
from pina.condition import (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)
from torch._dynamo.eval_frame import OptimizedModule
@@ -33,8 +33,8 @@ input_pts = LabelTensor(input_pts, problem.input_variables)
output_pts = torch.rand(50, len(problem.output_variables))
output_pts = LabelTensor(output_pts, problem.output_variables)
problem.conditions['data'] = Condition(
input_points=input_pts,
output_points=output_pts
input=input_pts,
target=output_pts
)
@pytest.mark.parametrize("problem", [problem, inverse_problem])
@@ -44,8 +44,8 @@ def test_constructor(problem, discr):
solver = CompPINN(problem=problem, model=model, discriminator=discr)
assert solver.accepted_conditions_types == (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)

View File

@@ -4,7 +4,7 @@ import torch.nn as nn
import pytest
from pina import Condition, LabelTensor
from pina.solver import GAROM
from pina.condition import InputOutputPointsCondition
from pina.condition import InputTargetCondition
from pina.problem import AbstractProblem
from pina.model import FeedForward
from pina.trainer import Trainer
@@ -16,8 +16,8 @@ class TensorProblem(AbstractProblem):
output_variables = ['u']
conditions = {
'data': Condition(
output_points=torch.randn(50, 2),
input_points=torch.randn(50, 1))
target=torch.randn(50, 2),
input=torch.randn(50, 1))
}
@@ -74,7 +74,7 @@ def test_constructor():
generator=Generator(),
discriminator=Discriminator())
assert GAROM.accepted_conditions_types == (
InputOutputPointsCondition
InputTargetCondition
)

View File

@@ -11,8 +11,8 @@ from pina.problem.zoo import (
InversePoisson2DSquareProblem as InversePoisson
)
from pina.condition import (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)
from torch._dynamo.eval_frame import OptimizedModule
@@ -43,8 +43,8 @@ input_pts = LabelTensor(input_pts, problem.input_variables)
output_pts = torch.rand(50, len(problem.output_variables))
output_pts = LabelTensor(output_pts, problem.output_variables)
problem.conditions['data'] = Condition(
input_points=input_pts,
output_points=output_pts
input=input_pts,
target=output_pts
)
@@ -55,8 +55,8 @@ def test_constructor(problem):
solver = GradientPINN(model=model, problem=problem)
assert solver.accepted_conditions_types == (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)

View File

@@ -6,8 +6,8 @@ from pina.model import FeedForward
from pina.trainer import Trainer
from pina.solver import PINN
from pina.condition import (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)
from pina.problem.zoo import (
@@ -33,8 +33,8 @@ input_pts = LabelTensor(input_pts, problem.input_variables)
output_pts = torch.rand(50, len(problem.output_variables))
output_pts = LabelTensor(output_pts, problem.output_variables)
problem.conditions['data'] = Condition(
input_points=input_pts,
output_points=output_pts
input=input_pts,
target=output_pts
)
@pytest.mark.parametrize("problem", [problem, inverse_problem])
@@ -42,8 +42,8 @@ def test_constructor(problem):
solver = PINN(problem=problem, model=model)
assert solver.accepted_conditions_types == (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)

View File

@@ -6,8 +6,8 @@ from pina.model import FeedForward
from pina.trainer import Trainer
from pina.solver import RBAPINN
from pina.condition import (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)
from pina.problem.zoo import (
@@ -32,8 +32,8 @@ input_pts = LabelTensor(input_pts, problem.input_variables)
output_pts = torch.rand(50, len(problem.output_variables))
output_pts = LabelTensor(output_pts, problem.output_variables)
problem.conditions['data'] = Condition(
input_points=input_pts,
output_points=output_pts
input=input_pts,
target=output_pts
)
@@ -46,8 +46,8 @@ def test_constructor(problem, eta, gamma):
solver = RBAPINN(model=model, problem=problem, eta=eta, gamma=gamma)
assert solver.accepted_conditions_types == (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)

View File

@@ -3,7 +3,7 @@ import pytest
from pina import Condition, LabelTensor
from pina.problem import AbstractProblem
from pina.condition import InputOutputPointsCondition
from pina.condition import InputTargetCondition
from pina.solver import ReducedOrderModelSolver
from pina.trainer import Trainer
from pina.model import FeedForward
@@ -16,8 +16,8 @@ class LabelTensorProblem(AbstractProblem):
output_variables = ['u']
conditions = {
'data': Condition(
input_points=LabelTensor(torch.randn(20, 2), ['u_0', 'u_1']),
output_points=LabelTensor(torch.randn(20, 1), ['u'])),
input=LabelTensor(torch.randn(20, 2), ['u_0', 'u_1']),
target=LabelTensor(torch.randn(20, 1), ['u'])),
}
@@ -26,8 +26,8 @@ class TensorProblem(AbstractProblem):
output_variables = ['u']
conditions = {
'data': Condition(
input_points=torch.randn(20, 2),
output_points=torch.randn(20, 1))
input=torch.randn(20, 2),
target=torch.randn(20, 1))
}
@@ -68,7 +68,7 @@ def test_constructor():
ReducedOrderModelSolver(problem=LabelTensorProblem(),
reduction_network=reduction_net,
interpolation_network=interpolation_net)
assert ReducedOrderModelSolver.accepted_conditions_types == InputOutputPointsCondition
assert ReducedOrderModelSolver.accepted_conditions_types == InputTargetCondition
with pytest.raises(SyntaxError):
ReducedOrderModelSolver(problem=problem,
reduction_network=AE_missing_encode(

View File

@@ -10,8 +10,8 @@ from pina.problem.zoo import (
InversePoisson2DSquareProblem as InversePoisson
)
from pina.condition import (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)
from torch._dynamo.eval_frame import OptimizedModule
@@ -33,8 +33,8 @@ input_pts = LabelTensor(input_pts, problem.input_variables)
output_pts = torch.rand(50, len(problem.output_variables))
output_pts = LabelTensor(output_pts, problem.output_variables)
problem.conditions['data'] = Condition(
input_points=input_pts,
output_points=output_pts
input=input_pts,
target=output_pts
)
@@ -46,8 +46,8 @@ def test_constructor(problem, weight_fn):
solver = SAPINN(problem=problem, model=model, weight_function=weight_fn)
assert solver.accepted_conditions_types == (
InputOutputPointsCondition,
InputPointsEquationCondition,
InputTargetCondition,
InputEquationCondition,
DomainEquationCondition
)

View File

@@ -1,7 +1,7 @@
import torch
import pytest
from pina import Condition, LabelTensor
from pina.condition import InputOutputPointsCondition
from pina.condition import InputTargetCondition
from pina.problem import AbstractProblem
from pina.solver import SupervisedSolver
from pina.model import FeedForward
@@ -14,8 +14,8 @@ class LabelTensorProblem(AbstractProblem):
output_variables = ['u']
conditions = {
'data': Condition(
input_points=LabelTensor(torch.randn(20, 2), ['u_0', 'u_1']),
output_points=LabelTensor(torch.randn(20, 1), ['u'])),
input=LabelTensor(torch.randn(20, 2), ['u_0', 'u_1']),
target=LabelTensor(torch.randn(20, 1), ['u'])),
}
@@ -24,8 +24,8 @@ class TensorProblem(AbstractProblem):
output_variables = ['u']
conditions = {
'data': Condition(
input_points=torch.randn(20, 2),
output_points=torch.randn(20, 1))
input=torch.randn(20, 2),
target=torch.randn(20, 1))
}
@@ -36,7 +36,7 @@ def test_constructor():
SupervisedSolver(problem=TensorProblem(), model=model)
SupervisedSolver(problem=LabelTensorProblem(), model=model)
assert SupervisedSolver.accepted_conditions_types == (
InputOutputPointsCondition
InputTargetCondition
)