Solving problems related to Geometry (#118)

* fix and add tests
* minor fix on domain classes

---------

Co-authored-by: Dario Coscia <dariocoscia@cli-10-110-0-208.WIFIeduroamSTUD.units.it>
Co-authored-by: Dario Coscia <dariocoscia@dhcp-040.eduroam.sissa.it>
This commit is contained in:
Dario Coscia
2023-06-20 17:30:28 +02:00
committed by Nicola Demo
parent 62ec69ccac
commit 982af4a04d
7 changed files with 122 additions and 35 deletions

View File

@@ -12,10 +12,26 @@ def test_constructor():
CartesianDomain({'x': [0, 1], 'y': [0, 1]})
def test_is_inside():
def test_is_inside_check_border():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5]]), ['x', 'y'])
pt_2 = LabelTensor(torch.tensor([[1.0, 0.5]]), ['x', 'y'])
pt_3 = LabelTensor(torch.tensor([[1.5, 0.5]]), ['x', 'y'])
domain = CartesianDomain({'x': [0, 1], 'y': [0, 1]})
for pt, exp_result in zip([pt_1, pt_2, pt_3], [True, True, False]):
assert domain.is_inside(pt) == exp_result
assert domain.is_inside(pt, check_border=True) == exp_result
def test_is_inside_not_check_border():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5]]), ['x', 'y'])
pt_2 = LabelTensor(torch.tensor([[1.0, 0.5]]), ['x', 'y'])
pt_3 = LabelTensor(torch.tensor([[1.5, 0.5]]), ['x', 'y'])
domain = CartesianDomain({'x': [0, 1], 'y': [0, 1]})
for pt, exp_result in zip([pt_1, pt_2, pt_3], [True, False, False]):
assert domain.is_inside(pt, check_border=False) == exp_result
def test_is_inside_fixed_variables():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5]]), ['x', 'y'])
pt_2 = LabelTensor(torch.tensor([[1.0, 0.5]]), ['x', 'y'])
pt_3 = LabelTensor(torch.tensor([[1.0, 1.5]]), ['x', 'y'])
domain = CartesianDomain({'x': 1, 'y': [0, 1]})
for pt, exp_result in zip([pt_1, pt_2, pt_3], [False, True, False]):
assert domain.is_inside(pt, check_border=False) == exp_result

30
tests/test_ellipsoid.py Normal file
View File

@@ -0,0 +1,30 @@
import torch
import pytest
from pina import LabelTensor
from pina.geometry import EllipsoidDomain
def test_constructor():
EllipsoidDomain({'x': [0, 1], 'y': [0, 1]})
EllipsoidDomain({'x': [0, 1], 'y':[0, 1]}, sample_surface=True)
def test_is_inside_sample_surface_false():
domain = EllipsoidDomain({'x': [0, 1], 'y':[0, 1]}, sample_surface=False)
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5]]), ['x', 'y'])
pt_2 = LabelTensor(torch.tensor([[1.0, 0.5]]), ['x', 'y'])
pt_3 = LabelTensor(torch.tensor([[1.5, 0.5]]), ['x', 'y'])
for pt, exp_result in zip([pt_1, pt_2, pt_3], [True, False, False]):
assert domain.is_inside(pt) == exp_result
for pt, exp_result in zip([pt_1, pt_2, pt_3], [True, True, False]):
assert domain.is_inside(pt, check_border=True) == exp_result
def test_is_inside_sample_surface_true():
domain = EllipsoidDomain({'x': [0, 1], 'y':[0, 1]}, sample_surface=True)
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5]]), ['x', 'y'])
pt_2 = LabelTensor(torch.tensor([[1.0, 0.5]]), ['x', 'y'])
pt_3 = LabelTensor(torch.tensor([[1.5, 0.5]]), ['x', 'y'])
for pt, exp_result in zip([pt_1, pt_2, pt_3], [False, True, False]):
assert domain.is_inside(pt) == exp_result

View File

@@ -44,3 +44,16 @@ def test_is_inside_EllipsoidDomain_CartesianDomain():
CartesianDomain({'x': [0.6, 1.5], 'y': [-2, 0]})])
assert domain.is_inside(pt_1) == True
assert domain.is_inside(pt_2) == False
def test_sample():
n = 100
domain = Union([EllipsoidDomain({'x': [-1, 1], 'y': [-1, 1]}),
CartesianDomain({'x': [-0.5, 0.5], 'y': [-0.5, 0.5]})])
pts = domain.sample(n)
assert isinstance(pts, LabelTensor)
assert pts.shape[0] == n
n = 105
pts = domain.sample(n)
assert isinstance(pts, LabelTensor)
assert pts.shape[0] == n