From 717e20ebda2118cf01f569e6dfc4398ac583d1ec Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sun, 7 Apr 2024 18:24:21 +0200 Subject: [PATCH 01/13] Update axes3d.py --- lib/mpl_toolkits/mplot3d/axes3d.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index 9ca5692c40ab..aeacf9eacbb0 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -383,7 +383,8 @@ def set_box_aspect(self, aspect, *, zoom=1): # of the axes in mpl3.8. aspect *= 1.8294640721620434 * 25/24 * zoom / np.linalg.norm(aspect) - self._box_aspect = aspect + self._box_aspect = self._roll_to_vertical(aspect, sign=-1) + # self._box_aspect = aspect self.stale = True def apply_aspect(self, position=None): @@ -1190,15 +1191,16 @@ def set_proj_type(self, proj_type, focal_length=None): f"None for proj_type = {proj_type}") self._focal_length = np.inf - def _roll_to_vertical(self, arr): + def _roll_to_vertical(self, arr, sign=1): """Roll arrays to match the different vertical axis.""" - return np.roll(arr, self._vertical_axis - 2) + return np.roll(arr, sign * self._vertical_axis - 2) def get_proj(self): """Create the projection matrix from the current viewing position.""" # Transform to uniform world coordinates 0-1, 0-1, 0-1 box_aspect = self._roll_to_vertical(self._box_aspect) + # self._box_aspect = box_aspect worldM = proj3d.world_transformation( *self.get_xlim3d(), *self.get_ylim3d(), From df6dcb1554c8ac8bdca16764f9a0537e2daaf34a Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sun, 7 Apr 2024 22:02:34 +0200 Subject: [PATCH 02/13] missed paranthesis --- lib/mpl_toolkits/mplot3d/axes3d.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index aeacf9eacbb0..ea51fd687344 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -1193,7 +1193,7 @@ def set_proj_type(self, proj_type, focal_length=None): def _roll_to_vertical(self, arr, sign=1): """Roll arrays to match the different vertical axis.""" - return np.roll(arr, sign * self._vertical_axis - 2) + return np.roll(arr, sign * (self._vertical_axis - 2)) def get_proj(self): """Create the projection matrix from the current viewing position.""" From 349975d6ed6b16dbd4fc060bde8a7186fa417653 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sun, 14 Apr 2024 15:24:53 +0200 Subject: [PATCH 03/13] Add test --- lib/mpl_toolkits/mplot3d/tests/test_axes3d.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py index 7662509dd9cf..de7363f5d414 100644 --- a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py +++ b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py @@ -2249,6 +2249,19 @@ def test_view_init_vertical_axis( tickdir_actual = axis._get_tickdir('default') np.testing.assert_array_equal(tickdir_expected, tickdir_actual) +@pytest.mark.parametrize("vertical_axis", ["x", "y", "z"]) +def test_set_box_aspect_vertical_axis(vertical_axis: str) -> None: + ax = plt.subplot(1, 1, 1, projection="3d") + ax.view_init(elev=0, azim=0, roll=0, vertical_axis=vertical_axis) + ax.figure.canvas.draw() + + aspect_old = tuple(ax._box_aspect) + aspect_expected = np.roll(aspect_old, -1 * (ax._axis_names.index(vert_a) - 2)) + + ax.set_box_aspect(None) + aspect_new = tuple(ax._box_aspect) + + np.testing.assert_allclose(aspect_expected, aspect_new) @image_comparison(baseline_images=['arc_pathpatch.png'], remove_text=True, From 2f717391e37f239e8a92ff507635101c50364af6 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sun, 14 Apr 2024 15:32:13 +0200 Subject: [PATCH 04/13] Update test_axes3d.py --- lib/mpl_toolkits/mplot3d/tests/test_axes3d.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py index de7363f5d414..4a16ca43024b 100644 --- a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py +++ b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py @@ -2256,7 +2256,9 @@ def test_set_box_aspect_vertical_axis(vertical_axis: str) -> None: ax.figure.canvas.draw() aspect_old = tuple(ax._box_aspect) - aspect_expected = np.roll(aspect_old, -1 * (ax._axis_names.index(vert_a) - 2)) + aspect_expected = np.roll( + aspect_old, -1 * (ax._axis_names.index(vertical_axis) - 2) + ) ax.set_box_aspect(None) aspect_new = tuple(ax._box_aspect) From 11d996ffe326780bb6efa0c8112c22abe69daffe Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sun, 14 Apr 2024 15:33:41 +0200 Subject: [PATCH 05/13] Update test_axes3d.py --- lib/mpl_toolkits/mplot3d/tests/test_axes3d.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py index 4a16ca43024b..3403692d2412 100644 --- a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py +++ b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py @@ -2249,6 +2249,7 @@ def test_view_init_vertical_axis( tickdir_actual = axis._get_tickdir('default') np.testing.assert_array_equal(tickdir_expected, tickdir_actual) + @pytest.mark.parametrize("vertical_axis", ["x", "y", "z"]) def test_set_box_aspect_vertical_axis(vertical_axis: str) -> None: ax = plt.subplot(1, 1, 1, projection="3d") @@ -2265,6 +2266,7 @@ def test_set_box_aspect_vertical_axis(vertical_axis: str) -> None: np.testing.assert_allclose(aspect_expected, aspect_new) + @image_comparison(baseline_images=['arc_pathpatch.png'], remove_text=True, style='mpl20') From 373651fbd7a65ab443a20878615216fa7fc247a6 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Wed, 17 Apr 2024 19:54:01 +0200 Subject: [PATCH 06/13] Update lib/mpl_toolkits/mplot3d/axes3d.py Co-authored-by: Scott Shambaugh <14363975+scottshambaugh@users.noreply.github.com> --- lib/mpl_toolkits/mplot3d/axes3d.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index ea51fd687344..0c94c58bcf37 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -384,7 +384,6 @@ def set_box_aspect(self, aspect, *, zoom=1): aspect *= 1.8294640721620434 * 25/24 * zoom / np.linalg.norm(aspect) self._box_aspect = self._roll_to_vertical(aspect, sign=-1) - # self._box_aspect = aspect self.stale = True def apply_aspect(self, position=None): From 3589da57d0365417627a187adec607b4f282cbe3 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Wed, 17 Apr 2024 19:54:26 +0200 Subject: [PATCH 07/13] Update lib/mpl_toolkits/mplot3d/axes3d.py --- lib/mpl_toolkits/mplot3d/axes3d.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index 0c94c58bcf37..c08c3c2dd8ca 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -1199,7 +1199,6 @@ def get_proj(self): # Transform to uniform world coordinates 0-1, 0-1, 0-1 box_aspect = self._roll_to_vertical(self._box_aspect) - # self._box_aspect = box_aspect worldM = proj3d.world_transformation( *self.get_xlim3d(), *self.get_ylim3d(), From 2f49d87522e71ce23427e3f73adbdbd14afa1eeb Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Wed, 22 May 2024 18:58:57 +0200 Subject: [PATCH 08/13] Expand docstring --- lib/mpl_toolkits/mplot3d/axes3d.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index 6844cc6b3afd..724f71c9a42e 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -11,6 +11,7 @@ """ from collections import defaultdict +from typing import Literal import itertools import math import textwrap @@ -1191,8 +1192,20 @@ def set_proj_type(self, proj_type, focal_length=None): f"None for proj_type = {proj_type}") self._focal_length = np.inf - def _roll_to_vertical(self, arr, sign=1): - """Roll arrays to match the different vertical axis.""" + def _roll_to_vertical( + self, arr: "np.typing.ArrayLike", sign: Literal[1, -1] = 1 + ) -> np.ndarray: + """ + Roll arrays to match the different vertical axis. + + Parameters + ---------- + arr : ArrayLike + Array to roll. + sign : Literal[1, -1], default: 1 + Roll the array elements in a positive or negative + direction. Defaults to the positive direction. + """ return np.roll(arr, sign * (self._vertical_axis - 2)) def get_proj(self): From f7259e4207eeab4eea83eea81e563cc45500f6f4 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Tue, 28 May 2024 23:43:27 +0200 Subject: [PATCH 09/13] Explicit test --- lib/mpl_toolkits/mplot3d/tests/test_axes3d.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py index addf199819dd..adbb2d32f200 100644 --- a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py +++ b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py @@ -2276,21 +2276,22 @@ def test_on_move_vertical_axis(vertical_axis: str) -> None: ) -@pytest.mark.parametrize("vertical_axis", ["x", "y", "z"]) -def test_set_box_aspect_vertical_axis(vertical_axis: str) -> None: +@pytest.mark.parametrize( + "vertical_axis, aspect_expected", + [ + ("x", [1.14285715, 0.85714286, 1.14285715]), + ("y", [0.85714286, 1.14285715, 1.14285715]), + ("z", [1.14285715, 1.14285715, 0.85714286]), + ], +) +def test_set_box_aspect_vertical_axis(vertical_axis, aspect_expected): ax = plt.subplot(1, 1, 1, projection="3d") ax.view_init(elev=0, azim=0, roll=0, vertical_axis=vertical_axis) ax.figure.canvas.draw() - aspect_old = tuple(ax._box_aspect) - aspect_expected = np.roll( - aspect_old, -1 * (ax._axis_names.index(vertical_axis) - 2) - ) - ax.set_box_aspect(None) - aspect_new = tuple(ax._box_aspect) - np.testing.assert_allclose(aspect_expected, aspect_new) + np.testing.assert_allclose(aspect_expected, ax._box_aspect) @image_comparison(baseline_images=['arc_pathpatch.png'], From 68b26dfc0cde0d3b95c758cdc1b27949d0690503 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Tue, 28 May 2024 23:49:56 +0200 Subject: [PATCH 10/13] rename sign to reverse --- lib/mpl_toolkits/mplot3d/axes3d.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index 724f71c9a42e..d08454ecb136 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -384,7 +384,7 @@ def set_box_aspect(self, aspect, *, zoom=1): # of the axes in mpl3.8. aspect *= 1.8294640721620434 * 25/24 * zoom / np.linalg.norm(aspect) - self._box_aspect = self._roll_to_vertical(aspect, sign=-1) + self._box_aspect = self._roll_to_vertical(aspect, reverse=True) self.stale = True def apply_aspect(self, position=None): @@ -1193,7 +1193,7 @@ def set_proj_type(self, proj_type, focal_length=None): self._focal_length = np.inf def _roll_to_vertical( - self, arr: "np.typing.ArrayLike", sign: Literal[1, -1] = 1 + self, arr: "np.typing.ArrayLike", reverse: bool = False ) -> np.ndarray: """ Roll arrays to match the different vertical axis. @@ -1202,11 +1202,13 @@ def _roll_to_vertical( ---------- arr : ArrayLike Array to roll. - sign : Literal[1, -1], default: 1 - Roll the array elements in a positive or negative - direction. Defaults to the positive direction. + reverse : bool, default: False + Reverse the direction of the roll. """ - return np.roll(arr, sign * (self._vertical_axis - 2)) + if reverse: + return np.roll(arr, (self._vertical_axis - 2) * -1) + else: + return np.roll(arr, (self._vertical_axis - 2)) def get_proj(self): """Create the projection matrix from the current viewing position.""" From 57c7a651c21e9276c84378df81194d4e020696e3 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Tue, 28 May 2024 23:51:56 +0200 Subject: [PATCH 11/13] Update axes3d.py --- lib/mpl_toolkits/mplot3d/axes3d.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index d08454ecb136..347fbe5f6db6 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -11,7 +11,6 @@ """ from collections import defaultdict -from typing import Literal import itertools import math import textwrap From 1137dceabbdd69aec5efa381331b3989f8bafa16 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Wed, 29 May 2024 19:10:57 +0200 Subject: [PATCH 12/13] correct expected values according to ci --- lib/mpl_toolkits/mplot3d/tests/test_axes3d.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py index adbb2d32f200..1ab1571241c5 100644 --- a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py +++ b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py @@ -2279,9 +2279,9 @@ def test_on_move_vertical_axis(vertical_axis: str) -> None: @pytest.mark.parametrize( "vertical_axis, aspect_expected", [ - ("x", [1.14285715, 0.85714286, 1.14285715]), - ("y", [0.85714286, 1.14285715, 1.14285715]), - ("z", [1.14285715, 1.14285715, 0.85714286]), + ("x", [1.190476, 0.892857, 1.190476]), + ("y", [0.892857, 1.190476, 1.190476]), + ("z", [1.190476, 1.190476, 0.892857]), ], ) def test_set_box_aspect_vertical_axis(vertical_axis, aspect_expected): From 74055974a50edee07bcc48db39408472c29959e1 Mon Sep 17 00:00:00 2001 From: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com> Date: Sun, 2 Jun 2024 09:20:03 +0200 Subject: [PATCH 13/13] Update lib/mpl_toolkits/mplot3d/tests/test_axes3d.py --- lib/mpl_toolkits/mplot3d/tests/test_axes3d.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py index 1ab1571241c5..7bcd121ab597 100644 --- a/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py +++ b/lib/mpl_toolkits/mplot3d/tests/test_axes3d.py @@ -2291,7 +2291,7 @@ def test_set_box_aspect_vertical_axis(vertical_axis, aspect_expected): ax.set_box_aspect(None) - np.testing.assert_allclose(aspect_expected, ax._box_aspect) + np.testing.assert_allclose(aspect_expected, ax._box_aspect, rtol=1e-6) @image_comparison(baseline_images=['arc_pathpatch.png'],