Geometry Operations Enhancement (#122)

* updating exclusion domain
- update sample/ is_inside
- create tests

* difference fixes
- random iteration list for sample

* created Intersection

* created a Difference domain

* unittest

* docstrings and minor fixes

* Refacotring Geometries
- added OperationInterface
- redid test cases
- edited Union, Intersect, Exclusion, and Difference
to inherit from OperationInterface
- simplified Union, Intersect, Exclusion, and Difference

* rm lighting logs

---------

Co-authored-by: Dario Coscia <dariocoscia@cli-10-110-16-239.WIFIeduroamSTUD.units.it>
This commit is contained in:
Kush
2023-07-04 12:08:47 +02:00
committed by Nicola Demo
parent 44cf800491
commit 2d0256a179
13 changed files with 534 additions and 80 deletions

View File

@@ -0,0 +1,51 @@
import torch
from pina import LabelTensor
from pina.geometry import Difference, EllipsoidDomain, CartesianDomain
def test_constructor_two_CartesianDomains():
Difference([CartesianDomain({'x': [0, 2], 'y': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3]})])
def test_constructor_two_3DCartesianDomain():
Difference([CartesianDomain({'x': [0, 2], 'y': [0, 2], 'z': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3], 'z': [1, 3]})])
def test_constructor_three_CartesianDomains():
Difference([CartesianDomain({'x': [0, 2], 'y': [0, 2]}), CartesianDomain(
{'x': [1, 3], 'y': [1, 3]}), CartesianDomain({'x': [2, 4], 'y': [2, 4]})])
def test_is_inside_two_CartesianDomains():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5]]), ['x', 'y'])
pt_2 = LabelTensor(torch.tensor([[-1, -0.5]]), ['x', 'y'])
domain = Difference([CartesianDomain({'x': [0, 2], 'y': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3]})])
assert domain.is_inside(pt_1) == True
assert domain.is_inside(pt_2) == False
def test_is_inside_two_3DCartesianDomain():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5, 0.5]]), ['x', 'y', 'z'])
pt_2 = LabelTensor(torch.tensor([[-1, -0.5, -0.5]]), ['x', 'y', 'z'])
domain = Difference([CartesianDomain({'x': [0, 2], 'y': [0, 2], 'z': [
0, 2]}), CartesianDomain({'x': [1, 3], 'y': [1, 3], 'z': [1, 3]})])
assert domain.is_inside(pt_1) == True
assert domain.is_inside(pt_2) == False
def test_sample():
n = 100
domain = Difference([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

View File

@@ -0,0 +1,51 @@
import torch
from pina import LabelTensor
from pina.geometry import Exclusion, EllipsoidDomain, CartesianDomain
def test_constructor_two_CartesianDomains():
Exclusion([CartesianDomain({'x': [0, 2], 'y': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3]})])
def test_constructor_two_3DCartesianDomain():
Exclusion([CartesianDomain({'x': [0, 2], 'y': [0, 2], 'z': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3], 'z': [1, 3]})])
def test_constructor_three_CartesianDomains():
Exclusion([CartesianDomain({'x': [0, 2], 'y': [0, 2]}), CartesianDomain(
{'x': [1, 3], 'y': [1, 3]}), CartesianDomain({'x': [2, 4], 'y': [2, 4]})])
def test_is_inside_two_CartesianDomains():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5]]), ['x', 'y'])
pt_2 = LabelTensor(torch.tensor([[-1, -0.5]]), ['x', 'y'])
domain = Exclusion([CartesianDomain({'x': [0, 2], 'y': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3]})])
assert domain.is_inside(pt_1) == True
assert domain.is_inside(pt_2) == False
def test_is_inside_two_3DCartesianDomain():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5, 0.5]]), ['x', 'y', 'z'])
pt_2 = LabelTensor(torch.tensor([[-1, -0.5, -0.5]]), ['x', 'y', 'z'])
domain = Exclusion([CartesianDomain({'x': [0, 2], 'y': [0, 2], 'z': [
0, 2]}), CartesianDomain({'x': [1, 3], 'y': [1, 3], 'z': [1, 3]})])
assert domain.is_inside(pt_1) == True
assert domain.is_inside(pt_2) == False
def test_sample():
n = 100
domain = Exclusion([EllipsoidDomain(
{'x': [-1, 1], 'y': [-1, 1]}), CartesianDomain({'x': [0.3, 1.5], 'y': [0.3, 1.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

View File

@@ -0,0 +1,56 @@
import torch
from pina import LabelTensor
from pina.geometry import Intersection, EllipsoidDomain, CartesianDomain
def test_constructor_two_CartesianDomains():
Intersection([CartesianDomain({'x': [0, 2], 'y': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3]})])
def test_constructor_two_3DCartesianDomain():
Intersection([CartesianDomain({'x': [0, 2], 'y': [0, 2], 'z': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3], 'z': [1, 3]})])
def test_constructor_three_CartesianDomains():
Intersection([CartesianDomain({'x': [0, 2], 'y': [0, 2]}), CartesianDomain(
{'x': [1, 3], 'y': [1, 3]}), CartesianDomain({'x': [2, 4], 'y': [2, 4]})])
def test_is_inside_two_CartesianDomains():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5]]), ['x', 'y'])
pt_2 = LabelTensor(torch.tensor([[-1, -0.5]]), ['x', 'y'])
pt_3 = LabelTensor(torch.tensor([[1.5, 1.5]]), ['x', 'y'])
domain = Intersection([CartesianDomain({'x': [0, 2], 'y': [0, 2]}),
CartesianDomain({'x': [1, 3], 'y': [1, 3]})])
assert domain.is_inside(pt_1) == False
assert domain.is_inside(pt_2) == False
assert domain.is_inside(pt_3) == True
def test_is_inside_two_3DCartesianDomain():
pt_1 = LabelTensor(torch.tensor([[0.5, 0.5, 0.5]]), ['x', 'y', 'z'])
pt_2 = LabelTensor(torch.tensor([[-1, -0.5, -0.5]]), ['x', 'y', 'z'])
pt_3 = LabelTensor(torch.tensor([[1.5, 1.5, 1.5]]), ['x', 'y', 'z'])
domain = Intersection([CartesianDomain({'x': [0, 2], 'y': [0, 2], 'z': [
0, 2]}), CartesianDomain({'x': [1, 3], 'y': [1, 3], 'z': [1, 3]})])
assert domain.is_inside(pt_1) == False
assert domain.is_inside(pt_2) == False
assert domain.is_inside(pt_3) == True
def test_sample():
n = 100
domain = Intersection([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

View File

@@ -45,6 +45,7 @@ def test_is_inside_EllipsoidDomain_CartesianDomain():
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]}),
@@ -56,4 +57,4 @@ def test_sample():
n = 105
pts = domain.sample(n)
assert isinstance(pts, LabelTensor)
assert pts.shape[0] == n
assert pts.shape[0] == n