From 23cec17c5b101e0f2f2a297234efac3d797d6903 Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Wed, 11 Jan 2023 11:24:33 +0100 Subject: [PATCH] CLN: fix and move using_copy_on_write() helper out of internals --- pandas/_config/__init__.py | 7 +++++++ pandas/core/generic.py | 11 +++++------ pandas/core/internals/managers.py | 9 +-------- pandas/core/series.py | 10 +++++----- scripts/validate_unwanted_patterns.py | 1 + 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pandas/_config/__init__.py b/pandas/_config/__init__.py index 929f8a5af6b3f..5219abc697dbd 100644 --- a/pandas/_config/__init__.py +++ b/pandas/_config/__init__.py @@ -14,10 +14,12 @@ "describe_option", "option_context", "options", + "using_copy_on_write", ] from pandas._config import config from pandas._config import dates # pyright: ignore # noqa:F401 from pandas._config.config import ( + _global_config, describe_option, get_option, option_context, @@ -26,3 +28,8 @@ set_option, ) from pandas._config.display import detect_console_encoding + + +def using_copy_on_write(): + _mode_options = _global_config["mode"] + return _mode_options["copy_on_write"] and _mode_options["data_manager"] == "block" diff --git a/pandas/core/generic.py b/pandas/core/generic.py index baf2ae82a365e..8980fe0249193 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -29,7 +29,10 @@ import numpy as np -from pandas._config import config +from pandas._config import ( + config, + using_copy_on_write, +) from pandas._libs import lib from pandas._libs.tslibs import ( @@ -158,7 +161,6 @@ SingleArrayManager, ) from pandas.core.internals.construction import mgr_to_mgr -from pandas.core.internals.managers import using_copy_on_write from pandas.core.methods.describe import describe_ndframe from pandas.core.missing import ( clean_fill_method, @@ -4023,10 +4025,7 @@ def _check_setitem_copy(self, t: str = "setting", force: bool_t = False): df.iloc[0:5]['group'] = 'a' """ - if ( - config.get_option("mode.copy_on_write") - and config.get_option("mode.data_manager") == "block" - ): + if using_copy_on_write(): return # return early if the check is not needed diff --git a/pandas/core/internals/managers.py b/pandas/core/internals/managers.py index c90787ee24277..ac0d614dfea89 100644 --- a/pandas/core/internals/managers.py +++ b/pandas/core/internals/managers.py @@ -15,7 +15,7 @@ import numpy as np -from pandas._config import config +from pandas._config import using_copy_on_write from pandas._libs import ( algos as libalgos, @@ -2362,10 +2362,3 @@ def _preprocess_slice_or_indexer( if not allow_fill: indexer = maybe_convert_indices(indexer, length) return "fancy", indexer, len(indexer) - - -_mode_options = config._global_config["mode"] - - -def using_copy_on_write(): - return _mode_options["copy_on_write"] diff --git a/pandas/core/series.py b/pandas/core/series.py index b5d73373f061e..23982d90d693b 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -22,7 +22,10 @@ import numpy as np -from pandas._config import get_option +from pandas._config import ( + get_option, + using_copy_on_write, +) from pandas._libs import ( lib, @@ -1263,10 +1266,7 @@ def _maybe_update_cacher( # for CoW, we never want to update the parent DataFrame cache # if the Series changed, and always pop the cached item elif ( - not ( - get_option("mode.copy_on_write") - and get_option("mode.data_manager") == "block" - ) + not using_copy_on_write() and len(self) == len(ref) and self.name in ref.columns ): diff --git a/scripts/validate_unwanted_patterns.py b/scripts/validate_unwanted_patterns.py index 036ddd40ae137..68a376956429b 100755 --- a/scripts/validate_unwanted_patterns.py +++ b/scripts/validate_unwanted_patterns.py @@ -52,6 +52,7 @@ "_test_decorators", "__version__", # check np.__version__ in compat.numpy.function "_arrow_dtype_mapping", + "_global_config", }