Skip to content

Commit c148ad7

Browse files
committed
BUG: avoid soon-to-be-deprecated direct mutations of ndarray.shape attributes (2/2)
1 parent e962538 commit c148ad7

File tree

3 files changed

+67
-104
lines changed

3 files changed

+67
-104
lines changed

yt/visualization/volume_rendering/lens.py

Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -341,13 +341,13 @@ def _get_sampler_params(self, camera, render_source):
341341

342342
uv = np.ones(3, dtype="float64")
343343

344-
image = self.new_image(camera)
345-
vectors_comb = uvstack([vectors_left, vectors_right])
346-
positions_comb = uvstack([positions_left, positions_right])
347-
348-
image.shape = (camera.resolution[0], camera.resolution[1], 4)
349-
vectors_comb.shape = (camera.resolution[0], camera.resolution[1], 3)
350-
positions_comb.shape = (camera.resolution[0], camera.resolution[1], 3)
344+
image = self.new_image(camera).reshape(*camera.resolution, 4)
345+
vectors_comb = uvstack([vectors_left, vectors_right]).reshape(
346+
*camera.resolution, 3
347+
)
348+
positions_comb = uvstack([positions_left, positions_right]).reshape(
349+
*camera.resolution, 3
350+
)
351351

352352
sampler_params = {
353353
"vp_pos": positions_comb,
@@ -549,15 +549,12 @@ def new_image(self, camera):
549549
return self.current_image
550550

551551
def _get_sampler_params(self, camera, render_source):
552-
vp = -arr_fisheye_vectors(camera.resolution[0], self.fov)
553-
vp.shape = (camera.resolution[0], camera.resolution[0], 3)
552+
shape = (camera.resolution[0], camera.resolution[0], 3)
553+
vp = -arr_fisheye_vectors(camera.resolution[0], self.fov).reshape(shape)
554554
vp = vp.dot(np.linalg.inv(self.rotation_matrix))
555555
vp *= self.radius
556556
uv = np.ones(3, dtype="float64")
557-
positions = (
558-
np.ones((camera.resolution[0], camera.resolution[0], 3), dtype="float64")
559-
* camera.position
560-
)
557+
positions = np.full(shape, camera.position, dtype="float64")
561558

562559
if render_source.zbuffer is not None:
563560
image = render_source.zbuffer.rgba
@@ -652,9 +649,16 @@ def _get_sampler_params(self, camera, render_source):
652649
-np.pi / 2.0, np.pi / 2.0, camera.resolution[1], endpoint=True
653650
)[None, :]
654651

