Implement custom sampling logic
This commit is contained in:
committed by
Nicola Demo
parent
f578b2ed12
commit
195224794f
@@ -11,22 +11,23 @@ from pina.operators import laplacian
|
||||
from pina.collector import Collector
|
||||
|
||||
|
||||
# def test_supervised_tensor_collector():
|
||||
# class SupervisedProblem(AbstractProblem):
|
||||
# output_variables = None
|
||||
# conditions = {
|
||||
# 'data1' : Condition(input_points=torch.rand((10,2)),
|
||||
# output_points=torch.rand((10,2))),
|
||||
# 'data2' : Condition(input_points=torch.rand((20,2)),
|
||||
# output_points=torch.rand((20,2))),
|
||||
# 'data3' : Condition(input_points=torch.rand((30,2)),
|
||||
# output_points=torch.rand((30,2))),
|
||||
# }
|
||||
# problem = SupervisedProblem()
|
||||
# collector = Collector(problem)
|
||||
# for v in collector.conditions_name.values():
|
||||
# assert v in problem.conditions.keys()
|
||||
# assert all(collector._is_conditions_ready.values())
|
||||
def test_supervised_tensor_collector():
|
||||
class SupervisedProblem(AbstractProblem):
|
||||
output_variables = None
|
||||
conditions = {
|
||||
'data1': Condition(input_points=torch.rand((10, 2)),
|
||||
output_points=torch.rand((10, 2))),
|
||||
'data2': Condition(input_points=torch.rand((20, 2)),
|
||||
output_points=torch.rand((20, 2))),
|
||||
'data3': Condition(input_points=torch.rand((30, 2)),
|
||||
output_points=torch.rand((30, 2))),
|
||||
}
|
||||
|
||||
problem = SupervisedProblem()
|
||||
collector = Collector(problem)
|
||||
for v in collector.conditions_name.values():
|
||||
assert v in problem.conditions.keys()
|
||||
|
||||
|
||||
def test_pinn_collector():
|
||||
def laplace_equation(input_, output_):
|
||||
@@ -81,7 +82,7 @@ def test_pinn_collector():
|
||||
def poisson_sol(self, pts):
|
||||
return -(torch.sin(pts.extract(['x']) * torch.pi) *
|
||||
torch.sin(pts.extract(['y']) * torch.pi)) / (
|
||||
2 * torch.pi ** 2)
|
||||
2 * torch.pi ** 2)
|
||||
|
||||
truth_solution = poisson_sol
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@ import torch
|
||||
import pytest
|
||||
from pina.problem.zoo import Poisson2DSquareProblem as Poisson
|
||||
from pina import LabelTensor
|
||||
from pina.domain import Union
|
||||
from pina.domain import CartesianDomain
|
||||
|
||||
|
||||
def test_discretise_domain():
|
||||
@@ -29,18 +31,6 @@ def test_discretise_domain():
|
||||
poisson_problem.discretise_domain(n)
|
||||
|
||||
|
||||
'''
|
||||
def test_sampling_few_variables():
|
||||
n = 10
|
||||
poisson_problem = Poisson()
|
||||
poisson_problem.discretise_domain(n,
|
||||
'grid',
|
||||
domains=['D'],
|
||||
variables=['x'])
|
||||
assert poisson_problem.discretised_domains['D'].shape[1] == 1
|
||||
'''
|
||||
|
||||
|
||||
def test_variables_correct_order_sampling():
|
||||
n = 10
|
||||
poisson_problem = Poisson()
|
||||
@@ -66,3 +56,39 @@ def test_add_points():
|
||||
new_pts.extract('x'))
|
||||
assert torch.isclose(poisson_problem.discretised_domains['D'].extract('y'),
|
||||
new_pts.extract('y'))
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"mode",
|
||||
[
|
||||
'random',
|
||||
'grid'
|
||||
]
|
||||
)
|
||||
def test_custom_sampling_logic(mode):
|
||||
poisson_problem = Poisson()
|
||||
sampling_rules = {
|
||||
'x': {'n': 100, 'mode': mode},
|
||||
'y': {'n': 50, 'mode': mode}
|
||||
}
|
||||
poisson_problem.discretise_domain(sample_rules=sampling_rules)
|
||||
for domain in ['g1', 'g2', 'g3', 'g4']:
|
||||
assert poisson_problem.discretised_domains[domain].shape[0] == 100 * 50
|
||||
assert poisson_problem.discretised_domains[domain].labels == ['x', 'y']
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"mode",
|
||||
[
|
||||
'random',
|
||||
'grid'
|
||||
]
|
||||
)
|
||||
def test_wrong_custom_sampling_logic(mode):
|
||||
d2 = CartesianDomain({'x': [1,2], 'y': [0,1] })
|
||||
poisson_problem = Poisson()
|
||||
poisson_problem.domains['D'] = Union([poisson_problem.domains['D'], d2])
|
||||
sampling_rules = {
|
||||
'x': {'n': 100, 'mode': mode},
|
||||
'y': {'n': 50, 'mode': mode}
|
||||
}
|
||||
with pytest.raises(RuntimeError):
|
||||
poisson_problem.discretise_domain(sample_rules=sampling_rules)
|
||||
Reference in New Issue
Block a user