From 522f892df7621e89854be5de04352f5990b935e7 Mon Sep 17 00:00:00 2001 From: ShivamPathak99 <98941325+ShivamPathak99@users.noreply.github.com> Date: Sun, 14 Apr 2024 22:05:03 +0530 Subject: [PATCH 1/8] linking validate hatch from hatch module --- lib/matplotlib/hatch.py | 2 ++ lib/matplotlib/rcsetup.py | 15 ++------------- lib/matplotlib/rcsetup.pyi | 2 +- lib/matplotlib/tests/test_rcparams.py | 3 +-- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/lib/matplotlib/hatch.py b/lib/matplotlib/hatch.py index 9ec88776cfd3..17056233d96f 100644 --- a/lib/matplotlib/hatch.py +++ b/lib/matplotlib/hatch.py @@ -182,6 +182,8 @@ def __init__(self, hatch, density): def _validate_hatch_pattern(hatch): valid_hatch_patterns = set(r'-+|/\xXoO.*') if hatch is not None: + if not isinstance(hatch, str): + raise ValueError("Hatch pattern must be a string") invalids = set(hatch).difference(valid_hatch_patterns) if invalids: valid = ''.join(sorted(valid_hatch_patterns)) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index a326d22f039a..605001c45c3e 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -28,6 +28,7 @@ from matplotlib.colors import Colormap, is_color_like from matplotlib._fontconfig_pattern import parse_fontconfig_pattern from matplotlib._enums import JoinStyle, CapStyle +from matplotlib.hatch import _validate_hatch_pattern # Don't let the original cycler collide with our validating cycler from cycler import Cycler, cycler as ccycler @@ -617,19 +618,7 @@ def _validate_int_greaterequal0(s): raise RuntimeError(f'Value must be >=0; got {s}') -def validate_hatch(s): - r""" - Validate a hatch pattern. - A hatch pattern string can have any sequence of the following - characters: ``\ / | - + * . x o O``. - """ - if not isinstance(s, str): - raise ValueError("Hatch pattern must be a string") - _api.check_isinstance(str, hatch_pattern=s) - unknown = set(s) - {'\\', '/', '|', '-', '+', '*', '.', 'x', 'o', 'O'} - if unknown: - raise ValueError("Unknown hatch symbol(s): %s" % list(unknown)) - return s +validate_hatch = _validate_hatch_pattern validate_hatchlist = _listify_validator(validate_hatch) diff --git a/lib/matplotlib/rcsetup.pyi b/lib/matplotlib/rcsetup.pyi index 1538dac7510e..e777d652b236 100644 --- a/lib/matplotlib/rcsetup.pyi +++ b/lib/matplotlib/rcsetup.pyi @@ -142,7 +142,7 @@ def _validate_linestyle(s: Any) -> LineStyleType: ... def validate_markeverylist(s: Any) -> list[MarkEveryType]: ... def validate_bbox(s: Any) -> Literal["tight", "standard"] | None: ... def validate_sketch(s: Any) -> None | tuple[float, float, float]: ... -def validate_hatch(s: Any) -> str: ... +def validate_hatch(hatch: Any) -> str: ... def validate_hatchlist(s: Any) -> list[str]: ... def validate_dashlist(s: Any) -> list[list[float]]: ... diff --git a/lib/matplotlib/tests/test_rcparams.py b/lib/matplotlib/tests/test_rcparams.py index 4823df0ce250..9a40d232bd0d 100644 --- a/lib/matplotlib/tests/test_rcparams.py +++ b/lib/matplotlib/tests/test_rcparams.py @@ -311,8 +311,7 @@ def generate_validator_testcases(valid): 'success': (('--|', '--|'), ('\\oO', '\\oO'), ('/+*/.x', '/+*/.x'), ('', '')), 'fail': (('--_', ValueError), - (8, ValueError), - ('X', ValueError)), + (8, ValueError)), }, {'validator': validate_colorlist, 'success': (('r,g,b', ['r', 'g', 'b']), From c57111a5bad94425aa6a5caaba8ad306d06b552c Mon Sep 17 00:00:00 2001 From: ShivamPathak99 <98941325+ShivamPathak99@users.noreply.github.com> Date: Sun, 21 Apr 2024 16:35:13 +0530 Subject: [PATCH 2/8] shifted hatch validation entirely to rcsetup hatchModule will call out rcparams for hatch validation --- lib/matplotlib/hatch.py | 20 ++------------------ lib/matplotlib/rcsetup.py | 15 +++++++++++++-- lib/matplotlib/rcsetup.pyi | 2 +- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/lib/matplotlib/hatch.py b/lib/matplotlib/hatch.py index 17056233d96f..1d3c9ea26796 100644 --- a/lib/matplotlib/hatch.py +++ b/lib/matplotlib/hatch.py @@ -2,8 +2,8 @@ import numpy as np -from matplotlib import _api from matplotlib.path import Path +from rcsetup import validate_hatch class HatchPatternBase: @@ -179,23 +179,7 @@ def __init__(self, hatch, density): ] -def _validate_hatch_pattern(hatch): - valid_hatch_patterns = set(r'-+|/\xXoO.*') - if hatch is not None: - if not isinstance(hatch, str): - raise ValueError("Hatch pattern must be a string") - invalids = set(hatch).difference(valid_hatch_patterns) - if invalids: - valid = ''.join(sorted(valid_hatch_patterns)) - invalids = ''.join(sorted(invalids)) - _api.warn_deprecated( - '3.4', - removal='3.9', # one release after custom hatches (#20690) - message=f'hatch must consist of a string of "{valid}" or ' - 'None, but found the following invalid values ' - f'"{invalids}". Passing invalid values is deprecated ' - 'since %(since)s and will become an error %(removal)s.' - ) +_validate_hatch_pattern = validate_hatch def get_path(hatchpattern, density=6): diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 605001c45c3e..a326d22f039a 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -28,7 +28,6 @@ from matplotlib.colors import Colormap, is_color_like from matplotlib._fontconfig_pattern import parse_fontconfig_pattern from matplotlib._enums import JoinStyle, CapStyle -from matplotlib.hatch import _validate_hatch_pattern # Don't let the original cycler collide with our validating cycler from cycler import Cycler, cycler as ccycler @@ -618,7 +617,19 @@ def _validate_int_greaterequal0(s): raise RuntimeError(f'Value must be >=0; got {s}') -validate_hatch = _validate_hatch_pattern +def validate_hatch(s): + r""" + Validate a hatch pattern. + A hatch pattern string can have any sequence of the following + characters: ``\ / | - + * . x o O``. + """ + if not isinstance(s, str): + raise ValueError("Hatch pattern must be a string") + _api.check_isinstance(str, hatch_pattern=s) + unknown = set(s) - {'\\', '/', '|', '-', '+', '*', '.', 'x', 'o', 'O'} + if unknown: + raise ValueError("Unknown hatch symbol(s): %s" % list(unknown)) + return s validate_hatchlist = _listify_validator(validate_hatch) diff --git a/lib/matplotlib/rcsetup.pyi b/lib/matplotlib/rcsetup.pyi index e777d652b236..1538dac7510e 100644 --- a/lib/matplotlib/rcsetup.pyi +++ b/lib/matplotlib/rcsetup.pyi @@ -142,7 +142,7 @@ def _validate_linestyle(s: Any) -> LineStyleType: ... def validate_markeverylist(s: Any) -> list[MarkEveryType]: ... def validate_bbox(s: Any) -> Literal["tight", "standard"] | None: ... def validate_sketch(s: Any) -> None | tuple[float, float, float]: ... -def validate_hatch(hatch: Any) -> str: ... +def validate_hatch(s: Any) -> str: ... def validate_hatchlist(s: Any) -> list[str]: ... def validate_dashlist(s: Any) -> list[list[float]]: ... From 4e8cd24d8b4a6e118723dc25a61bdcfc05c35f91 Mon Sep 17 00:00:00 2001 From: ShivamPathak99 <98941325+ShivamPathak99@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:55:52 +0530 Subject: [PATCH 3/8] fixed rcsetup import error FIXED: ModuleNotFoundError: No module named 'rcsetup' --- lib/matplotlib/hatch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/hatch.py b/lib/matplotlib/hatch.py index 1d3c9ea26796..dba7b0763e9f 100644 --- a/lib/matplotlib/hatch.py +++ b/lib/matplotlib/hatch.py @@ -3,7 +3,7 @@ import numpy as np from matplotlib.path import Path -from rcsetup import validate_hatch +from matplotlib.rcsetup import validate_hatch class HatchPatternBase: From 23b55a20ec871ed4eb2af8b51afdb77e1480ab48 Mon Sep 17 00:00:00 2001 From: ShivamPathak99 <98941325+ShivamPathak99@users.noreply.github.com> Date: Sun, 21 Apr 2024 20:26:07 +0530 Subject: [PATCH 4/8] Countering None Inputs --- lib/matplotlib/rcsetup.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index a326d22f039a..2ea95dde994a 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -623,13 +623,14 @@ def validate_hatch(s): A hatch pattern string can have any sequence of the following characters: ``\ / | - + * . x o O``. """ - if not isinstance(s, str): - raise ValueError("Hatch pattern must be a string") - _api.check_isinstance(str, hatch_pattern=s) - unknown = set(s) - {'\\', '/', '|', '-', '+', '*', '.', 'x', 'o', 'O'} - if unknown: - raise ValueError("Unknown hatch symbol(s): %s" % list(unknown)) - return s + if s is not None: + if not isinstance(s, str): + raise ValueError("Hatch pattern must be a string") + _api.check_isinstance(str, hatch_pattern=s) + unknown = set(s) - {'\\', '/', '|', '-', '+', '*', '.', 'x', 'o', 'O'} + if unknown: + raise ValueError("Unknown hatch symbol(s): %s" % list(unknown)) + return s validate_hatchlist = _listify_validator(validate_hatch) From 8b109bd969aae66c37dc24ddb2de1d4a900f9f58 Mon Sep 17 00:00:00 2001 From: ShivamPathak99 <98941325+ShivamPathak99@users.noreply.github.com> Date: Mon, 22 Apr 2024 00:06:35 +0530 Subject: [PATCH 5/8] added X hatch in validaion --- lib/matplotlib/rcsetup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 2ea95dde994a..b54914a2d7a3 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -627,7 +627,7 @@ def validate_hatch(s): if not isinstance(s, str): raise ValueError("Hatch pattern must be a string") _api.check_isinstance(str, hatch_pattern=s) - unknown = set(s) - {'\\', '/', '|', '-', '+', '*', '.', 'x', 'o', 'O'} + unknown = set(s) - {'\\', '/', '|', '-', '+', '*', '.', 'x', 'X', 'o', 'O'} if unknown: raise ValueError("Unknown hatch symbol(s): %s" % list(unknown)) return s From 50e591051ae453f7880577107e3c7909ad64faa7 Mon Sep 17 00:00:00 2001 From: ShivamPathak99 <98941325+ShivamPathak99@users.noreply.github.com> Date: Mon, 22 Apr 2024 21:29:42 +0530 Subject: [PATCH 6/8] Create 28076-SP.rst --- doc/api/next_api_changes/removals/28076-SP.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 doc/api/next_api_changes/removals/28076-SP.rst diff --git a/doc/api/next_api_changes/removals/28076-SP.rst b/doc/api/next_api_changes/removals/28076-SP.rst new file mode 100644 index 000000000000..87ceb0ba4520 --- /dev/null +++ b/doc/api/next_api_changes/removals/28076-SP.rst @@ -0,0 +1,4 @@ +``hatch.validate_hatch`` +~~~~~~~~~~~~~~~~~~~~~~~~ +Removal of deprecation warning for invalid hatch patterns +in hatch module, validate_hatch calls `rcsetup.validate_hatch`. From 50ff42d0d657677e2dee5694941456876f3fa16d Mon Sep 17 00:00:00 2001 From: ShivamPathak99 <98941325+ShivamPathak99@users.noreply.github.com> Date: Mon, 22 Apr 2024 23:29:44 +0530 Subject: [PATCH 7/8] Update 28076-SP.rst --- doc/api/next_api_changes/removals/28076-SP.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/next_api_changes/removals/28076-SP.rst b/doc/api/next_api_changes/removals/28076-SP.rst index 87ceb0ba4520..5f57ad59d32e 100644 --- a/doc/api/next_api_changes/removals/28076-SP.rst +++ b/doc/api/next_api_changes/removals/28076-SP.rst @@ -1,4 +1,4 @@ ``hatch.validate_hatch`` ~~~~~~~~~~~~~~~~~~~~~~~~ Removal of deprecation warning for invalid hatch patterns -in hatch module, validate_hatch calls `rcsetup.validate_hatch`. +in hatch module, validate_hatch calls `validate_hatch`. From 9f7d527a37371ce9f70496274d4b701625c5be12 Mon Sep 17 00:00:00 2001 From: ShivamPathak99 <98941325+ShivamPathak99@users.noreply.github.com> Date: Tue, 23 Apr 2024 09:51:19 +0530 Subject: [PATCH 8/8] Update 28076-SP.rst --- doc/api/next_api_changes/removals/28076-SP.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/next_api_changes/removals/28076-SP.rst b/doc/api/next_api_changes/removals/28076-SP.rst index 5f57ad59d32e..726f3d66048b 100644 --- a/doc/api/next_api_changes/removals/28076-SP.rst +++ b/doc/api/next_api_changes/removals/28076-SP.rst @@ -1,4 +1,4 @@ ``hatch.validate_hatch`` ~~~~~~~~~~~~~~~~~~~~~~~~ Removal of deprecation warning for invalid hatch patterns -in hatch module, validate_hatch calls `validate_hatch`. +in hatch module.