655-
vectors = np.zeros(
656-
(camera.resolution[0], camera.resolution[1], 3), dtype="float64", order="C"
652+
positions = np.tile(camera.position, np.prod(camera.resolution)).reshape(
653+
*camera.resolution, 3
657654
)
655+
656+
R1 = get_rotation_matrix(0.5 * np.pi, [1, 0, 0])
657+
R2 = get_rotation_matrix(0.5 * np.pi, [0, 0, 1])
658+
uv = np.dot(R1, camera.unit_vectors)
659+
uv = np.dot(R2, uv)
660+
661+
vectors = np.empty((*camera.resolution, 3), dtype="float64", order="C")
658662
vectors[:, :, 0] = np.cos(px) * np.cos(py)
659663
vectors[:, :, 1] = np.sin(px) * np.cos(py)
660664
vectors[:, :, 2] = np.sin(py)
@@ -663,30 +667,15 @@ def _get_sampler_params(self, camera, render_source):
663667
max_length = unorm(camera.position - camera._domain_center) + 0.5 * unorm(
664668
camera._domain_width
665669
)
666-
# Rescale the ray to be long enough to cover the entire domain
667-
vectors = vectors * max_length
668-
669-
positions = np.tile(
670-
camera.position, camera.resolution[0] * camera.resolution[1]
671-
).reshape(camera.resolution[0], camera.resolution[1], 3)
672-
673-
R1 = get_rotation_matrix(0.5 * np.pi, [1, 0, 0])
674-
R2 = get_rotation_matrix(0.5 * np.pi, [0, 0, 1])
675-
uv = np.dot(R1, camera.unit_vectors)
676-
uv = np.dot(R2, uv)
677-
vectors.reshape((camera.resolution[0] * camera.resolution[1], 3))
678-
vectors = np.dot(vectors, uv)
679-
vectors.reshape((camera.resolution[0], camera.resolution[1], 3))
670+
vectors = np.dot((vectors * max_length), uv).reshape(*camera.resolution, 3)
680671

681672
if render_source.zbuffer is not None:
682673
image = render_source.zbuffer.rgba
683674
else:
684675
image = self.new_image(camera)
685676

677+
image = image.reshape(*camera.resolution, 4)
686678
dummy = np.ones(3, dtype="float64")
687-
image.shape = (camera.resolution[0], camera.resolution[1], 4)
688-
vectors.shape = (camera.resolution[0], camera.resolution[1], 3)
689-
positions.shape = (camera.resolution[0], camera.resolution[1], 3)
690679

691680
sampler_params = {
692681
"vp_pos": positions,
@@ -816,14 +805,14 @@ def _get_sampler_params(self, camera, render_source):
816805
else:
817806
image = self.new_image(camera)
818807

819-
dummy = np.ones(3, dtype="float64")
808+
image = image.reshape(*camera.resolution, 4)
820809

821-
vectors_comb = uhstack([vectors, vectors])
822-
positions_comb = uhstack([positions_left, positions_right])
810+
dummy = np.ones(3, dtype="float64")
823811

824-
image.shape = (camera.resolution[0], camera.resolution[1], 4)
825-
vectors_comb.shape = (camera.resolution[0], camera.resolution[1], 3)
826-
positions_comb.shape = (camera.resolution[0], camera.resolution[1], 3)
812+
vectors_comb = uhstack([vectors, vectors]).reshape(*camera.resolution, 3)
813+
positions_comb = uhstack([positions_left, positions_right]).reshape(
814+
*camera.resolution, 3
815+
)
827816

828817
sampler_params = {
829818
"vp_pos": positions_comb,

yt/visualization/volume_rendering/old_camera.py

Lines changed: 35 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -720,9 +720,7 @@ def _render(self, double_check, num_threads, image, sampler):
720720
pbar.update(total_cells)
721721

722722
pbar.finish()
723-
image = sampler.aimage
724-
image = self.finalize_image(image)
725-
return image
723+
return self.finalize_image(sampler.aimage)
726724

727725
def _pyplot(self):
728726
from matplotlib import pyplot
@@ -1318,26 +1316,22 @@ def get_sampler_args(self, image):
13181316
sample_y.reshape(1, self.resolution[1], 3), self.resolution[0], axis=0
13191317
)
13201318

1321-
normal_vec = np.zeros(
1322-
(self.resolution[0], self.resolution[1], 3), dtype="float64", order="C"
1323-
)
1319+
normal_vec = np.empty((*self.resolution, 3), dtype="float64", order="C")
13241320
normal_vec[:, :, 0] = self.orienter.unit_vectors[2, 0]
13251321
normal_vec[:, :, 1] = self.orienter.unit_vectors[2, 1]
13261322
normal_vec[:, :, 2] = self.orienter.unit_vectors[2, 2]
13271323

13281324
vectors = sample_x + sample_y + normal_vec * self.width[2]
13291325

1330-
positions = np.zeros(
1331-
(self.resolution[0], self.resolution[1], 3), dtype="float64", order="C"
1332-
)
1326+
positions = np.empty((*self.resolution, 3), dtype="float64", order="C")
13331327
positions[:, :, 0] = self.center[0]
13341328
positions[:, :, 1] = self.center[1]
13351329
positions[:, :, 2] = self.center[2]
13361330

13371331
positions = self.ds.arr(positions, units="code_length")
13381332

13391333
dummy = np.ones(3, dtype="float64")
1340-
image.shape = (self.resolution[0], self.resolution[1], 4)
1334+
image = image.reshape(*self.resolution, 4)
13411335

13421336
args = (
13431337
positions,
@@ -1373,13 +1367,13 @@ def _render(self, double_check, num_threads, image, sampler):
13731367
pbar.update(total_cells)
13741368

13751369
pbar.finish()
1376-
image = self.finalize_image(sampler.aimage)
1377-
return image
1370+
return self.finalize_image(sampler.aimage)
13781371

13791372
def finalize_image(self, image):
13801373
view_pos = self.front_center
1381-
image.shape = self.resolution[0], self.resolution[1], 4
1382-
image = self.volume.reduce_tree_images(image, view_pos)
1374+
image = self.volume.reduce_tree_images(
1375+
image.reshape(*self.resolution, 4), view_pos
1376+
)
13831377
if not self.transfer_function.grey_opacity:
13841378
image[:, :, 3] = 1.0
13851379
return image
@@ -1498,8 +1492,7 @@ def new_image(self):
14981492

14991493
def get_sampler_args(self, image):
15001494
nv = 12 * self.nside**2
1501-
vs = arr_pix2vec_nest(self.nside, np.arange(nv))
1502-
vs.shape = (nv, 1, 3)
1495+
vs = arr_pix2vec_nest(self.nside, np.arange(nv)).reshape(nv, 1, 3)
15031496
vs += 1e-8
15041497
uv = np.ones(3, dtype="float64")
15051498
positions = np.ones((nv, 1, 3), dtype="float64") * self.center
@@ -1541,16 +1534,10 @@ def _render(self, double_check, num_threads, image, sampler):
15411534
pbar.update(total_cells)
15421535

15431536
pbar.finish()
1544-
image = sampler.aimage
1545-
1546-
self.finalize_image(image)
1547-
1548-
return image
1537+
return self.finalize_image(sampler.aimage)
15491538

15501539
def finalize_image(self, image):
1551-
view_pos = self.center
1552-
image = self.volume.reduce_tree_images(image, view_pos)
1553-
return image
1540+
return self.volume.reduce_tree_images(image, self.center)
15541541

15551542
def get_information(self):
15561543
info_dict = {
@@ -1718,8 +1705,9 @@ def new_image(self):
17181705
return image
17191706

17201707
def get_sampler_args(self, image):
1721-
vp = arr_fisheye_vectors(self.resolution, self.fov)
1722-
vp.shape = (self.resolution**2, 1, 3)
1708+
vp = arr_fisheye_vectors(self.resolution, self.fov).reshape(
1709+
self.resolution**2, 1, 3
1710+
)
17231711
vp2 = vp.copy()
17241712
for i in range(3):
17251713
vp[:, :, i] = (vp2 * self.rotation_matrix[:, i]).sum(axis=2)
@@ -1744,7 +1732,7 @@ def get_sampler_args(self, image):
17441732
return args, {}
17451733

17461734
def finalize_image(self, image):
1747-
image.shape = self.resolution, self.resolution, 4
1735+
return image.reshape(self.resolution, self.resolution, 4)
17481736

17491737
def _render(self, double_check, num_threads, image, sampler):
17501738
pbar = get_pbar(
@@ -1764,11 +1752,7 @@ def _render(self, double_check, num_threads, image, sampler):
17641752
pbar.update(total_cells)
17651753

17661754
pbar.finish()
1767-
image = sampler.aimage
1768-
1769-
self.finalize_image(image)
1770-
1771-
return image
1755+
return self.finalize_image(sampler.aimage)
17721756

17731757

17741758
class MosaicCamera(Camera):
@@ -2191,8 +2175,7 @@ def _render(self, double_check, num_threads, image, sampler):
21912175
grid.clear_data()
21922176
sampler(pg, num_threads=num_threads)
21932177

2194-
image = self.finalize_image(sampler.aimage)
2195-
return image
2178+
return self.finalize_image(sampler.aimage)
21962179

21972180
def save_image(self, image, fn=None, clip_ratio=None):
21982181
dd = self.ds.all_data()
@@ -2248,9 +2231,7 @@ def get_sampler_args(self, image):
22482231
None, :
22492232
]
22502233

2251-
vectors = np.zeros(
2252-
(self.resolution[0], self.resolution[1], 3), dtype="float64", order="C"
2253-
)
2234+
vectors = np.empty((*self.resolution, 3), dtype="float64", order="C")
22542235
vectors[:, :, 0] = np.cos(px) * np.cos(py)
22552236
vectors[:, :, 1] = np.sin(px) * np.cos(py)
22562237
vectors[:, :, 2] = np.sin(py)
@@ -2261,14 +2242,13 @@ def get_sampler_args(self, image):
22612242
R2 = get_rotation_matrix(0.5 * np.pi, [0, 0, 1])
22622243
uv = np.dot(R1, self.orienter.unit_vectors)
22632244
uv = np.dot(R2, uv)
2264-
vectors.reshape((self.resolution[0] * self.resolution[1], 3))
22652245
vectors = np.dot(vectors, uv)
2266-
vectors.reshape((self.resolution[0], self.resolution[1], 3))
22672246

22682247
dummy = np.ones(3, dtype="float64")
2269-
image.shape = (self.resolution[0] * self.resolution[1], 1, 4)
2270-
vectors.shape = (self.resolution[0] * self.resolution[1], 1, 3)
2271-
positions.shape = (self.resolution[0] * self.resolution[1], 1, 3)
2248+
size = np.prod(self.resolution)
2249+
image = image.reshape(*size, 1, 4)
2250+
vectors = vectors.reshape(size, 1, 3)
2251+
positions = positions.reshape(size, 1, 3)
22722252
args = (
22732253
positions,
22742254
vectors,
@@ -2299,17 +2279,16 @@ def _render(self, double_check, num_threads, image, sampler):
22992279
pbar.update(total_cells)
23002280

23012281
pbar.finish()
2302-
image = self.finalize_image(sampler.aimage)
2303-
return image
2282+
return self.finalize_image(sampler.aimage)
23042283

23052284
def finalize_image(self, image):
23062285
view_pos = self.front_center
2307-
image.shape = self.resolution[0], self.resolution[1], 4
2308-
image = self.volume.reduce_tree_images(image, view_pos)
2286+
image = self.volume.reduce_tree_images(
2287+
image.reshape(*self.resolution, 4), view_pos
2288+
)
23092289
if not self.transfer_function.grey_opacity:
23102290
image[:, :, 3] = 1.0
2311-
image = image[1:-1, 1:-1, :]
2312-
return image
2291+
return image[1:-1, 1:-1, :]
23132292

23142293

23152294
data_object_registry["spherical_camera"] = SphericalCamera
@@ -2337,33 +2316,28 @@ def get_sampler_args(self, image):
23372316
None, :
23382317
]
23392318

2340-
vectors = np.zeros(
2341-
(self.resolution[0], self.resolution[1], 3), dtype="float64", order="C"
2342-
)
2319+
vectors = np.empty((*self.resolution, 3), dtype="float64", order="C")
23432320
vectors[:, :, 0] = np.cos(px) * np.cos(py)
23442321
vectors[:, :, 1] = np.sin(px) * np.cos(py)
23452322
vectors[:, :, 2] = np.sin(py)
2346-
vectors2 = np.zeros(
2347-
(self.resolution[0], self.resolution[1], 3), dtype="float64", order="C"
2348-
)
2323+
vectors2 = np.empty((*self.resolution, 3), dtype="float64", order="C")
23492324
vectors2[:, :, 0] = -np.sin(px) * np.ones((1, self.resolution[1]))
23502325
vectors2[:, :, 1] = np.cos(px) * np.ones((1, self.resolution[1]))
23512326
vectors2[:, :, 2] = 0
23522327

23532328
positions = self.center + vectors2 * self.disparity_s
2354-
vectors = vectors * self.width[0]
2329+
vectors *= self.width[0]
23552330
R1 = get_rotation_matrix(0.5 * np.pi, [1, 0, 0])
23562331
R2 = get_rotation_matrix(0.5 * np.pi, [0, 0, 1])
23572332
uv = np.dot(R1, self.orienter.unit_vectors)
23582333
uv = np.dot(R2, uv)
2359-
vectors.reshape((self.resolution[0] * self.resolution[1], 3))
23602334
vectors = np.dot(vectors, uv)
2361-
vectors.reshape((self.resolution[0], self.resolution[1], 3))
23622335

23632336
dummy = np.ones(3, dtype="float64")
2364-
image.shape = (self.resolution[0] * self.resolution[1], 1, 4)
2365-
vectors.shape = (self.resolution[0] * self.resolution[1], 1, 3)
2366-
positions.shape = (self.resolution[0] * self.resolution[1], 1, 3)
2337+
size = np.prod(self.resolution)
2338+
image = image.reshape(size, 1, 4)
2339+
vectors = vectors.reshape(size, 1, 3)
2340+
positions = positions.reshape(size, 1, 3)
23672341
args = (
23682342
positions,
23692343
vectors,
@@ -2428,8 +2402,7 @@ def _render(self, double_check, num_threads, image, sampler, msg):
24282402

24292403
pbar.finish()
24302404

2431-
image = sampler.aimage.copy()
2432-
image.shape = self.resolution[0], self.resolution[1], 4
2405+
image = sampler.aimage.copy().reshape(*self.resolution, 4)
24332406
if not self.transfer_function.grey_opacity:
24342407
image[:, :, 3] = 1.0
24352408
image = image[1:-1, 1:-1, :]

yt/visualization/volume_rendering/render_source.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ def finalize_image(self, camera, image):
529529
image: :class:`yt.data_objects.image_array.ImageArray` instance
530530
A reference to an image to fill
531531
"""
532-
image.shape = camera.resolution[0], camera.resolution[1], 4
532+
image = image.reshape(*camera.resolution, 4)
533533
# If the call is from VR, the image is rotated by 180 to get correct
534534
# up direction
535535
if not self.transfer_function.grey_opacity:
@@ -1295,10 +1295,11 @@ def __init__(self, left_edge, right_edge, color=None):
12951295
assert right_edge.shape == (3,)
12961296

12971297
if color is None:
1298-
color = np.array([1.0, 1.0, 1.0, 1.0])
1298+
color = np.array([[1.0, 1.0, 1.0, 1.0]])
1299+
else:
1300+
color = np.atleast_2d(ensure_numpy_array(color))
1301+
assert color.shape == (1, 4)
12991302

1300-
color = ensure_numpy_array(color)
1301-
color.shape = (1, 4)
13021303
corners = get_corners(left_edge.copy(), right_edge.copy())
13031304
order = [0, 1, 1, 2, 2, 3, 3, 0]
13041305
order += [4, 5, 5, 6, 6, 7, 7, 4]

0 commit comments

Comments
 (0)