1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import re
from utility.ndindex import ndindex
class Geometry:
def __init__(self, size_x, size_y, size_z = 1):
self.size_x = size_x
self.size_y = size_y
self.size_z = size_z
self.volume = size_x * size_y * size_z
@classmethod
def parse(self, s):
args = re.search(r'([0-9]+):([0-9]+):?([0-9]+)?', s)
if args.group(3) == None:
return self(int(args.group(1)), int(args.group(2)))
else:
return self(int(args.group(1)), int(args.group(2)), int(args.group(3)))
def dimension(self):
if self.size_x > 1 and self.size_y > 1 and self.size_z == 1:
return 2
elif self.size_x > 1 and self.size_y > 1 and self.size_z > 1:
return 3
else:
raise Exception('Geometry malformed')
def inner_cells(self):
for idx in numpy.ndindex(self.inner_size()):
yield tuple(map(lambda i: i + 1, idx))
def size(self):
if self.size_z == 1:
return (self.size_x, self.size_y)
else:
return (self.size_x, self.size_y, self.size_z)
def inner_size(self):
if self.size_z == 1:
return (self.size_x-2, self.size_y-2)
else:
return (self.size_x-2, self.size_y-2, self.size_z-2)
|