Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
]).T
walls.append(Wall(corners, self.walls[i].absorption, name=str(i)))
absorption = np.array(absorption)
if absorption.ndim == 0:
absorption = absorption * np.ones(2)
elif absorption.ndim == 1 and absorption.shape[0] != 2:
raise ValueError("The size of the absorption array must be 2 for extrude, for the floor and ceiling")
floor_corners = np.pad(floor_corners, ((0, 1),(0,0)), mode='constant')
ceiling_corners = (floor_corners.T + height*v_vec).T
# we need the floor corners to ordered clockwise (for the normal to point outward)
floor_corners = np.fliplr(floor_corners)
walls.append(Wall(floor_corners, absorption[0], name='floor'))
walls.append(Wall(ceiling_corners, absorption[1], name='ceiling'))
self.walls = walls
self.dim = 3
# re-collect all normals, corners, absoption
self.normals = np.array([wall.normal for wall in self.walls]).T
self.corners = np.array([wall.corners[:, 0] for wall in self.walls]).T
self.absorption = np.array([wall.absorption for wall in self.walls])
# recheck which walls are in the convex hull
self.convex_hull()
if self.dim == 2:
walls = []
# seems the order of walls is important here, don't change!
walls.append(Wall(np.array([[p1[0], p2[0]], [p1[1], p1[1]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p2[0]], [p1[1], p2[1]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p2[0], p1[0]], [p2[1], p2[1]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p1[0], p1[0]], [p2[1], p1[1]]]), absorption['west'], "west"))
elif self.dim == 3:
walls = []
walls.append(Wall(np.array([[p1[0], p1[0], p1[0], p1[0]], [p2[1], p1[1], p1[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['west'], "west"))
walls.append(Wall(np.array([[p2[0], p2[0], p2[0], p2[0]], [p1[1], p2[1], p2[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p1[0], p2[0], p2[0], p1[0]], [p1[1], p1[1], p1[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p2[1], p2[1], p2[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p1[1], p1[1], p2[1], p2[1]], [p1[2], p1[2], p1[2], p1[2]]]), absorption['floor'], "floor"))
walls.append(Wall(np.array([[p2[0], p2[0], p1[0], p1[0]], [p1[1], p2[1], p2[1], p1[1]], [p2[2], p2[2], p2[2], p2[2]]]), absorption['ceiling'], "ceiling"))
else:
raise ValueError("Only 2D and 3D rooms are supported.")
Room.__init__(self, walls, fs, t0, max_order, sigma2_awgn, sources, mics)
else:
raise KeyError(
"Absorbtion needs to have keys 'east', 'west', 'north', 'south', 'ceiling' (3d), 'floor' (3d)"
)
self.absorption = np.array(self.absorption)
else:
raise ValueError("Absorption must be either a scalar or a 2x dim dictionnary with entries for 'east', 'west', etc.")
if self.dim == 2:
walls = []
# seems the order of walls is important here, don't change!
walls.append(Wall(np.array([[p1[0], p2[0]], [p1[1], p1[1]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p2[0]], [p1[1], p2[1]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p2[0], p1[0]], [p2[1], p2[1]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p1[0], p1[0]], [p2[1], p1[1]]]), absorption['west'], "west"))
elif self.dim == 3:
walls = []
walls.append(Wall(np.array([[p1[0], p1[0], p1[0], p1[0]], [p2[1], p1[1], p1[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['west'], "west"))
walls.append(Wall(np.array([[p2[0], p2[0], p2[0], p2[0]], [p1[1], p2[1], p2[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p1[0], p2[0], p2[0], p1[0]], [p1[1], p1[1], p1[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p2[1], p2[1], p2[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p1[1], p1[1], p2[1], p2[1]], [p1[2], p1[2], p1[2], p1[2]]]), absorption['floor'], "floor"))
walls.append(Wall(np.array([[p2[0], p2[0], p1[0], p1[0]], [p1[1], p2[1], p2[1], p1[1]], [p2[2], p2[2], p2[2], p2[2]]]), absorption['ceiling'], "ceiling"))
else:
raise ValueError("Only 2D and 3D rooms are supported.")
Room.__init__(self, walls, fs, t0, max_order, sigma2_awgn, sources, mics)
raise ValueError("The wall list should be ordered counter-clockwise, which is the case \
if the room is created with Room.from_corners")
# make sure the floor_corners are ordered anti-clockwise (for now)
if (geom.area(floor_corners) <= 0):
floor_corners = np.fliplr(floor_corners)
walls = []
for i in range(nw):
corners = np.array([
np.r_[floor_corners[:,i], 0],
np.r_[floor_corners[:,(i+1)%nw], 0],
np.r_[floor_corners[:,(i+1)%nw], 0] + height*v_vec,
np.r_[floor_corners[:,i], 0] + height*v_vec
]).T
walls.append(Wall(corners, self.walls[i].absorption, name=str(i)))
absorption = np.array(absorption)
if absorption.ndim == 0:
absorption = absorption * np.ones(2)
elif absorption.ndim == 1 and absorption.shape[0] != 2:
raise ValueError("The size of the absorption array must be 2 for extrude, for the floor and ceiling")
floor_corners = np.pad(floor_corners, ((0, 1),(0,0)), mode='constant')
ceiling_corners = (floor_corners.T + height*v_vec).T
# we need the floor corners to ordered clockwise (for the normal to point outward)
floor_corners = np.fliplr(floor_corners)
walls.append(Wall(floor_corners, absorption[0], name='floor'))
walls.append(Wall(ceiling_corners, absorption[1], name='ceiling'))
if d in self.absorption_dict:
self.absorption.append(self.absorption_dict[d])
else:
raise KeyError(
"Absorbtion needs to have keys 'east', 'west', 'north', 'south', 'ceiling' (3d), 'floor' (3d)"
)
self.absorption = np.array(self.absorption)
else:
raise ValueError("Absorption must be either a scalar or a 2x dim dictionnary with entries for 'east', 'west', etc.")
if self.dim == 2:
walls = []
# seems the order of walls is important here, don't change!
walls.append(Wall(np.array([[p1[0], p2[0]], [p1[1], p1[1]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p2[0]], [p1[1], p2[1]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p2[0], p1[0]], [p2[1], p2[1]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p1[0], p1[0]], [p2[1], p1[1]]]), absorption['west'], "west"))
elif self.dim == 3:
walls = []
walls.append(Wall(np.array([[p1[0], p1[0], p1[0], p1[0]], [p2[1], p1[1], p1[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['west'], "west"))
walls.append(Wall(np.array([[p2[0], p2[0], p2[0], p2[0]], [p1[1], p2[1], p2[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p1[0], p2[0], p2[0], p1[0]], [p1[1], p1[1], p1[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p2[1], p2[1], p2[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p1[1], p1[1], p2[1], p2[1]], [p1[2], p1[2], p1[2], p1[2]]]), absorption['floor'], "floor"))
walls.append(Wall(np.array([[p2[0], p2[0], p1[0], p1[0]], [p1[1], p2[1], p2[1], p1[1]], [p2[2], p2[2], p2[2], p2[2]]]), absorption['ceiling'], "ceiling"))
else:
raise ValueError("Only 2D and 3D rooms are supported.")
raise KeyError(
"Absorbtion needs to have keys 'east', 'west', 'north', 'south', 'ceiling' (3d), 'floor' (3d)"
)
self.absorption = np.array(self.absorption)
else:
raise ValueError("Absorption must be either a scalar or a 2x dim dictionnary with entries for 'east', 'west', etc.")
if self.dim == 2:
walls = []
# seems the order of walls is important here, don't change!
walls.append(Wall(np.array([[p1[0], p2[0]], [p1[1], p1[1]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p2[0]], [p1[1], p2[1]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p2[0], p1[0]], [p2[1], p2[1]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p1[0], p1[0]], [p2[1], p1[1]]]), absorption['west'], "west"))
elif self.dim == 3:
walls = []
walls.append(Wall(np.array([[p1[0], p1[0], p1[0], p1[0]], [p2[1], p1[1], p1[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['west'], "west"))
walls.append(Wall(np.array([[p2[0], p2[0], p2[0], p2[0]], [p1[1], p2[1], p2[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p1[0], p2[0], p2[0], p1[0]], [p1[1], p1[1], p1[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p2[1], p2[1], p2[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p1[1], p1[1], p2[1], p2[1]], [p1[2], p1[2], p1[2], p1[2]]]), absorption['floor'], "floor"))
walls.append(Wall(np.array([[p2[0], p2[0], p1[0], p1[0]], [p1[1], p2[1], p2[1], p1[1]], [p2[2], p2[2], p2[2], p2[2]]]), absorption['ceiling'], "ceiling"))
else:
raise ValueError("Only 2D and 3D rooms are supported.")
Room.__init__(self, walls, fs, t0, max_order, sigma2_awgn, sources, mics)
walls.append(Wall(corners, self.walls[i].absorption, name=str(i)))
absorption = np.array(absorption)
if absorption.ndim == 0:
absorption = absorption * np.ones(2)
elif absorption.ndim == 1 and absorption.shape[0] != 2:
raise ValueError("The size of the absorption array must be 2 for extrude, for the floor and ceiling")
floor_corners = np.pad(floor_corners, ((0, 1),(0,0)), mode='constant')
ceiling_corners = (floor_corners.T + height*v_vec).T
# we need the floor corners to ordered clockwise (for the normal to point outward)
floor_corners = np.fliplr(floor_corners)
walls.append(Wall(floor_corners, absorption[0], name='floor'))
walls.append(Wall(ceiling_corners, absorption[1], name='ceiling'))
self.walls = walls
self.dim = 3
# re-collect all normals, corners, absoption
self.normals = np.array([wall.normal for wall in self.walls]).T
self.corners = np.array([wall.corners[:, 0] for wall in self.walls]).T
self.absorption = np.array([wall.absorption for wall in self.walls])
# recheck which walls are in the convex hull
self.convex_hull()
if (geom.area(corners) <= 0):
corners = corners[:,::-1]
cls.corners = corners
cls.dim = corners.shape[0]
absorption = np.array(absorption, dtype='float64')
if (absorption.ndim == 0):
absorption = absorption * np.ones(corners.shape[1])
elif (absorption.ndim >= 1 and corners.shape[1] != len(absorption)):
raise ValueError('Arg absorption must be the same size as corners or must be a single value.')
walls = []
for i in range(corners.shape[1]):
walls.append(Wall(np.array([corners[:, i], corners[:, (i+1)%corners.shape[1]]]).T, absorption[i], "wall_"+str(i)))
return cls(walls, fs, t0, max_order, sigma2_awgn, sources, mics)
if self.dim == 2:
walls = []
# seems the order of walls is important here, don't change!
walls.append(Wall(np.array([[p1[0], p2[0]], [p1[1], p1[1]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p2[0]], [p1[1], p2[1]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p2[0], p1[0]], [p2[1], p2[1]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p1[0], p1[0]], [p2[1], p1[1]]]), absorption['west'], "west"))
elif self.dim == 3:
walls = []
walls.append(Wall(np.array([[p1[0], p1[0], p1[0], p1[0]], [p2[1], p1[1], p1[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['west'], "west"))
walls.append(Wall(np.array([[p2[0], p2[0], p2[0], p2[0]], [p1[1], p2[1], p2[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p1[0], p2[0], p2[0], p1[0]], [p1[1], p1[1], p1[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p2[1], p2[1], p2[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p1[1], p1[1], p2[1], p2[1]], [p1[2], p1[2], p1[2], p1[2]]]), absorption['floor'], "floor"))
walls.append(Wall(np.array([[p2[0], p2[0], p1[0], p1[0]], [p1[1], p2[1], p2[1], p1[1]], [p2[2], p2[2], p2[2], p2[2]]]), absorption['ceiling'], "ceiling"))
else:
raise ValueError("Only 2D and 3D rooms are supported.")
Room.__init__(self, walls, fs, t0, max_order, sigma2_awgn, sources, mics)
self.absorption.append(self.absorption_dict[d])
else:
raise KeyError(
"Absorbtion needs to have keys 'east', 'west', 'north', 'south', 'ceiling' (3d), 'floor' (3d)"
)
self.absorption = np.array(self.absorption)
else:
raise ValueError("Absorption must be either a scalar or a 2x dim dictionnary with entries for 'east', 'west', etc.")
if self.dim == 2:
walls = []
# seems the order of walls is important here, don't change!
walls.append(Wall(np.array([[p1[0], p2[0]], [p1[1], p1[1]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p2[0]], [p1[1], p2[1]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p2[0], p1[0]], [p2[1], p2[1]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p1[0], p1[0]], [p2[1], p1[1]]]), absorption['west'], "west"))
elif self.dim == 3:
walls = []
walls.append(Wall(np.array([[p1[0], p1[0], p1[0], p1[0]], [p2[1], p1[1], p1[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['west'], "west"))
walls.append(Wall(np.array([[p2[0], p2[0], p2[0], p2[0]], [p1[1], p2[1], p2[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['east'], "east"))
walls.append(Wall(np.array([[p1[0], p2[0], p2[0], p1[0]], [p1[1], p1[1], p1[1], p1[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['south'], "south"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p2[1], p2[1], p2[1], p2[1]], [p1[2], p1[2], p2[2], p2[2]]]), absorption['north'], "north"))
walls.append(Wall(np.array([[p2[0], p1[0], p1[0], p2[0]], [p1[1], p1[1], p2[1], p2[1]], [p1[2], p1[2], p1[2], p1[2]]]), absorption['floor'], "floor"))
walls.append(Wall(np.array([[p2[0], p2[0], p1[0], p1[0]], [p1[1], p2[1], p2[1], p1[1]], [p2[2], p2[2], p2[2], p2[2]]]), absorption['ceiling'], "ceiling"))
else:
raise ValueError("Only 2D and 3D rooms are supported.")
Room.__init__(self, walls, fs, t0, max_order, sigma2_awgn, sources, mics)