From 439395a89827b197f93024aba7c68a6b83b63c33 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Tue, 12 Mar 2024 01:22:43 +0100 Subject: [PATCH 01/23] support running multiple docstring checks in one call --- scripts/validate_docstrings.py | 39 ++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 3c13b42d61ace..c55ddb4ea9984 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -17,6 +17,7 @@ import argparse import doctest +from functools import lru_cache import importlib import json import os @@ -221,6 +222,7 @@ def non_hyphenated_array_like(self): return "array_like" in self.raw_doc +@lru_cache(maxsize=None) def pandas_validate(func_name: str): """ Call the numpydoc validation, and add the errors specific to pandas. @@ -426,7 +428,7 @@ def main(func_name, prefix, errors, output_format, ignore_deprecated, ignore_fun return 0 -if __name__ == "__main__": +def init_argparser(): format_opts = "default", "json", "actions" func_help = ( "function or method to validate (e.g. pandas.DataFrame.head) " @@ -477,9 +479,20 @@ def main(func_name, prefix, errors, output_format, ignore_deprecated, ignore_fun "Inverse of the `function` argument.", ) - args = argparser.parse_args() - sys.exit( - main( + return argparser + + +def validate_all_arg_groups(arg_groups): + exit_status = 0 + for args in arg_groups: + error_str = args.errors.replace(",", ", ") if args.errors else "" + if args.ignore_functions: + msg = f"Partially validate docstrings ({error_str})\n" + else: + msg = f"Validate docstrings ({error_str})\n" + sys.stdout.write(msg) + + exit_status += main( args.function, args.prefix, args.errors.split(",") if args.errors else None, @@ -487,4 +500,22 @@ def main(func_name, prefix, errors, output_format, ignore_deprecated, ignore_fun args.ignore_deprecated, args.ignore_functions, ) + sys.stdout.write(f"({error_str}) DONE") + return exit_status + + +if __name__ == "__main__": + # we are processing multiple validation runs, each parametrized differently and + # delimited with "--" in the command line arguments + if "--" in sys.argv[1:]: + arg_groups = " ".join(sys.argv[1:]).split(" -- ") + arg_groups = [group.split(" ") for group in arg_groups] + else: + arg_groups = [sys.argv[1:]] + + argparser = init_argparser() + parsed_arg_groups = [argparser.parse_args(arg_group) for arg_group in arg_groups] + + sys.exit( + validate_all_arg_groups(parsed_arg_groups) ) From 6afa708fda5ff44f3442352d4e8b7e8507d90696 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Tue, 12 Mar 2024 01:27:09 +0100 Subject: [PATCH 02/23] add test --- scripts/tests/test_validate_docstrings.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/scripts/tests/test_validate_docstrings.py b/scripts/tests/test_validate_docstrings.py index ea44bd3fcc4cf..d9393a652360e 100644 --- a/scripts/tests/test_validate_docstrings.py +++ b/scripts/tests/test_validate_docstrings.py @@ -1,3 +1,4 @@ +import argparse import io import textwrap @@ -400,6 +401,28 @@ def test_exit_status_errors_for_validate_all(self, monkeypatch) -> None: ) assert exit_status == 5 + def test_exit_status_errors_for_combined_validations(self, monkeypatch) -> None: + default_return = 5 + mock = lambda func, fmt, pref, err, ignore_depr, ignore_func: default_return + monkeypatch.setattr( + validate_docstrings, + "main", + mock + ) + + command = argparse.Namespace( + function=None, + format="default", + prefix=None, + errors=None, + ignore_deprecated=False, + ignore_functions=None + ) + + n = 3 + exit_status = validate_docstrings.validate_all_arg_groups([command] * n) + assert exit_status == default_return * n + def test_no_exit_status_noerrors_for_validate_all(self, monkeypatch) -> None: monkeypatch.setattr( validate_docstrings, From 03fe545cb969782d33c9ca0bca3ae83af8252f89 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Tue, 12 Mar 2024 01:28:24 +0100 Subject: [PATCH 03/23] group docstring calls in code_checks --- ci/code_checks.sh | 78 +++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/ci/code_checks.sh b/ci/code_checks.sh index c4e43b88a0097..4ba66f3ce458e 100755 --- a/ci/code_checks.sh +++ b/ci/code_checks.sh @@ -65,12 +65,14 @@ fi ### DOCSTRINGS ### if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then - MSG='Validate docstrings (EX01, EX03, EX04, GL01, GL02, GL03, GL04, GL05, GL06, GL07, GL09, GL10, PD01, PR03, PR04, PR05, PR06, PR08, PR09, PR10, RT01, RT02, RT04, RT05, SA02, SA03, SA04, SA05, SS01, SS02, SS03, SS04, SS05, SS06)' ; echo $MSG - $BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=EX01,EX03,EX04,GL01,GL02,GL03,GL04,GL05,GL06,GL07,GL09,GL10,PD01,PR03,PR04,PR05,PR06,PR08,PR09,PR10,RT01,RT02,RT04,RT05,SA02,SA03,SA04,SA05,SS01,SS02,SS03,SS04,SS05,SS06 - RET=$(($RET + $?)) ; echo $MSG "DONE" - - MSG='Partially validate docstrings (PR02)' ; echo $MSG - $BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=PR02 --ignore_functions \ + # Run multiple calls of the validation script in a single python python process + # Each group of parameters is separated with '--' + # This way module compiles, imports and processed source files can be cached, among other things + PARAMETERS=(--format=actions --errors=EX01,EX03,EX04,GL01,GL02,GL03,GL04,GL05,GL06,GL07,GL09,GL10,PD01,PR03,PR04,PR05,PR06,PR08,PR09,PR10,RT01,RT02,RT04,RT05,SA02,SA03,SA04,SA05,SS01,SS02,SS03,SS04,SS05,SS06) + ##### + # end of full error validation group + ##### + PARAMETERS+=(-- --format=actions --errors=PR02 --ignore_functions \ pandas.Series.dt.as_unit\ pandas.Series.dt.to_period\ pandas.Series.dt.tz_localize\ @@ -139,11 +141,12 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.core.groupby.DataFrameGroupBy.nth\ pandas.core.groupby.SeriesGroupBy.nth\ pandas.core.groupby.DataFrameGroupBy.plot\ - pandas.core.groupby.SeriesGroupBy.plot # There should be no backslash in the final line, please keep this comment in the last ignored function - RET=$(($RET + $?)) ; echo $MSG "DONE" - - MSG='Partially validate docstrings (GL08)' ; echo $MSG - $BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=GL08 --ignore_functions \ + pandas.core.groupby.SeriesGroupBy.plot + ) + ##### + # end of PR02 group + ##### + PARAMETERS+=(-- --format=actions --errors=GL08 --ignore_functions \ pandas.ExcelFile.book\ pandas.Index.empty\ pandas.Index.names\ @@ -397,11 +400,12 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.tseries.offsets.YearEnd.n\ pandas.tseries.offsets.YearEnd.nanos\ pandas.tseries.offsets.YearEnd.normalize\ - pandas.tseries.offsets.YearEnd.rule_code # There should be no backslash in the final line, please keep this comment in the last ignored function - RET=$(($RET + $?)) ; echo $MSG "DONE" - - MSG='Partially validate docstrings (PR01)' ; echo $MSG - $BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=PR01 --ignore_functions \ + pandas.tseries.offsets.YearEnd.rule_code + ) + ##### + # end of GL08 group + ##### + PARAMETERS+=(-- --format=actions --errors=PR01 --ignore_functions \ pandas.DataFrame.at_time\ pandas.DataFrame.backfill\ pandas.DataFrame.get\ @@ -494,11 +498,12 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.melt\ pandas.option_context\ pandas.read_fwf\ - pandas.reset_option # There should be no backslash in the final line, please keep this comment in the last ignored function - RET=$(($RET + $?)) ; echo $MSG "DONE" - - MSG='Partially validate docstrings (PR07)' ; echo $MSG - $BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=PR07 --ignore_functions \ + pandas.reset_option + ) + ##### + # end of PR01 group + ##### + PARAMETERS+=(-- --format=actions --errors=PR07 --ignore_functions \ pandas.DataFrame.get\ pandas.DataFrame.rolling\ pandas.DataFrame.to_hdf\ @@ -609,11 +614,12 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.testing.assert_series_equal\ pandas.unique\ pandas.util.hash_array\ - pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function - RET=$(($RET + $?)) ; echo $MSG "DONE" - - MSG='Partially validate docstrings (RT03)' ; echo $MSG - $BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=RT03 --ignore_functions \ + pandas.util.hash_pandas_object + ) + ##### + # end of PR07 group + ##### + PARAMETERS+=(-- --format=actions --errors=RT03 --ignore_functions \ pandas.DataFrame.hist\ pandas.DataFrame.infer_objects\ pandas.DataFrame.kurt\ @@ -860,11 +866,12 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.read_stata\ pandas.set_eng_float_format\ pandas.timedelta_range\ - pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function - RET=$(($RET + $?)) ; echo $MSG "DONE" - - MSG='Partially validate docstrings (SA01)' ; echo $MSG - $BASE_DIR/scripts/validate_docstrings.py --format=actions --errors=SA01 --ignore_functions \ + pandas.util.hash_pandas_object + ) + ##### + # end of RT03 group + ##### + PARAMETERS+=(-- --format=actions --errors=SA01 --ignore_functions \ pandas.BooleanDtype\ pandas.Categorical.__array__\ pandas.Categorical.as_ordered\ @@ -1631,8 +1638,13 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.tseries.offsets.YearEnd.kwds\ pandas.tseries.offsets.YearEnd.name\ pandas.util.hash_array\ - pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function - RET=$(($RET + $?)) ; echo $MSG "DONE" + pandas.util.hash_pandas_object + ) + ##### + # end of SA01 group + ##### + $BASE_DIR/scripts/validate_docstrings.py ${PARAMETERS[@]} + RET=$(($RET + $?)) ; fi From c01a78e417b15e7d4d796667c9bb13205c3c8ca9 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Wed, 13 Mar 2024 00:37:30 +0100 Subject: [PATCH 04/23] fix after merge, add cache size limit --- ci/code_checks.sh | 44 +++++----------------------------- scripts/validate_docstrings.py | 5 +++- 2 files changed, 10 insertions(+), 39 deletions(-) diff --git a/ci/code_checks.sh b/ci/code_checks.sh index 4ba66f3ce458e..d520bea11ba09 100755 --- a/ci/code_checks.sh +++ b/ci/code_checks.sh @@ -66,7 +66,7 @@ fi if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then # Run multiple calls of the validation script in a single python python process - # Each group of parameters is separated with '--' + # Each group of parameters is separated with -- # This way module compiles, imports and processed source files can be cached, among other things PARAMETERS=(--format=actions --errors=EX01,EX03,EX04,GL01,GL02,GL03,GL04,GL05,GL06,GL07,GL09,GL10,PD01,PR03,PR04,PR05,PR06,PR08,PR09,PR10,RT01,RT02,RT04,RT05,SA02,SA03,SA04,SA05,SS01,SS02,SS03,SS04,SS05,SS06) ##### @@ -141,7 +141,7 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.core.groupby.DataFrameGroupBy.nth\ pandas.core.groupby.SeriesGroupBy.nth\ pandas.core.groupby.DataFrameGroupBy.plot\ - pandas.core.groupby.SeriesGroupBy.plot + pandas.core.groupby.SeriesGroupBy.plot # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of PR02 group @@ -400,7 +400,7 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.tseries.offsets.YearEnd.n\ pandas.tseries.offsets.YearEnd.nanos\ pandas.tseries.offsets.YearEnd.normalize\ - pandas.tseries.offsets.YearEnd.rule_code + pandas.tseries.offsets.YearEnd.rule_code # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of GL08 group @@ -494,24 +494,12 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.errors.AbstractMethodError\ pandas.errors.UndefinedVariableError\ pandas.get_option\ - pandas.io.formats.style.Styler.to_excel\ - pandas.melt\ - pandas.option_context\ - pandas.read_fwf\ - pandas.reset_option + pandas.io.formats.style.Styler.to_excel # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of PR01 group ##### PARAMETERS+=(-- --format=actions --errors=PR07 --ignore_functions \ - pandas.DataFrame.get\ - pandas.DataFrame.rolling\ - pandas.DataFrame.to_hdf\ - pandas.DatetimeIndex.indexer_between_time\ - pandas.DatetimeIndex.mean\ - pandas.HDFStore.append\ - pandas.HDFStore.get\ - pandas.HDFStore.put\ pandas.Index\ pandas.Index.append\ pandas.Index.copy\ @@ -629,18 +617,12 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.DataFrame.mean\ pandas.DataFrame.median\ pandas.DataFrame.min\ - pandas.DataFrame.pop\ pandas.DataFrame.prod\ pandas.DataFrame.product\ - pandas.DataFrame.reindex\ - pandas.DataFrame.reorder_levels\ pandas.DataFrame.sem\ pandas.DataFrame.skew\ pandas.DataFrame.std\ pandas.DataFrame.sum\ - pandas.DataFrame.swapaxes\ - pandas.DataFrame.to_numpy\ - pandas.DataFrame.to_orc\ pandas.DataFrame.to_parquet\ pandas.DataFrame.unstack\ pandas.DataFrame.value_counts\ @@ -860,30 +842,19 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.plotting.parallel_coordinates\ pandas.plotting.radviz\ pandas.plotting.table\ - pandas.read_orc\ - pandas.read_sas\ - pandas.read_spss\ - pandas.read_stata\ - pandas.set_eng_float_format\ - pandas.timedelta_range\ - pandas.util.hash_pandas_object + pandas.set_eng_float_format # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of RT03 group ##### PARAMETERS+=(-- --format=actions --errors=SA01 --ignore_functions \ - pandas.BooleanDtype\ pandas.Categorical.__array__\ - pandas.Categorical.as_ordered\ - pandas.Categorical.as_unordered\ pandas.Categorical.codes\ pandas.Categorical.dtype\ pandas.Categorical.from_codes\ pandas.Categorical.ordered\ pandas.CategoricalDtype.categories\ pandas.CategoricalDtype.ordered\ - pandas.CategoricalIndex.as_ordered\ - pandas.CategoricalIndex.as_unordered\ pandas.CategoricalIndex.codes\ pandas.CategoricalIndex.ordered\ pandas.DataFrame.__dataframe__\ @@ -1080,8 +1051,6 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.Series.backfill\ pandas.Series.bfill\ pandas.Series.cat\ - pandas.Series.cat.as_ordered\ - pandas.Series.cat.as_unordered\ pandas.Series.cat.codes\ pandas.Series.cat.ordered\ pandas.Series.copy\ @@ -1184,7 +1153,6 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.Series.update\ pandas.Series.var\ pandas.SparseDtype\ - pandas.StringDtype\ pandas.Timedelta\ pandas.Timedelta.as_unit\ pandas.Timedelta.asm8\ @@ -1638,7 +1606,7 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.tseries.offsets.YearEnd.kwds\ pandas.tseries.offsets.YearEnd.name\ pandas.util.hash_array\ - pandas.util.hash_pandas_object + pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of SA01 group diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index c55ddb4ea9984..8da897268e54b 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -222,7 +222,9 @@ def non_hyphenated_array_like(self): return "array_like" in self.raw_doc -@lru_cache(maxsize=None) +# reuse validation result in case redundant validations are run due to errors with +# excluded functions +@lru_cache(maxsize=4000) def pandas_validate(func_name: str): """ Call the numpydoc validation, and add the errors specific to pandas. @@ -501,6 +503,7 @@ def validate_all_arg_groups(arg_groups): args.ignore_functions, ) sys.stdout.write(f"({error_str}) DONE") + sys.stdout.write(f"({error_str}) DONE\n") return exit_status From 841793f1e1c7e66896b94285571b4be1591d782b Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Wed, 13 Mar 2024 01:07:33 +0100 Subject: [PATCH 05/23] merge --- scripts/validate_docstrings.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 8da897268e54b..72ee4e1dd0e25 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -502,7 +502,6 @@ def validate_all_arg_groups(arg_groups): args.ignore_deprecated, args.ignore_functions, ) - sys.stdout.write(f"({error_str}) DONE") sys.stdout.write(f"({error_str}) DONE\n") return exit_status From 0ed525a851800373bdaf4684ecaefb308dc1c33d Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Wed, 13 Mar 2024 01:23:56 +0100 Subject: [PATCH 06/23] prepare PR --- ci/code_checks.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ci/code_checks.sh b/ci/code_checks.sh index 90717b8f685e9..36c0d103b0542 100755 --- a/ci/code_checks.sh +++ b/ci/code_checks.sh @@ -147,7 +147,6 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then # end of PR02 group ##### PARAMETERS+=(-- --format=actions --errors=GL08 --ignore_functions \ - pandas.ExcelFile.book\ pandas.Index.empty\ pandas.Index.names\ pandas.Index.view\ @@ -602,7 +601,7 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.testing.assert_series_equal\ pandas.unique\ pandas.util.hash_array\ - pandas.util.hash_pandas_object + pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of PR07 group @@ -1607,7 +1606,12 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then pandas.tseries.offsets.YearEnd.name\ pandas.util.hash_array\ pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function - RET=$(($RET + $?)) ; echo $MSG "DONE" + ) + ##### + # end of SA01 group + ##### + $BASE_DIR/scripts/validate_docstrings.py ${PARAMETERS[@]} + RET=$(($RET + $?)) ; fi From 22c8dceed3731c1af75e3f8551e79bbec142d153 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Wed, 13 Mar 2024 01:42:32 +0100 Subject: [PATCH 07/23] revert CLI formatting --- scripts/validate_docstrings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 72ee4e1dd0e25..69ab02936257c 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -489,10 +489,10 @@ def validate_all_arg_groups(arg_groups): for args in arg_groups: error_str = args.errors.replace(",", ", ") if args.errors else "" if args.ignore_functions: - msg = f"Partially validate docstrings ({error_str})\n" + msg = f"Partially validate docstrings ({error_str})" else: - msg = f"Validate docstrings ({error_str})\n" - sys.stdout.write(msg) + msg = f"Validate docstrings ({error_str})" + sys.stdout.write(msg + os.linesep) exit_status += main( args.function, @@ -502,7 +502,7 @@ def validate_all_arg_groups(arg_groups): args.ignore_deprecated, args.ignore_functions, ) - sys.stdout.write(f"({error_str}) DONE\n") + sys.stdout.write(msg + " DONE" + os.linesep) return exit_status From 99f0ceee628b8cc82cbe530f0295ad3d225f9998 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Thu, 14 Mar 2024 02:11:48 +0100 Subject: [PATCH 08/23] introduce new shell parameter --- ci/code_checks.sh | 3030 ++++++++++++++++---------------- scripts/validate_docstrings.py | 59 +- 2 files changed, 1558 insertions(+), 1531 deletions(-) diff --git a/ci/code_checks.sh b/ci/code_checks.sh index 36c0d103b0542..812a1eebda054 100755 --- a/ci/code_checks.sh +++ b/ci/code_checks.sh @@ -72,1540 +72,1540 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then ##### # end of full error validation group ##### - PARAMETERS+=(-- --format=actions --errors=PR02 --ignore_functions \ - pandas.Series.dt.as_unit\ - pandas.Series.dt.to_period\ - pandas.Series.dt.tz_localize\ - pandas.Series.dt.tz_convert\ - pandas.Series.dt.strftime\ - pandas.Series.dt.round\ - pandas.Series.dt.floor\ - pandas.Series.dt.ceil\ - pandas.Series.dt.month_name\ - pandas.Series.dt.day_name\ - pandas.Series.cat.rename_categories\ - pandas.Series.cat.reorder_categories\ - pandas.Series.cat.add_categories\ - pandas.Series.cat.remove_categories\ - pandas.Series.cat.set_categories\ - pandas.Series.plot\ - pandas.DataFrame.plot\ - pandas.tseries.offsets.DateOffset\ - pandas.tseries.offsets.BusinessDay\ - pandas.tseries.offsets.BDay\ - pandas.tseries.offsets.BusinessHour\ - pandas.tseries.offsets.CustomBusinessDay\ - pandas.tseries.offsets.CDay\ - pandas.tseries.offsets.CustomBusinessHour\ - pandas.tseries.offsets.MonthEnd\ - pandas.tseries.offsets.MonthBegin\ - pandas.tseries.offsets.BusinessMonthEnd\ - pandas.tseries.offsets.BMonthEnd\ - pandas.tseries.offsets.BusinessMonthBegin\ - pandas.tseries.offsets.BMonthBegin\ - pandas.tseries.offsets.CustomBusinessMonthEnd\ - pandas.tseries.offsets.CBMonthEnd\ - pandas.tseries.offsets.CustomBusinessMonthBegin\ - pandas.tseries.offsets.CBMonthBegin\ - pandas.tseries.offsets.SemiMonthEnd\ - pandas.tseries.offsets.SemiMonthBegin\ - pandas.tseries.offsets.Week\ - pandas.tseries.offsets.WeekOfMonth\ - pandas.tseries.offsets.LastWeekOfMonth\ - pandas.tseries.offsets.BQuarterEnd\ - pandas.tseries.offsets.BQuarterBegin\ - pandas.tseries.offsets.QuarterEnd\ - pandas.tseries.offsets.QuarterBegin\ - pandas.tseries.offsets.BYearEnd\ - pandas.tseries.offsets.BYearBegin\ - pandas.tseries.offsets.YearEnd\ - pandas.tseries.offsets.YearBegin\ - pandas.tseries.offsets.FY5253\ - pandas.tseries.offsets.FY5253Quarter\ - pandas.tseries.offsets.Easter\ - pandas.tseries.offsets.Day\ - pandas.tseries.offsets.Hour\ - pandas.tseries.offsets.Minute\ - pandas.tseries.offsets.Second\ - pandas.tseries.offsets.Milli\ - pandas.tseries.offsets.Micro\ - pandas.tseries.offsets.Nano\ - pandas.Timestamp.max\ - pandas.Timestamp.min\ - pandas.Timestamp.resolution\ - pandas.Timedelta.max\ - pandas.Timedelta.min\ - pandas.Timedelta.resolution\ - pandas.Interval\ - pandas.Grouper\ - pandas.core.groupby.DataFrameGroupBy.nth\ - pandas.core.groupby.SeriesGroupBy.nth\ - pandas.core.groupby.DataFrameGroupBy.plot\ - pandas.core.groupby.SeriesGroupBy.plot # There should be no backslash in the final line, please keep this comment in the last ignored function - ) + PARAMETERS+=(--for_error_ignore_functions PR02 \ +pandas.Series.dt.as_unit,\ +pandas.Series.dt.to_period,\ +pandas.Series.dt.tz_localize,\ +pandas.Series.dt.tz_convert,\ +pandas.Series.dt.strftime,\ +pandas.Series.dt.round,\ +pandas.Series.dt.floor,\ +pandas.Series.dt.ceil,\ +pandas.Series.dt.month_name,\ +pandas.Series.dt.day_name,\ +pandas.Series.cat.rename_categories,\ +pandas.Series.cat.reorder_categories,\ +pandas.Series.cat.add_categories,\ +pandas.Series.cat.remove_categories,\ +pandas.Series.cat.set_categories,\ +pandas.Series.plot,\ +pandas.DataFrame.plot,\ +pandas.tseries.offsets.DateOffset,\ +pandas.tseries.offsets.BusinessDay,\ +pandas.tseries.offsets.BDay,\ +pandas.tseries.offsets.BusinessHour,\ +pandas.tseries.offsets.CustomBusinessDay,\ +pandas.tseries.offsets.CDay,\ +pandas.tseries.offsets.CustomBusinessHour,\ +pandas.tseries.offsets.MonthEnd,\ +pandas.tseries.offsets.MonthBegin,\ +pandas.tseries.offsets.BusinessMonthEnd,\ +pandas.tseries.offsets.BMonthEnd,\ +pandas.tseries.offsets.BusinessMonthBegin,\ +pandas.tseries.offsets.BMonthBegin,\ +pandas.tseries.offsets.CustomBusinessMonthEnd,\ +pandas.tseries.offsets.CBMonthEnd,\ +pandas.tseries.offsets.CustomBusinessMonthBegin,\ +pandas.tseries.offsets.CBMonthBegin,\ +pandas.tseries.offsets.SemiMonthEnd,\ +pandas.tseries.offsets.SemiMonthBegin,\ +pandas.tseries.offsets.Week,\ +pandas.tseries.offsets.WeekOfMonth,\ +pandas.tseries.offsets.LastWeekOfMonth,\ +pandas.tseries.offsets.BQuarterEnd,\ +pandas.tseries.offsets.BQuarterBegin,\ +pandas.tseries.offsets.QuarterEnd,\ +pandas.tseries.offsets.QuarterBegin,\ +pandas.tseries.offsets.BYearEnd,\ +pandas.tseries.offsets.BYearBegin,\ +pandas.tseries.offsets.YearEnd,\ +pandas.tseries.offsets.YearBegin,\ +pandas.tseries.offsets.FY5253,\ +pandas.tseries.offsets.FY5253Quarter,\ +pandas.tseries.offsets.Easter,\ +pandas.tseries.offsets.Day,\ +pandas.tseries.offsets.Hour,\ +pandas.tseries.offsets.Minute,\ +pandas.tseries.offsets.Second,\ +pandas.tseries.offsets.Milli,\ +pandas.tseries.offsets.Micro,\ +pandas.tseries.offsets.Nano,\ +pandas.Timestamp.max,\ +pandas.Timestamp.min,\ +pandas.Timestamp.resolution,\ +pandas.Timedelta.max,\ +pandas.Timedelta.min,\ +pandas.Timedelta.resolution,\ +pandas.Interval,\ +pandas.Grouper,\ +pandas.core.groupby.DataFrameGroupBy.nth,\ +pandas.core.groupby.SeriesGroupBy.nth,\ +pandas.core.groupby.DataFrameGroupBy.plot,\ +pandas.core.groupby.SeriesGroupBy.plot # There should be no backslash in the final line, please keep this comment in the last ignored function +) ##### # end of PR02 group ##### - PARAMETERS+=(-- --format=actions --errors=GL08 --ignore_functions \ - pandas.Index.empty\ - pandas.Index.names\ - pandas.Index.view\ - pandas.IntervalIndex.left\ - pandas.IntervalIndex.length\ - pandas.IntervalIndex.mid\ - pandas.IntervalIndex.right\ - pandas.Period.freq\ - pandas.Period.ordinal\ - pandas.PeriodIndex.freq\ - pandas.PeriodIndex.qyear\ - pandas.Series.dt\ - pandas.Series.dt.as_unit\ - pandas.Series.dt.freq\ - pandas.Series.dt.qyear\ - pandas.Series.dt.unit\ - pandas.Series.empty\ - pandas.Timestamp.day\ - pandas.Timestamp.fold\ - pandas.Timestamp.hour\ - pandas.Timestamp.microsecond\ - pandas.Timestamp.minute\ - pandas.Timestamp.month\ - pandas.Timestamp.nanosecond\ - pandas.Timestamp.second\ - pandas.Timestamp.tzinfo\ - pandas.Timestamp.value\ - pandas.Timestamp.year\ - pandas.tseries.offsets.BQuarterBegin.is_on_offset\ - pandas.tseries.offsets.BQuarterBegin.n\ - pandas.tseries.offsets.BQuarterBegin.nanos\ - pandas.tseries.offsets.BQuarterBegin.normalize\ - pandas.tseries.offsets.BQuarterBegin.rule_code\ - pandas.tseries.offsets.BQuarterBegin.startingMonth\ - pandas.tseries.offsets.BQuarterEnd.is_on_offset\ - pandas.tseries.offsets.BQuarterEnd.n\ - pandas.tseries.offsets.BQuarterEnd.nanos\ - pandas.tseries.offsets.BQuarterEnd.normalize\ - pandas.tseries.offsets.BQuarterEnd.rule_code\ - pandas.tseries.offsets.BQuarterEnd.startingMonth\ - pandas.tseries.offsets.BYearBegin.is_on_offset\ - pandas.tseries.offsets.BYearBegin.month\ - pandas.tseries.offsets.BYearBegin.n\ - pandas.tseries.offsets.BYearBegin.nanos\ - pandas.tseries.offsets.BYearBegin.normalize\ - pandas.tseries.offsets.BYearBegin.rule_code\ - pandas.tseries.offsets.BYearEnd.is_on_offset\ - pandas.tseries.offsets.BYearEnd.month\ - pandas.tseries.offsets.BYearEnd.n\ - pandas.tseries.offsets.BYearEnd.nanos\ - pandas.tseries.offsets.BYearEnd.normalize\ - pandas.tseries.offsets.BYearEnd.rule_code\ - pandas.tseries.offsets.BusinessDay.calendar\ - pandas.tseries.offsets.BusinessDay.holidays\ - pandas.tseries.offsets.BusinessDay.is_on_offset\ - pandas.tseries.offsets.BusinessDay.n\ - pandas.tseries.offsets.BusinessDay.nanos\ - pandas.tseries.offsets.BusinessDay.normalize\ - pandas.tseries.offsets.BusinessDay.rule_code\ - pandas.tseries.offsets.BusinessDay.weekmask\ - pandas.tseries.offsets.BusinessHour.calendar\ - pandas.tseries.offsets.BusinessHour.end\ - pandas.tseries.offsets.BusinessHour.holidays\ - pandas.tseries.offsets.BusinessHour.is_on_offset\ - pandas.tseries.offsets.BusinessHour.n\ - pandas.tseries.offsets.BusinessHour.nanos\ - pandas.tseries.offsets.BusinessHour.normalize\ - pandas.tseries.offsets.BusinessHour.rule_code\ - pandas.tseries.offsets.BusinessHour.start\ - pandas.tseries.offsets.BusinessHour.weekmask\ - pandas.tseries.offsets.BusinessMonthBegin.is_on_offset\ - pandas.tseries.offsets.BusinessMonthBegin.n\ - pandas.tseries.offsets.BusinessMonthBegin.nanos\ - pandas.tseries.offsets.BusinessMonthBegin.normalize\ - pandas.tseries.offsets.BusinessMonthBegin.rule_code\ - pandas.tseries.offsets.BusinessMonthEnd.is_on_offset\ - pandas.tseries.offsets.BusinessMonthEnd.n\ - pandas.tseries.offsets.BusinessMonthEnd.nanos\ - pandas.tseries.offsets.BusinessMonthEnd.normalize\ - pandas.tseries.offsets.BusinessMonthEnd.rule_code\ - pandas.tseries.offsets.CustomBusinessDay.calendar\ - pandas.tseries.offsets.CustomBusinessDay.holidays\ - pandas.tseries.offsets.CustomBusinessDay.is_on_offset\ - pandas.tseries.offsets.CustomBusinessDay.n\ - pandas.tseries.offsets.CustomBusinessDay.nanos\ - pandas.tseries.offsets.CustomBusinessDay.normalize\ - pandas.tseries.offsets.CustomBusinessDay.rule_code\ - pandas.tseries.offsets.CustomBusinessDay.weekmask\ - pandas.tseries.offsets.CustomBusinessHour.calendar\ - pandas.tseries.offsets.CustomBusinessHour.end\ - pandas.tseries.offsets.CustomBusinessHour.holidays\ - pandas.tseries.offsets.CustomBusinessHour.is_on_offset\ - pandas.tseries.offsets.CustomBusinessHour.n\ - pandas.tseries.offsets.CustomBusinessHour.nanos\ - pandas.tseries.offsets.CustomBusinessHour.normalize\ - pandas.tseries.offsets.CustomBusinessHour.rule_code\ - pandas.tseries.offsets.CustomBusinessHour.start\ - pandas.tseries.offsets.CustomBusinessHour.weekmask\ - pandas.tseries.offsets.CustomBusinessMonthBegin.calendar\ - pandas.tseries.offsets.CustomBusinessMonthBegin.holidays\ - pandas.tseries.offsets.CustomBusinessMonthBegin.m_offset\ - pandas.tseries.offsets.CustomBusinessMonthBegin.n\ - pandas.tseries.offsets.CustomBusinessMonthBegin.nanos\ - pandas.tseries.offsets.CustomBusinessMonthBegin.normalize\ - pandas.tseries.offsets.CustomBusinessMonthBegin.rule_code\ - pandas.tseries.offsets.CustomBusinessMonthBegin.weekmask\ - pandas.tseries.offsets.CustomBusinessMonthEnd.calendar\ - pandas.tseries.offsets.CustomBusinessMonthEnd.holidays\ - pandas.tseries.offsets.CustomBusinessMonthEnd.m_offset\ - pandas.tseries.offsets.CustomBusinessMonthEnd.n\ - pandas.tseries.offsets.CustomBusinessMonthEnd.nanos\ - pandas.tseries.offsets.CustomBusinessMonthEnd.normalize\ - pandas.tseries.offsets.CustomBusinessMonthEnd.rule_code\ - pandas.tseries.offsets.CustomBusinessMonthEnd.weekmask\ - pandas.tseries.offsets.DateOffset.is_on_offset\ - pandas.tseries.offsets.DateOffset.n\ - pandas.tseries.offsets.DateOffset.nanos\ - pandas.tseries.offsets.DateOffset.normalize\ - pandas.tseries.offsets.DateOffset.rule_code\ - pandas.tseries.offsets.Day.delta\ - pandas.tseries.offsets.Day.is_on_offset\ - pandas.tseries.offsets.Day.n\ - pandas.tseries.offsets.Day.normalize\ - pandas.tseries.offsets.Day.rule_code\ - pandas.tseries.offsets.Easter.is_on_offset\ - pandas.tseries.offsets.Easter.n\ - pandas.tseries.offsets.Easter.nanos\ - pandas.tseries.offsets.Easter.normalize\ - pandas.tseries.offsets.Easter.rule_code\ - pandas.tseries.offsets.FY5253.get_rule_code_suffix\ - pandas.tseries.offsets.FY5253.get_year_end\ - pandas.tseries.offsets.FY5253.is_on_offset\ - pandas.tseries.offsets.FY5253.n\ - pandas.tseries.offsets.FY5253.nanos\ - pandas.tseries.offsets.FY5253.normalize\ - pandas.tseries.offsets.FY5253.rule_code\ - pandas.tseries.offsets.FY5253.startingMonth\ - pandas.tseries.offsets.FY5253.variation\ - pandas.tseries.offsets.FY5253.weekday\ - pandas.tseries.offsets.FY5253Quarter.get_rule_code_suffix\ - pandas.tseries.offsets.FY5253Quarter.get_weeks\ - pandas.tseries.offsets.FY5253Quarter.is_on_offset\ - pandas.tseries.offsets.FY5253Quarter.n\ - pandas.tseries.offsets.FY5253Quarter.nanos\ - pandas.tseries.offsets.FY5253Quarter.normalize\ - pandas.tseries.offsets.FY5253Quarter.qtr_with_extra_week\ - pandas.tseries.offsets.FY5253Quarter.rule_code\ - pandas.tseries.offsets.FY5253Quarter.startingMonth\ - pandas.tseries.offsets.FY5253Quarter.variation\ - pandas.tseries.offsets.FY5253Quarter.weekday\ - pandas.tseries.offsets.FY5253Quarter.year_has_extra_week\ - pandas.tseries.offsets.Hour.delta\ - pandas.tseries.offsets.Hour.is_on_offset\ - pandas.tseries.offsets.Hour.n\ - pandas.tseries.offsets.Hour.normalize\ - pandas.tseries.offsets.Hour.rule_code\ - pandas.tseries.offsets.LastWeekOfMonth.is_on_offset\ - pandas.tseries.offsets.LastWeekOfMonth.n\ - pandas.tseries.offsets.LastWeekOfMonth.nanos\ - pandas.tseries.offsets.LastWeekOfMonth.normalize\ - pandas.tseries.offsets.LastWeekOfMonth.rule_code\ - pandas.tseries.offsets.LastWeekOfMonth.week\ - pandas.tseries.offsets.LastWeekOfMonth.weekday\ - pandas.tseries.offsets.Micro.delta\ - pandas.tseries.offsets.Micro.is_on_offset\ - pandas.tseries.offsets.Micro.n\ - pandas.tseries.offsets.Micro.normalize\ - pandas.tseries.offsets.Micro.rule_code\ - pandas.tseries.offsets.Milli.delta\ - pandas.tseries.offsets.Milli.is_on_offset\ - pandas.tseries.offsets.Milli.n\ - pandas.tseries.offsets.Milli.normalize\ - pandas.tseries.offsets.Milli.rule_code\ - pandas.tseries.offsets.Minute.delta\ - pandas.tseries.offsets.Minute.is_on_offset\ - pandas.tseries.offsets.Minute.n\ - pandas.tseries.offsets.Minute.normalize\ - pandas.tseries.offsets.Minute.rule_code\ - pandas.tseries.offsets.MonthBegin.is_on_offset\ - pandas.tseries.offsets.MonthBegin.n\ - pandas.tseries.offsets.MonthBegin.nanos\ - pandas.tseries.offsets.MonthBegin.normalize\ - pandas.tseries.offsets.MonthBegin.rule_code\ - pandas.tseries.offsets.MonthEnd.is_on_offset\ - pandas.tseries.offsets.MonthEnd.n\ - pandas.tseries.offsets.MonthEnd.nanos\ - pandas.tseries.offsets.MonthEnd.normalize\ - pandas.tseries.offsets.MonthEnd.rule_code\ - pandas.tseries.offsets.Nano.delta\ - pandas.tseries.offsets.Nano.is_on_offset\ - pandas.tseries.offsets.Nano.n\ - pandas.tseries.offsets.Nano.normalize\ - pandas.tseries.offsets.Nano.rule_code\ - pandas.tseries.offsets.QuarterBegin.is_on_offset\ - pandas.tseries.offsets.QuarterBegin.n\ - pandas.tseries.offsets.QuarterBegin.nanos\ - pandas.tseries.offsets.QuarterBegin.normalize\ - pandas.tseries.offsets.QuarterBegin.rule_code\ - pandas.tseries.offsets.QuarterBegin.startingMonth\ - pandas.tseries.offsets.QuarterEnd.is_on_offset\ - pandas.tseries.offsets.QuarterEnd.n\ - pandas.tseries.offsets.QuarterEnd.nanos\ - pandas.tseries.offsets.QuarterEnd.normalize\ - pandas.tseries.offsets.QuarterEnd.rule_code\ - pandas.tseries.offsets.QuarterEnd.startingMonth\ - pandas.tseries.offsets.Second.delta\ - pandas.tseries.offsets.Second.is_on_offset\ - pandas.tseries.offsets.Second.n\ - pandas.tseries.offsets.Second.normalize\ - pandas.tseries.offsets.Second.rule_code\ - pandas.tseries.offsets.SemiMonthBegin.day_of_month\ - pandas.tseries.offsets.SemiMonthBegin.is_on_offset\ - pandas.tseries.offsets.SemiMonthBegin.n\ - pandas.tseries.offsets.SemiMonthBegin.nanos\ - pandas.tseries.offsets.SemiMonthBegin.normalize\ - pandas.tseries.offsets.SemiMonthBegin.rule_code\ - pandas.tseries.offsets.SemiMonthEnd.day_of_month\ - pandas.tseries.offsets.SemiMonthEnd.is_on_offset\ - pandas.tseries.offsets.SemiMonthEnd.n\ - pandas.tseries.offsets.SemiMonthEnd.nanos\ - pandas.tseries.offsets.SemiMonthEnd.normalize\ - pandas.tseries.offsets.SemiMonthEnd.rule_code\ - pandas.tseries.offsets.Tick\ - pandas.tseries.offsets.Tick.delta\ - pandas.tseries.offsets.Tick.is_on_offset\ - pandas.tseries.offsets.Tick.n\ - pandas.tseries.offsets.Tick.normalize\ - pandas.tseries.offsets.Tick.rule_code\ - pandas.tseries.offsets.Week.is_on_offset\ - pandas.tseries.offsets.Week.n\ - pandas.tseries.offsets.Week.nanos\ - pandas.tseries.offsets.Week.normalize\ - pandas.tseries.offsets.Week.rule_code\ - pandas.tseries.offsets.Week.weekday\ - pandas.tseries.offsets.WeekOfMonth.is_on_offset\ - pandas.tseries.offsets.WeekOfMonth.n\ - pandas.tseries.offsets.WeekOfMonth.nanos\ - pandas.tseries.offsets.WeekOfMonth.normalize\ - pandas.tseries.offsets.WeekOfMonth.rule_code\ - pandas.tseries.offsets.WeekOfMonth.week\ - pandas.tseries.offsets.WeekOfMonth.weekday\ - pandas.tseries.offsets.YearBegin.is_on_offset\ - pandas.tseries.offsets.YearBegin.month\ - pandas.tseries.offsets.YearBegin.n\ - pandas.tseries.offsets.YearBegin.nanos\ - pandas.tseries.offsets.YearBegin.normalize\ - pandas.tseries.offsets.YearBegin.rule_code\ - pandas.tseries.offsets.YearEnd.is_on_offset\ - pandas.tseries.offsets.YearEnd.month\ - pandas.tseries.offsets.YearEnd.n\ - pandas.tseries.offsets.YearEnd.nanos\ - pandas.tseries.offsets.YearEnd.normalize\ - pandas.tseries.offsets.YearEnd.rule_code # There should be no backslash in the final line, please keep this comment in the last ignored function + PARAMETERS+=(--for_error_ignore_functions GL08 \\ +pandas.Index.empty, +pandas.Index.names,\ +pandas.Index.view,\ +pandas.IntervalIndex.left,\ +pandas.IntervalIndex.length,\ +pandas.IntervalIndex.mid,\ +pandas.IntervalIndex.right,\ +pandas.Period.freq,\ +pandas.Period.ordinal,\ +pandas.PeriodIndex.freq,\ +pandas.PeriodIndex.qyear,\ +pandas.Series.dt,\ +pandas.Series.dt.as_unit,\ +pandas.Series.dt.freq,\ +pandas.Series.dt.qyear,\ +pandas.Series.dt.unit,\ +pandas.Series.empty,\ +pandas.Timestamp.day,\ +pandas.Timestamp.fold,\ +pandas.Timestamp.hour,\ +pandas.Timestamp.microsecond,\ +pandas.Timestamp.minute,\ +pandas.Timestamp.month,\ +pandas.Timestamp.nanosecond,\ +pandas.Timestamp.second,\ +pandas.Timestamp.tzinfo,\ +pandas.Timestamp.value,\ +pandas.Timestamp.year,\ +pandas.tseries.offsets.BQuarterBegin.is_on_offset,\ +pandas.tseries.offsets.BQuarterBegin.n,\ +pandas.tseries.offsets.BQuarterBegin.nanos,\ +pandas.tseries.offsets.BQuarterBegin.normalize,\ +pandas.tseries.offsets.BQuarterBegin.rule_code,\ +pandas.tseries.offsets.BQuarterBegin.startingMonth,\ +pandas.tseries.offsets.BQuarterEnd.is_on_offset,\ +pandas.tseries.offsets.BQuarterEnd.n,\ +pandas.tseries.offsets.BQuarterEnd.nanos,\ +pandas.tseries.offsets.BQuarterEnd.normalize,\ +pandas.tseries.offsets.BQuarterEnd.rule_code,\ +pandas.tseries.offsets.BQuarterEnd.startingMonth,\ +pandas.tseries.offsets.BYearBegin.is_on_offset,\ +pandas.tseries.offsets.BYearBegin.month,\ +pandas.tseries.offsets.BYearBegin.n,\ +pandas.tseries.offsets.BYearBegin.nanos,\ +pandas.tseries.offsets.BYearBegin.normalize,\ +pandas.tseries.offsets.BYearBegin.rule_code,\ +pandas.tseries.offsets.BYearEnd.is_on_offset,\ +pandas.tseries.offsets.BYearEnd.month,\ +pandas.tseries.offsets.BYearEnd.n,\ +pandas.tseries.offsets.BYearEnd.nanos,\ +pandas.tseries.offsets.BYearEnd.normalize,\ +pandas.tseries.offsets.BYearEnd.rule_code,\ +pandas.tseries.offsets.BusinessDay.calendar,\ +pandas.tseries.offsets.BusinessDay.holidays,\ +pandas.tseries.offsets.BusinessDay.is_on_offset,\ +pandas.tseries.offsets.BusinessDay.n,\ +pandas.tseries.offsets.BusinessDay.nanos,\ +pandas.tseries.offsets.BusinessDay.normalize,\ +pandas.tseries.offsets.BusinessDay.rule_code,\ +pandas.tseries.offsets.BusinessDay.weekmask,\ +pandas.tseries.offsets.BusinessHour.calendar,\ +pandas.tseries.offsets.BusinessHour.end,\ +pandas.tseries.offsets.BusinessHour.holidays,\ +pandas.tseries.offsets.BusinessHour.is_on_offset,\ +pandas.tseries.offsets.BusinessHour.n,\ +pandas.tseries.offsets.BusinessHour.nanos,\ +pandas.tseries.offsets.BusinessHour.normalize,\ +pandas.tseries.offsets.BusinessHour.rule_code,\ +pandas.tseries.offsets.BusinessHour.start,\ +pandas.tseries.offsets.BusinessHour.weekmask,\ +pandas.tseries.offsets.BusinessMonthBegin.is_on_offset,\ +pandas.tseries.offsets.BusinessMonthBegin.n,\ +pandas.tseries.offsets.BusinessMonthBegin.nanos,\ +pandas.tseries.offsets.BusinessMonthBegin.normalize,\ +pandas.tseries.offsets.BusinessMonthBegin.rule_code,\ +pandas.tseries.offsets.BusinessMonthEnd.is_on_offset,\ +pandas.tseries.offsets.BusinessMonthEnd.n,\ +pandas.tseries.offsets.BusinessMonthEnd.nanos,\ +pandas.tseries.offsets.BusinessMonthEnd.normalize,\ +pandas.tseries.offsets.BusinessMonthEnd.rule_code,\ +pandas.tseries.offsets.CustomBusinessDay.calendar,\ +pandas.tseries.offsets.CustomBusinessDay.holidays,\ +pandas.tseries.offsets.CustomBusinessDay.is_on_offset,\ +pandas.tseries.offsets.CustomBusinessDay.n,\ +pandas.tseries.offsets.CustomBusinessDay.nanos,\ +pandas.tseries.offsets.CustomBusinessDay.normalize,\ +pandas.tseries.offsets.CustomBusinessDay.rule_code,\ +pandas.tseries.offsets.CustomBusinessDay.weekmask,\ +pandas.tseries.offsets.CustomBusinessHour.calendar,\ +pandas.tseries.offsets.CustomBusinessHour.end,\ +pandas.tseries.offsets.CustomBusinessHour.holidays,\ +pandas.tseries.offsets.CustomBusinessHour.is_on_offset,\ +pandas.tseries.offsets.CustomBusinessHour.n,\ +pandas.tseries.offsets.CustomBusinessHour.nanos,\ +pandas.tseries.offsets.CustomBusinessHour.normalize,\ +pandas.tseries.offsets.CustomBusinessHour.rule_code,\ +pandas.tseries.offsets.CustomBusinessHour.start,\ +pandas.tseries.offsets.CustomBusinessHour.weekmask,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.calendar,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.holidays,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.m_offset,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.n,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.nanos,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.normalize,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.rule_code,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.weekmask,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.calendar,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.holidays,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.m_offset,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.n,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.nanos,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.normalize,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.rule_code,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.weekmask,\ +pandas.tseries.offsets.DateOffset.is_on_offset,\ +pandas.tseries.offsets.DateOffset.n,\ +pandas.tseries.offsets.DateOffset.nanos,\ +pandas.tseries.offsets.DateOffset.normalize,\ +pandas.tseries.offsets.DateOffset.rule_code,\ +pandas.tseries.offsets.Day.delta,\ +pandas.tseries.offsets.Day.is_on_offset,\ +pandas.tseries.offsets.Day.n,\ +pandas.tseries.offsets.Day.normalize,\ +pandas.tseries.offsets.Day.rule_code,\ +pandas.tseries.offsets.Easter.is_on_offset,\ +pandas.tseries.offsets.Easter.n,\ +pandas.tseries.offsets.Easter.nanos,\ +pandas.tseries.offsets.Easter.normalize,\ +pandas.tseries.offsets.Easter.rule_code,\ +pandas.tseries.offsets.FY5253.get_rule_code_suffix,\ +pandas.tseries.offsets.FY5253.get_year_end,\ +pandas.tseries.offsets.FY5253.is_on_offset,\ +pandas.tseries.offsets.FY5253.n,\ +pandas.tseries.offsets.FY5253.nanos,\ +pandas.tseries.offsets.FY5253.normalize,\ +pandas.tseries.offsets.FY5253.rule_code,\ +pandas.tseries.offsets.FY5253.startingMonth,\ +pandas.tseries.offsets.FY5253.variation,\ +pandas.tseries.offsets.FY5253.weekday,\ +pandas.tseries.offsets.FY5253Quarter.get_rule_code_suffix,\ +pandas.tseries.offsets.FY5253Quarter.get_weeks,\ +pandas.tseries.offsets.FY5253Quarter.is_on_offset,\ +pandas.tseries.offsets.FY5253Quarter.n,\ +pandas.tseries.offsets.FY5253Quarter.nanos,\ +pandas.tseries.offsets.FY5253Quarter.normalize,\ +pandas.tseries.offsets.FY5253Quarter.qtr_with_extra_week,\ +pandas.tseries.offsets.FY5253Quarter.rule_code,\ +pandas.tseries.offsets.FY5253Quarter.startingMonth,\ +pandas.tseries.offsets.FY5253Quarter.variation,\ +pandas.tseries.offsets.FY5253Quarter.weekday,\ +pandas.tseries.offsets.FY5253Quarter.year_has_extra_week,\ +pandas.tseries.offsets.Hour.delta,\ +pandas.tseries.offsets.Hour.is_on_offset,\ +pandas.tseries.offsets.Hour.n,\ +pandas.tseries.offsets.Hour.normalize,\ +pandas.tseries.offsets.Hour.rule_code,\ +pandas.tseries.offsets.LastWeekOfMonth.is_on_offset,\ +pandas.tseries.offsets.LastWeekOfMonth.n,\ +pandas.tseries.offsets.LastWeekOfMonth.nanos,\ +pandas.tseries.offsets.LastWeekOfMonth.normalize,\ +pandas.tseries.offsets.LastWeekOfMonth.rule_code,\ +pandas.tseries.offsets.LastWeekOfMonth.week,\ +pandas.tseries.offsets.LastWeekOfMonth.weekday,\ +pandas.tseries.offsets.Micro.delta,\ +pandas.tseries.offsets.Micro.is_on_offset,\ +pandas.tseries.offsets.Micro.n,\ +pandas.tseries.offsets.Micro.normalize,\ +pandas.tseries.offsets.Micro.rule_code,\ +pandas.tseries.offsets.Milli.delta,\ +pandas.tseries.offsets.Milli.is_on_offset,\ +pandas.tseries.offsets.Milli.n,\ +pandas.tseries.offsets.Milli.normalize,\ +pandas.tseries.offsets.Milli.rule_code,\ +pandas.tseries.offsets.Minute.delta,\ +pandas.tseries.offsets.Minute.is_on_offset,\ +pandas.tseries.offsets.Minute.n,\ +pandas.tseries.offsets.Minute.normalize,\ +pandas.tseries.offsets.Minute.rule_code,\ +pandas.tseries.offsets.MonthBegin.is_on_offset,\ +pandas.tseries.offsets.MonthBegin.n,\ +pandas.tseries.offsets.MonthBegin.nanos,\ +pandas.tseries.offsets.MonthBegin.normalize,\ +pandas.tseries.offsets.MonthBegin.rule_code,\ +pandas.tseries.offsets.MonthEnd.is_on_offset,\ +pandas.tseries.offsets.MonthEnd.n,\ +pandas.tseries.offsets.MonthEnd.nanos,\ +pandas.tseries.offsets.MonthEnd.normalize,\ +pandas.tseries.offsets.MonthEnd.rule_code,\ +pandas.tseries.offsets.Nano.delta,\ +pandas.tseries.offsets.Nano.is_on_offset,\ +pandas.tseries.offsets.Nano.n,\ +pandas.tseries.offsets.Nano.normalize,\ +pandas.tseries.offsets.Nano.rule_code,\ +pandas.tseries.offsets.QuarterBegin.is_on_offset,\ +pandas.tseries.offsets.QuarterBegin.n,\ +pandas.tseries.offsets.QuarterBegin.nanos,\ +pandas.tseries.offsets.QuarterBegin.normalize,\ +pandas.tseries.offsets.QuarterBegin.rule_code,\ +pandas.tseries.offsets.QuarterBegin.startingMonth,\ +pandas.tseries.offsets.QuarterEnd.is_on_offset,\ +pandas.tseries.offsets.QuarterEnd.n,\ +pandas.tseries.offsets.QuarterEnd.nanos,\ +pandas.tseries.offsets.QuarterEnd.normalize,\ +pandas.tseries.offsets.QuarterEnd.rule_code,\ +pandas.tseries.offsets.QuarterEnd.startingMonth,\ +pandas.tseries.offsets.Second.delta,\ +pandas.tseries.offsets.Second.is_on_offset,\ +pandas.tseries.offsets.Second.n,\ +pandas.tseries.offsets.Second.normalize,\ +pandas.tseries.offsets.Second.rule_code,\ +pandas.tseries.offsets.SemiMonthBegin.day_of_month,\ +pandas.tseries.offsets.SemiMonthBegin.is_on_offset,\ +pandas.tseries.offsets.SemiMonthBegin.n,\ +pandas.tseries.offsets.SemiMonthBegin.nanos,\ +pandas.tseries.offsets.SemiMonthBegin.normalize,\ +pandas.tseries.offsets.SemiMonthBegin.rule_code,\ +pandas.tseries.offsets.SemiMonthEnd.day_of_month,\ +pandas.tseries.offsets.SemiMonthEnd.is_on_offset,\ +pandas.tseries.offsets.SemiMonthEnd.n,\ +pandas.tseries.offsets.SemiMonthEnd.nanos,\ +pandas.tseries.offsets.SemiMonthEnd.normalize,\ +pandas.tseries.offsets.SemiMonthEnd.rule_code,\ +pandas.tseries.offsets.Tick,\ +pandas.tseries.offsets.Tick.delta,\ +pandas.tseries.offsets.Tick.is_on_offset,\ +pandas.tseries.offsets.Tick.n,\ +pandas.tseries.offsets.Tick.normalize,\ +pandas.tseries.offsets.Tick.rule_code,\ +pandas.tseries.offsets.Week.is_on_offset,\ +pandas.tseries.offsets.Week.n,\ +pandas.tseries.offsets.Week.nanos,\ +pandas.tseries.offsets.Week.normalize,\ +pandas.tseries.offsets.Week.rule_code,\ +pandas.tseries.offsets.Week.weekday,\ +pandas.tseries.offsets.WeekOfMonth.is_on_offset,\ +pandas.tseries.offsets.WeekOfMonth.n,\ +pandas.tseries.offsets.WeekOfMonth.nanos,\ +pandas.tseries.offsets.WeekOfMonth.normalize,\ +pandas.tseries.offsets.WeekOfMonth.rule_code,\ +pandas.tseries.offsets.WeekOfMonth.week,\ +pandas.tseries.offsets.WeekOfMonth.weekday,\ +pandas.tseries.offsets.YearBegin.is_on_offset,\ +pandas.tseries.offsets.YearBegin.month,\ +pandas.tseries.offsets.YearBegin.n,\ +pandas.tseries.offsets.YearBegin.nanos,\ +pandas.tseries.offsets.YearBegin.normalize,\ +pandas.tseries.offsets.YearBegin.rule_code,\ +pandas.tseries.offsets.YearEnd.is_on_offset,\ +pandas.tseries.offsets.YearEnd.month,\ +pandas.tseries.offsets.YearEnd.n,\ +pandas.tseries.offsets.YearEnd.nanos,\ +pandas.tseries.offsets.YearEnd.normalize,\ +pandas.tseries.offsets.YearEnd.rule_code # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of GL08 group ##### - PARAMETERS+=(-- --format=actions --errors=PR01 --ignore_functions \ - pandas.DataFrame.at_time\ - pandas.DataFrame.backfill\ - pandas.DataFrame.get\ - pandas.DataFrame.pad\ - pandas.DataFrame.sem\ - pandas.DataFrame.sparse\ - pandas.DataFrame.std\ - pandas.DataFrame.swapaxes\ - pandas.DataFrame.var\ - pandas.DatetimeIndex.indexer_at_time\ - pandas.DatetimeIndex.snap\ - pandas.DatetimeIndex.std\ - pandas.ExcelFile\ - pandas.ExcelFile.parse\ - pandas.HDFStore.append\ - pandas.HDFStore.put\ - pandas.Index.get_indexer_for\ - pandas.Index.identical\ - pandas.Index.putmask\ - pandas.Index.ravel\ - pandas.Index.str\ - pandas.Index.take\ - pandas.IntervalDtype\ - pandas.MultiIndex\ - pandas.Period.strftime\ - pandas.RangeIndex.from_range\ - pandas.Series.at_time\ - pandas.Series.backfill\ - pandas.Series.cat.add_categories\ - pandas.Series.cat.as_ordered\ - pandas.Series.cat.as_unordered\ - pandas.Series.cat.remove_categories\ - pandas.Series.cat.remove_unused_categories\ - pandas.Series.cat.rename_categories\ - pandas.Series.cat.reorder_categories\ - pandas.Series.cat.set_categories\ - pandas.Series.dt.as_unit\ - pandas.Series.dt.ceil\ - pandas.Series.dt.day_name\ - pandas.Series.dt.floor\ - pandas.Series.dt.month_name\ - pandas.Series.dt.normalize\ - pandas.Series.dt.round\ - pandas.Series.dt.strftime\ - pandas.Series.dt.to_period\ - pandas.Series.dt.total_seconds\ - pandas.Series.dt.tz_convert\ - pandas.Series.dt.tz_localize\ - pandas.Series.get\ - pandas.Series.pad\ - pandas.Series.sem\ - pandas.Series.sparse\ - pandas.Series.std\ - pandas.Series.str\ - pandas.Series.str.wrap\ - pandas.Series.var\ - pandas.Timedelta.to_numpy\ - pandas.TimedeltaIndex\ - pandas.Timestamp.combine\ - pandas.Timestamp.fromtimestamp\ - pandas.Timestamp.strptime\ - pandas.Timestamp.to_numpy\ - pandas.Timestamp.to_period\ - pandas.Timestamp.to_pydatetime\ - pandas.Timestamp.utcfromtimestamp\ - pandas.api.extensions.ExtensionArray._pad_or_backfill\ - pandas.api.extensions.ExtensionArray.interpolate\ - pandas.api.indexers.BaseIndexer\ - pandas.api.indexers.FixedForwardWindowIndexer\ - pandas.api.indexers.VariableOffsetWindowIndexer\ - pandas.api.types.is_bool\ - pandas.api.types.is_complex\ - pandas.api.types.is_float\ - pandas.api.types.is_hashable\ - pandas.api.types.is_integer\ - pandas.core.groupby.SeriesGroupBy.filter\ - pandas.core.resample.Resampler.max\ - pandas.core.resample.Resampler.min\ - pandas.core.resample.Resampler.quantile\ - pandas.core.resample.Resampler.transform\ - pandas.core.window.expanding.Expanding.corr\ - pandas.core.window.expanding.Expanding.count\ - pandas.core.window.rolling.Rolling.max\ - pandas.core.window.rolling.Window.std\ - pandas.core.window.rolling.Window.var\ - pandas.errors.AbstractMethodError\ - pandas.errors.UndefinedVariableError\ - pandas.get_option\ - pandas.io.formats.style.Styler.to_excel # There should be no backslash in the final line, please keep this comment in the last ignored function + PARAMETERS+=(--for_error_ignore_functions PR01 \ +pandas.DataFrame.at_time,\ +pandas.DataFrame.backfill,\ +pandas.DataFrame.get,\ +pandas.DataFrame.pad,\ +pandas.DataFrame.sem,\ +pandas.DataFrame.sparse,\ +pandas.DataFrame.std,\ +pandas.DataFrame.swapaxes,\ +pandas.DataFrame.var,\ +pandas.DatetimeIndex.indexer_at_time,\ +pandas.DatetimeIndex.snap,\ +pandas.DatetimeIndex.std,\ +pandas.ExcelFile,\ +pandas.ExcelFile.parse,\ +pandas.HDFStore.append,\ +pandas.HDFStore.put,\ +pandas.Index.get_indexer_for,\ +pandas.Index.identical,\ +pandas.Index.putmask,\ +pandas.Index.ravel,\ +pandas.Index.str,\ +pandas.Index.take,\ +pandas.IntervalDtype,\ +pandas.MultiIndex,\ +pandas.Period.strftime,\ +pandas.RangeIndex.from_range,\ +pandas.Series.at_time,\ +pandas.Series.backfill,\ +pandas.Series.cat.add_categories,\ +pandas.Series.cat.as_ordered,\ +pandas.Series.cat.as_unordered,\ +pandas.Series.cat.remove_categories,\ +pandas.Series.cat.remove_unused_categories,\ +pandas.Series.cat.rename_categories,\ +pandas.Series.cat.reorder_categories,\ +pandas.Series.cat.set_categories,\ +pandas.Series.dt.as_unit,\ +pandas.Series.dt.ceil,\ +pandas.Series.dt.day_name,\ +pandas.Series.dt.floor,\ +pandas.Series.dt.month_name,\ +pandas.Series.dt.normalize,\ +pandas.Series.dt.round,\ +pandas.Series.dt.strftime,\ +pandas.Series.dt.to_period,\ +pandas.Series.dt.total_seconds,\ +pandas.Series.dt.tz_convert,\ +pandas.Series.dt.tz_localize,\ +pandas.Series.get,\ +pandas.Series.pad,\ +pandas.Series.sem,\ +pandas.Series.sparse,\ +pandas.Series.std,\ +pandas.Series.str,\ +pandas.Series.str.wrap,\ +pandas.Series.var,\ +pandas.Timedelta.to_numpy,\ +pandas.TimedeltaIndex,\ +pandas.Timestamp.combine,\ +pandas.Timestamp.fromtimestamp,\ +pandas.Timestamp.strptime,\ +pandas.Timestamp.to_numpy,\ +pandas.Timestamp.to_period,\ +pandas.Timestamp.to_pydatetime,\ +pandas.Timestamp.utcfromtimestamp,\ +pandas.api.extensions.ExtensionArray._pad_or_backfill,\ +pandas.api.extensions.ExtensionArray.interpolate,\ +pandas.api.indexers.BaseIndexer,\ +pandas.api.indexers.FixedForwardWindowIndexer,\ +pandas.api.indexers.VariableOffsetWindowIndexer,\ +pandas.api.types.is_bool,\ +pandas.api.types.is_complex,\ +pandas.api.types.is_float,\ +pandas.api.types.is_hashable,\ +pandas.api.types.is_integer,\ +pandas.core.groupby.SeriesGroupBy.filter,\ +pandas.core.resample.Resampler.max,\ +pandas.core.resample.Resampler.min,\ +pandas.core.resample.Resampler.quantile,\ +pandas.core.resample.Resampler.transform,\ +pandas.core.window.expanding.Expanding.corr,\ +pandas.core.window.expanding.Expanding.count,\ +pandas.core.window.rolling.Rolling.max,\ +pandas.core.window.rolling.Window.std,\ +pandas.core.window.rolling.Window.var,\ +pandas.errors.AbstractMethodError,\ +pandas.errors.UndefinedVariableError,\ +pandas.get_option,\ +pandas.io.formats.style.Styler.to_excel # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of PR01 group ##### - PARAMETERS+=(-- --format=actions --errors=PR07 --ignore_functions \ - pandas.Index\ - pandas.Index.append\ - pandas.Index.copy\ - pandas.Index.difference\ - pandas.Index.drop\ - pandas.Index.get_indexer\ - pandas.Index.get_indexer_non_unique\ - pandas.Index.get_loc\ - pandas.Index.get_slice_bound\ - pandas.Index.insert\ - pandas.Index.intersection\ - pandas.Index.join\ - pandas.Index.reindex\ - pandas.Index.slice_indexer\ - pandas.Index.symmetric_difference\ - pandas.Index.take\ - pandas.Index.union\ - pandas.IntervalIndex.get_indexer\ - pandas.IntervalIndex.get_loc\ - pandas.MultiIndex.append\ - pandas.MultiIndex.copy\ - pandas.MultiIndex.drop\ - pandas.MultiIndex.get_indexer\ - pandas.MultiIndex.get_loc\ - pandas.MultiIndex.get_loc_level\ - pandas.MultiIndex.sortlevel\ - pandas.PeriodIndex.from_fields\ - pandas.RangeIndex\ - pandas.Series.add\ - pandas.Series.align\ - pandas.Series.cat\ - pandas.Series.div\ - pandas.Series.eq\ - pandas.Series.floordiv\ - pandas.Series.ge\ - pandas.Series.get\ - pandas.Series.gt\ - pandas.Series.le\ - pandas.Series.lt\ - pandas.Series.mod\ - pandas.Series.mul\ - pandas.Series.ne\ - pandas.Series.pow\ - pandas.Series.radd\ - pandas.Series.rdiv\ - pandas.Series.rfloordiv\ - pandas.Series.rmod\ - pandas.Series.rmul\ - pandas.Series.rolling\ - pandas.Series.rpow\ - pandas.Series.rsub\ - pandas.Series.rtruediv\ - pandas.Series.sparse.from_coo\ - pandas.Series.sparse.to_coo\ - pandas.Series.str.decode\ - pandas.Series.str.encode\ - pandas.Series.sub\ - pandas.Series.to_hdf\ - pandas.Series.truediv\ - pandas.Series.update\ - pandas.Timedelta\ - pandas.Timedelta.max\ - pandas.Timedelta.min\ - pandas.Timedelta.resolution\ - pandas.TimedeltaIndex.mean\ - pandas.Timestamp\ - pandas.Timestamp.max\ - pandas.Timestamp.min\ - pandas.Timestamp.replace\ - pandas.Timestamp.resolution\ - pandas.api.extensions.ExtensionArray._concat_same_type\ - pandas.api.extensions.ExtensionArray.insert\ - pandas.api.extensions.ExtensionArray.isin\ - pandas.api.types.infer_dtype\ - pandas.api.types.is_dict_like\ - pandas.api.types.is_file_like\ - pandas.api.types.is_iterator\ - pandas.api.types.is_named_tuple\ - pandas.api.types.is_re\ - pandas.api.types.is_re_compilable\ - pandas.api.types.pandas_dtype\ - pandas.arrays.ArrowExtensionArray\ - pandas.arrays.SparseArray\ - pandas.arrays.TimedeltaArray\ - pandas.core.groupby.DataFrameGroupBy.boxplot\ - pandas.core.resample.Resampler.quantile\ - pandas.io.formats.style.Styler.set_table_attributes\ - pandas.io.formats.style.Styler.set_uuid\ - pandas.io.json.build_table_schema\ - pandas.merge\ - pandas.merge_asof\ - pandas.merge_ordered\ - pandas.pivot\ - pandas.pivot_table\ - pandas.plotting.parallel_coordinates\ - pandas.plotting.scatter_matrix\ - pandas.plotting.table\ - pandas.qcut\ - pandas.testing.assert_index_equal\ - pandas.testing.assert_series_equal\ - pandas.unique\ - pandas.util.hash_array\ - pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function + PARAMETERS+=(--for_error_ignore_functions PR07 \ +pandas.Index,\ +pandas.Index.append,\ +pandas.Index.copy,\ +pandas.Index.difference,\ +pandas.Index.drop,\ +pandas.Index.get_indexer,\ +pandas.Index.get_indexer_non_unique,\ +pandas.Index.get_loc,\ +pandas.Index.get_slice_bound,\ +pandas.Index.insert,\ +pandas.Index.intersection,\ +pandas.Index.join,\ +pandas.Index.reindex,\ +pandas.Index.slice_indexer,\ +pandas.Index.symmetric_difference,\ +pandas.Index.take,\ +pandas.Index.union,\ +pandas.IntervalIndex.get_indexer,\ +pandas.IntervalIndex.get_loc,\ +pandas.MultiIndex.append,\ +pandas.MultiIndex.copy,\ +pandas.MultiIndex.drop,\ +pandas.MultiIndex.get_indexer,\ +pandas.MultiIndex.get_loc,\ +pandas.MultiIndex.get_loc_level,\ +pandas.MultiIndex.sortlevel,\ +pandas.PeriodIndex.from_fields,\ +pandas.RangeIndex,\ +pandas.Series.add,\ +pandas.Series.align,\ +pandas.Series.cat,\ +pandas.Series.div,\ +pandas.Series.eq,\ +pandas.Series.floordiv,\ +pandas.Series.ge,\ +pandas.Series.get,\ +pandas.Series.gt,\ +pandas.Series.le,\ +pandas.Series.lt,\ +pandas.Series.mod,\ +pandas.Series.mul,\ +pandas.Series.ne,\ +pandas.Series.pow,\ +pandas.Series.radd,\ +pandas.Series.rdiv,\ +pandas.Series.rfloordiv,\ +pandas.Series.rmod,\ +pandas.Series.rmul,\ +pandas.Series.rolling,\ +pandas.Series.rpow,\ +pandas.Series.rsub,\ +pandas.Series.rtruediv,\ +pandas.Series.sparse.from_coo,\ +pandas.Series.sparse.to_coo,\ +pandas.Series.str.decode,\ +pandas.Series.str.encode,\ +pandas.Series.sub,\ +pandas.Series.to_hdf,\ +pandas.Series.truediv,\ +pandas.Series.update,\ +pandas.Timedelta,\ +pandas.Timedelta.max,\ +pandas.Timedelta.min,\ +pandas.Timedelta.resolution,\ +pandas.TimedeltaIndex.mean,\ +pandas.Timestamp,\ +pandas.Timestamp.max,\ +pandas.Timestamp.min,\ +pandas.Timestamp.replace,\ +pandas.Timestamp.resolution,\ +pandas.api.extensions.ExtensionArray._concat_same_type,\ +pandas.api.extensions.ExtensionArray.insert,\ +pandas.api.extensions.ExtensionArray.isin,\ +pandas.api.types.infer_dtype,\ +pandas.api.types.is_dict_like,\ +pandas.api.types.is_file_like,\ +pandas.api.types.is_iterator,\ +pandas.api.types.is_named_tuple,\ +pandas.api.types.is_re,\ +pandas.api.types.is_re_compilable,\ +pandas.api.types.pandas_dtype,\ +pandas.arrays.ArrowExtensionArray,\ +pandas.arrays.SparseArray,\ +pandas.arrays.TimedeltaArray,\ +pandas.core.groupby.DataFrameGroupBy.boxplot,\ +pandas.core.resample.Resampler.quantile,\ +pandas.io.formats.style.Styler.set_table_attributes,\ +pandas.io.formats.style.Styler.set_uuid,\ +pandas.io.json.build_table_schema,\ +pandas.merge,\ +pandas.merge_asof,\ +pandas.merge_ordered,\ +pandas.pivot,\ +pandas.pivot_table,\ +pandas.plotting.parallel_coordinates,\ +pandas.plotting.scatter_matrix,\ +pandas.plotting.table,\ +pandas.qcut,\ +pandas.testing.assert_index_equal,\ +pandas.testing.assert_series_equal,\ +pandas.unique,\ +pandas.util.hash_array,\ +pandas.util.hash_pandas_object ) ##### # end of PR07 group ##### - PARAMETERS+=(-- --format=actions --errors=RT03 --ignore_functions \ - pandas.DataFrame.hist\ - pandas.DataFrame.infer_objects\ - pandas.DataFrame.kurt\ - pandas.DataFrame.kurtosis\ - pandas.DataFrame.mask\ - pandas.DataFrame.max\ - pandas.DataFrame.mean\ - pandas.DataFrame.median\ - pandas.DataFrame.min\ - pandas.DataFrame.prod\ - pandas.DataFrame.product\ - pandas.DataFrame.sem\ - pandas.DataFrame.skew\ - pandas.DataFrame.std\ - pandas.DataFrame.sum\ - pandas.DataFrame.to_parquet\ - pandas.DataFrame.unstack\ - pandas.DataFrame.value_counts\ - pandas.DataFrame.var\ - pandas.DataFrame.where\ - pandas.DatetimeIndex.indexer_at_time\ - pandas.DatetimeIndex.indexer_between_time\ - pandas.DatetimeIndex.snap\ - pandas.DatetimeIndex.std\ - pandas.DatetimeIndex.to_period\ - pandas.DatetimeIndex.to_pydatetime\ - pandas.DatetimeIndex.tz_convert\ - pandas.HDFStore.info\ - pandas.Index.append\ - pandas.Index.difference\ - pandas.Index.drop_duplicates\ - pandas.Index.droplevel\ - pandas.Index.dropna\ - pandas.Index.duplicated\ - pandas.Index.fillna\ - pandas.Index.get_loc\ - pandas.Index.insert\ - pandas.Index.intersection\ - pandas.Index.join\ - pandas.Index.memory_usage\ - pandas.Index.nunique\ - pandas.Index.putmask\ - pandas.Index.ravel\ - pandas.Index.slice_indexer\ - pandas.Index.slice_locs\ - pandas.Index.symmetric_difference\ - pandas.Index.to_list\ - pandas.Index.union\ - pandas.Index.unique\ - pandas.Index.value_counts\ - pandas.IntervalIndex.contains\ - pandas.IntervalIndex.get_loc\ - pandas.IntervalIndex.set_closed\ - pandas.IntervalIndex.to_tuples\ - pandas.MultiIndex.copy\ - pandas.MultiIndex.drop\ - pandas.MultiIndex.droplevel\ - pandas.MultiIndex.remove_unused_levels\ - pandas.MultiIndex.reorder_levels\ - pandas.MultiIndex.set_levels\ - pandas.MultiIndex.to_frame\ - pandas.PeriodIndex.to_timestamp\ - pandas.Series.__iter__\ - pandas.Series.astype\ - pandas.Series.at_time\ - pandas.Series.case_when\ - pandas.Series.cat.set_categories\ - pandas.Series.dt.to_period\ - pandas.Series.dt.tz_convert\ - pandas.Series.ewm\ - pandas.Series.expanding\ - pandas.Series.filter\ - pandas.Series.first_valid_index\ - pandas.Series.get\ - pandas.Series.infer_objects\ - pandas.Series.kurt\ - pandas.Series.kurtosis\ - pandas.Series.last_valid_index\ - pandas.Series.mask\ - pandas.Series.max\ - pandas.Series.mean\ - pandas.Series.median\ - pandas.Series.min\ - pandas.Series.nunique\ - pandas.Series.pipe\ - pandas.Series.plot.box\ - pandas.Series.plot.density\ - pandas.Series.plot.kde\ - pandas.Series.pop\ - pandas.Series.prod\ - pandas.Series.product\ - pandas.Series.reindex\ - pandas.Series.reorder_levels\ - pandas.Series.sem\ - pandas.Series.skew\ - pandas.Series.sparse.to_coo\ - pandas.Series.std\ - pandas.Series.str.capitalize\ - pandas.Series.str.casefold\ - pandas.Series.str.center\ - pandas.Series.str.decode\ - pandas.Series.str.encode\ - pandas.Series.str.find\ - pandas.Series.str.fullmatch\ - pandas.Series.str.get\ - pandas.Series.str.index\ - pandas.Series.str.ljust\ - pandas.Series.str.lower\ - pandas.Series.str.lstrip\ - pandas.Series.str.match\ - pandas.Series.str.normalize\ - pandas.Series.str.partition\ - pandas.Series.str.rfind\ - pandas.Series.str.rindex\ - pandas.Series.str.rjust\ - pandas.Series.str.rpartition\ - pandas.Series.str.rstrip\ - pandas.Series.str.strip\ - pandas.Series.str.swapcase\ - pandas.Series.str.title\ - pandas.Series.str.translate\ - pandas.Series.str.upper\ - pandas.Series.str.wrap\ - pandas.Series.str.zfill\ - pandas.Series.sum\ - pandas.Series.to_list\ - pandas.Series.to_numpy\ - pandas.Series.to_timestamp\ - pandas.Series.value_counts\ - pandas.Series.var\ - pandas.Series.where\ - pandas.TimedeltaIndex.as_unit\ - pandas.TimedeltaIndex.to_pytimedelta\ - pandas.api.extensions.ExtensionArray._accumulate\ - pandas.api.extensions.ExtensionArray._hash_pandas_object\ - pandas.api.extensions.ExtensionArray._pad_or_backfill\ - pandas.api.extensions.ExtensionArray._reduce\ - pandas.api.extensions.ExtensionArray.copy\ - pandas.api.extensions.ExtensionArray.dropna\ - pandas.api.extensions.ExtensionArray.duplicated\ - pandas.api.extensions.ExtensionArray.insert\ - pandas.api.extensions.ExtensionArray.isin\ - pandas.api.extensions.ExtensionArray.ravel\ - pandas.api.extensions.ExtensionArray.take\ - pandas.api.extensions.ExtensionArray.tolist\ - pandas.api.extensions.ExtensionArray.unique\ - pandas.api.interchange.from_dataframe\ - pandas.api.types.is_hashable\ - pandas.api.types.pandas_dtype\ - pandas.api.types.union_categoricals\ - pandas.arrays.IntervalArray.contains\ - pandas.arrays.IntervalArray.set_closed\ - pandas.arrays.IntervalArray.to_tuples\ - pandas.bdate_range\ - pandas.core.groupby.DataFrameGroupBy.__iter__\ - pandas.core.groupby.DataFrameGroupBy.agg\ - pandas.core.groupby.DataFrameGroupBy.aggregate\ - pandas.core.groupby.DataFrameGroupBy.apply\ - pandas.core.groupby.DataFrameGroupBy.boxplot\ - pandas.core.groupby.DataFrameGroupBy.cummax\ - pandas.core.groupby.DataFrameGroupBy.cummin\ - pandas.core.groupby.DataFrameGroupBy.cumprod\ - pandas.core.groupby.DataFrameGroupBy.cumsum\ - pandas.core.groupby.DataFrameGroupBy.filter\ - pandas.core.groupby.DataFrameGroupBy.get_group\ - pandas.core.groupby.DataFrameGroupBy.hist\ - pandas.core.groupby.DataFrameGroupBy.mean\ - pandas.core.groupby.DataFrameGroupBy.nunique\ - pandas.core.groupby.DataFrameGroupBy.rank\ - pandas.core.groupby.DataFrameGroupBy.resample\ - pandas.core.groupby.DataFrameGroupBy.skew\ - pandas.core.groupby.DataFrameGroupBy.transform\ - pandas.core.groupby.SeriesGroupBy.__iter__\ - pandas.core.groupby.SeriesGroupBy.agg\ - pandas.core.groupby.SeriesGroupBy.aggregate\ - pandas.core.groupby.SeriesGroupBy.apply\ - pandas.core.groupby.SeriesGroupBy.cummax\ - pandas.core.groupby.SeriesGroupBy.cummin\ - pandas.core.groupby.SeriesGroupBy.cumprod\ - pandas.core.groupby.SeriesGroupBy.cumsum\ - pandas.core.groupby.SeriesGroupBy.filter\ - pandas.core.groupby.SeriesGroupBy.get_group\ - pandas.core.groupby.SeriesGroupBy.mean\ - pandas.core.groupby.SeriesGroupBy.rank\ - pandas.core.groupby.SeriesGroupBy.resample\ - pandas.core.groupby.SeriesGroupBy.skew\ - pandas.core.groupby.SeriesGroupBy.transform\ - pandas.core.resample.Resampler.__iter__\ - pandas.core.resample.Resampler.ffill\ - pandas.core.resample.Resampler.get_group\ - pandas.core.resample.Resampler.max\ - pandas.core.resample.Resampler.min\ - pandas.core.resample.Resampler.transform\ - pandas.date_range\ - pandas.interval_range\ - pandas.io.formats.style.Styler.apply\ - pandas.io.formats.style.Styler.apply_index\ - pandas.io.formats.style.Styler.background_gradient\ - pandas.io.formats.style.Styler.bar\ - pandas.io.formats.style.Styler.concat\ - pandas.io.formats.style.Styler.export\ - pandas.io.formats.style.Styler.format\ - pandas.io.formats.style.Styler.format_index\ - pandas.io.formats.style.Styler.hide\ - pandas.io.formats.style.Styler.highlight_between\ - pandas.io.formats.style.Styler.highlight_max\ - pandas.io.formats.style.Styler.highlight_min\ - pandas.io.formats.style.Styler.highlight_null\ - pandas.io.formats.style.Styler.highlight_quantile\ - pandas.io.formats.style.Styler.map\ - pandas.io.formats.style.Styler.map_index\ - pandas.io.formats.style.Styler.relabel_index\ - pandas.io.formats.style.Styler.set_caption\ - pandas.io.formats.style.Styler.set_properties\ - pandas.io.formats.style.Styler.set_sticky\ - pandas.io.formats.style.Styler.set_table_attributes\ - pandas.io.formats.style.Styler.set_table_styles\ - pandas.io.formats.style.Styler.set_td_classes\ - pandas.io.formats.style.Styler.set_tooltips\ - pandas.io.formats.style.Styler.set_uuid\ - pandas.io.formats.style.Styler.text_gradient\ - pandas.io.formats.style.Styler.use\ - pandas.io.json.build_table_schema\ - pandas.io.stata.StataReader.value_labels\ - pandas.io.stata.StataReader.variable_labels\ - pandas.json_normalize\ - pandas.merge_asof\ - pandas.period_range\ - pandas.plotting.andrews_curves\ - pandas.plotting.autocorrelation_plot\ - pandas.plotting.lag_plot\ - pandas.plotting.parallel_coordinates\ - pandas.plotting.radviz\ - pandas.plotting.table\ - pandas.set_eng_float_format # There should be no backslash in the final line, please keep this comment in the last ignored function + PARAMETERS+=(--for_error_ignore_functions RT03 \ +pandas.DataFrame.hist,\ +pandas.DataFrame.infer_objects,\ +pandas.DataFrame.kurt,\ +pandas.DataFrame.kurtosis,\ +pandas.DataFrame.mask,\ +pandas.DataFrame.max,\ +pandas.DataFrame.mean,\ +pandas.DataFrame.median,\ +pandas.DataFrame.min,\ +pandas.DataFrame.prod,\ +pandas.DataFrame.product,\ +pandas.DataFrame.sem,\ +pandas.DataFrame.skew,\ +pandas.DataFrame.std,\ +pandas.DataFrame.sum,\ +pandas.DataFrame.to_parquet,\ +pandas.DataFrame.unstack,\ +pandas.DataFrame.value_counts,\ +pandas.DataFrame.var,\ +pandas.DataFrame.where,\ +pandas.DatetimeIndex.indexer_at_time,\ +pandas.DatetimeIndex.indexer_between_time,\ +pandas.DatetimeIndex.snap,\ +pandas.DatetimeIndex.std,\ +pandas.DatetimeIndex.to_period,\ +pandas.DatetimeIndex.to_pydatetime,\ +pandas.DatetimeIndex.tz_convert,\ +pandas.HDFStore.info,\ +pandas.Index.append,\ +pandas.Index.difference,\ +pandas.Index.drop_duplicates,\ +pandas.Index.droplevel,\ +pandas.Index.dropna,\ +pandas.Index.duplicated,\ +pandas.Index.fillna,\ +pandas.Index.get_loc,\ +pandas.Index.insert,\ +pandas.Index.intersection,\ +pandas.Index.join,\ +pandas.Index.memory_usage,\ +pandas.Index.nunique,\ +pandas.Index.putmask,\ +pandas.Index.ravel,\ +pandas.Index.slice_indexer,\ +pandas.Index.slice_locs,\ +pandas.Index.symmetric_difference,\ +pandas.Index.to_list,\ +pandas.Index.union,\ +pandas.Index.unique,\ +pandas.Index.value_counts,\ +pandas.IntervalIndex.contains,\ +pandas.IntervalIndex.get_loc,\ +pandas.IntervalIndex.set_closed,\ +pandas.IntervalIndex.to_tuples,\ +pandas.MultiIndex.copy,\ +pandas.MultiIndex.drop,\ +pandas.MultiIndex.droplevel,\ +pandas.MultiIndex.remove_unused_levels,\ +pandas.MultiIndex.reorder_levels,\ +pandas.MultiIndex.set_levels,\ +pandas.MultiIndex.to_frame,\ +pandas.PeriodIndex.to_timestamp,\ +pandas.Series.__iter__,\ +pandas.Series.astype,\ +pandas.Series.at_time,\ +pandas.Series.case_when,\ +pandas.Series.cat.set_categories,\ +pandas.Series.dt.to_period,\ +pandas.Series.dt.tz_convert,\ +pandas.Series.ewm,\ +pandas.Series.expanding,\ +pandas.Series.filter,\ +pandas.Series.first_valid_index,\ +pandas.Series.get,\ +pandas.Series.infer_objects,\ +pandas.Series.kurt,\ +pandas.Series.kurtosis,\ +pandas.Series.last_valid_index,\ +pandas.Series.mask,\ +pandas.Series.max,\ +pandas.Series.mean,\ +pandas.Series.median,\ +pandas.Series.min,\ +pandas.Series.nunique,\ +pandas.Series.pipe,\ +pandas.Series.plot.box,\ +pandas.Series.plot.density,\ +pandas.Series.plot.kde,\ +pandas.Series.pop,\ +pandas.Series.prod,\ +pandas.Series.product,\ +pandas.Series.reindex,\ +pandas.Series.reorder_levels,\ +pandas.Series.sem,\ +pandas.Series.skew,\ +pandas.Series.sparse.to_coo,\ +pandas.Series.std,\ +pandas.Series.str.capitalize,\ +pandas.Series.str.casefold,\ +pandas.Series.str.center,\ +pandas.Series.str.decode,\ +pandas.Series.str.encode,\ +pandas.Series.str.find,\ +pandas.Series.str.fullmatch,\ +pandas.Series.str.get,\ +pandas.Series.str.index,\ +pandas.Series.str.ljust,\ +pandas.Series.str.lower,\ +pandas.Series.str.lstrip,\ +pandas.Series.str.match,\ +pandas.Series.str.normalize,\ +pandas.Series.str.partition,\ +pandas.Series.str.rfind,\ +pandas.Series.str.rindex,\ +pandas.Series.str.rjust,\ +pandas.Series.str.rpartition,\ +pandas.Series.str.rstrip,\ +pandas.Series.str.strip,\ +pandas.Series.str.swapcase,\ +pandas.Series.str.title,\ +pandas.Series.str.translate,\ +pandas.Series.str.upper,\ +pandas.Series.str.wrap,\ +pandas.Series.str.zfill,\ +pandas.Series.sum,\ +pandas.Series.to_list,\ +pandas.Series.to_numpy,\ +pandas.Series.to_timestamp,\ +pandas.Series.value_counts,\ +pandas.Series.var,\ +pandas.Series.where,\ +pandas.TimedeltaIndex.as_unit,\ +pandas.TimedeltaIndex.to_pytimedelta,\ +pandas.api.extensions.ExtensionArray._accumulate,\ +pandas.api.extensions.ExtensionArray._hash_pandas_object,\ +pandas.api.extensions.ExtensionArray._pad_or_backfill,\ +pandas.api.extensions.ExtensionArray._reduce,\ +pandas.api.extensions.ExtensionArray.copy,\ +pandas.api.extensions.ExtensionArray.dropna,\ +pandas.api.extensions.ExtensionArray.duplicated,\ +pandas.api.extensions.ExtensionArray.insert,\ +pandas.api.extensions.ExtensionArray.isin,\ +pandas.api.extensions.ExtensionArray.ravel,\ +pandas.api.extensions.ExtensionArray.take,\ +pandas.api.extensions.ExtensionArray.tolist,\ +pandas.api.extensions.ExtensionArray.unique,\ +pandas.api.interchange.from_dataframe,\ +pandas.api.types.is_hashable,\ +pandas.api.types.pandas_dtype,\ +pandas.api.types.union_categoricals,\ +pandas.arrays.IntervalArray.contains,\ +pandas.arrays.IntervalArray.set_closed,\ +pandas.arrays.IntervalArray.to_tuples,\ +pandas.bdate_range,\ +pandas.core.groupby.DataFrameGroupBy.__iter__,\ +pandas.core.groupby.DataFrameGroupBy.agg,\ +pandas.core.groupby.DataFrameGroupBy.aggregate,\ +pandas.core.groupby.DataFrameGroupBy.apply,\ +pandas.core.groupby.DataFrameGroupBy.boxplot,\ +pandas.core.groupby.DataFrameGroupBy.cummax,\ +pandas.core.groupby.DataFrameGroupBy.cummin,\ +pandas.core.groupby.DataFrameGroupBy.cumprod,\ +pandas.core.groupby.DataFrameGroupBy.cumsum,\ +pandas.core.groupby.DataFrameGroupBy.filter,\ +pandas.core.groupby.DataFrameGroupBy.get_group,\ +pandas.core.groupby.DataFrameGroupBy.hist,\ +pandas.core.groupby.DataFrameGroupBy.mean,\ +pandas.core.groupby.DataFrameGroupBy.nunique,\ +pandas.core.groupby.DataFrameGroupBy.rank,\ +pandas.core.groupby.DataFrameGroupBy.resample,\ +pandas.core.groupby.DataFrameGroupBy.skew,\ +pandas.core.groupby.DataFrameGroupBy.transform,\ +pandas.core.groupby.SeriesGroupBy.__iter__,\ +pandas.core.groupby.SeriesGroupBy.agg,\ +pandas.core.groupby.SeriesGroupBy.aggregate,\ +pandas.core.groupby.SeriesGroupBy.apply,\ +pandas.core.groupby.SeriesGroupBy.cummax,\ +pandas.core.groupby.SeriesGroupBy.cummin,\ +pandas.core.groupby.SeriesGroupBy.cumprod,\ +pandas.core.groupby.SeriesGroupBy.cumsum,\ +pandas.core.groupby.SeriesGroupBy.filter,\ +pandas.core.groupby.SeriesGroupBy.get_group,\ +pandas.core.groupby.SeriesGroupBy.mean,\ +pandas.core.groupby.SeriesGroupBy.rank,\ +pandas.core.groupby.SeriesGroupBy.resample,\ +pandas.core.groupby.SeriesGroupBy.skew,\ +pandas.core.groupby.SeriesGroupBy.transform,\ +pandas.core.resample.Resampler.__iter__,\ +pandas.core.resample.Resampler.ffill,\ +pandas.core.resample.Resampler.get_group,\ +pandas.core.resample.Resampler.max,\ +pandas.core.resample.Resampler.min,\ +pandas.core.resample.Resampler.transform,\ +pandas.date_range,\ +pandas.interval_range,\ +pandas.io.formats.style.Styler.apply,\ +pandas.io.formats.style.Styler.apply_index,\ +pandas.io.formats.style.Styler.background_gradient,\ +pandas.io.formats.style.Styler.bar,\ +pandas.io.formats.style.Styler.concat,\ +pandas.io.formats.style.Styler.export,\ +pandas.io.formats.style.Styler.format,\ +pandas.io.formats.style.Styler.format_index,\ +pandas.io.formats.style.Styler.hide,\ +pandas.io.formats.style.Styler.highlight_between,\ +pandas.io.formats.style.Styler.highlight_max,\ +pandas.io.formats.style.Styler.highlight_min,\ +pandas.io.formats.style.Styler.highlight_null,\ +pandas.io.formats.style.Styler.highlight_quantile,\ +pandas.io.formats.style.Styler.map,\ +pandas.io.formats.style.Styler.map_index,\ +pandas.io.formats.style.Styler.relabel_index,\ +pandas.io.formats.style.Styler.set_caption,\ +pandas.io.formats.style.Styler.set_properties,\ +pandas.io.formats.style.Styler.set_sticky,\ +pandas.io.formats.style.Styler.set_table_attributes,\ +pandas.io.formats.style.Styler.set_table_styles,\ +pandas.io.formats.style.Styler.set_td_classes,\ +pandas.io.formats.style.Styler.set_tooltips,\ +pandas.io.formats.style.Styler.set_uuid,\ +pandas.io.formats.style.Styler.text_gradient,\ +pandas.io.formats.style.Styler.use,\ +pandas.io.json.build_table_schema,\ +pandas.io.stata.StataReader.value_labels,\ +pandas.io.stata.StataReader.variable_labels,\ +pandas.json_normalize,\ +pandas.merge_asof,\ +pandas.period_range,\ +pandas.plotting.andrews_curves,\ +pandas.plotting.autocorrelation_plot,\ +pandas.plotting.lag_plot,\ +pandas.plotting.parallel_coordinates,\ +pandas.plotting.radviz,\ +pandas.plotting.table,\ +pandas.set_eng_float_format # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of RT03 group ##### - PARAMETERS+=(-- --format=actions --errors=SA01 --ignore_functions \ - pandas.Categorical.__array__\ - pandas.Categorical.codes\ - pandas.Categorical.dtype\ - pandas.Categorical.from_codes\ - pandas.Categorical.ordered\ - pandas.CategoricalDtype.categories\ - pandas.CategoricalDtype.ordered\ - pandas.CategoricalIndex.codes\ - pandas.CategoricalIndex.ordered\ - pandas.DataFrame.__dataframe__\ - pandas.DataFrame.__iter__\ - pandas.DataFrame.assign\ - pandas.DataFrame.axes\ - pandas.DataFrame.backfill\ - pandas.DataFrame.bfill\ - pandas.DataFrame.columns\ - pandas.DataFrame.copy\ - pandas.DataFrame.droplevel\ - pandas.DataFrame.dtypes\ - pandas.DataFrame.ffill\ - pandas.DataFrame.first_valid_index\ - pandas.DataFrame.get\ - pandas.DataFrame.keys\ - pandas.DataFrame.kurt\ - pandas.DataFrame.kurtosis\ - pandas.DataFrame.last_valid_index\ - pandas.DataFrame.mean\ - pandas.DataFrame.median\ - pandas.DataFrame.pad\ - pandas.DataFrame.plot\ - pandas.DataFrame.pop\ - pandas.DataFrame.reorder_levels\ - pandas.DataFrame.sem\ - pandas.DataFrame.skew\ - pandas.DataFrame.sparse\ - pandas.DataFrame.sparse.density\ - pandas.DataFrame.sparse.from_spmatrix\ - pandas.DataFrame.sparse.to_coo\ - pandas.DataFrame.sparse.to_dense\ - pandas.DataFrame.std\ - pandas.DataFrame.swapaxes\ - pandas.DataFrame.swaplevel\ - pandas.DataFrame.to_feather\ - pandas.DataFrame.to_markdown\ - pandas.DataFrame.to_period\ - pandas.DataFrame.to_timestamp\ - pandas.DataFrame.tz_convert\ - pandas.DataFrame.tz_localize\ - pandas.DataFrame.var\ - pandas.DatetimeIndex.ceil\ - pandas.DatetimeIndex.date\ - pandas.DatetimeIndex.day\ - pandas.DatetimeIndex.day_name\ - pandas.DatetimeIndex.day_of_year\ - pandas.DatetimeIndex.dayofyear\ - pandas.DatetimeIndex.floor\ - pandas.DatetimeIndex.freqstr\ - pandas.DatetimeIndex.hour\ - pandas.DatetimeIndex.inferred_freq\ - pandas.DatetimeIndex.is_leap_year\ - pandas.DatetimeIndex.microsecond\ - pandas.DatetimeIndex.minute\ - pandas.DatetimeIndex.month\ - pandas.DatetimeIndex.month_name\ - pandas.DatetimeIndex.nanosecond\ - pandas.DatetimeIndex.quarter\ - pandas.DatetimeIndex.round\ - pandas.DatetimeIndex.second\ - pandas.DatetimeIndex.snap\ - pandas.DatetimeIndex.time\ - pandas.DatetimeIndex.timetz\ - pandas.DatetimeIndex.to_pydatetime\ - pandas.DatetimeIndex.tz\ - pandas.DatetimeIndex.year\ - pandas.DatetimeTZDtype\ - pandas.DatetimeTZDtype.tz\ - pandas.DatetimeTZDtype.unit\ - pandas.ExcelFile\ - pandas.ExcelFile.parse\ - pandas.ExcelWriter\ - pandas.Flags\ - pandas.Float32Dtype\ - pandas.Float64Dtype\ - pandas.Grouper\ - pandas.HDFStore.append\ - pandas.HDFStore.get\ - pandas.HDFStore.groups\ - pandas.HDFStore.info\ - pandas.HDFStore.keys\ - pandas.HDFStore.put\ - pandas.HDFStore.select\ - pandas.HDFStore.walk\ - pandas.Index.T\ - pandas.Index.append\ - pandas.Index.astype\ - pandas.Index.copy\ - pandas.Index.difference\ - pandas.Index.drop\ - pandas.Index.droplevel\ - pandas.Index.dropna\ - pandas.Index.dtype\ - pandas.Index.equals\ - pandas.Index.get_indexer\ - pandas.Index.get_indexer_for\ - pandas.Index.get_indexer_non_unique\ - pandas.Index.get_loc\ - pandas.Index.hasnans\ - pandas.Index.identical\ - pandas.Index.inferred_type\ - pandas.Index.insert\ - pandas.Index.intersection\ - pandas.Index.item\ - pandas.Index.join\ - pandas.Index.map\ - pandas.Index.name\ - pandas.Index.nbytes\ - pandas.Index.ndim\ - pandas.Index.shape\ - pandas.Index.size\ - pandas.Index.slice_indexer\ - pandas.Index.str\ - pandas.Index.symmetric_difference\ - pandas.Index.union\ - pandas.Int16Dtype\ - pandas.Int32Dtype\ - pandas.Int64Dtype\ - pandas.Int8Dtype\ - pandas.Interval.closed\ - pandas.Interval.left\ - pandas.Interval.mid\ - pandas.Interval.right\ - pandas.IntervalDtype\ - pandas.IntervalDtype.subtype\ - pandas.IntervalIndex.closed\ - pandas.IntervalIndex.get_indexer\ - pandas.IntervalIndex.get_loc\ - pandas.IntervalIndex.is_non_overlapping_monotonic\ - pandas.IntervalIndex.set_closed\ - pandas.IntervalIndex.to_tuples\ - pandas.MultiIndex.append\ - pandas.MultiIndex.copy\ - pandas.MultiIndex.drop\ - pandas.MultiIndex.droplevel\ - pandas.MultiIndex.dtypes\ - pandas.MultiIndex.get_indexer\ - pandas.MultiIndex.get_level_values\ - pandas.MultiIndex.levels\ - pandas.MultiIndex.levshape\ - pandas.MultiIndex.names\ - pandas.MultiIndex.nlevels\ - pandas.MultiIndex.remove_unused_levels\ - pandas.MultiIndex.reorder_levels\ - pandas.MultiIndex.set_codes\ - pandas.MultiIndex.set_levels\ - pandas.MultiIndex.sortlevel\ - pandas.MultiIndex.truncate\ - pandas.NA\ - pandas.NaT\ - pandas.NamedAgg\ - pandas.Period\ - pandas.Period.asfreq\ - pandas.Period.freqstr\ - pandas.Period.is_leap_year\ - pandas.Period.month\ - pandas.Period.now\ - pandas.Period.quarter\ - pandas.Period.strftime\ - pandas.Period.to_timestamp\ - pandas.Period.year\ - pandas.PeriodDtype\ - pandas.PeriodDtype.freq\ - pandas.PeriodIndex.day\ - pandas.PeriodIndex.day_of_week\ - pandas.PeriodIndex.day_of_year\ - pandas.PeriodIndex.dayofweek\ - pandas.PeriodIndex.dayofyear\ - pandas.PeriodIndex.days_in_month\ - pandas.PeriodIndex.daysinmonth\ - pandas.PeriodIndex.freqstr\ - pandas.PeriodIndex.from_fields\ - pandas.PeriodIndex.from_ordinals\ - pandas.PeriodIndex.hour\ - pandas.PeriodIndex.is_leap_year\ - pandas.PeriodIndex.minute\ - pandas.PeriodIndex.month\ - pandas.PeriodIndex.quarter\ - pandas.PeriodIndex.second\ - pandas.PeriodIndex.to_timestamp\ - pandas.PeriodIndex.week\ - pandas.PeriodIndex.weekday\ - pandas.PeriodIndex.weekofyear\ - pandas.PeriodIndex.year\ - pandas.RangeIndex.from_range\ - pandas.RangeIndex.start\ - pandas.RangeIndex.step\ - pandas.RangeIndex.stop\ - pandas.Series\ - pandas.Series.T\ - pandas.Series.__iter__\ - pandas.Series.align\ - pandas.Series.backfill\ - pandas.Series.bfill\ - pandas.Series.cat\ - pandas.Series.cat.codes\ - pandas.Series.cat.ordered\ - pandas.Series.copy\ - pandas.Series.droplevel\ - pandas.Series.dt.ceil\ - pandas.Series.dt.components\ - pandas.Series.dt.date\ - pandas.Series.dt.day\ - pandas.Series.dt.day_name\ - pandas.Series.dt.day_of_year\ - pandas.Series.dt.dayofyear\ - pandas.Series.dt.days\ - pandas.Series.dt.days_in_month\ - pandas.Series.dt.daysinmonth\ - pandas.Series.dt.floor\ - pandas.Series.dt.hour\ - pandas.Series.dt.is_leap_year\ - pandas.Series.dt.microsecond\ - pandas.Series.dt.microseconds\ - pandas.Series.dt.minute\ - pandas.Series.dt.month\ - pandas.Series.dt.month_name\ - pandas.Series.dt.nanosecond\ - pandas.Series.dt.nanoseconds\ - pandas.Series.dt.quarter\ - pandas.Series.dt.round\ - pandas.Series.dt.second\ - pandas.Series.dt.seconds\ - pandas.Series.dt.time\ - pandas.Series.dt.timetz\ - pandas.Series.dt.tz\ - pandas.Series.dt.year\ - pandas.Series.dtype\ - pandas.Series.dtypes\ - pandas.Series.eq\ - pandas.Series.ffill\ - pandas.Series.first_valid_index\ - pandas.Series.ge\ - pandas.Series.get\ - pandas.Series.gt\ - pandas.Series.hasnans\ - pandas.Series.is_monotonic_decreasing\ - pandas.Series.is_monotonic_increasing\ - pandas.Series.is_unique\ - pandas.Series.item\ - pandas.Series.keys\ - pandas.Series.kurt\ - pandas.Series.kurtosis\ - pandas.Series.last_valid_index\ - pandas.Series.le\ - pandas.Series.list.__getitem__\ - pandas.Series.list.flatten\ - pandas.Series.list.len\ - pandas.Series.lt\ - pandas.Series.mean\ - pandas.Series.median\ - pandas.Series.mode\ - pandas.Series.nbytes\ - pandas.Series.ndim\ - pandas.Series.ne\ - pandas.Series.pad\ - pandas.Series.plot\ - pandas.Series.pop\ - pandas.Series.reorder_levels\ - pandas.Series.sem\ - pandas.Series.shape\ - pandas.Series.size\ - pandas.Series.skew\ - pandas.Series.sparse\ - pandas.Series.sparse.density\ - pandas.Series.sparse.fill_value\ - pandas.Series.sparse.from_coo\ - pandas.Series.sparse.npoints\ - pandas.Series.sparse.sp_values\ - pandas.Series.sparse.to_coo\ - pandas.Series.std\ - pandas.Series.str\ - pandas.Series.str.center\ - pandas.Series.str.decode\ - pandas.Series.str.encode\ - pandas.Series.str.get\ - pandas.Series.str.ljust\ - pandas.Series.str.normalize\ - pandas.Series.str.repeat\ - pandas.Series.str.replace\ - pandas.Series.str.rjust\ - pandas.Series.str.translate\ - pandas.Series.str.wrap\ - pandas.Series.struct.dtypes\ - pandas.Series.swaplevel\ - pandas.Series.to_dict\ - pandas.Series.to_frame\ - pandas.Series.to_markdown\ - pandas.Series.to_period\ - pandas.Series.to_string\ - pandas.Series.to_timestamp\ - pandas.Series.tz_convert\ - pandas.Series.tz_localize\ - pandas.Series.unstack\ - pandas.Series.update\ - pandas.Series.var\ - pandas.SparseDtype\ - pandas.Timedelta\ - pandas.Timedelta.as_unit\ - pandas.Timedelta.asm8\ - pandas.Timedelta.ceil\ - pandas.Timedelta.components\ - pandas.Timedelta.days\ - pandas.Timedelta.floor\ - pandas.Timedelta.max\ - pandas.Timedelta.min\ - pandas.Timedelta.resolution\ - pandas.Timedelta.round\ - pandas.Timedelta.to_timedelta64\ - pandas.Timedelta.total_seconds\ - pandas.Timedelta.view\ - pandas.TimedeltaIndex.as_unit\ - pandas.TimedeltaIndex.ceil\ - pandas.TimedeltaIndex.components\ - pandas.TimedeltaIndex.days\ - pandas.TimedeltaIndex.floor\ - pandas.TimedeltaIndex.inferred_freq\ - pandas.TimedeltaIndex.microseconds\ - pandas.TimedeltaIndex.nanoseconds\ - pandas.TimedeltaIndex.round\ - pandas.TimedeltaIndex.seconds\ - pandas.TimedeltaIndex.to_pytimedelta\ - pandas.Timestamp\ - pandas.Timestamp.as_unit\ - pandas.Timestamp.asm8\ - pandas.Timestamp.astimezone\ - pandas.Timestamp.ceil\ - pandas.Timestamp.combine\ - pandas.Timestamp.ctime\ - pandas.Timestamp.date\ - pandas.Timestamp.day_name\ - pandas.Timestamp.day_of_week\ - pandas.Timestamp.day_of_year\ - pandas.Timestamp.dayofweek\ - pandas.Timestamp.dayofyear\ - pandas.Timestamp.days_in_month\ - pandas.Timestamp.daysinmonth\ - pandas.Timestamp.dst\ - pandas.Timestamp.floor\ - pandas.Timestamp.fromordinal\ - pandas.Timestamp.fromtimestamp\ - pandas.Timestamp.is_leap_year\ - pandas.Timestamp.isocalendar\ - pandas.Timestamp.isoformat\ - pandas.Timestamp.isoweekday\ - pandas.Timestamp.max\ - pandas.Timestamp.min\ - pandas.Timestamp.month_name\ - pandas.Timestamp.normalize\ - pandas.Timestamp.now\ - pandas.Timestamp.quarter\ - pandas.Timestamp.replace\ - pandas.Timestamp.resolution\ - pandas.Timestamp.round\ - pandas.Timestamp.strftime\ - pandas.Timestamp.strptime\ - pandas.Timestamp.time\ - pandas.Timestamp.timestamp\ - pandas.Timestamp.timetuple\ - pandas.Timestamp.timetz\ - pandas.Timestamp.to_datetime64\ - pandas.Timestamp.to_julian_date\ - pandas.Timestamp.to_period\ - pandas.Timestamp.to_pydatetime\ - pandas.Timestamp.today\ - pandas.Timestamp.toordinal\ - pandas.Timestamp.tz\ - pandas.Timestamp.tz_convert\ - pandas.Timestamp.tz_localize\ - pandas.Timestamp.tzname\ - pandas.Timestamp.unit\ - pandas.Timestamp.utcfromtimestamp\ - pandas.Timestamp.utcnow\ - pandas.Timestamp.utcoffset\ - pandas.Timestamp.utctimetuple\ - pandas.Timestamp.week\ - pandas.Timestamp.weekday\ - pandas.Timestamp.weekofyear\ - pandas.UInt16Dtype\ - pandas.UInt32Dtype\ - pandas.UInt64Dtype\ - pandas.UInt8Dtype\ - pandas.api.extensions.ExtensionArray\ - pandas.api.extensions.ExtensionArray._accumulate\ - pandas.api.extensions.ExtensionArray._concat_same_type\ - pandas.api.extensions.ExtensionArray._formatter\ - pandas.api.extensions.ExtensionArray._from_sequence\ - pandas.api.extensions.ExtensionArray._from_sequence_of_strings\ - pandas.api.extensions.ExtensionArray._hash_pandas_object\ - pandas.api.extensions.ExtensionArray._pad_or_backfill\ - pandas.api.extensions.ExtensionArray._reduce\ - pandas.api.extensions.ExtensionArray._values_for_factorize\ - pandas.api.extensions.ExtensionArray.astype\ - pandas.api.extensions.ExtensionArray.copy\ - pandas.api.extensions.ExtensionArray.dropna\ - pandas.api.extensions.ExtensionArray.dtype\ - pandas.api.extensions.ExtensionArray.duplicated\ - pandas.api.extensions.ExtensionArray.equals\ - pandas.api.extensions.ExtensionArray.fillna\ - pandas.api.extensions.ExtensionArray.insert\ - pandas.api.extensions.ExtensionArray.interpolate\ - pandas.api.extensions.ExtensionArray.isin\ - pandas.api.extensions.ExtensionArray.isna\ - pandas.api.extensions.ExtensionArray.nbytes\ - pandas.api.extensions.ExtensionArray.ndim\ - pandas.api.extensions.ExtensionArray.ravel\ - pandas.api.extensions.ExtensionArray.shape\ - pandas.api.extensions.ExtensionArray.shift\ - pandas.api.extensions.ExtensionArray.tolist\ - pandas.api.extensions.ExtensionArray.unique\ - pandas.api.extensions.ExtensionArray.view\ - pandas.api.extensions.register_extension_dtype\ - pandas.api.indexers.BaseIndexer\ - pandas.api.indexers.FixedForwardWindowIndexer\ - pandas.api.indexers.VariableOffsetWindowIndexer\ - pandas.api.interchange.from_dataframe\ - pandas.api.types.infer_dtype\ - pandas.api.types.is_any_real_numeric_dtype\ - pandas.api.types.is_bool\ - pandas.api.types.is_bool_dtype\ - pandas.api.types.is_categorical_dtype\ - pandas.api.types.is_complex\ - pandas.api.types.is_complex_dtype\ - pandas.api.types.is_datetime64_any_dtype\ - pandas.api.types.is_datetime64_dtype\ - pandas.api.types.is_datetime64_ns_dtype\ - pandas.api.types.is_datetime64tz_dtype\ - pandas.api.types.is_dict_like\ - pandas.api.types.is_extension_array_dtype\ - pandas.api.types.is_file_like\ - pandas.api.types.is_float\ - pandas.api.types.is_float_dtype\ - pandas.api.types.is_hashable\ - pandas.api.types.is_int64_dtype\ - pandas.api.types.is_integer\ - pandas.api.types.is_integer_dtype\ - pandas.api.types.is_interval_dtype\ - pandas.api.types.is_iterator\ - pandas.api.types.is_list_like\ - pandas.api.types.is_named_tuple\ - pandas.api.types.is_numeric_dtype\ - pandas.api.types.is_object_dtype\ - pandas.api.types.is_period_dtype\ - pandas.api.types.is_re\ - pandas.api.types.is_re_compilable\ - pandas.api.types.is_scalar\ - pandas.api.types.is_signed_integer_dtype\ - pandas.api.types.is_sparse\ - pandas.api.types.is_string_dtype\ - pandas.api.types.is_timedelta64_dtype\ - pandas.api.types.is_timedelta64_ns_dtype\ - pandas.api.types.is_unsigned_integer_dtype\ - pandas.api.types.pandas_dtype\ - pandas.api.types.union_categoricals\ - pandas.arrays.ArrowExtensionArray\ - pandas.arrays.BooleanArray\ - pandas.arrays.DatetimeArray\ - pandas.arrays.FloatingArray\ - pandas.arrays.IntegerArray\ - pandas.arrays.IntervalArray.closed\ - pandas.arrays.IntervalArray.is_non_overlapping_monotonic\ - pandas.arrays.IntervalArray.left\ - pandas.arrays.IntervalArray.length\ - pandas.arrays.IntervalArray.mid\ - pandas.arrays.IntervalArray.right\ - pandas.arrays.IntervalArray.set_closed\ - pandas.arrays.IntervalArray.to_tuples\ - pandas.arrays.NumpyExtensionArray\ - pandas.arrays.SparseArray\ - pandas.arrays.TimedeltaArray\ - pandas.bdate_range\ - pandas.core.groupby.DataFrameGroupBy.__iter__\ - pandas.core.groupby.DataFrameGroupBy.boxplot\ - pandas.core.groupby.DataFrameGroupBy.filter\ - pandas.core.groupby.DataFrameGroupBy.get_group\ - pandas.core.groupby.DataFrameGroupBy.groups\ - pandas.core.groupby.DataFrameGroupBy.indices\ - pandas.core.groupby.DataFrameGroupBy.max\ - pandas.core.groupby.DataFrameGroupBy.median\ - pandas.core.groupby.DataFrameGroupBy.min\ - pandas.core.groupby.DataFrameGroupBy.nunique\ - pandas.core.groupby.DataFrameGroupBy.ohlc\ - pandas.core.groupby.DataFrameGroupBy.plot\ - pandas.core.groupby.DataFrameGroupBy.prod\ - pandas.core.groupby.DataFrameGroupBy.sem\ - pandas.core.groupby.DataFrameGroupBy.sum\ - pandas.core.groupby.SeriesGroupBy.__iter__\ - pandas.core.groupby.SeriesGroupBy.filter\ - pandas.core.groupby.SeriesGroupBy.get_group\ - pandas.core.groupby.SeriesGroupBy.groups\ - pandas.core.groupby.SeriesGroupBy.indices\ - pandas.core.groupby.SeriesGroupBy.is_monotonic_decreasing\ - pandas.core.groupby.SeriesGroupBy.is_monotonic_increasing\ - pandas.core.groupby.SeriesGroupBy.max\ - pandas.core.groupby.SeriesGroupBy.median\ - pandas.core.groupby.SeriesGroupBy.min\ - pandas.core.groupby.SeriesGroupBy.nunique\ - pandas.core.groupby.SeriesGroupBy.ohlc\ - pandas.core.groupby.SeriesGroupBy.plot\ - pandas.core.groupby.SeriesGroupBy.prod\ - pandas.core.groupby.SeriesGroupBy.sem\ - pandas.core.groupby.SeriesGroupBy.sum\ - pandas.core.resample.Resampler.__iter__\ - pandas.core.resample.Resampler.get_group\ - pandas.core.resample.Resampler.groups\ - pandas.core.resample.Resampler.indices\ - pandas.core.resample.Resampler.max\ - pandas.core.resample.Resampler.mean\ - pandas.core.resample.Resampler.median\ - pandas.core.resample.Resampler.min\ - pandas.core.resample.Resampler.nunique\ - pandas.core.resample.Resampler.ohlc\ - pandas.core.resample.Resampler.prod\ - pandas.core.resample.Resampler.sem\ - pandas.core.resample.Resampler.std\ - pandas.core.resample.Resampler.sum\ - pandas.core.resample.Resampler.transform\ - pandas.core.resample.Resampler.var\ - pandas.describe_option\ - pandas.errors.AbstractMethodError\ - pandas.errors.AttributeConflictWarning\ - pandas.errors.CSSWarning\ - pandas.errors.CategoricalConversionWarning\ - pandas.errors.ChainedAssignmentError\ - pandas.errors.ClosedFileError\ - pandas.errors.DataError\ - pandas.errors.DuplicateLabelError\ - pandas.errors.EmptyDataError\ - pandas.errors.IntCastingNaNError\ - pandas.errors.InvalidIndexError\ - pandas.errors.InvalidVersion\ - pandas.errors.MergeError\ - pandas.errors.NullFrequencyError\ - pandas.errors.NumExprClobberingError\ - pandas.errors.NumbaUtilError\ - pandas.errors.OptionError\ - pandas.errors.OutOfBoundsDatetime\ - pandas.errors.OutOfBoundsTimedelta\ - pandas.errors.PerformanceWarning\ - pandas.errors.PossibleDataLossError\ - pandas.errors.PossiblePrecisionLoss\ - pandas.errors.SpecificationError\ - pandas.errors.UndefinedVariableError\ - pandas.errors.UnsortedIndexError\ - pandas.errors.UnsupportedFunctionCall\ - pandas.errors.ValueLabelTypeMismatch\ - pandas.get_option\ - pandas.infer_freq\ - pandas.io.formats.style.Styler.bar\ - pandas.io.formats.style.Styler.clear\ - pandas.io.formats.style.Styler.concat\ - pandas.io.formats.style.Styler.from_custom_template\ - pandas.io.formats.style.Styler.hide\ - pandas.io.formats.style.Styler.set_caption\ - pandas.io.formats.style.Styler.set_properties\ - pandas.io.formats.style.Styler.set_sticky\ - pandas.io.formats.style.Styler.set_tooltips\ - pandas.io.formats.style.Styler.set_uuid\ - pandas.io.formats.style.Styler.to_string\ - pandas.io.json.build_table_schema\ - pandas.io.stata.StataReader.data_label\ - pandas.io.stata.StataReader.value_labels\ - pandas.io.stata.StataReader.variable_labels\ - pandas.io.stata.StataWriter.write_file\ - pandas.json_normalize\ - pandas.option_context\ - pandas.period_range\ - pandas.plotting.andrews_curves\ - pandas.plotting.autocorrelation_plot\ - pandas.plotting.lag_plot\ - pandas.plotting.parallel_coordinates\ - pandas.plotting.plot_params\ - pandas.plotting.scatter_matrix\ - pandas.plotting.table\ - pandas.qcut\ - pandas.read_feather\ - pandas.read_orc\ - pandas.read_sas\ - pandas.read_spss\ - pandas.reset_option\ - pandas.set_eng_float_format\ - pandas.set_option\ - pandas.show_versions\ - pandas.test\ - pandas.testing.assert_extension_array_equal\ - pandas.testing.assert_index_equal\ - pandas.testing.assert_series_equal\ - pandas.timedelta_range\ - pandas.tseries.api.guess_datetime_format\ - pandas.tseries.offsets.BDay\ - pandas.tseries.offsets.BQuarterBegin.copy\ - pandas.tseries.offsets.BQuarterBegin.freqstr\ - pandas.tseries.offsets.BQuarterBegin.kwds\ - pandas.tseries.offsets.BQuarterBegin.name\ - pandas.tseries.offsets.BQuarterEnd.copy\ - pandas.tseries.offsets.BQuarterEnd.freqstr\ - pandas.tseries.offsets.BQuarterEnd.kwds\ - pandas.tseries.offsets.BQuarterEnd.name\ - pandas.tseries.offsets.BYearBegin.copy\ - pandas.tseries.offsets.BYearBegin.freqstr\ - pandas.tseries.offsets.BYearBegin.kwds\ - pandas.tseries.offsets.BYearBegin.name\ - pandas.tseries.offsets.BYearEnd.copy\ - pandas.tseries.offsets.BYearEnd.freqstr\ - pandas.tseries.offsets.BYearEnd.kwds\ - pandas.tseries.offsets.BYearEnd.name\ - pandas.tseries.offsets.BusinessDay\ - pandas.tseries.offsets.BusinessDay.copy\ - pandas.tseries.offsets.BusinessDay.freqstr\ - pandas.tseries.offsets.BusinessDay.kwds\ - pandas.tseries.offsets.BusinessDay.name\ - pandas.tseries.offsets.BusinessHour\ - pandas.tseries.offsets.BusinessHour.copy\ - pandas.tseries.offsets.BusinessHour.freqstr\ - pandas.tseries.offsets.BusinessHour.kwds\ - pandas.tseries.offsets.BusinessHour.name\ - pandas.tseries.offsets.BusinessMonthBegin.copy\ - pandas.tseries.offsets.BusinessMonthBegin.freqstr\ - pandas.tseries.offsets.BusinessMonthBegin.kwds\ - pandas.tseries.offsets.BusinessMonthBegin.name\ - pandas.tseries.offsets.BusinessMonthEnd.copy\ - pandas.tseries.offsets.BusinessMonthEnd.freqstr\ - pandas.tseries.offsets.BusinessMonthEnd.kwds\ - pandas.tseries.offsets.BusinessMonthEnd.name\ - pandas.tseries.offsets.CDay\ - pandas.tseries.offsets.CustomBusinessDay\ - pandas.tseries.offsets.CustomBusinessDay.copy\ - pandas.tseries.offsets.CustomBusinessDay.freqstr\ - pandas.tseries.offsets.CustomBusinessDay.kwds\ - pandas.tseries.offsets.CustomBusinessDay.name\ - pandas.tseries.offsets.CustomBusinessHour\ - pandas.tseries.offsets.CustomBusinessHour.copy\ - pandas.tseries.offsets.CustomBusinessHour.freqstr\ - pandas.tseries.offsets.CustomBusinessHour.kwds\ - pandas.tseries.offsets.CustomBusinessHour.name\ - pandas.tseries.offsets.CustomBusinessMonthBegin.copy\ - pandas.tseries.offsets.CustomBusinessMonthBegin.freqstr\ - pandas.tseries.offsets.CustomBusinessMonthBegin.is_on_offset\ - pandas.tseries.offsets.CustomBusinessMonthBegin.kwds\ - pandas.tseries.offsets.CustomBusinessMonthBegin.name\ - pandas.tseries.offsets.CustomBusinessMonthEnd.copy\ - pandas.tseries.offsets.CustomBusinessMonthEnd.freqstr\ - pandas.tseries.offsets.CustomBusinessMonthEnd.is_on_offset\ - pandas.tseries.offsets.CustomBusinessMonthEnd.kwds\ - pandas.tseries.offsets.CustomBusinessMonthEnd.name\ - pandas.tseries.offsets.DateOffset.copy\ - pandas.tseries.offsets.DateOffset.freqstr\ - pandas.tseries.offsets.DateOffset.kwds\ - pandas.tseries.offsets.DateOffset.name\ - pandas.tseries.offsets.Day.copy\ - pandas.tseries.offsets.Day.freqstr\ - pandas.tseries.offsets.Day.kwds\ - pandas.tseries.offsets.Day.name\ - pandas.tseries.offsets.Day.nanos\ - pandas.tseries.offsets.Easter.copy\ - pandas.tseries.offsets.Easter.freqstr\ - pandas.tseries.offsets.Easter.kwds\ - pandas.tseries.offsets.Easter.name\ - pandas.tseries.offsets.FY5253.copy\ - pandas.tseries.offsets.FY5253.freqstr\ - pandas.tseries.offsets.FY5253.kwds\ - pandas.tseries.offsets.FY5253.name\ - pandas.tseries.offsets.FY5253Quarter.copy\ - pandas.tseries.offsets.FY5253Quarter.freqstr\ - pandas.tseries.offsets.FY5253Quarter.kwds\ - pandas.tseries.offsets.FY5253Quarter.name\ - pandas.tseries.offsets.Hour.copy\ - pandas.tseries.offsets.Hour.freqstr\ - pandas.tseries.offsets.Hour.kwds\ - pandas.tseries.offsets.Hour.name\ - pandas.tseries.offsets.Hour.nanos\ - pandas.tseries.offsets.LastWeekOfMonth\ - pandas.tseries.offsets.LastWeekOfMonth.copy\ - pandas.tseries.offsets.LastWeekOfMonth.freqstr\ - pandas.tseries.offsets.LastWeekOfMonth.kwds\ - pandas.tseries.offsets.LastWeekOfMonth.name\ - pandas.tseries.offsets.Micro.copy\ - pandas.tseries.offsets.Micro.freqstr\ - pandas.tseries.offsets.Micro.kwds\ - pandas.tseries.offsets.Micro.name\ - pandas.tseries.offsets.Micro.nanos\ - pandas.tseries.offsets.Milli.copy\ - pandas.tseries.offsets.Milli.freqstr\ - pandas.tseries.offsets.Milli.kwds\ - pandas.tseries.offsets.Milli.name\ - pandas.tseries.offsets.Milli.nanos\ - pandas.tseries.offsets.Minute.copy\ - pandas.tseries.offsets.Minute.freqstr\ - pandas.tseries.offsets.Minute.kwds\ - pandas.tseries.offsets.Minute.name\ - pandas.tseries.offsets.Minute.nanos\ - pandas.tseries.offsets.MonthBegin.copy\ - pandas.tseries.offsets.MonthBegin.freqstr\ - pandas.tseries.offsets.MonthBegin.kwds\ - pandas.tseries.offsets.MonthBegin.name\ - pandas.tseries.offsets.MonthEnd.copy\ - pandas.tseries.offsets.MonthEnd.freqstr\ - pandas.tseries.offsets.MonthEnd.kwds\ - pandas.tseries.offsets.MonthEnd.name\ - pandas.tseries.offsets.Nano.copy\ - pandas.tseries.offsets.Nano.freqstr\ - pandas.tseries.offsets.Nano.kwds\ - pandas.tseries.offsets.Nano.name\ - pandas.tseries.offsets.Nano.nanos\ - pandas.tseries.offsets.QuarterBegin.copy\ - pandas.tseries.offsets.QuarterBegin.freqstr\ - pandas.tseries.offsets.QuarterBegin.kwds\ - pandas.tseries.offsets.QuarterBegin.name\ - pandas.tseries.offsets.QuarterEnd.copy\ - pandas.tseries.offsets.QuarterEnd.freqstr\ - pandas.tseries.offsets.QuarterEnd.kwds\ - pandas.tseries.offsets.QuarterEnd.name\ - pandas.tseries.offsets.Second.copy\ - pandas.tseries.offsets.Second.freqstr\ - pandas.tseries.offsets.Second.kwds\ - pandas.tseries.offsets.Second.name\ - pandas.tseries.offsets.Second.nanos\ - pandas.tseries.offsets.SemiMonthBegin\ - pandas.tseries.offsets.SemiMonthBegin.copy\ - pandas.tseries.offsets.SemiMonthBegin.freqstr\ - pandas.tseries.offsets.SemiMonthBegin.kwds\ - pandas.tseries.offsets.SemiMonthBegin.name\ - pandas.tseries.offsets.SemiMonthEnd\ - pandas.tseries.offsets.SemiMonthEnd.copy\ - pandas.tseries.offsets.SemiMonthEnd.freqstr\ - pandas.tseries.offsets.SemiMonthEnd.kwds\ - pandas.tseries.offsets.SemiMonthEnd.name\ - pandas.tseries.offsets.Tick.copy\ - pandas.tseries.offsets.Tick.freqstr\ - pandas.tseries.offsets.Tick.kwds\ - pandas.tseries.offsets.Tick.name\ - pandas.tseries.offsets.Tick.nanos\ - pandas.tseries.offsets.Week.copy\ - pandas.tseries.offsets.Week.freqstr\ - pandas.tseries.offsets.Week.kwds\ - pandas.tseries.offsets.Week.name\ - pandas.tseries.offsets.WeekOfMonth\ - pandas.tseries.offsets.WeekOfMonth.copy\ - pandas.tseries.offsets.WeekOfMonth.freqstr\ - pandas.tseries.offsets.WeekOfMonth.kwds\ - pandas.tseries.offsets.WeekOfMonth.name\ - pandas.tseries.offsets.YearBegin.copy\ - pandas.tseries.offsets.YearBegin.freqstr\ - pandas.tseries.offsets.YearBegin.kwds\ - pandas.tseries.offsets.YearBegin.name\ - pandas.tseries.offsets.YearEnd.copy\ - pandas.tseries.offsets.YearEnd.freqstr\ - pandas.tseries.offsets.YearEnd.kwds\ - pandas.tseries.offsets.YearEnd.name\ - pandas.util.hash_array\ - pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function + PARAMETERS+=(--for_error_ignore_functions SA01 \ +pandas.Categorical.__array__,\ +pandas.Categorical.codes,\ +pandas.Categorical.dtype,\ +pandas.Categorical.from_codes,\ +pandas.Categorical.ordered,\ +pandas.CategoricalDtype.categories,\ +pandas.CategoricalDtype.ordered,\ +pandas.CategoricalIndex.codes,\ +pandas.CategoricalIndex.ordered,\ +pandas.DataFrame.__dataframe__,\ +pandas.DataFrame.__iter__,\ +pandas.DataFrame.assign,\ +pandas.DataFrame.axes,\ +pandas.DataFrame.backfill,\ +pandas.DataFrame.bfill,\ +pandas.DataFrame.columns,\ +pandas.DataFrame.copy,\ +pandas.DataFrame.droplevel,\ +pandas.DataFrame.dtypes,\ +pandas.DataFrame.ffill,\ +pandas.DataFrame.first_valid_index,\ +pandas.DataFrame.get,\ +pandas.DataFrame.keys,\ +pandas.DataFrame.kurt,\ +pandas.DataFrame.kurtosis,\ +pandas.DataFrame.last_valid_index,\ +pandas.DataFrame.mean,\ +pandas.DataFrame.median,\ +pandas.DataFrame.pad,\ +pandas.DataFrame.plot,\ +pandas.DataFrame.pop,\ +pandas.DataFrame.reorder_levels,\ +pandas.DataFrame.sem,\ +pandas.DataFrame.skew,\ +pandas.DataFrame.sparse,\ +pandas.DataFrame.sparse.density,\ +pandas.DataFrame.sparse.from_spmatrix,\ +pandas.DataFrame.sparse.to_coo,\ +pandas.DataFrame.sparse.to_dense,\ +pandas.DataFrame.std,\ +pandas.DataFrame.swapaxes,\ +pandas.DataFrame.swaplevel,\ +pandas.DataFrame.to_feather,\ +pandas.DataFrame.to_markdown,\ +pandas.DataFrame.to_period,\ +pandas.DataFrame.to_timestamp,\ +pandas.DataFrame.tz_convert,\ +pandas.DataFrame.tz_localize,\ +pandas.DataFrame.var,\ +pandas.DatetimeIndex.ceil,\ +pandas.DatetimeIndex.date,\ +pandas.DatetimeIndex.day,\ +pandas.DatetimeIndex.day_name,\ +pandas.DatetimeIndex.day_of_year,\ +pandas.DatetimeIndex.dayofyear,\ +pandas.DatetimeIndex.floor,\ +pandas.DatetimeIndex.freqstr,\ +pandas.DatetimeIndex.hour,\ +pandas.DatetimeIndex.inferred_freq,\ +pandas.DatetimeIndex.is_leap_year,\ +pandas.DatetimeIndex.microsecond,\ +pandas.DatetimeIndex.minute,\ +pandas.DatetimeIndex.month,\ +pandas.DatetimeIndex.month_name,\ +pandas.DatetimeIndex.nanosecond,\ +pandas.DatetimeIndex.quarter,\ +pandas.DatetimeIndex.round,\ +pandas.DatetimeIndex.second,\ +pandas.DatetimeIndex.snap,\ +pandas.DatetimeIndex.time,\ +pandas.DatetimeIndex.timetz,\ +pandas.DatetimeIndex.to_pydatetime,\ +pandas.DatetimeIndex.tz,\ +pandas.DatetimeIndex.year,\ +pandas.DatetimeTZDtype,\ +pandas.DatetimeTZDtype.tz,\ +pandas.DatetimeTZDtype.unit,\ +pandas.ExcelFile,\ +pandas.ExcelFile.parse,\ +pandas.ExcelWriter,\ +pandas.Flags,\ +pandas.Float32Dtype,\ +pandas.Float64Dtype,\ +pandas.Grouper,\ +pandas.HDFStore.append,\ +pandas.HDFStore.get,\ +pandas.HDFStore.groups,\ +pandas.HDFStore.info,\ +pandas.HDFStore.keys,\ +pandas.HDFStore.put,\ +pandas.HDFStore.select,\ +pandas.HDFStore.walk,\ +pandas.Index.T,\ +pandas.Index.append,\ +pandas.Index.astype,\ +pandas.Index.copy,\ +pandas.Index.difference,\ +pandas.Index.drop,\ +pandas.Index.droplevel,\ +pandas.Index.dropna,\ +pandas.Index.dtype,\ +pandas.Index.equals,\ +pandas.Index.get_indexer,\ +pandas.Index.get_indexer_for,\ +pandas.Index.get_indexer_non_unique,\ +pandas.Index.get_loc,\ +pandas.Index.hasnans,\ +pandas.Index.identical,\ +pandas.Index.inferred_type,\ +pandas.Index.insert,\ +pandas.Index.intersection,\ +pandas.Index.item,\ +pandas.Index.join,\ +pandas.Index.map,\ +pandas.Index.name,\ +pandas.Index.nbytes,\ +pandas.Index.ndim,\ +pandas.Index.shape,\ +pandas.Index.size,\ +pandas.Index.slice_indexer,\ +pandas.Index.str,\ +pandas.Index.symmetric_difference,\ +pandas.Index.union,\ +pandas.Int16Dtype,\ +pandas.Int32Dtype,\ +pandas.Int64Dtype,\ +pandas.Int8Dtype,\ +pandas.Interval.closed,\ +pandas.Interval.left,\ +pandas.Interval.mid,\ +pandas.Interval.right,\ +pandas.IntervalDtype,\ +pandas.IntervalDtype.subtype,\ +pandas.IntervalIndex.closed,\ +pandas.IntervalIndex.get_indexer,\ +pandas.IntervalIndex.get_loc,\ +pandas.IntervalIndex.is_non_overlapping_monotonic,\ +pandas.IntervalIndex.set_closed,\ +pandas.IntervalIndex.to_tuples,\ +pandas.MultiIndex.append,\ +pandas.MultiIndex.copy,\ +pandas.MultiIndex.drop,\ +pandas.MultiIndex.droplevel,\ +pandas.MultiIndex.dtypes,\ +pandas.MultiIndex.get_indexer,\ +pandas.MultiIndex.get_level_values,\ +pandas.MultiIndex.levels,\ +pandas.MultiIndex.levshape,\ +pandas.MultiIndex.names,\ +pandas.MultiIndex.nlevels,\ +pandas.MultiIndex.remove_unused_levels,\ +pandas.MultiIndex.reorder_levels,\ +pandas.MultiIndex.set_codes,\ +pandas.MultiIndex.set_levels,\ +pandas.MultiIndex.sortlevel,\ +pandas.MultiIndex.truncate,\ +pandas.NA,\ +pandas.NaT,\ +pandas.NamedAgg,\ +pandas.Period,\ +pandas.Period.asfreq,\ +pandas.Period.freqstr,\ +pandas.Period.is_leap_year,\ +pandas.Period.month,\ +pandas.Period.now,\ +pandas.Period.quarter,\ +pandas.Period.strftime,\ +pandas.Period.to_timestamp,\ +pandas.Period.year,\ +pandas.PeriodDtype,\ +pandas.PeriodDtype.freq,\ +pandas.PeriodIndex.day,\ +pandas.PeriodIndex.day_of_week,\ +pandas.PeriodIndex.day_of_year,\ +pandas.PeriodIndex.dayofweek,\ +pandas.PeriodIndex.dayofyear,\ +pandas.PeriodIndex.days_in_month,\ +pandas.PeriodIndex.daysinmonth,\ +pandas.PeriodIndex.freqstr,\ +pandas.PeriodIndex.from_fields,\ +pandas.PeriodIndex.from_ordinals,\ +pandas.PeriodIndex.hour,\ +pandas.PeriodIndex.is_leap_year,\ +pandas.PeriodIndex.minute,\ +pandas.PeriodIndex.month,\ +pandas.PeriodIndex.quarter,\ +pandas.PeriodIndex.second,\ +pandas.PeriodIndex.to_timestamp,\ +pandas.PeriodIndex.week,\ +pandas.PeriodIndex.weekday,\ +pandas.PeriodIndex.weekofyear,\ +pandas.PeriodIndex.year,\ +pandas.RangeIndex.from_range,\ +pandas.RangeIndex.start,\ +pandas.RangeIndex.step,\ +pandas.RangeIndex.stop,\ +pandas.Series,\ +pandas.Series.T,\ +pandas.Series.__iter__,\ +pandas.Series.align,\ +pandas.Series.backfill,\ +pandas.Series.bfill,\ +pandas.Series.cat,\ +pandas.Series.cat.codes,\ +pandas.Series.cat.ordered,\ +pandas.Series.copy,\ +pandas.Series.droplevel,\ +pandas.Series.dt.ceil,\ +pandas.Series.dt.components,\ +pandas.Series.dt.date,\ +pandas.Series.dt.day,\ +pandas.Series.dt.day_name,\ +pandas.Series.dt.day_of_year,\ +pandas.Series.dt.dayofyear,\ +pandas.Series.dt.days,\ +pandas.Series.dt.days_in_month,\ +pandas.Series.dt.daysinmonth,\ +pandas.Series.dt.floor,\ +pandas.Series.dt.hour,\ +pandas.Series.dt.is_leap_year,\ +pandas.Series.dt.microsecond,\ +pandas.Series.dt.microseconds,\ +pandas.Series.dt.minute,\ +pandas.Series.dt.month,\ +pandas.Series.dt.month_name,\ +pandas.Series.dt.nanosecond,\ +pandas.Series.dt.nanoseconds,\ +pandas.Series.dt.quarter,\ +pandas.Series.dt.round,\ +pandas.Series.dt.second,\ +pandas.Series.dt.seconds,\ +pandas.Series.dt.time,\ +pandas.Series.dt.timetz,\ +pandas.Series.dt.tz,\ +pandas.Series.dt.year,\ +pandas.Series.dtype,\ +pandas.Series.dtypes,\ +pandas.Series.eq,\ +pandas.Series.ffill,\ +pandas.Series.first_valid_index,\ +pandas.Series.ge,\ +pandas.Series.get,\ +pandas.Series.gt,\ +pandas.Series.hasnans,\ +pandas.Series.is_monotonic_decreasing,\ +pandas.Series.is_monotonic_increasing,\ +pandas.Series.is_unique,\ +pandas.Series.item,\ +pandas.Series.keys,\ +pandas.Series.kurt,\ +pandas.Series.kurtosis,\ +pandas.Series.last_valid_index,\ +pandas.Series.le,\ +pandas.Series.list.__getitem__,\ +pandas.Series.list.flatten,\ +pandas.Series.list.len,\ +pandas.Series.lt,\ +pandas.Series.mean,\ +pandas.Series.median,\ +pandas.Series.mode,\ +pandas.Series.nbytes,\ +pandas.Series.ndim,\ +pandas.Series.ne,\ +pandas.Series.pad,\ +pandas.Series.plot,\ +pandas.Series.pop,\ +pandas.Series.reorder_levels,\ +pandas.Series.sem,\ +pandas.Series.shape,\ +pandas.Series.size,\ +pandas.Series.skew,\ +pandas.Series.sparse,\ +pandas.Series.sparse.density,\ +pandas.Series.sparse.fill_value,\ +pandas.Series.sparse.from_coo,\ +pandas.Series.sparse.npoints,\ +pandas.Series.sparse.sp_values,\ +pandas.Series.sparse.to_coo,\ +pandas.Series.std,\ +pandas.Series.str,\ +pandas.Series.str.center,\ +pandas.Series.str.decode,\ +pandas.Series.str.encode,\ +pandas.Series.str.get,\ +pandas.Series.str.ljust,\ +pandas.Series.str.normalize,\ +pandas.Series.str.repeat,\ +pandas.Series.str.replace,\ +pandas.Series.str.rjust,\ +pandas.Series.str.translate,\ +pandas.Series.str.wrap,\ +pandas.Series.struct.dtypes,\ +pandas.Series.swaplevel,\ +pandas.Series.to_dict,\ +pandas.Series.to_frame,\ +pandas.Series.to_markdown,\ +pandas.Series.to_period,\ +pandas.Series.to_string,\ +pandas.Series.to_timestamp,\ +pandas.Series.tz_convert,\ +pandas.Series.tz_localize,\ +pandas.Series.unstack,\ +pandas.Series.update,\ +pandas.Series.var,\ +pandas.SparseDtype,\ +pandas.Timedelta,\ +pandas.Timedelta.as_unit,\ +pandas.Timedelta.asm8,\ +pandas.Timedelta.ceil,\ +pandas.Timedelta.components,\ +pandas.Timedelta.days,\ +pandas.Timedelta.floor,\ +pandas.Timedelta.max,\ +pandas.Timedelta.min,\ +pandas.Timedelta.resolution,\ +pandas.Timedelta.round,\ +pandas.Timedelta.to_timedelta64,\ +pandas.Timedelta.total_seconds,\ +pandas.Timedelta.view,\ +pandas.TimedeltaIndex.as_unit,\ +pandas.TimedeltaIndex.ceil,\ +pandas.TimedeltaIndex.components,\ +pandas.TimedeltaIndex.days,\ +pandas.TimedeltaIndex.floor,\ +pandas.TimedeltaIndex.inferred_freq,\ +pandas.TimedeltaIndex.microseconds,\ +pandas.TimedeltaIndex.nanoseconds,\ +pandas.TimedeltaIndex.round,\ +pandas.TimedeltaIndex.seconds,\ +pandas.TimedeltaIndex.to_pytimedelta,\ +pandas.Timestamp,\ +pandas.Timestamp.as_unit,\ +pandas.Timestamp.asm8,\ +pandas.Timestamp.astimezone,\ +pandas.Timestamp.ceil,\ +pandas.Timestamp.combine,\ +pandas.Timestamp.ctime,\ +pandas.Timestamp.date,\ +pandas.Timestamp.day_name,\ +pandas.Timestamp.day_of_week,\ +pandas.Timestamp.day_of_year,\ +pandas.Timestamp.dayofweek,\ +pandas.Timestamp.dayofyear,\ +pandas.Timestamp.days_in_month,\ +pandas.Timestamp.daysinmonth,\ +pandas.Timestamp.dst,\ +pandas.Timestamp.floor,\ +pandas.Timestamp.fromordinal,\ +pandas.Timestamp.fromtimestamp,\ +pandas.Timestamp.is_leap_year,\ +pandas.Timestamp.isocalendar,\ +pandas.Timestamp.isoformat,\ +pandas.Timestamp.isoweekday,\ +pandas.Timestamp.max,\ +pandas.Timestamp.min,\ +pandas.Timestamp.month_name,\ +pandas.Timestamp.normalize,\ +pandas.Timestamp.now,\ +pandas.Timestamp.quarter,\ +pandas.Timestamp.replace,\ +pandas.Timestamp.resolution,\ +pandas.Timestamp.round,\ +pandas.Timestamp.strftime,\ +pandas.Timestamp.strptime,\ +pandas.Timestamp.time,\ +pandas.Timestamp.timestamp,\ +pandas.Timestamp.timetuple,\ +pandas.Timestamp.timetz,\ +pandas.Timestamp.to_datetime64,\ +pandas.Timestamp.to_julian_date,\ +pandas.Timestamp.to_period,\ +pandas.Timestamp.to_pydatetime,\ +pandas.Timestamp.today,\ +pandas.Timestamp.toordinal,\ +pandas.Timestamp.tz,\ +pandas.Timestamp.tz_convert,\ +pandas.Timestamp.tz_localize,\ +pandas.Timestamp.tzname,\ +pandas.Timestamp.unit,\ +pandas.Timestamp.utcfromtimestamp,\ +pandas.Timestamp.utcnow,\ +pandas.Timestamp.utcoffset,\ +pandas.Timestamp.utctimetuple,\ +pandas.Timestamp.week,\ +pandas.Timestamp.weekday,\ +pandas.Timestamp.weekofyear,\ +pandas.UInt16Dtype,\ +pandas.UInt32Dtype,\ +pandas.UInt64Dtype,\ +pandas.UInt8Dtype,\ +pandas.api.extensions.ExtensionArray,\ +pandas.api.extensions.ExtensionArray._accumulate,\ +pandas.api.extensions.ExtensionArray._concat_same_type,\ +pandas.api.extensions.ExtensionArray._formatter,\ +pandas.api.extensions.ExtensionArray._from_sequence,\ +pandas.api.extensions.ExtensionArray._from_sequence_of_strings,\ +pandas.api.extensions.ExtensionArray._hash_pandas_object,\ +pandas.api.extensions.ExtensionArray._pad_or_backfill,\ +pandas.api.extensions.ExtensionArray._reduce,\ +pandas.api.extensions.ExtensionArray._values_for_factorize,\ +pandas.api.extensions.ExtensionArray.astype,\ +pandas.api.extensions.ExtensionArray.copy,\ +pandas.api.extensions.ExtensionArray.dropna,\ +pandas.api.extensions.ExtensionArray.dtype,\ +pandas.api.extensions.ExtensionArray.duplicated,\ +pandas.api.extensions.ExtensionArray.equals,\ +pandas.api.extensions.ExtensionArray.fillna,\ +pandas.api.extensions.ExtensionArray.insert,\ +pandas.api.extensions.ExtensionArray.interpolate,\ +pandas.api.extensions.ExtensionArray.isin,\ +pandas.api.extensions.ExtensionArray.isna,\ +pandas.api.extensions.ExtensionArray.nbytes,\ +pandas.api.extensions.ExtensionArray.ndim,\ +pandas.api.extensions.ExtensionArray.ravel,\ +pandas.api.extensions.ExtensionArray.shape,\ +pandas.api.extensions.ExtensionArray.shift,\ +pandas.api.extensions.ExtensionArray.tolist,\ +pandas.api.extensions.ExtensionArray.unique,\ +pandas.api.extensions.ExtensionArray.view,\ +pandas.api.extensions.register_extension_dtype,\ +pandas.api.indexers.BaseIndexer,\ +pandas.api.indexers.FixedForwardWindowIndexer,\ +pandas.api.indexers.VariableOffsetWindowIndexer,\ +pandas.api.interchange.from_dataframe,\ +pandas.api.types.infer_dtype,\ +pandas.api.types.is_any_real_numeric_dtype,\ +pandas.api.types.is_bool,\ +pandas.api.types.is_bool_dtype,\ +pandas.api.types.is_categorical_dtype,\ +pandas.api.types.is_complex,\ +pandas.api.types.is_complex_dtype,\ +pandas.api.types.is_datetime64_any_dtype,\ +pandas.api.types.is_datetime64_dtype,\ +pandas.api.types.is_datetime64_ns_dtype,\ +pandas.api.types.is_datetime64tz_dtype,\ +pandas.api.types.is_dict_like,\ +pandas.api.types.is_extension_array_dtype,\ +pandas.api.types.is_file_like,\ +pandas.api.types.is_float,\ +pandas.api.types.is_float_dtype,\ +pandas.api.types.is_hashable,\ +pandas.api.types.is_int64_dtype,\ +pandas.api.types.is_integer,\ +pandas.api.types.is_integer_dtype,\ +pandas.api.types.is_interval_dtype,\ +pandas.api.types.is_iterator,\ +pandas.api.types.is_list_like,\ +pandas.api.types.is_named_tuple,\ +pandas.api.types.is_numeric_dtype,\ +pandas.api.types.is_object_dtype,\ +pandas.api.types.is_period_dtype,\ +pandas.api.types.is_re,\ +pandas.api.types.is_re_compilable,\ +pandas.api.types.is_scalar,\ +pandas.api.types.is_signed_integer_dtype,\ +pandas.api.types.is_sparse,\ +pandas.api.types.is_string_dtype,\ +pandas.api.types.is_timedelta64_dtype,\ +pandas.api.types.is_timedelta64_ns_dtype,\ +pandas.api.types.is_unsigned_integer_dtype,\ +pandas.api.types.pandas_dtype,\ +pandas.api.types.union_categoricals,\ +pandas.arrays.ArrowExtensionArray,\ +pandas.arrays.BooleanArray,\ +pandas.arrays.DatetimeArray,\ +pandas.arrays.FloatingArray,\ +pandas.arrays.IntegerArray,\ +pandas.arrays.IntervalArray.closed,\ +pandas.arrays.IntervalArray.is_non_overlapping_monotonic,\ +pandas.arrays.IntervalArray.left,\ +pandas.arrays.IntervalArray.length,\ +pandas.arrays.IntervalArray.mid,\ +pandas.arrays.IntervalArray.right,\ +pandas.arrays.IntervalArray.set_closed,\ +pandas.arrays.IntervalArray.to_tuples,\ +pandas.arrays.NumpyExtensionArray,\ +pandas.arrays.SparseArray,\ +pandas.arrays.TimedeltaArray,\ +pandas.bdate_range,\ +pandas.core.groupby.DataFrameGroupBy.__iter__,\ +pandas.core.groupby.DataFrameGroupBy.boxplot,\ +pandas.core.groupby.DataFrameGroupBy.filter,\ +pandas.core.groupby.DataFrameGroupBy.get_group,\ +pandas.core.groupby.DataFrameGroupBy.groups,\ +pandas.core.groupby.DataFrameGroupBy.indices,\ +pandas.core.groupby.DataFrameGroupBy.max,\ +pandas.core.groupby.DataFrameGroupBy.median,\ +pandas.core.groupby.DataFrameGroupBy.min,\ +pandas.core.groupby.DataFrameGroupBy.nunique,\ +pandas.core.groupby.DataFrameGroupBy.ohlc,\ +pandas.core.groupby.DataFrameGroupBy.plot,\ +pandas.core.groupby.DataFrameGroupBy.prod,\ +pandas.core.groupby.DataFrameGroupBy.sem,\ +pandas.core.groupby.DataFrameGroupBy.sum,\ +pandas.core.groupby.SeriesGroupBy.__iter__,\ +pandas.core.groupby.SeriesGroupBy.filter,\ +pandas.core.groupby.SeriesGroupBy.get_group,\ +pandas.core.groupby.SeriesGroupBy.groups,\ +pandas.core.groupby.SeriesGroupBy.indices,\ +pandas.core.groupby.SeriesGroupBy.is_monotonic_decreasing,\ +pandas.core.groupby.SeriesGroupBy.is_monotonic_increasing,\ +pandas.core.groupby.SeriesGroupBy.max,\ +pandas.core.groupby.SeriesGroupBy.median,\ +pandas.core.groupby.SeriesGroupBy.min,\ +pandas.core.groupby.SeriesGroupBy.nunique,\ +pandas.core.groupby.SeriesGroupBy.ohlc,\ +pandas.core.groupby.SeriesGroupBy.plot,\ +pandas.core.groupby.SeriesGroupBy.prod,\ +pandas.core.groupby.SeriesGroupBy.sem,\ +pandas.core.groupby.SeriesGroupBy.sum,\ +pandas.core.resample.Resampler.__iter__,\ +pandas.core.resample.Resampler.get_group,\ +pandas.core.resample.Resampler.groups,\ +pandas.core.resample.Resampler.indices,\ +pandas.core.resample.Resampler.max,\ +pandas.core.resample.Resampler.mean,\ +pandas.core.resample.Resampler.median,\ +pandas.core.resample.Resampler.min,\ +pandas.core.resample.Resampler.nunique,\ +pandas.core.resample.Resampler.ohlc,\ +pandas.core.resample.Resampler.prod,\ +pandas.core.resample.Resampler.sem,\ +pandas.core.resample.Resampler.std,\ +pandas.core.resample.Resampler.sum,\ +pandas.core.resample.Resampler.transform,\ +pandas.core.resample.Resampler.var,\ +pandas.describe_option,\ +pandas.errors.AbstractMethodError,\ +pandas.errors.AttributeConflictWarning,\ +pandas.errors.CSSWarning,\ +pandas.errors.CategoricalConversionWarning,\ +pandas.errors.ChainedAssignmentError,\ +pandas.errors.ClosedFileError,\ +pandas.errors.DataError,\ +pandas.errors.DuplicateLabelError,\ +pandas.errors.EmptyDataError,\ +pandas.errors.IntCastingNaNError,\ +pandas.errors.InvalidIndexError,\ +pandas.errors.InvalidVersion,\ +pandas.errors.MergeError,\ +pandas.errors.NullFrequencyError,\ +pandas.errors.NumExprClobberingError,\ +pandas.errors.NumbaUtilError,\ +pandas.errors.OptionError,\ +pandas.errors.OutOfBoundsDatetime,\ +pandas.errors.OutOfBoundsTimedelta,\ +pandas.errors.PerformanceWarning,\ +pandas.errors.PossibleDataLossError,\ +pandas.errors.PossiblePrecisionLoss,\ +pandas.errors.SpecificationError,\ +pandas.errors.UndefinedVariableError,\ +pandas.errors.UnsortedIndexError,\ +pandas.errors.UnsupportedFunctionCall,\ +pandas.errors.ValueLabelTypeMismatch,\ +pandas.get_option,\ +pandas.infer_freq,\ +pandas.io.formats.style.Styler.bar,\ +pandas.io.formats.style.Styler.clear,\ +pandas.io.formats.style.Styler.concat,\ +pandas.io.formats.style.Styler.from_custom_template,\ +pandas.io.formats.style.Styler.hide,\ +pandas.io.formats.style.Styler.set_caption,\ +pandas.io.formats.style.Styler.set_properties,\ +pandas.io.formats.style.Styler.set_sticky,\ +pandas.io.formats.style.Styler.set_tooltips,\ +pandas.io.formats.style.Styler.set_uuid,\ +pandas.io.formats.style.Styler.to_string,\ +pandas.io.json.build_table_schema,\ +pandas.io.stata.StataReader.data_label,\ +pandas.io.stata.StataReader.value_labels,\ +pandas.io.stata.StataReader.variable_labels,\ +pandas.io.stata.StataWriter.write_file,\ +pandas.json_normalize,\ +pandas.option_context,\ +pandas.period_range,\ +pandas.plotting.andrews_curves,\ +pandas.plotting.autocorrelation_plot,\ +pandas.plotting.lag_plot,\ +pandas.plotting.parallel_coordinates,\ +pandas.plotting.plot_params,\ +pandas.plotting.scatter_matrix,\ +pandas.plotting.table,\ +pandas.qcut,\ +pandas.read_feather,\ +pandas.read_orc,\ +pandas.read_sas,\ +pandas.read_spss,\ +pandas.reset_option,\ +pandas.set_eng_float_format,\ +pandas.set_option,\ +pandas.show_versions,\ +pandas.test,\ +pandas.testing.assert_extension_array_equal,\ +pandas.testing.assert_index_equal,\ +pandas.testing.assert_series_equal,\ +pandas.timedelta_range,\ +pandas.tseries.api.guess_datetime_format,\ +pandas.tseries.offsets.BDay,\ +pandas.tseries.offsets.BQuarterBegin.copy,\ +pandas.tseries.offsets.BQuarterBegin.freqstr,\ +pandas.tseries.offsets.BQuarterBegin.kwds,\ +pandas.tseries.offsets.BQuarterBegin.name,\ +pandas.tseries.offsets.BQuarterEnd.copy,\ +pandas.tseries.offsets.BQuarterEnd.freqstr,\ +pandas.tseries.offsets.BQuarterEnd.kwds,\ +pandas.tseries.offsets.BQuarterEnd.name,\ +pandas.tseries.offsets.BYearBegin.copy,\ +pandas.tseries.offsets.BYearBegin.freqstr,\ +pandas.tseries.offsets.BYearBegin.kwds,\ +pandas.tseries.offsets.BYearBegin.name,\ +pandas.tseries.offsets.BYearEnd.copy,\ +pandas.tseries.offsets.BYearEnd.freqstr,\ +pandas.tseries.offsets.BYearEnd.kwds,\ +pandas.tseries.offsets.BYearEnd.name,\ +pandas.tseries.offsets.BusinessDay,\ +pandas.tseries.offsets.BusinessDay.copy,\ +pandas.tseries.offsets.BusinessDay.freqstr,\ +pandas.tseries.offsets.BusinessDay.kwds,\ +pandas.tseries.offsets.BusinessDay.name,\ +pandas.tseries.offsets.BusinessHour,\ +pandas.tseries.offsets.BusinessHour.copy,\ +pandas.tseries.offsets.BusinessHour.freqstr,\ +pandas.tseries.offsets.BusinessHour.kwds,\ +pandas.tseries.offsets.BusinessHour.name,\ +pandas.tseries.offsets.BusinessMonthBegin.copy,\ +pandas.tseries.offsets.BusinessMonthBegin.freqstr,\ +pandas.tseries.offsets.BusinessMonthBegin.kwds,\ +pandas.tseries.offsets.BusinessMonthBegin.name,\ +pandas.tseries.offsets.BusinessMonthEnd.copy,\ +pandas.tseries.offsets.BusinessMonthEnd.freqstr,\ +pandas.tseries.offsets.BusinessMonthEnd.kwds,\ +pandas.tseries.offsets.BusinessMonthEnd.name,\ +pandas.tseries.offsets.CDay,\ +pandas.tseries.offsets.CustomBusinessDay,\ +pandas.tseries.offsets.CustomBusinessDay.copy,\ +pandas.tseries.offsets.CustomBusinessDay.freqstr,\ +pandas.tseries.offsets.CustomBusinessDay.kwds,\ +pandas.tseries.offsets.CustomBusinessDay.name,\ +pandas.tseries.offsets.CustomBusinessHour,\ +pandas.tseries.offsets.CustomBusinessHour.copy,\ +pandas.tseries.offsets.CustomBusinessHour.freqstr,\ +pandas.tseries.offsets.CustomBusinessHour.kwds,\ +pandas.tseries.offsets.CustomBusinessHour.name,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.copy,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.freqstr,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.is_on_offset,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.kwds,\ +pandas.tseries.offsets.CustomBusinessMonthBegin.name,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.copy,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.freqstr,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.is_on_offset,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.kwds,\ +pandas.tseries.offsets.CustomBusinessMonthEnd.name,\ +pandas.tseries.offsets.DateOffset.copy,\ +pandas.tseries.offsets.DateOffset.freqstr,\ +pandas.tseries.offsets.DateOffset.kwds,\ +pandas.tseries.offsets.DateOffset.name,\ +pandas.tseries.offsets.Day.copy,\ +pandas.tseries.offsets.Day.freqstr,\ +pandas.tseries.offsets.Day.kwds,\ +pandas.tseries.offsets.Day.name,\ +pandas.tseries.offsets.Day.nanos,\ +pandas.tseries.offsets.Easter.copy,\ +pandas.tseries.offsets.Easter.freqstr,\ +pandas.tseries.offsets.Easter.kwds,\ +pandas.tseries.offsets.Easter.name,\ +pandas.tseries.offsets.FY5253.copy,\ +pandas.tseries.offsets.FY5253.freqstr,\ +pandas.tseries.offsets.FY5253.kwds,\ +pandas.tseries.offsets.FY5253.name,\ +pandas.tseries.offsets.FY5253Quarter.copy,\ +pandas.tseries.offsets.FY5253Quarter.freqstr,\ +pandas.tseries.offsets.FY5253Quarter.kwds,\ +pandas.tseries.offsets.FY5253Quarter.name,\ +pandas.tseries.offsets.Hour.copy,\ +pandas.tseries.offsets.Hour.freqstr,\ +pandas.tseries.offsets.Hour.kwds,\ +pandas.tseries.offsets.Hour.name,\ +pandas.tseries.offsets.Hour.nanos,\ +pandas.tseries.offsets.LastWeekOfMonth,\ +pandas.tseries.offsets.LastWeekOfMonth.copy,\ +pandas.tseries.offsets.LastWeekOfMonth.freqstr,\ +pandas.tseries.offsets.LastWeekOfMonth.kwds,\ +pandas.tseries.offsets.LastWeekOfMonth.name,\ +pandas.tseries.offsets.Micro.copy,\ +pandas.tseries.offsets.Micro.freqstr,\ +pandas.tseries.offsets.Micro.kwds,\ +pandas.tseries.offsets.Micro.name,\ +pandas.tseries.offsets.Micro.nanos,\ +pandas.tseries.offsets.Milli.copy,\ +pandas.tseries.offsets.Milli.freqstr,\ +pandas.tseries.offsets.Milli.kwds,\ +pandas.tseries.offsets.Milli.name,\ +pandas.tseries.offsets.Milli.nanos,\ +pandas.tseries.offsets.Minute.copy,\ +pandas.tseries.offsets.Minute.freqstr,\ +pandas.tseries.offsets.Minute.kwds,\ +pandas.tseries.offsets.Minute.name,\ +pandas.tseries.offsets.Minute.nanos,\ +pandas.tseries.offsets.MonthBegin.copy,\ +pandas.tseries.offsets.MonthBegin.freqstr,\ +pandas.tseries.offsets.MonthBegin.kwds,\ +pandas.tseries.offsets.MonthBegin.name,\ +pandas.tseries.offsets.MonthEnd.copy,\ +pandas.tseries.offsets.MonthEnd.freqstr,\ +pandas.tseries.offsets.MonthEnd.kwds,\ +pandas.tseries.offsets.MonthEnd.name,\ +pandas.tseries.offsets.Nano.copy,\ +pandas.tseries.offsets.Nano.freqstr,\ +pandas.tseries.offsets.Nano.kwds,\ +pandas.tseries.offsets.Nano.name,\ +pandas.tseries.offsets.Nano.nanos,\ +pandas.tseries.offsets.QuarterBegin.copy,\ +pandas.tseries.offsets.QuarterBegin.freqstr,\ +pandas.tseries.offsets.QuarterBegin.kwds,\ +pandas.tseries.offsets.QuarterBegin.name,\ +pandas.tseries.offsets.QuarterEnd.copy,\ +pandas.tseries.offsets.QuarterEnd.freqstr,\ +pandas.tseries.offsets.QuarterEnd.kwds,\ +pandas.tseries.offsets.QuarterEnd.name,\ +pandas.tseries.offsets.Second.copy,\ +pandas.tseries.offsets.Second.freqstr,\ +pandas.tseries.offsets.Second.kwds,\ +pandas.tseries.offsets.Second.name,\ +pandas.tseries.offsets.Second.nanos,\ +pandas.tseries.offsets.SemiMonthBegin,\ +pandas.tseries.offsets.SemiMonthBegin.copy,\ +pandas.tseries.offsets.SemiMonthBegin.freqstr,\ +pandas.tseries.offsets.SemiMonthBegin.kwds,\ +pandas.tseries.offsets.SemiMonthBegin.name,\ +pandas.tseries.offsets.SemiMonthEnd,\ +pandas.tseries.offsets.SemiMonthEnd.copy,\ +pandas.tseries.offsets.SemiMonthEnd.freqstr,\ +pandas.tseries.offsets.SemiMonthEnd.kwds,\ +pandas.tseries.offsets.SemiMonthEnd.name,\ +pandas.tseries.offsets.Tick.copy,\ +pandas.tseries.offsets.Tick.freqstr,\ +pandas.tseries.offsets.Tick.kwds,\ +pandas.tseries.offsets.Tick.name,\ +pandas.tseries.offsets.Tick.nanos,\ +pandas.tseries.offsets.Week.copy,\ +pandas.tseries.offsets.Week.freqstr,\ +pandas.tseries.offsets.Week.kwds,\ +pandas.tseries.offsets.Week.name,\ +pandas.tseries.offsets.WeekOfMonth,\ +pandas.tseries.offsets.WeekOfMonth.copy,\ +pandas.tseries.offsets.WeekOfMonth.freqstr,\ +pandas.tseries.offsets.WeekOfMonth.kwds,\ +pandas.tseries.offsets.WeekOfMonth.name,\ +pandas.tseries.offsets.YearBegin.copy,\ +pandas.tseries.offsets.YearBegin.freqstr,\ +pandas.tseries.offsets.YearBegin.kwds,\ +pandas.tseries.offsets.YearBegin.name,\ +pandas.tseries.offsets.YearEnd.copy,\ +pandas.tseries.offsets.YearEnd.freqstr,\ +pandas.tseries.offsets.YearEnd.kwds,\ +pandas.tseries.offsets.YearEnd.name,\ +pandas.util.hash_array,\ +pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function ) ##### # end of SA01 group diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 69ab02936257c..9fd3b9a7f0a58 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -16,6 +16,7 @@ from __future__ import annotations import argparse +from copy import deepcopy import doctest from functools import lru_cache import importlib @@ -474,11 +475,15 @@ def init_argparser(): "all docstrings", ) argparser.add_argument( - "--ignore_functions", - nargs="*", - help="function or method to not validate " - "(e.g. pandas.DataFrame.head). " - "Inverse of the `function` argument.", + "--for_error_ignore_functions", + action="append", + nargs=2, + metavar=("error_code", "functions"), + help="error code for which comma separated list " + "of functions should not be validated" + "(e.g. PR01 pandas.DataFrame.head). " + "Partial validation for more than one error code" + "can be achieved by repeating this parameter.", ) return argparser @@ -487,17 +492,17 @@ def init_argparser(): def validate_all_arg_groups(arg_groups): exit_status = 0 for args in arg_groups: - error_str = args.errors.replace(",", ", ") if args.errors else "" + error_str = ", ".join(args.errors) if args.errors else "" if args.ignore_functions: - msg = f"Partially validate docstrings ({error_str})" + msg = f"Partially validate docstrings ({error_str})\n" else: - msg = f"Validate docstrings ({error_str})" - sys.stdout.write(msg + os.linesep) + msg = f"Validate docstrings ({error_str})\n" + sys.stdout.write(msg) exit_status += main( args.function, args.prefix, - args.errors.split(",") if args.errors else None, + args.errors, args.format, args.ignore_deprecated, args.ignore_functions, @@ -506,17 +511,39 @@ def validate_all_arg_groups(arg_groups): return exit_status +def _group_args(parsed_args): + # get all errors that should be fully validated + parsed_args.errors = parsed_args.errors.split(",") if parsed_args.errors else None + fully_validate = deepcopy(parsed_args) + fully_validate.for_error_ignore_functions = None + fully_validate.ignore_functions = None + + if not parsed_args.for_error_ignore_functions: + return [fully_validate] + + partial_validation_groups = [] + for error_code, functions in parsed_args.for_error_ignore_functions: + # partial error validation runs should have otherwise identical parameters + partial_validation = deepcopy(fully_validate) + partial_validation.errors = [error_code] + partial_validation.ignore_functions = functions.split(",") + partial_validation_groups.append(partial_validation) + if fully_validate.errors and error_code in fully_validate.errors: + fully_validate.errors.remove(error_code) + + if fully_validate.errors: + return [fully_validate] + partial_validation_groups + else: + return partial_validation_groups + + if __name__ == "__main__": # we are processing multiple validation runs, each parametrized differently and # delimited with "--" in the command line arguments - if "--" in sys.argv[1:]: - arg_groups = " ".join(sys.argv[1:]).split(" -- ") - arg_groups = [group.split(" ") for group in arg_groups] - else: - arg_groups = [sys.argv[1:]] argparser = init_argparser() - parsed_arg_groups = [argparser.parse_args(arg_group) for arg_group in arg_groups] + args = argparser.parse_args(sys.argv[1:]) + parsed_arg_groups = _group_args(args) sys.exit( validate_all_arg_groups(parsed_arg_groups) From 06cebc7a395e756ed0c9e26809d81b059aa208ea Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Thu, 14 Mar 2024 02:12:40 +0100 Subject: [PATCH 09/23] fix merge errors --- ci/code_checks.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ci/code_checks.sh b/ci/code_checks.sh index 812a1eebda054..f60ba45879021 100755 --- a/ci/code_checks.sh +++ b/ci/code_checks.sh @@ -146,8 +146,8 @@ pandas.core.groupby.SeriesGroupBy.plot # There should be no backslash in the fin ##### # end of PR02 group ##### - PARAMETERS+=(--for_error_ignore_functions GL08 \\ -pandas.Index.empty, + PARAMETERS+=(--for_error_ignore_functions GL08 \ +pandas.Index.empty,\ pandas.Index.names,\ pandas.Index.view,\ pandas.IntervalIndex.left,\ @@ -400,7 +400,7 @@ pandas.tseries.offsets.YearEnd.n,\ pandas.tseries.offsets.YearEnd.nanos,\ pandas.tseries.offsets.YearEnd.normalize,\ pandas.tseries.offsets.YearEnd.rule_code # There should be no backslash in the final line, please keep this comment in the last ignored function - ) +) ##### # end of GL08 group ##### @@ -602,7 +602,7 @@ pandas.testing.assert_series_equal,\ pandas.unique,\ pandas.util.hash_array,\ pandas.util.hash_pandas_object - ) +) ##### # end of PR07 group ##### @@ -842,7 +842,7 @@ pandas.plotting.parallel_coordinates,\ pandas.plotting.radviz,\ pandas.plotting.table,\ pandas.set_eng_float_format # There should be no backslash in the final line, please keep this comment in the last ignored function - ) +) ##### # end of RT03 group ##### @@ -1606,7 +1606,7 @@ pandas.tseries.offsets.YearEnd.kwds,\ pandas.tseries.offsets.YearEnd.name,\ pandas.util.hash_array,\ pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function - ) +) ##### # end of SA01 group ##### From 69545dc30371f0e23d61adc7e1fbab616bb9ff3a Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sat, 16 Mar 2024 14:54:53 +0100 Subject: [PATCH 10/23] use for_error_ignore_functions everywhere --- scripts/tests/test_validate_docstrings.py | 125 ++++++++++--------- scripts/validate_docstrings.py | 142 ++++++++++------------ 2 files changed, 132 insertions(+), 135 deletions(-) diff --git a/scripts/tests/test_validate_docstrings.py b/scripts/tests/test_validate_docstrings.py index d9393a652360e..479c60511f228 100644 --- a/scripts/tests/test_validate_docstrings.py +++ b/scripts/tests/test_validate_docstrings.py @@ -1,4 +1,3 @@ -import argparse import io import textwrap @@ -200,7 +199,43 @@ def test_bad_docstrings(self, capsys, klass, func, msgs) -> None: for msg in msgs: assert msg in " ".join([err[1] for err in result["errors"]]) - def test_validate_all_ignore_functions(self, monkeypatch) -> None: + def test_validate_all_ignore_deprecated(self, monkeypatch) -> None: + monkeypatch.setattr( + validate_docstrings, + "pandas_validate", + lambda func_name: { + "docstring": "docstring1", + "errors": [ + ("ER01", "err desc"), + ("ER02", "err desc"), + ("ER03", "err desc"), + ], + "warnings": [], + "examples_errors": "", + "deprecated": True, + }, + ) + result = validate_docstrings.validate_all(prefix=None, ignore_deprecated=True) + assert len(result) == 0 + + def test_validate_all_for_error_ignore_functions(self, monkeypatch): + monkeypatch.setattr( + validate_docstrings, + "pandas_validate", + lambda func_name: { + "docstring": "docstring1", + "errors": [ + ("ER01", "err desc"), + ("ER02", "err desc"), + ("ER03", "err desc") + ], + "warnings": [], + "examples_errors": "", + "deprecated": True, + "file": "file1", + "file_line": "file_line1" + }, + ) monkeypatch.setattr( validate_docstrings, "get_all_api_items", @@ -219,31 +254,27 @@ def test_validate_all_ignore_functions(self, monkeypatch) -> None: ), ], ) - result = validate_docstrings.validate_all( + + exit_status_ignore_func = validate_docstrings.print_validate_all_results( + output_format="default", prefix=None, - ignore_functions=["pandas.DataFrame.align"], + errors=["ER01", "ER02"], + ignore_deprecated=False, + for_error_ignore_functions={"ER01": ["pandas.DataFrame.align"]} ) - assert len(result) == 1 - assert "pandas.Index.all" in result - - def test_validate_all_ignore_deprecated(self, monkeypatch) -> None: - monkeypatch.setattr( - validate_docstrings, - "pandas_validate", - lambda func_name: { - "docstring": "docstring1", - "errors": [ - ("ER01", "err desc"), - ("ER02", "err desc"), - ("ER03", "err desc"), - ], - "warnings": [], - "examples_errors": "", - "deprecated": True, - }, + exit_status = validate_docstrings.print_validate_all_results( + output_format="default", + prefix=None, + errors=["ER01", "ER02"], + ignore_deprecated=False, + for_error_ignore_functions=None ) - result = validate_docstrings.validate_all(prefix=None, ignore_deprecated=True) - assert len(result) == 0 + + # we have 2 error codes activated out of the 3 available in the validate results + # one run has a function to ignore, the other does not + assert exit_status == 2*2 + assert exit_status_ignore_func == exit_status - 1 + class TestApiItems: @@ -363,10 +394,10 @@ def test_exit_status_for_main(self, monkeypatch) -> None: exit_status = validate_docstrings.main( func_name="docstring1", prefix=None, - errors=[], output_format="default", + errors=[], ignore_deprecated=False, - ignore_functions=None, + for_error_ignore_functions=None, ) assert exit_status == 0 @@ -394,35 +425,13 @@ def test_exit_status_errors_for_validate_all(self, monkeypatch) -> None: exit_status = validate_docstrings.main( func_name=None, prefix=None, - errors=[], output_format="default", + errors=[], ignore_deprecated=False, - ignore_functions=None, + for_error_ignore_functions=None, ) assert exit_status == 5 - def test_exit_status_errors_for_combined_validations(self, monkeypatch) -> None: - default_return = 5 - mock = lambda func, fmt, pref, err, ignore_depr, ignore_func: default_return - monkeypatch.setattr( - validate_docstrings, - "main", - mock - ) - - command = argparse.Namespace( - function=None, - format="default", - prefix=None, - errors=None, - ignore_deprecated=False, - ignore_functions=None - ) - - n = 3 - exit_status = validate_docstrings.validate_all_arg_groups([command] * n) - assert exit_status == default_return * n - def test_no_exit_status_noerrors_for_validate_all(self, monkeypatch) -> None: monkeypatch.setattr( validate_docstrings, @@ -434,11 +443,11 @@ def test_no_exit_status_noerrors_for_validate_all(self, monkeypatch) -> None: ) exit_status = validate_docstrings.main( func_name=None, + output_format="default", prefix=None, errors=[], - output_format="default", ignore_deprecated=False, - ignore_functions=None, + for_error_ignore_functions=None, ) assert exit_status == 0 @@ -459,11 +468,11 @@ def test_exit_status_for_validate_all_json(self, monkeypatch) -> None: ) exit_status = validate_docstrings.main( func_name=None, + output_format="json", prefix=None, errors=[], - output_format="json", ignore_deprecated=False, - ignore_functions=None, + for_error_ignore_functions=None, ) assert exit_status == 0 @@ -504,20 +513,20 @@ def test_errors_param_filters_errors(self, monkeypatch) -> None: ) exit_status = validate_docstrings.main( func_name=None, + output_format="default", prefix=None, errors=["ER01"], - output_format="default", ignore_deprecated=False, - ignore_functions=None, + for_error_ignore_functions=None, ) assert exit_status == 3 exit_status = validate_docstrings.main( func_name=None, prefix=None, - errors=["ER03"], output_format="default", + errors=["ER03"], ignore_deprecated=False, - ignore_functions=None, + for_error_ignore_functions=None, ) assert exit_status == 1 diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 9fd3b9a7f0a58..e1d378e7f6425 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -16,9 +16,7 @@ from __future__ import annotations import argparse -from copy import deepcopy import doctest -from functools import lru_cache import importlib import json import os @@ -74,7 +72,7 @@ def pandas_error(code, **kwargs): Copy of the numpydoc error function, since ERROR_MSGS can't be updated with our custom errors yet. """ - return (code, ERROR_MSGS[code].format(**kwargs)) + return code, ERROR_MSGS[code].format(**kwargs) def get_api_items(api_doc_fd): @@ -93,7 +91,7 @@ def get_api_items(api_doc_fd): Yields ------ name : str - The name of the object (e.g. 'pandas.Series.str.upper). + The name of the object (e.g. 'pandas.Series.str.upper'). func : function The object itself. In most cases this will be a function or method, but it can also be classes, properties, cython objects... @@ -225,7 +223,6 @@ def non_hyphenated_array_like(self): # reuse validation result in case redundant validations are run due to errors with # excluded functions -@lru_cache(maxsize=4000) def pandas_validate(func_name: str): """ Call the numpydoc validation, and add the errors specific to pandas. @@ -256,7 +253,7 @@ def pandas_validate(func_name: str): pandas_error( "SA05", reference_name=rel_name, - right_reference=rel_name[len("pandas.") :], + right_reference=rel_name[len("pandas."):], ) for rel_name in doc.see_also if rel_name.startswith("pandas.") @@ -288,7 +285,7 @@ def pandas_validate(func_name: str): return result -def validate_all(prefix, ignore_deprecated=False, ignore_functions=None): +def validate_all(prefix, ignore_deprecated=False): """ Execute the validation of all docstrings, and return a dict with the results. @@ -300,8 +297,6 @@ def validate_all(prefix, ignore_deprecated=False, ignore_functions=None): validated. If None, all docstrings will be validated. ignore_deprecated: bool, default False If True, deprecated objects are ignored when validating docstrings. - ignore_functions: list of str or None, default None - If not None, contains a list of function to ignore Returns ------- @@ -312,11 +307,7 @@ def validate_all(prefix, ignore_deprecated=False, ignore_functions=None): result = {} seen = {} - ignore_functions = set(ignore_functions or []) - for func_name, _, section, subsection in get_all_api_items(): - if func_name in ignore_functions: - continue if prefix and not func_name.startswith(prefix): continue doc_info = pandas_validate(func_name) @@ -349,16 +340,18 @@ def get_all_api_items(): def print_validate_all_results( - prefix: str, - errors: list[str] | None, output_format: str, + prefix: str | None, + errors: list[str] | None, ignore_deprecated: bool, - ignore_functions: list[str] | None, + for_error_ignore_functions: dict[str, list[str]] | None, ): if output_format not in ("default", "json", "actions"): raise ValueError(f'Unknown output_format "{output_format}"') + if for_error_ignore_functions is None: + for_error_ignore_functions = {} - result = validate_all(prefix, ignore_deprecated, ignore_functions) + result = validate_all(prefix, ignore_deprecated) if output_format == "json": sys.stdout.write(json.dumps(result)) @@ -366,13 +359,17 @@ def print_validate_all_results( prefix = "##[error]" if output_format == "actions" else "" exit_status = 0 - for name, res in result.items(): + for func_name, res in result.items(): for err_code, err_desc in res["errors"]: + ignore_functions = for_error_ignore_functions.get(err_code, []) if errors and err_code not in errors: continue + elif func_name in ignore_functions: + continue + sys.stdout.write( f'{prefix}{res["file"]}:{res["file_line"]}:' - f"{err_code}:{name}:{err_desc}\n" + f"{err_code}:{func_name}:{err_desc}\n" ) exit_status += 1 @@ -405,6 +402,7 @@ def header(title, width=80, char="#") -> str: sys.stderr.write(header("Doctests")) sys.stderr.write(result["examples_errs"]) + def validate_error_codes(errors): overlapped_errors = set(NUMPYDOC_ERROR_MSGS).intersection(set(ERROR_MSGS)) assert not overlapped_errors, f"{overlapped_errors} is overlapped." @@ -413,22 +411,53 @@ def validate_error_codes(errors): assert not nonexistent_errors, f"{nonexistent_errors} don't exist." -def main(func_name, prefix, errors, output_format, ignore_deprecated, ignore_functions): +def main( + func_name, + output_format, + prefix, + errors, + ignore_deprecated, + for_error_ignore_functions +): """ Main entry point. Call the validation for one or for all docstrings. """ + if errors is None: + errors = [] + if for_error_ignore_functions is None: + for_error_ignore_functions = {} + partial_validation_errors = for_error_ignore_functions.keys() + errors = [error for error in errors if error not in partial_validation_errors] + + msg = [] + if func_name is None: + if errors: + error_str = ", ".join(errors) + msg.append(f"Validate docstrings ({error_str})\n") + if partial_validation_errors: + error_str = ", ".join(partial_validation_errors) + msg.append(f"Partially validate docstrings ({error_str})\n") + else: + msg.append(f"Validate docstring in function {func_name}\n") + msg = "and\n".join(msg) + sys.stdout.write(msg) + validate_error_codes(errors) + if func_name is None: - return print_validate_all_results( + exit_status = print_validate_all_results( + output_format, prefix, errors, - output_format, ignore_deprecated, - ignore_functions, + for_error_ignore_functions ) else: print_validate_one_results(func_name) - return 0 + exit_status = 0 + sys.stdout.write(msg + "DONE" + os.linesep) + + return exit_status def init_argparser(): @@ -489,62 +518,21 @@ def init_argparser(): return argparser -def validate_all_arg_groups(arg_groups): - exit_status = 0 - for args in arg_groups: - error_str = ", ".join(args.errors) if args.errors else "" - if args.ignore_functions: - msg = f"Partially validate docstrings ({error_str})\n" - else: - msg = f"Validate docstrings ({error_str})\n" - sys.stdout.write(msg) - - exit_status += main( - args.function, - args.prefix, - args.errors, - args.format, - args.ignore_deprecated, - args.ignore_functions, - ) - sys.stdout.write(msg + " DONE" + os.linesep) - return exit_status - - -def _group_args(parsed_args): - # get all errors that should be fully validated - parsed_args.errors = parsed_args.errors.split(",") if parsed_args.errors else None - fully_validate = deepcopy(parsed_args) - fully_validate.for_error_ignore_functions = None - fully_validate.ignore_functions = None - - if not parsed_args.for_error_ignore_functions: - return [fully_validate] - - partial_validation_groups = [] - for error_code, functions in parsed_args.for_error_ignore_functions: - # partial error validation runs should have otherwise identical parameters - partial_validation = deepcopy(fully_validate) - partial_validation.errors = [error_code] - partial_validation.ignore_functions = functions.split(",") - partial_validation_groups.append(partial_validation) - if fully_validate.errors and error_code in fully_validate.errors: - fully_validate.errors.remove(error_code) - - if fully_validate.errors: - return [fully_validate] + partial_validation_groups - else: - return partial_validation_groups - - if __name__ == "__main__": - # we are processing multiple validation runs, each parametrized differently and - # delimited with "--" in the command line arguments - argparser = init_argparser() args = argparser.parse_args(sys.argv[1:]) - parsed_arg_groups = _group_args(args) + + args.errors = args.errors.split(",") if args.errors else None + args.for_error_ignore_functions = {error_code: functions.split(",") + for error_code, functions + in args.for_error_ignore_functions} sys.exit( - validate_all_arg_groups(parsed_arg_groups) + main(args.function, + args.format, + args.prefix, + args.errors, + args.ignore_deprecated, + args.for_error_ignore_functions + ) ) From 96f269bbfff45fbae3d1533303f06e1c99b294f7 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sat, 16 Mar 2024 15:12:19 +0100 Subject: [PATCH 11/23] cleanup --- scripts/validate_docstrings.py | 42 ++++++++++++++-------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index e1d378e7f6425..f5609eeb8b3b2 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -221,8 +221,6 @@ def non_hyphenated_array_like(self): return "array_like" in self.raw_doc -# reuse validation result in case redundant validations are run due to errors with -# excluded functions def pandas_validate(func_name: str): """ Call the numpydoc validation, and add the errors specific to pandas. @@ -460,7 +458,7 @@ def main( return exit_status -def init_argparser(): +if __name__ == "__main__": format_opts = "default", "json", "actions" func_help = ( "function or method to validate (e.g. pandas.DataFrame.head) " @@ -474,34 +472,34 @@ def init_argparser(): default="default", choices=format_opts, help="format of the output when validating " - "multiple docstrings (ignored when validating one). " - "It can be {str(format_opts)[1:-1]}", + "multiple docstrings (ignored when validating one). " + "It can be {str(format_opts)[1:-1]}", ) argparser.add_argument( "--prefix", default=None, help="pattern for the " - "docstring names, in order to decide which ones " - 'will be validated. A prefix "pandas.Series.str."' - "will make the script validate all the docstrings " - "of methods starting by this pattern. It is " - "ignored if parameter function is provided", + "docstring names, in order to decide which ones " + 'will be validated. A prefix "pandas.Series.str."' + "will make the script validate all the docstrings " + "of methods starting by this pattern. It is " + "ignored if parameter function is provided", ) argparser.add_argument( "--errors", default=None, help="comma separated " - "list of error codes to validate. By default it " - "validates all errors (ignored when validating " - "a single docstring)", + "list of error codes to validate. By default it " + "validates all errors (ignored when validating " + "a single docstring)", ) argparser.add_argument( "--ignore_deprecated", default=False, action="store_true", help="if this flag is set, " - "deprecated objects are ignored when validating " - "all docstrings", + "deprecated objects are ignored when validating " + "all docstrings", ) argparser.add_argument( "--for_error_ignore_functions", @@ -509,17 +507,11 @@ def init_argparser(): nargs=2, metavar=("error_code", "functions"), help="error code for which comma separated list " - "of functions should not be validated" - "(e.g. PR01 pandas.DataFrame.head). " - "Partial validation for more than one error code" - "can be achieved by repeating this parameter.", + "of functions should not be validated" + "(e.g. PR01 pandas.DataFrame.head). " + "Partial validation for more than one error code" + "can be achieved by repeating this parameter.", ) - - return argparser - - -if __name__ == "__main__": - argparser = init_argparser() args = argparser.parse_args(sys.argv[1:]) args.errors = args.errors.split(",") if args.errors else None From 6140bb524e896fe302aed58477d81571c8c27fc2 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sat, 16 Mar 2024 15:15:12 +0100 Subject: [PATCH 12/23] remove whitespace changes --- scripts/validate_docstrings.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index f5609eeb8b3b2..35575e12639a0 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -472,34 +472,34 @@ def main( default="default", choices=format_opts, help="format of the output when validating " - "multiple docstrings (ignored when validating one). " - "It can be {str(format_opts)[1:-1]}", + "multiple docstrings (ignored when validating one). " + "It can be {str(format_opts)[1:-1]}", ) argparser.add_argument( "--prefix", default=None, help="pattern for the " - "docstring names, in order to decide which ones " - 'will be validated. A prefix "pandas.Series.str."' - "will make the script validate all the docstrings " - "of methods starting by this pattern. It is " - "ignored if parameter function is provided", + "docstring names, in order to decide which ones " + 'will be validated. A prefix "pandas.Series.str."' + "will make the script validate all the docstrings " + "of methods starting by this pattern. It is " + "ignored if parameter function is provided", ) argparser.add_argument( "--errors", default=None, help="comma separated " - "list of error codes to validate. By default it " - "validates all errors (ignored when validating " - "a single docstring)", + "list of error codes to validate. By default it " + "validates all errors (ignored when validating " + "a single docstring)", ) argparser.add_argument( "--ignore_deprecated", default=False, action="store_true", help="if this flag is set, " - "deprecated objects are ignored when validating " - "all docstrings", + "deprecated objects are ignored when validating " + "all docstrings", ) argparser.add_argument( "--for_error_ignore_functions", @@ -507,10 +507,10 @@ def main( nargs=2, metavar=("error_code", "functions"), help="error code for which comma separated list " - "of functions should not be validated" - "(e.g. PR01 pandas.DataFrame.head). " - "Partial validation for more than one error code" - "can be achieved by repeating this parameter.", + "of functions should not be validated" + "(e.g. PR01 pandas.DataFrame.head). " + "Partial validation for more than one error code" + "can be achieved by repeating this parameter.", ) args = argparser.parse_args(sys.argv[1:]) From 37cc33d7700e2f69eb4e27b22e56f39b85f0b435 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sat, 16 Mar 2024 17:31:43 +0100 Subject: [PATCH 13/23] make pandas_validate accept and return list --- scripts/tests/test_validate_docstrings.py | 73 ++++++++++++-------- scripts/validate_docstrings.py | 84 ++++++++++++++--------- 2 files changed, 95 insertions(+), 62 deletions(-) diff --git a/scripts/tests/test_validate_docstrings.py b/scripts/tests/test_validate_docstrings.py index 479c60511f228..abe65eeaa70c8 100644 --- a/scripts/tests/test_validate_docstrings.py +++ b/scripts/tests/test_validate_docstrings.py @@ -118,11 +118,14 @@ def _import_path(self, klass=None, func=None): return base_path def test_bad_class(self, capsys) -> None: - errors = validate_docstrings.pandas_validate( + results = validate_docstrings.pandas_validate( self._import_path(klass="BadDocstrings") - )["errors"] - assert isinstance(errors, list) - assert errors + ) + assert len(results.keys()) == 1 + for docinfo in results.values(): + errors = docinfo["errors"] + assert errors + assert isinstance(errors, list) @pytest.mark.parametrize( "klass,func,msgs", @@ -193,36 +196,40 @@ def test_bad_class(self, capsys) -> None: ], ) def test_bad_docstrings(self, capsys, klass, func, msgs) -> None: - result = validate_docstrings.pandas_validate( + results = validate_docstrings.pandas_validate( self._import_path(klass=klass, func=func) ) - for msg in msgs: - assert msg in " ".join([err[1] for err in result["errors"]]) + assert len(results.keys()) == 1 + for result in results.values(): + for msg in msgs: + assert msg in " ".join([err[1] for err in result["errors"]]) def test_validate_all_ignore_deprecated(self, monkeypatch) -> None: + dummy_docinfo = { + "docstring": "docstring1", + "errors": [ + ("ER01", "err desc"), + ("ER02", "err desc"), + ("ER03", "err desc"), + ], + "warnings": [], + "examples_errors": "", + "deprecated": True, + } monkeypatch.setattr( validate_docstrings, "pandas_validate", - lambda func_name: { - "docstring": "docstring1", - "errors": [ - ("ER01", "err desc"), - ("ER02", "err desc"), - ("ER03", "err desc"), - ], - "warnings": [], - "examples_errors": "", - "deprecated": True, + lambda func_names: { + func_name: dummy_docinfo + for func_name in func_names }, ) - result = validate_docstrings.validate_all(prefix=None, ignore_deprecated=True) - assert len(result) == 0 + results = validate_docstrings.validate_all(prefix=None, ignore_deprecated=True) + for _, docinfo in results.items(): + assert len(docinfo) == 0 def test_validate_all_for_error_ignore_functions(self, monkeypatch): - monkeypatch.setattr( - validate_docstrings, - "pandas_validate", - lambda func_name: { + dummy_docinfo = { "docstring": "docstring1", "errors": [ ("ER01", "err desc"), @@ -234,7 +241,13 @@ def test_validate_all_for_error_ignore_functions(self, monkeypatch): "deprecated": True, "file": "file1", "file_line": "file_line1" - }, + } + monkeypatch.setattr( + validate_docstrings, + "pandas_validate", + lambda func_names: { + func_name: dummy_docinfo + for func_name in func_names}, ) monkeypatch.setattr( validate_docstrings, @@ -242,15 +255,15 @@ def test_validate_all_for_error_ignore_functions(self, monkeypatch): lambda: [ ( "pandas.DataFrame.align", - "func", - "current_section", - "current_subsection", + "func1", + "current_section1", + "current_subsection1", ), ( "pandas.Index.all", - "func", - "current_section", - "current_subsection", + "func2", + "current_section2", + "current_subsection2", ), ], ) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 35575e12639a0..090d66738a723 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -221,46 +221,60 @@ def non_hyphenated_array_like(self): return "array_like" in self.raw_doc -def pandas_validate(func_name: str): +def pandas_validate(func_names: str | list[str]): """ Call the numpydoc validation, and add the errors specific to pandas. Parameters ---------- - func_name : str - Name of the object of the docstring to validate. + func_names : list[str] + List of name of the object of the docstrings to validate. Returns ------- dict - Information about the docstring and the errors found. + Information about the docstrings and the errors found. """ - func_obj = Validator._load_obj(func_name) - # Some objects are instances, e.g. IndexSlice, which numpydoc can't validate - doc_obj = get_doc_object(func_obj, doc=func_obj.__doc__) - doc = PandasDocstring(func_name, doc_obj) - result = validate(doc_obj) - mentioned_errs = doc.mentioned_private_classes - if mentioned_errs: - result["errors"].append( - pandas_error("GL04", mentioned_private_classes=", ".join(mentioned_errs)) - ) + if isinstance(func_names, str): + func_names = [func_names] + results = {} + docs = {} + for func_name in func_names: + func_obj = Validator._load_obj(func_name) + # Some objects are instances, e.g. IndexSlice, which numpydoc can't validate + doc_obj = get_doc_object(func_obj, doc=func_obj.__doc__) + doc = PandasDocstring(func_name, doc_obj) + result = validate(doc_obj) + mentioned_errs = doc.mentioned_private_classes + if mentioned_errs: + result["errors"].append( + pandas_error( + "GL04", + mentioned_private_classes=", ".join(mentioned_errs)) + ) - if doc.see_also: - result["errors"].extend( - pandas_error( - "SA05", - reference_name=rel_name, - right_reference=rel_name[len("pandas."):], + if doc.see_also: + result["errors"].extend( + pandas_error( + "SA05", + reference_name=rel_name, + right_reference=rel_name[len("pandas."):], + ) + for rel_name in doc.see_also + if rel_name.startswith("pandas.") ) - for rel_name in doc.see_also - if rel_name.startswith("pandas.") - ) result["examples_errs"] = "" if doc.examples: + result["examples_errs"] = "" + results[func_name] = result + docs[func_name] = doc + + for func_name, doc in docs.items(): + if not doc.examples: + continue for error_code, error_message, line_number, col_number in doc.validate_pep8(): - result["errors"].append( + results[func_name]["errors"].append( pandas_error( "EX03", error_code=error_code, @@ -270,17 +284,17 @@ def pandas_validate(func_name: str): ) ) examples_source_code = "".join(doc.examples_source_code) - result["errors"].extend( + results[func_name]["errors"].extend( pandas_error("EX04", imported_library=wrong_import) for wrong_import in ("numpy", "pandas") if f"import {wrong_import}" in examples_source_code ) - if doc.non_hyphenated_array_like(): - result["errors"].append(pandas_error("PD01")) + if doc.non_hyphenated_array_like(): + results[func_name]["errors"].append(pandas_error("PD01")) plt.close("all") - return result + return results def validate_all(prefix, ignore_deprecated=False): @@ -305,10 +319,12 @@ def validate_all(prefix, ignore_deprecated=False): result = {} seen = {} + func_names = [func_name for func_name, _, _, _ in get_all_api_items() + if not prefix or prefix and func_name.startswith(prefix)] + doc_infos = pandas_validate(func_names) + for func_name, _, section, subsection in get_all_api_items(): - if prefix and not func_name.startswith(prefix): - continue - doc_info = pandas_validate(func_name) + doc_info = doc_infos[func_name] if ignore_deprecated and doc_info["deprecated"]: continue result[func_name] = doc_info @@ -466,7 +482,11 @@ def main( "as JSON" ) argparser = argparse.ArgumentParser(description="validate pandas docstrings") - argparser.add_argument("function", nargs="?", default=None, help=func_help) + argparser.add_argument( + "function", + nargs="?", + default=None, + help=func_help) argparser.add_argument( "--format", default="default", From 41ae9ba900103b48e1c87623d1b39db859d7e368 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sat, 16 Mar 2024 17:32:04 +0100 Subject: [PATCH 14/23] make pandas_validate accept and return list --- scripts/validate_docstrings.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 090d66738a723..4b3e699734069 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -264,8 +264,6 @@ def pandas_validate(func_names: str | list[str]): if rel_name.startswith("pandas.") ) - result["examples_errs"] = "" - if doc.examples: result["examples_errs"] = "" results[func_name] = result docs[func_name] = doc From 48d66a03381ccd00d88c2a915b915b8715c2406a Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sat, 16 Mar 2024 17:46:56 +0100 Subject: [PATCH 15/23] add pep8 bulk validator --- scripts/validate_docstrings.py | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 4b3e699734069..7897347f45c15 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -148,6 +148,73 @@ def get_api_items(api_doc_fd): previous_line = line_stripped +def bulk_validate_pep8(docs: dict[str, PandasDocstring]) -> list[list]: + all_docs_error_messages = [] + temp_files = [] + + try: + for func_name, doc in docs.items(): + if not doc.examples: + continue + + content = "".join( + ( + "import numpy as np # noqa: F401\n", + "import pandas as pd # noqa: F401\n", + *doc.examples_source_code, + ) + ) + + temp_file = tempfile.NamedTemporaryFile(mode="w", encoding="utf-8", + delete=False) + temp_file.write(content) + temp_file.flush() + temp_files.append(temp_file) + + if not temp_files: # No docs with examples to process + return all_docs_error_messages + + cmd = [ + sys.executable, + "-m", + "flake8", + "--format=%(row)d\t%(col)d\t%(code)s\t%(text)s", + "--max-line-length=88", + "--ignore=E203,E3,W503,W504,E402,E731,E128,E124,E704", + ] + # Extend cmd with names of all temporary files + cmd.extend([temp_file.name for temp_file in temp_files]) + response = subprocess.run(cmd, capture_output=True, check=False, + text=True) + + # Parsing output for each file + for temp_file in temp_files: + error_messages = [] + for output in ("stdout", "stderr"): + out = getattr(response, output).replace(temp_file.name, + "").strip( + "\n").splitlines() + if out: + error_messages.extend(out) + + # Parsing error messages for each document + doc_error_messages = [] + for error_message in error_messages: + line_number, col_number, error_code, message = error_message.split( + "\t", maxsplit=3) + doc_error_messages.append((error_code, message, + int(line_number) - 2, + int(col_number))) + all_docs_error_messages.append(doc_error_messages) + + finally: + for temp_file in temp_files: + temp_file.close() + os.unlink(temp_file.name) + + return all_docs_error_messages + + class PandasDocstring(Validator): def __init__(self, func_name: str, doc_obj=None) -> None: self.func_name = func_name From 013514ce37d08541be5b55a2a17a539d20b906cc Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sat, 16 Mar 2024 23:02:18 +0100 Subject: [PATCH 16/23] integrate review comments --- ci/code_checks.sh | 2771 +++++++++------------ scripts/tests/test_validate_docstrings.py | 22 +- scripts/validate_docstrings.py | 73 +- 3 files changed, 1278 insertions(+), 1588 deletions(-) diff --git a/ci/code_checks.sh b/ci/code_checks.sh index f60ba45879021..24773f9eaa076 100755 --- a/ci/code_checks.sh +++ b/ci/code_checks.sh @@ -65,1551 +65,1234 @@ fi ### DOCSTRINGS ### if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then - # Run multiple calls of the validation script in a single python python process - # Each group of parameters is separated with -- - # This way module compiles, imports and processed source files can be cached, among other things - PARAMETERS=(--format=actions --errors=EX01,EX03,EX04,GL01,GL02,GL03,GL04,GL05,GL06,GL07,GL09,GL10,PD01,PR03,PR04,PR05,PR06,PR08,PR09,PR10,RT01,RT02,RT04,RT05,SA02,SA03,SA04,SA05,SS01,SS02,SS03,SS04,SS05,SS06) - ##### - # end of full error validation group - ##### - PARAMETERS+=(--for_error_ignore_functions PR02 \ -pandas.Series.dt.as_unit,\ -pandas.Series.dt.to_period,\ -pandas.Series.dt.tz_localize,\ -pandas.Series.dt.tz_convert,\ -pandas.Series.dt.strftime,\ -pandas.Series.dt.round,\ -pandas.Series.dt.floor,\ -pandas.Series.dt.ceil,\ -pandas.Series.dt.month_name,\ -pandas.Series.dt.day_name,\ -pandas.Series.cat.rename_categories,\ -pandas.Series.cat.reorder_categories,\ -pandas.Series.cat.add_categories,\ -pandas.Series.cat.remove_categories,\ -pandas.Series.cat.set_categories,\ -pandas.Series.plot,\ -pandas.DataFrame.plot,\ -pandas.tseries.offsets.DateOffset,\ -pandas.tseries.offsets.BusinessDay,\ -pandas.tseries.offsets.BDay,\ -pandas.tseries.offsets.BusinessHour,\ -pandas.tseries.offsets.CustomBusinessDay,\ -pandas.tseries.offsets.CDay,\ -pandas.tseries.offsets.CustomBusinessHour,\ -pandas.tseries.offsets.MonthEnd,\ -pandas.tseries.offsets.MonthBegin,\ -pandas.tseries.offsets.BusinessMonthEnd,\ -pandas.tseries.offsets.BMonthEnd,\ -pandas.tseries.offsets.BusinessMonthBegin,\ -pandas.tseries.offsets.BMonthBegin,\ -pandas.tseries.offsets.CustomBusinessMonthEnd,\ -pandas.tseries.offsets.CBMonthEnd,\ -pandas.tseries.offsets.CustomBusinessMonthBegin,\ -pandas.tseries.offsets.CBMonthBegin,\ -pandas.tseries.offsets.SemiMonthEnd,\ -pandas.tseries.offsets.SemiMonthBegin,\ -pandas.tseries.offsets.Week,\ -pandas.tseries.offsets.WeekOfMonth,\ -pandas.tseries.offsets.LastWeekOfMonth,\ -pandas.tseries.offsets.BQuarterEnd,\ -pandas.tseries.offsets.BQuarterBegin,\ -pandas.tseries.offsets.QuarterEnd,\ -pandas.tseries.offsets.QuarterBegin,\ -pandas.tseries.offsets.BYearEnd,\ -pandas.tseries.offsets.BYearBegin,\ -pandas.tseries.offsets.YearEnd,\ -pandas.tseries.offsets.YearBegin,\ -pandas.tseries.offsets.FY5253,\ -pandas.tseries.offsets.FY5253Quarter,\ -pandas.tseries.offsets.Easter,\ -pandas.tseries.offsets.Day,\ -pandas.tseries.offsets.Hour,\ -pandas.tseries.offsets.Minute,\ -pandas.tseries.offsets.Second,\ -pandas.tseries.offsets.Milli,\ -pandas.tseries.offsets.Micro,\ -pandas.tseries.offsets.Nano,\ -pandas.Timestamp.max,\ -pandas.Timestamp.min,\ -pandas.Timestamp.resolution,\ -pandas.Timedelta.max,\ -pandas.Timedelta.min,\ -pandas.Timedelta.resolution,\ -pandas.Interval,\ -pandas.Grouper,\ -pandas.core.groupby.DataFrameGroupBy.nth,\ -pandas.core.groupby.SeriesGroupBy.nth,\ -pandas.core.groupby.DataFrameGroupBy.plot,\ -pandas.core.groupby.SeriesGroupBy.plot # There should be no backslash in the final line, please keep this comment in the last ignored function -) - ##### - # end of PR02 group - ##### - PARAMETERS+=(--for_error_ignore_functions GL08 \ -pandas.Index.empty,\ -pandas.Index.names,\ -pandas.Index.view,\ -pandas.IntervalIndex.left,\ -pandas.IntervalIndex.length,\ -pandas.IntervalIndex.mid,\ -pandas.IntervalIndex.right,\ -pandas.Period.freq,\ -pandas.Period.ordinal,\ -pandas.PeriodIndex.freq,\ -pandas.PeriodIndex.qyear,\ -pandas.Series.dt,\ -pandas.Series.dt.as_unit,\ -pandas.Series.dt.freq,\ -pandas.Series.dt.qyear,\ -pandas.Series.dt.unit,\ -pandas.Series.empty,\ -pandas.Timestamp.day,\ -pandas.Timestamp.fold,\ -pandas.Timestamp.hour,\ -pandas.Timestamp.microsecond,\ -pandas.Timestamp.minute,\ -pandas.Timestamp.month,\ -pandas.Timestamp.nanosecond,\ -pandas.Timestamp.second,\ -pandas.Timestamp.tzinfo,\ -pandas.Timestamp.value,\ -pandas.Timestamp.year,\ -pandas.tseries.offsets.BQuarterBegin.is_on_offset,\ -pandas.tseries.offsets.BQuarterBegin.n,\ -pandas.tseries.offsets.BQuarterBegin.nanos,\ -pandas.tseries.offsets.BQuarterBegin.normalize,\ -pandas.tseries.offsets.BQuarterBegin.rule_code,\ -pandas.tseries.offsets.BQuarterBegin.startingMonth,\ -pandas.tseries.offsets.BQuarterEnd.is_on_offset,\ -pandas.tseries.offsets.BQuarterEnd.n,\ -pandas.tseries.offsets.BQuarterEnd.nanos,\ -pandas.tseries.offsets.BQuarterEnd.normalize,\ -pandas.tseries.offsets.BQuarterEnd.rule_code,\ -pandas.tseries.offsets.BQuarterEnd.startingMonth,\ -pandas.tseries.offsets.BYearBegin.is_on_offset,\ -pandas.tseries.offsets.BYearBegin.month,\ -pandas.tseries.offsets.BYearBegin.n,\ -pandas.tseries.offsets.BYearBegin.nanos,\ -pandas.tseries.offsets.BYearBegin.normalize,\ -pandas.tseries.offsets.BYearBegin.rule_code,\ -pandas.tseries.offsets.BYearEnd.is_on_offset,\ -pandas.tseries.offsets.BYearEnd.month,\ -pandas.tseries.offsets.BYearEnd.n,\ -pandas.tseries.offsets.BYearEnd.nanos,\ -pandas.tseries.offsets.BYearEnd.normalize,\ -pandas.tseries.offsets.BYearEnd.rule_code,\ -pandas.tseries.offsets.BusinessDay.calendar,\ -pandas.tseries.offsets.BusinessDay.holidays,\ -pandas.tseries.offsets.BusinessDay.is_on_offset,\ -pandas.tseries.offsets.BusinessDay.n,\ -pandas.tseries.offsets.BusinessDay.nanos,\ -pandas.tseries.offsets.BusinessDay.normalize,\ -pandas.tseries.offsets.BusinessDay.rule_code,\ -pandas.tseries.offsets.BusinessDay.weekmask,\ -pandas.tseries.offsets.BusinessHour.calendar,\ -pandas.tseries.offsets.BusinessHour.end,\ -pandas.tseries.offsets.BusinessHour.holidays,\ -pandas.tseries.offsets.BusinessHour.is_on_offset,\ -pandas.tseries.offsets.BusinessHour.n,\ -pandas.tseries.offsets.BusinessHour.nanos,\ -pandas.tseries.offsets.BusinessHour.normalize,\ -pandas.tseries.offsets.BusinessHour.rule_code,\ -pandas.tseries.offsets.BusinessHour.start,\ -pandas.tseries.offsets.BusinessHour.weekmask,\ -pandas.tseries.offsets.BusinessMonthBegin.is_on_offset,\ -pandas.tseries.offsets.BusinessMonthBegin.n,\ -pandas.tseries.offsets.BusinessMonthBegin.nanos,\ -pandas.tseries.offsets.BusinessMonthBegin.normalize,\ -pandas.tseries.offsets.BusinessMonthBegin.rule_code,\ -pandas.tseries.offsets.BusinessMonthEnd.is_on_offset,\ -pandas.tseries.offsets.BusinessMonthEnd.n,\ -pandas.tseries.offsets.BusinessMonthEnd.nanos,\ -pandas.tseries.offsets.BusinessMonthEnd.normalize,\ -pandas.tseries.offsets.BusinessMonthEnd.rule_code,\ -pandas.tseries.offsets.CustomBusinessDay.calendar,\ -pandas.tseries.offsets.CustomBusinessDay.holidays,\ -pandas.tseries.offsets.CustomBusinessDay.is_on_offset,\ -pandas.tseries.offsets.CustomBusinessDay.n,\ -pandas.tseries.offsets.CustomBusinessDay.nanos,\ -pandas.tseries.offsets.CustomBusinessDay.normalize,\ -pandas.tseries.offsets.CustomBusinessDay.rule_code,\ -pandas.tseries.offsets.CustomBusinessDay.weekmask,\ -pandas.tseries.offsets.CustomBusinessHour.calendar,\ -pandas.tseries.offsets.CustomBusinessHour.end,\ -pandas.tseries.offsets.CustomBusinessHour.holidays,\ -pandas.tseries.offsets.CustomBusinessHour.is_on_offset,\ -pandas.tseries.offsets.CustomBusinessHour.n,\ -pandas.tseries.offsets.CustomBusinessHour.nanos,\ -pandas.tseries.offsets.CustomBusinessHour.normalize,\ -pandas.tseries.offsets.CustomBusinessHour.rule_code,\ -pandas.tseries.offsets.CustomBusinessHour.start,\ -pandas.tseries.offsets.CustomBusinessHour.weekmask,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.calendar,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.holidays,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.m_offset,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.n,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.nanos,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.normalize,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.rule_code,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.weekmask,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.calendar,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.holidays,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.m_offset,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.n,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.nanos,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.normalize,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.rule_code,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.weekmask,\ -pandas.tseries.offsets.DateOffset.is_on_offset,\ -pandas.tseries.offsets.DateOffset.n,\ -pandas.tseries.offsets.DateOffset.nanos,\ -pandas.tseries.offsets.DateOffset.normalize,\ -pandas.tseries.offsets.DateOffset.rule_code,\ -pandas.tseries.offsets.Day.delta,\ -pandas.tseries.offsets.Day.is_on_offset,\ -pandas.tseries.offsets.Day.n,\ -pandas.tseries.offsets.Day.normalize,\ -pandas.tseries.offsets.Day.rule_code,\ -pandas.tseries.offsets.Easter.is_on_offset,\ -pandas.tseries.offsets.Easter.n,\ -pandas.tseries.offsets.Easter.nanos,\ -pandas.tseries.offsets.Easter.normalize,\ -pandas.tseries.offsets.Easter.rule_code,\ -pandas.tseries.offsets.FY5253.get_rule_code_suffix,\ -pandas.tseries.offsets.FY5253.get_year_end,\ -pandas.tseries.offsets.FY5253.is_on_offset,\ -pandas.tseries.offsets.FY5253.n,\ -pandas.tseries.offsets.FY5253.nanos,\ -pandas.tseries.offsets.FY5253.normalize,\ -pandas.tseries.offsets.FY5253.rule_code,\ -pandas.tseries.offsets.FY5253.startingMonth,\ -pandas.tseries.offsets.FY5253.variation,\ -pandas.tseries.offsets.FY5253.weekday,\ -pandas.tseries.offsets.FY5253Quarter.get_rule_code_suffix,\ -pandas.tseries.offsets.FY5253Quarter.get_weeks,\ -pandas.tseries.offsets.FY5253Quarter.is_on_offset,\ -pandas.tseries.offsets.FY5253Quarter.n,\ -pandas.tseries.offsets.FY5253Quarter.nanos,\ -pandas.tseries.offsets.FY5253Quarter.normalize,\ -pandas.tseries.offsets.FY5253Quarter.qtr_with_extra_week,\ -pandas.tseries.offsets.FY5253Quarter.rule_code,\ -pandas.tseries.offsets.FY5253Quarter.startingMonth,\ -pandas.tseries.offsets.FY5253Quarter.variation,\ -pandas.tseries.offsets.FY5253Quarter.weekday,\ -pandas.tseries.offsets.FY5253Quarter.year_has_extra_week,\ -pandas.tseries.offsets.Hour.delta,\ -pandas.tseries.offsets.Hour.is_on_offset,\ -pandas.tseries.offsets.Hour.n,\ -pandas.tseries.offsets.Hour.normalize,\ -pandas.tseries.offsets.Hour.rule_code,\ -pandas.tseries.offsets.LastWeekOfMonth.is_on_offset,\ -pandas.tseries.offsets.LastWeekOfMonth.n,\ -pandas.tseries.offsets.LastWeekOfMonth.nanos,\ -pandas.tseries.offsets.LastWeekOfMonth.normalize,\ -pandas.tseries.offsets.LastWeekOfMonth.rule_code,\ -pandas.tseries.offsets.LastWeekOfMonth.week,\ -pandas.tseries.offsets.LastWeekOfMonth.weekday,\ -pandas.tseries.offsets.Micro.delta,\ -pandas.tseries.offsets.Micro.is_on_offset,\ -pandas.tseries.offsets.Micro.n,\ -pandas.tseries.offsets.Micro.normalize,\ -pandas.tseries.offsets.Micro.rule_code,\ -pandas.tseries.offsets.Milli.delta,\ -pandas.tseries.offsets.Milli.is_on_offset,\ -pandas.tseries.offsets.Milli.n,\ -pandas.tseries.offsets.Milli.normalize,\ -pandas.tseries.offsets.Milli.rule_code,\ -pandas.tseries.offsets.Minute.delta,\ -pandas.tseries.offsets.Minute.is_on_offset,\ -pandas.tseries.offsets.Minute.n,\ -pandas.tseries.offsets.Minute.normalize,\ -pandas.tseries.offsets.Minute.rule_code,\ -pandas.tseries.offsets.MonthBegin.is_on_offset,\ -pandas.tseries.offsets.MonthBegin.n,\ -pandas.tseries.offsets.MonthBegin.nanos,\ -pandas.tseries.offsets.MonthBegin.normalize,\ -pandas.tseries.offsets.MonthBegin.rule_code,\ -pandas.tseries.offsets.MonthEnd.is_on_offset,\ -pandas.tseries.offsets.MonthEnd.n,\ -pandas.tseries.offsets.MonthEnd.nanos,\ -pandas.tseries.offsets.MonthEnd.normalize,\ -pandas.tseries.offsets.MonthEnd.rule_code,\ -pandas.tseries.offsets.Nano.delta,\ -pandas.tseries.offsets.Nano.is_on_offset,\ -pandas.tseries.offsets.Nano.n,\ -pandas.tseries.offsets.Nano.normalize,\ -pandas.tseries.offsets.Nano.rule_code,\ -pandas.tseries.offsets.QuarterBegin.is_on_offset,\ -pandas.tseries.offsets.QuarterBegin.n,\ -pandas.tseries.offsets.QuarterBegin.nanos,\ -pandas.tseries.offsets.QuarterBegin.normalize,\ -pandas.tseries.offsets.QuarterBegin.rule_code,\ -pandas.tseries.offsets.QuarterBegin.startingMonth,\ -pandas.tseries.offsets.QuarterEnd.is_on_offset,\ -pandas.tseries.offsets.QuarterEnd.n,\ -pandas.tseries.offsets.QuarterEnd.nanos,\ -pandas.tseries.offsets.QuarterEnd.normalize,\ -pandas.tseries.offsets.QuarterEnd.rule_code,\ -pandas.tseries.offsets.QuarterEnd.startingMonth,\ -pandas.tseries.offsets.Second.delta,\ -pandas.tseries.offsets.Second.is_on_offset,\ -pandas.tseries.offsets.Second.n,\ -pandas.tseries.offsets.Second.normalize,\ -pandas.tseries.offsets.Second.rule_code,\ -pandas.tseries.offsets.SemiMonthBegin.day_of_month,\ -pandas.tseries.offsets.SemiMonthBegin.is_on_offset,\ -pandas.tseries.offsets.SemiMonthBegin.n,\ -pandas.tseries.offsets.SemiMonthBegin.nanos,\ -pandas.tseries.offsets.SemiMonthBegin.normalize,\ -pandas.tseries.offsets.SemiMonthBegin.rule_code,\ -pandas.tseries.offsets.SemiMonthEnd.day_of_month,\ -pandas.tseries.offsets.SemiMonthEnd.is_on_offset,\ -pandas.tseries.offsets.SemiMonthEnd.n,\ -pandas.tseries.offsets.SemiMonthEnd.nanos,\ -pandas.tseries.offsets.SemiMonthEnd.normalize,\ -pandas.tseries.offsets.SemiMonthEnd.rule_code,\ -pandas.tseries.offsets.Tick,\ -pandas.tseries.offsets.Tick.delta,\ -pandas.tseries.offsets.Tick.is_on_offset,\ -pandas.tseries.offsets.Tick.n,\ -pandas.tseries.offsets.Tick.normalize,\ -pandas.tseries.offsets.Tick.rule_code,\ -pandas.tseries.offsets.Week.is_on_offset,\ -pandas.tseries.offsets.Week.n,\ -pandas.tseries.offsets.Week.nanos,\ -pandas.tseries.offsets.Week.normalize,\ -pandas.tseries.offsets.Week.rule_code,\ -pandas.tseries.offsets.Week.weekday,\ -pandas.tseries.offsets.WeekOfMonth.is_on_offset,\ -pandas.tseries.offsets.WeekOfMonth.n,\ -pandas.tseries.offsets.WeekOfMonth.nanos,\ -pandas.tseries.offsets.WeekOfMonth.normalize,\ -pandas.tseries.offsets.WeekOfMonth.rule_code,\ -pandas.tseries.offsets.WeekOfMonth.week,\ -pandas.tseries.offsets.WeekOfMonth.weekday,\ -pandas.tseries.offsets.YearBegin.is_on_offset,\ -pandas.tseries.offsets.YearBegin.month,\ -pandas.tseries.offsets.YearBegin.n,\ -pandas.tseries.offsets.YearBegin.nanos,\ -pandas.tseries.offsets.YearBegin.normalize,\ -pandas.tseries.offsets.YearBegin.rule_code,\ -pandas.tseries.offsets.YearEnd.is_on_offset,\ -pandas.tseries.offsets.YearEnd.month,\ -pandas.tseries.offsets.YearEnd.n,\ -pandas.tseries.offsets.YearEnd.nanos,\ -pandas.tseries.offsets.YearEnd.normalize,\ -pandas.tseries.offsets.YearEnd.rule_code # There should be no backslash in the final line, please keep this comment in the last ignored function -) - ##### - # end of GL08 group - ##### - PARAMETERS+=(--for_error_ignore_functions PR01 \ -pandas.DataFrame.at_time,\ -pandas.DataFrame.backfill,\ -pandas.DataFrame.get,\ -pandas.DataFrame.pad,\ -pandas.DataFrame.sem,\ -pandas.DataFrame.sparse,\ -pandas.DataFrame.std,\ -pandas.DataFrame.swapaxes,\ -pandas.DataFrame.var,\ -pandas.DatetimeIndex.indexer_at_time,\ -pandas.DatetimeIndex.snap,\ -pandas.DatetimeIndex.std,\ -pandas.ExcelFile,\ -pandas.ExcelFile.parse,\ -pandas.HDFStore.append,\ -pandas.HDFStore.put,\ -pandas.Index.get_indexer_for,\ -pandas.Index.identical,\ -pandas.Index.putmask,\ -pandas.Index.ravel,\ -pandas.Index.str,\ -pandas.Index.take,\ -pandas.IntervalDtype,\ -pandas.MultiIndex,\ -pandas.Period.strftime,\ -pandas.RangeIndex.from_range,\ -pandas.Series.at_time,\ -pandas.Series.backfill,\ -pandas.Series.cat.add_categories,\ -pandas.Series.cat.as_ordered,\ -pandas.Series.cat.as_unordered,\ -pandas.Series.cat.remove_categories,\ -pandas.Series.cat.remove_unused_categories,\ -pandas.Series.cat.rename_categories,\ -pandas.Series.cat.reorder_categories,\ -pandas.Series.cat.set_categories,\ -pandas.Series.dt.as_unit,\ -pandas.Series.dt.ceil,\ -pandas.Series.dt.day_name,\ -pandas.Series.dt.floor,\ -pandas.Series.dt.month_name,\ -pandas.Series.dt.normalize,\ -pandas.Series.dt.round,\ -pandas.Series.dt.strftime,\ -pandas.Series.dt.to_period,\ -pandas.Series.dt.total_seconds,\ -pandas.Series.dt.tz_convert,\ -pandas.Series.dt.tz_localize,\ -pandas.Series.get,\ -pandas.Series.pad,\ -pandas.Series.sem,\ -pandas.Series.sparse,\ -pandas.Series.std,\ -pandas.Series.str,\ -pandas.Series.str.wrap,\ -pandas.Series.var,\ -pandas.Timedelta.to_numpy,\ -pandas.TimedeltaIndex,\ -pandas.Timestamp.combine,\ -pandas.Timestamp.fromtimestamp,\ -pandas.Timestamp.strptime,\ -pandas.Timestamp.to_numpy,\ -pandas.Timestamp.to_period,\ -pandas.Timestamp.to_pydatetime,\ -pandas.Timestamp.utcfromtimestamp,\ -pandas.api.extensions.ExtensionArray._pad_or_backfill,\ -pandas.api.extensions.ExtensionArray.interpolate,\ -pandas.api.indexers.BaseIndexer,\ -pandas.api.indexers.FixedForwardWindowIndexer,\ -pandas.api.indexers.VariableOffsetWindowIndexer,\ -pandas.api.types.is_bool,\ -pandas.api.types.is_complex,\ -pandas.api.types.is_float,\ -pandas.api.types.is_hashable,\ -pandas.api.types.is_integer,\ -pandas.core.groupby.SeriesGroupBy.filter,\ -pandas.core.resample.Resampler.max,\ -pandas.core.resample.Resampler.min,\ -pandas.core.resample.Resampler.quantile,\ -pandas.core.resample.Resampler.transform,\ -pandas.core.window.expanding.Expanding.corr,\ -pandas.core.window.expanding.Expanding.count,\ -pandas.core.window.rolling.Rolling.max,\ -pandas.core.window.rolling.Window.std,\ -pandas.core.window.rolling.Window.var,\ -pandas.errors.AbstractMethodError,\ -pandas.errors.UndefinedVariableError,\ -pandas.get_option,\ -pandas.io.formats.style.Styler.to_excel # There should be no backslash in the final line, please keep this comment in the last ignored function + PARAMETERS=(\ + --format=actions\ + --errors=EX01,EX03,EX04,GL01,GL02,GL03,GL04,GL05,GL06,GL07,GL08,GL09,GL10,PD01,PR01,PR02,PR03,PR04,PR05,PR06,PR07,PR08,PR09,PR10,RT01,RT02,RT03,RT04,RT05,SA01,SA02,SA03,SA04,SA05,SS01,SS02,SS03,SS04,SS05,SS06\ + --ignore_errors pandas.Categorical.__array__ SA01\ + --ignore_errors pandas.Categorical.codes SA01\ + --ignore_errors pandas.Categorical.dtype SA01\ + --ignore_errors pandas.Categorical.from_codes SA01\ + --ignore_errors pandas.Categorical.ordered SA01\ + --ignore_errors pandas.CategoricalDtype.categories SA01\ + --ignore_errors pandas.CategoricalDtype.ordered SA01\ + --ignore_errors pandas.CategoricalIndex.codes SA01\ + --ignore_errors pandas.CategoricalIndex.ordered SA01\ + --ignore_errors pandas.DataFrame.__dataframe__ SA01\ + --ignore_errors pandas.DataFrame.__iter__ SA01\ + --ignore_errors pandas.DataFrame.assign SA01\ + --ignore_errors pandas.DataFrame.at_time PR01\ + --ignore_errors pandas.DataFrame.axes SA01\ + --ignore_errors pandas.DataFrame.backfill PR01,SA01\ + --ignore_errors pandas.DataFrame.bfill SA01\ + --ignore_errors pandas.DataFrame.columns SA01\ + --ignore_errors pandas.DataFrame.copy SA01\ + --ignore_errors pandas.DataFrame.droplevel SA01\ + --ignore_errors pandas.DataFrame.dtypes SA01\ + --ignore_errors pandas.DataFrame.ffill SA01\ + --ignore_errors pandas.DataFrame.first_valid_index SA01\ + --ignore_errors pandas.DataFrame.get PR01,SA01\ + --ignore_errors pandas.DataFrame.hist RT03\ + --ignore_errors pandas.DataFrame.infer_objects RT03\ + --ignore_errors pandas.DataFrame.keys SA01\ + --ignore_errors pandas.DataFrame.kurt RT03,SA01\ + --ignore_errors pandas.DataFrame.kurtosis RT03,SA01\ + --ignore_errors pandas.DataFrame.last_valid_index SA01\ + --ignore_errors pandas.DataFrame.mask RT03\ + --ignore_errors pandas.DataFrame.max RT03\ + --ignore_errors pandas.DataFrame.mean RT03,SA01\ + --ignore_errors pandas.DataFrame.median RT03,SA01\ + --ignore_errors pandas.DataFrame.min RT03\ + --ignore_errors pandas.DataFrame.pad PR01,SA01\ + --ignore_errors pandas.DataFrame.plot PR02,SA01\ + --ignore_errors pandas.DataFrame.pop SA01\ + --ignore_errors pandas.DataFrame.prod RT03\ + --ignore_errors pandas.DataFrame.product RT03\ + --ignore_errors pandas.DataFrame.reorder_levels SA01\ + --ignore_errors pandas.DataFrame.sem PR01,RT03,SA01\ + --ignore_errors pandas.DataFrame.skew RT03,SA01\ + --ignore_errors pandas.DataFrame.sparse PR01,SA01\ + --ignore_errors pandas.DataFrame.sparse.density SA01\ + --ignore_errors pandas.DataFrame.sparse.from_spmatrix SA01\ + --ignore_errors pandas.DataFrame.sparse.to_coo SA01\ + --ignore_errors pandas.DataFrame.sparse.to_dense SA01\ + --ignore_errors pandas.DataFrame.std PR01,RT03,SA01\ + --ignore_errors pandas.DataFrame.sum RT03\ + --ignore_errors pandas.DataFrame.swapaxes PR01,SA01\ + --ignore_errors pandas.DataFrame.swaplevel SA01\ + --ignore_errors pandas.DataFrame.to_feather SA01\ + --ignore_errors pandas.DataFrame.to_markdown SA01\ + --ignore_errors pandas.DataFrame.to_parquet RT03\ + --ignore_errors pandas.DataFrame.to_period SA01\ + --ignore_errors pandas.DataFrame.to_timestamp SA01\ + --ignore_errors pandas.DataFrame.tz_convert SA01\ + --ignore_errors pandas.DataFrame.tz_localize SA01\ + --ignore_errors pandas.DataFrame.unstack RT03\ + --ignore_errors pandas.DataFrame.value_counts RT03\ + --ignore_errors pandas.DataFrame.var PR01,RT03,SA01\ + --ignore_errors pandas.DataFrame.where RT03\ + --ignore_errors pandas.DatetimeIndex.ceil SA01\ + --ignore_errors pandas.DatetimeIndex.date SA01\ + --ignore_errors pandas.DatetimeIndex.day SA01\ + --ignore_errors pandas.DatetimeIndex.day_name SA01\ + --ignore_errors pandas.DatetimeIndex.day_of_year SA01\ + --ignore_errors pandas.DatetimeIndex.dayofyear SA01\ + --ignore_errors pandas.DatetimeIndex.floor SA01\ + --ignore_errors pandas.DatetimeIndex.freqstr SA01\ + --ignore_errors pandas.DatetimeIndex.hour SA01\ + --ignore_errors pandas.DatetimeIndex.indexer_at_time PR01,RT03\ + --ignore_errors pandas.DatetimeIndex.indexer_between_time RT03\ + --ignore_errors pandas.DatetimeIndex.inferred_freq SA01\ + --ignore_errors pandas.DatetimeIndex.is_leap_year SA01\ + --ignore_errors pandas.DatetimeIndex.microsecond SA01\ + --ignore_errors pandas.DatetimeIndex.minute SA01\ + --ignore_errors pandas.DatetimeIndex.month SA01\ + --ignore_errors pandas.DatetimeIndex.month_name SA01\ + --ignore_errors pandas.DatetimeIndex.nanosecond SA01\ + --ignore_errors pandas.DatetimeIndex.quarter SA01\ + --ignore_errors pandas.DatetimeIndex.round SA01\ + --ignore_errors pandas.DatetimeIndex.second SA01\ + --ignore_errors pandas.DatetimeIndex.snap PR01,RT03,SA01\ + --ignore_errors pandas.DatetimeIndex.std PR01,RT03\ + --ignore_errors pandas.DatetimeIndex.time SA01\ + --ignore_errors pandas.DatetimeIndex.timetz SA01\ + --ignore_errors pandas.DatetimeIndex.to_period RT03\ + --ignore_errors pandas.DatetimeIndex.to_pydatetime RT03,SA01\ + --ignore_errors pandas.DatetimeIndex.tz SA01\ + --ignore_errors pandas.DatetimeIndex.tz_convert RT03\ + --ignore_errors pandas.DatetimeIndex.year SA01\ + --ignore_errors pandas.DatetimeTZDtype SA01\ + --ignore_errors pandas.DatetimeTZDtype.tz SA01\ + --ignore_errors pandas.DatetimeTZDtype.unit SA01\ + --ignore_errors pandas.ExcelFile PR01,SA01\ + --ignore_errors pandas.ExcelFile.parse PR01,SA01\ + --ignore_errors pandas.ExcelWriter SA01\ + --ignore_errors pandas.Flags SA01\ + --ignore_errors pandas.Float32Dtype SA01\ + --ignore_errors pandas.Float64Dtype SA01\ + --ignore_errors pandas.Grouper PR02,SA01\ + --ignore_errors pandas.HDFStore.append PR01,SA01\ + --ignore_errors pandas.HDFStore.get SA01\ + --ignore_errors pandas.HDFStore.groups SA01\ + --ignore_errors pandas.HDFStore.info RT03,SA01\ + --ignore_errors pandas.HDFStore.keys SA01\ + --ignore_errors pandas.HDFStore.put PR01,SA01\ + --ignore_errors pandas.HDFStore.select SA01\ + --ignore_errors pandas.HDFStore.walk SA01\ + --ignore_errors pandas.Index PR07\ + --ignore_errors pandas.Index.T SA01\ + --ignore_errors pandas.Index.append PR07,RT03,SA01\ + --ignore_errors pandas.Index.astype SA01\ + --ignore_errors pandas.Index.copy PR07,SA01\ + --ignore_errors pandas.Index.difference PR07,RT03,SA01\ + --ignore_errors pandas.Index.drop PR07,SA01\ + --ignore_errors pandas.Index.drop_duplicates RT03\ + --ignore_errors pandas.Index.droplevel RT03,SA01\ + --ignore_errors pandas.Index.dropna RT03,SA01\ + --ignore_errors pandas.Index.dtype SA01\ + --ignore_errors pandas.Index.duplicated RT03\ + --ignore_errors pandas.Index.empty GL08\ + --ignore_errors pandas.Index.equals SA01\ + --ignore_errors pandas.Index.fillna RT03\ + --ignore_errors pandas.Index.get_indexer PR07,SA01\ + --ignore_errors pandas.Index.get_indexer_for PR01,SA01\ + --ignore_errors pandas.Index.get_indexer_non_unique PR07,SA01\ + --ignore_errors pandas.Index.get_loc PR07,RT03,SA01\ + --ignore_errors pandas.Index.get_slice_bound PR07\ + --ignore_errors pandas.Index.hasnans SA01\ + --ignore_errors pandas.Index.identical PR01,SA01\ + --ignore_errors pandas.Index.inferred_type SA01\ + --ignore_errors pandas.Index.insert PR07,RT03,SA01\ + --ignore_errors pandas.Index.intersection PR07,RT03,SA01\ + --ignore_errors pandas.Index.item SA01\ + --ignore_errors pandas.Index.join PR07,RT03,SA01\ + --ignore_errors pandas.Index.map SA01\ + --ignore_errors pandas.Index.memory_usage RT03\ + --ignore_errors pandas.Index.name SA01\ + --ignore_errors pandas.Index.names GL08\ + --ignore_errors pandas.Index.nbytes SA01\ + --ignore_errors pandas.Index.ndim SA01\ + --ignore_errors pandas.Index.nunique RT03\ + --ignore_errors pandas.Index.putmask PR01,RT03\ + --ignore_errors pandas.Index.ravel PR01,RT03\ + --ignore_errors pandas.Index.reindex PR07\ + --ignore_errors pandas.Index.shape SA01\ + --ignore_errors pandas.Index.size SA01\ + --ignore_errors pandas.Index.slice_indexer PR07,RT03,SA01\ + --ignore_errors pandas.Index.slice_locs RT03\ + --ignore_errors pandas.Index.str PR01,SA01\ + --ignore_errors pandas.Index.symmetric_difference PR07,RT03,SA01\ + --ignore_errors pandas.Index.take PR01,PR07\ + --ignore_errors pandas.Index.to_list RT03\ + --ignore_errors pandas.Index.union PR07,RT03,SA01\ + --ignore_errors pandas.Index.unique RT03\ + --ignore_errors pandas.Index.value_counts RT03\ + --ignore_errors pandas.Index.view GL08\ + --ignore_errors pandas.Int16Dtype SA01\ + --ignore_errors pandas.Int32Dtype SA01\ + --ignore_errors pandas.Int64Dtype SA01\ + --ignore_errors pandas.Int8Dtype SA01\ + --ignore_errors pandas.Interval PR02\ + --ignore_errors pandas.Interval.closed SA01\ + --ignore_errors pandas.Interval.left SA01\ + --ignore_errors pandas.Interval.mid SA01\ + --ignore_errors pandas.Interval.right SA01\ + --ignore_errors pandas.IntervalDtype PR01,SA01\ + --ignore_errors pandas.IntervalDtype.subtype SA01\ + --ignore_errors pandas.IntervalIndex.closed SA01\ + --ignore_errors pandas.IntervalIndex.contains RT03\ + --ignore_errors pandas.IntervalIndex.get_indexer PR07,SA01\ + --ignore_errors pandas.IntervalIndex.get_loc PR07,RT03,SA01\ + --ignore_errors pandas.IntervalIndex.is_non_overlapping_monotonic SA01\ + --ignore_errors pandas.IntervalIndex.left GL08\ + --ignore_errors pandas.IntervalIndex.length GL08\ + --ignore_errors pandas.IntervalIndex.mid GL08\ + --ignore_errors pandas.IntervalIndex.right GL08\ + --ignore_errors pandas.IntervalIndex.set_closed RT03,SA01\ + --ignore_errors pandas.IntervalIndex.to_tuples RT03,SA01\ + --ignore_errors pandas.MultiIndex PR01\ + --ignore_errors pandas.MultiIndex.append PR07,SA01\ + --ignore_errors pandas.MultiIndex.copy PR07,RT03,SA01\ + --ignore_errors pandas.MultiIndex.drop PR07,RT03,SA01\ + --ignore_errors pandas.MultiIndex.droplevel RT03,SA01\ + --ignore_errors pandas.MultiIndex.dtypes SA01\ + --ignore_errors pandas.MultiIndex.get_indexer PR07,SA01\ + --ignore_errors pandas.MultiIndex.get_level_values SA01\ + --ignore_errors pandas.MultiIndex.get_loc PR07\ + --ignore_errors pandas.MultiIndex.get_loc_level PR07\ + --ignore_errors pandas.MultiIndex.levels SA01\ + --ignore_errors pandas.MultiIndex.levshape SA01\ + --ignore_errors pandas.MultiIndex.names SA01\ + --ignore_errors pandas.MultiIndex.nlevels SA01\ + --ignore_errors pandas.MultiIndex.remove_unused_levels RT03,SA01\ + --ignore_errors pandas.MultiIndex.reorder_levels RT03,SA01\ + --ignore_errors pandas.MultiIndex.set_codes SA01\ + --ignore_errors pandas.MultiIndex.set_levels RT03,SA01\ + --ignore_errors pandas.MultiIndex.sortlevel PR07,SA01\ + --ignore_errors pandas.MultiIndex.to_frame RT03\ + --ignore_errors pandas.MultiIndex.truncate SA01\ + --ignore_errors pandas.NA SA01\ + --ignore_errors pandas.NaT SA01\ + --ignore_errors pandas.NamedAgg SA01\ + --ignore_errors pandas.Period SA01\ + --ignore_errors pandas.Period.asfreq SA01\ + --ignore_errors pandas.Period.freq GL08\ + --ignore_errors pandas.Period.freqstr SA01\ + --ignore_errors pandas.Period.is_leap_year SA01\ + --ignore_errors pandas.Period.month SA01\ + --ignore_errors pandas.Period.now SA01\ + --ignore_errors pandas.Period.ordinal GL08\ + --ignore_errors pandas.Period.quarter SA01\ + --ignore_errors pandas.Period.strftime PR01,SA01\ + --ignore_errors pandas.Period.to_timestamp SA01\ + --ignore_errors pandas.Period.year SA01\ + --ignore_errors pandas.PeriodDtype SA01\ + --ignore_errors pandas.PeriodDtype.freq SA01\ + --ignore_errors pandas.PeriodIndex.day SA01\ + --ignore_errors pandas.PeriodIndex.day_of_week SA01\ + --ignore_errors pandas.PeriodIndex.day_of_year SA01\ + --ignore_errors pandas.PeriodIndex.dayofweek SA01\ + --ignore_errors pandas.PeriodIndex.dayofyear SA01\ + --ignore_errors pandas.PeriodIndex.days_in_month SA01\ + --ignore_errors pandas.PeriodIndex.daysinmonth SA01\ + --ignore_errors pandas.PeriodIndex.freq GL08\ + --ignore_errors pandas.PeriodIndex.freqstr SA01\ + --ignore_errors pandas.PeriodIndex.from_fields PR07,SA01\ + --ignore_errors pandas.PeriodIndex.from_ordinals SA01\ + --ignore_errors pandas.PeriodIndex.hour SA01\ + --ignore_errors pandas.PeriodIndex.is_leap_year SA01\ + --ignore_errors pandas.PeriodIndex.minute SA01\ + --ignore_errors pandas.PeriodIndex.month SA01\ + --ignore_errors pandas.PeriodIndex.quarter SA01\ + --ignore_errors pandas.PeriodIndex.qyear GL08\ + --ignore_errors pandas.PeriodIndex.second SA01\ + --ignore_errors pandas.PeriodIndex.to_timestamp RT03,SA01\ + --ignore_errors pandas.PeriodIndex.week SA01\ + --ignore_errors pandas.PeriodIndex.weekday SA01\ + --ignore_errors pandas.PeriodIndex.weekofyear SA01\ + --ignore_errors pandas.PeriodIndex.year SA01\ + --ignore_errors pandas.RangeIndex PR07\ + --ignore_errors pandas.RangeIndex.from_range PR01,SA01\ + --ignore_errors pandas.RangeIndex.start SA01\ + --ignore_errors pandas.RangeIndex.step SA01\ + --ignore_errors pandas.RangeIndex.stop SA01\ + --ignore_errors pandas.Series SA01\ + --ignore_errors pandas.Series.T SA01\ + --ignore_errors pandas.Series.__iter__ RT03,SA01\ + --ignore_errors pandas.Series.add PR07\ + --ignore_errors pandas.Series.align PR07,SA01\ + --ignore_errors pandas.Series.astype RT03\ + --ignore_errors pandas.Series.at_time PR01,RT03\ + --ignore_errors pandas.Series.backfill PR01,SA01\ + --ignore_errors pandas.Series.bfill SA01\ + --ignore_errors pandas.Series.case_when RT03\ + --ignore_errors pandas.Series.cat PR07,SA01\ + --ignore_errors pandas.Series.cat.add_categories PR01,PR02\ + --ignore_errors pandas.Series.cat.as_ordered PR01\ + --ignore_errors pandas.Series.cat.as_unordered PR01\ + --ignore_errors pandas.Series.cat.codes SA01\ + --ignore_errors pandas.Series.cat.ordered SA01\ + --ignore_errors pandas.Series.cat.remove_categories PR01,PR02\ + --ignore_errors pandas.Series.cat.remove_unused_categories PR01\ + --ignore_errors pandas.Series.cat.rename_categories PR01,PR02\ + --ignore_errors pandas.Series.cat.reorder_categories PR01,PR02\ + --ignore_errors pandas.Series.cat.set_categories PR01,PR02,RT03\ + --ignore_errors pandas.Series.copy SA01\ + --ignore_errors pandas.Series.div PR07\ + --ignore_errors pandas.Series.droplevel SA01\ + --ignore_errors pandas.Series.dt GL08\ + --ignore_errors pandas.Series.dt.as_unit GL08,PR01,PR02\ + --ignore_errors pandas.Series.dt.ceil PR01,PR02,SA01\ + --ignore_errors pandas.Series.dt.components SA01\ + --ignore_errors pandas.Series.dt.date SA01\ + --ignore_errors pandas.Series.dt.day SA01\ + --ignore_errors pandas.Series.dt.day_name PR01,PR02,SA01\ + --ignore_errors pandas.Series.dt.day_of_year SA01\ + --ignore_errors pandas.Series.dt.dayofyear SA01\ + --ignore_errors pandas.Series.dt.days SA01\ + --ignore_errors pandas.Series.dt.days_in_month SA01\ + --ignore_errors pandas.Series.dt.daysinmonth SA01\ + --ignore_errors pandas.Series.dt.floor PR01,PR02,SA01\ + --ignore_errors pandas.Series.dt.freq GL08\ + --ignore_errors pandas.Series.dt.hour SA01\ + --ignore_errors pandas.Series.dt.is_leap_year SA01\ + --ignore_errors pandas.Series.dt.microsecond SA01\ + --ignore_errors pandas.Series.dt.microseconds SA01\ + --ignore_errors pandas.Series.dt.minute SA01\ + --ignore_errors pandas.Series.dt.month SA01\ + --ignore_errors pandas.Series.dt.month_name PR01,PR02,SA01\ + --ignore_errors pandas.Series.dt.nanosecond SA01\ + --ignore_errors pandas.Series.dt.nanoseconds SA01\ + --ignore_errors pandas.Series.dt.normalize PR01\ + --ignore_errors pandas.Series.dt.quarter SA01\ + --ignore_errors pandas.Series.dt.qyear GL08\ + --ignore_errors pandas.Series.dt.round PR01,PR02,SA01\ + --ignore_errors pandas.Series.dt.second SA01\ + --ignore_errors pandas.Series.dt.seconds SA01\ + --ignore_errors pandas.Series.dt.strftime PR01,PR02\ + --ignore_errors pandas.Series.dt.time SA01\ + --ignore_errors pandas.Series.dt.timetz SA01\ + --ignore_errors pandas.Series.dt.to_period PR01,PR02,RT03\ + --ignore_errors pandas.Series.dt.total_seconds PR01\ + --ignore_errors pandas.Series.dt.tz SA01\ + --ignore_errors pandas.Series.dt.tz_convert PR01,PR02,RT03\ + --ignore_errors pandas.Series.dt.tz_localize PR01,PR02\ + --ignore_errors pandas.Series.dt.unit GL08\ + --ignore_errors pandas.Series.dt.year SA01\ + --ignore_errors pandas.Series.dtype SA01\ + --ignore_errors pandas.Series.dtypes SA01\ + --ignore_errors pandas.Series.empty GL08\ + --ignore_errors pandas.Series.eq PR07,SA01\ + --ignore_errors pandas.Series.ewm RT03\ + --ignore_errors pandas.Series.expanding RT03\ + --ignore_errors pandas.Series.ffill SA01\ + --ignore_errors pandas.Series.filter RT03\ + --ignore_errors pandas.Series.first_valid_index RT03,SA01\ + --ignore_errors pandas.Series.floordiv PR07\ + --ignore_errors pandas.Series.ge PR07,SA01\ + --ignore_errors pandas.Series.get PR01,PR07,RT03,SA01\ + --ignore_errors pandas.Series.gt PR07,SA01\ + --ignore_errors pandas.Series.hasnans SA01\ + --ignore_errors pandas.Series.infer_objects RT03\ + --ignore_errors pandas.Series.is_monotonic_decreasing SA01\ + --ignore_errors pandas.Series.is_monotonic_increasing SA01\ + --ignore_errors pandas.Series.is_unique SA01\ + --ignore_errors pandas.Series.item SA01\ + --ignore_errors pandas.Series.keys SA01\ + --ignore_errors pandas.Series.kurt RT03,SA01\ + --ignore_errors pandas.Series.kurtosis RT03,SA01\ + --ignore_errors pandas.Series.last_valid_index RT03,SA01\ + --ignore_errors pandas.Series.le PR07,SA01\ + --ignore_errors pandas.Series.list.__getitem__ SA01\ + --ignore_errors pandas.Series.list.flatten SA01\ + --ignore_errors pandas.Series.list.len SA01\ + --ignore_errors pandas.Series.lt PR07,SA01\ + --ignore_errors pandas.Series.mask RT03\ + --ignore_errors pandas.Series.max RT03\ + --ignore_errors pandas.Series.mean RT03,SA01\ + --ignore_errors pandas.Series.median RT03,SA01\ + --ignore_errors pandas.Series.min RT03\ + --ignore_errors pandas.Series.mod PR07\ + --ignore_errors pandas.Series.mode SA01\ + --ignore_errors pandas.Series.mul PR07\ + --ignore_errors pandas.Series.nbytes SA01\ + --ignore_errors pandas.Series.ndim SA01\ + --ignore_errors pandas.Series.ne PR07,SA01\ + --ignore_errors pandas.Series.nunique RT03\ + --ignore_errors pandas.Series.pad PR01,SA01\ + --ignore_errors pandas.Series.pipe RT03\ + --ignore_errors pandas.Series.plot PR02,SA01\ + --ignore_errors pandas.Series.plot.box RT03\ + --ignore_errors pandas.Series.plot.density RT03\ + --ignore_errors pandas.Series.plot.kde RT03\ + --ignore_errors pandas.Series.pop RT03,SA01\ + --ignore_errors pandas.Series.pow PR07\ + --ignore_errors pandas.Series.prod RT03\ + --ignore_errors pandas.Series.product RT03\ + --ignore_errors pandas.Series.radd PR07\ + --ignore_errors pandas.Series.rdiv PR07\ + --ignore_errors pandas.Series.reindex RT03\ + --ignore_errors pandas.Series.reorder_levels RT03,SA01\ + --ignore_errors pandas.Series.rfloordiv PR07\ + --ignore_errors pandas.Series.rmod PR07\ + --ignore_errors pandas.Series.rmul PR07\ + --ignore_errors pandas.Series.rolling PR07\ + --ignore_errors pandas.Series.rpow PR07\ + --ignore_errors pandas.Series.rsub PR07\ + --ignore_errors pandas.Series.rtruediv PR07\ + --ignore_errors pandas.Series.sem PR01,RT03,SA01\ + --ignore_errors pandas.Series.shape SA01\ + --ignore_errors pandas.Series.size SA01\ + --ignore_errors pandas.Series.skew RT03,SA01\ + --ignore_errors pandas.Series.sparse PR01,SA01\ + --ignore_errors pandas.Series.sparse.density SA01\ + --ignore_errors pandas.Series.sparse.fill_value SA01\ + --ignore_errors pandas.Series.sparse.from_coo PR07,SA01\ + --ignore_errors pandas.Series.sparse.npoints SA01\ + --ignore_errors pandas.Series.sparse.sp_values SA01\ + --ignore_errors pandas.Series.sparse.to_coo PR07,RT03,SA01\ + --ignore_errors pandas.Series.std PR01,RT03,SA01\ + --ignore_errors pandas.Series.str PR01,SA01\ + --ignore_errors pandas.Series.str.capitalize RT03\ + --ignore_errors pandas.Series.str.casefold RT03\ + --ignore_errors pandas.Series.str.center RT03,SA01\ + --ignore_errors pandas.Series.str.decode PR07,RT03,SA01\ + --ignore_errors pandas.Series.str.encode PR07,RT03,SA01\ + --ignore_errors pandas.Series.str.find RT03\ + --ignore_errors pandas.Series.str.fullmatch RT03\ + --ignore_errors pandas.Series.str.get RT03,SA01\ + --ignore_errors pandas.Series.str.index RT03\ + --ignore_errors pandas.Series.str.ljust RT03,SA01\ + --ignore_errors pandas.Series.str.lower RT03\ + --ignore_errors pandas.Series.str.lstrip RT03\ + --ignore_errors pandas.Series.str.match RT03\ + --ignore_errors pandas.Series.str.normalize RT03,SA01\ + --ignore_errors pandas.Series.str.partition RT03\ + --ignore_errors pandas.Series.str.repeat SA01\ + --ignore_errors pandas.Series.str.replace SA01\ + --ignore_errors pandas.Series.str.rfind RT03\ + --ignore_errors pandas.Series.str.rindex RT03\ + --ignore_errors pandas.Series.str.rjust RT03,SA01\ + --ignore_errors pandas.Series.str.rpartition RT03\ + --ignore_errors pandas.Series.str.rstrip RT03\ + --ignore_errors pandas.Series.str.strip RT03\ + --ignore_errors pandas.Series.str.swapcase RT03\ + --ignore_errors pandas.Series.str.title RT03\ + --ignore_errors pandas.Series.str.translate RT03,SA01\ + --ignore_errors pandas.Series.str.upper RT03\ + --ignore_errors pandas.Series.str.wrap PR01,RT03,SA01\ + --ignore_errors pandas.Series.str.zfill RT03\ + --ignore_errors pandas.Series.struct.dtypes SA01\ + --ignore_errors pandas.Series.sub PR07\ + --ignore_errors pandas.Series.sum RT03\ + --ignore_errors pandas.Series.swaplevel SA01\ + --ignore_errors pandas.Series.to_dict SA01\ + --ignore_errors pandas.Series.to_frame SA01\ + --ignore_errors pandas.Series.to_hdf PR07\ + --ignore_errors pandas.Series.to_list RT03\ + --ignore_errors pandas.Series.to_markdown SA01\ + --ignore_errors pandas.Series.to_numpy RT03\ + --ignore_errors pandas.Series.to_period SA01\ + --ignore_errors pandas.Series.to_string SA01\ + --ignore_errors pandas.Series.to_timestamp RT03,SA01\ + --ignore_errors pandas.Series.truediv PR07\ + --ignore_errors pandas.Series.tz_convert SA01\ + --ignore_errors pandas.Series.tz_localize SA01\ + --ignore_errors pandas.Series.unstack SA01\ + --ignore_errors pandas.Series.update PR07,SA01\ + --ignore_errors pandas.Series.value_counts RT03\ + --ignore_errors pandas.Series.var PR01,RT03,SA01\ + --ignore_errors pandas.Series.where RT03\ + --ignore_errors pandas.SparseDtype SA01\ + --ignore_errors pandas.Timedelta PR07,SA01\ + --ignore_errors pandas.Timedelta.as_unit SA01\ + --ignore_errors pandas.Timedelta.asm8 SA01\ + --ignore_errors pandas.Timedelta.ceil SA01\ + --ignore_errors pandas.Timedelta.components SA01\ + --ignore_errors pandas.Timedelta.days SA01\ + --ignore_errors pandas.Timedelta.floor SA01\ + --ignore_errors pandas.Timedelta.max PR02,PR07,SA01\ + --ignore_errors pandas.Timedelta.min PR02,PR07,SA01\ + --ignore_errors pandas.Timedelta.resolution PR02,PR07,SA01\ + --ignore_errors pandas.Timedelta.round SA01\ + --ignore_errors pandas.Timedelta.to_numpy PR01\ + --ignore_errors pandas.Timedelta.to_timedelta64 SA01\ + --ignore_errors pandas.Timedelta.total_seconds SA01\ + --ignore_errors pandas.Timedelta.view SA01\ + --ignore_errors pandas.TimedeltaIndex PR01\ + --ignore_errors pandas.TimedeltaIndex.as_unit RT03,SA01\ + --ignore_errors pandas.TimedeltaIndex.ceil SA01\ + --ignore_errors pandas.TimedeltaIndex.components SA01\ + --ignore_errors pandas.TimedeltaIndex.days SA01\ + --ignore_errors pandas.TimedeltaIndex.floor SA01\ + --ignore_errors pandas.TimedeltaIndex.inferred_freq SA01\ + --ignore_errors pandas.TimedeltaIndex.mean PR07\ + --ignore_errors pandas.TimedeltaIndex.microseconds SA01\ + --ignore_errors pandas.TimedeltaIndex.nanoseconds SA01\ + --ignore_errors pandas.TimedeltaIndex.round SA01\ + --ignore_errors pandas.TimedeltaIndex.seconds SA01\ + --ignore_errors pandas.TimedeltaIndex.to_pytimedelta RT03,SA01\ + --ignore_errors pandas.Timestamp PR07,SA01\ + --ignore_errors pandas.Timestamp.as_unit SA01\ + --ignore_errors pandas.Timestamp.asm8 SA01\ + --ignore_errors pandas.Timestamp.astimezone SA01\ + --ignore_errors pandas.Timestamp.ceil SA01\ + --ignore_errors pandas.Timestamp.combine PR01,SA01\ + --ignore_errors pandas.Timestamp.ctime SA01\ + --ignore_errors pandas.Timestamp.date SA01\ + --ignore_errors pandas.Timestamp.day GL08\ + --ignore_errors pandas.Timestamp.day_name SA01\ + --ignore_errors pandas.Timestamp.day_of_week SA01\ + --ignore_errors pandas.Timestamp.day_of_year SA01\ + --ignore_errors pandas.Timestamp.dayofweek SA01\ + --ignore_errors pandas.Timestamp.dayofyear SA01\ + --ignore_errors pandas.Timestamp.days_in_month SA01\ + --ignore_errors pandas.Timestamp.daysinmonth SA01\ + --ignore_errors pandas.Timestamp.dst SA01\ + --ignore_errors pandas.Timestamp.floor SA01\ + --ignore_errors pandas.Timestamp.fold GL08\ + --ignore_errors pandas.Timestamp.fromordinal SA01\ + --ignore_errors pandas.Timestamp.fromtimestamp PR01,SA01\ + --ignore_errors pandas.Timestamp.hour GL08\ + --ignore_errors pandas.Timestamp.is_leap_year SA01\ + --ignore_errors pandas.Timestamp.isocalendar SA01\ + --ignore_errors pandas.Timestamp.isoformat SA01\ + --ignore_errors pandas.Timestamp.isoweekday SA01\ + --ignore_errors pandas.Timestamp.max PR02,PR07,SA01\ + --ignore_errors pandas.Timestamp.microsecond GL08\ + --ignore_errors pandas.Timestamp.min PR02,PR07,SA01\ + --ignore_errors pandas.Timestamp.minute GL08\ + --ignore_errors pandas.Timestamp.month GL08\ + --ignore_errors pandas.Timestamp.month_name SA01\ + --ignore_errors pandas.Timestamp.nanosecond GL08\ + --ignore_errors pandas.Timestamp.normalize SA01\ + --ignore_errors pandas.Timestamp.now SA01\ + --ignore_errors pandas.Timestamp.quarter SA01\ + --ignore_errors pandas.Timestamp.replace PR07,SA01\ + --ignore_errors pandas.Timestamp.resolution PR02,PR07,SA01\ + --ignore_errors pandas.Timestamp.round SA01\ + --ignore_errors pandas.Timestamp.second GL08\ + --ignore_errors pandas.Timestamp.strftime SA01\ + --ignore_errors pandas.Timestamp.strptime PR01,SA01\ + --ignore_errors pandas.Timestamp.time SA01\ + --ignore_errors pandas.Timestamp.timestamp SA01\ + --ignore_errors pandas.Timestamp.timetuple SA01\ + --ignore_errors pandas.Timestamp.timetz SA01\ + --ignore_errors pandas.Timestamp.to_datetime64 SA01\ + --ignore_errors pandas.Timestamp.to_julian_date SA01\ + --ignore_errors pandas.Timestamp.to_numpy PR01\ + --ignore_errors pandas.Timestamp.to_period PR01,SA01\ + --ignore_errors pandas.Timestamp.to_pydatetime PR01,SA01\ + --ignore_errors pandas.Timestamp.today SA01\ + --ignore_errors pandas.Timestamp.toordinal SA01\ + --ignore_errors pandas.Timestamp.tz SA01\ + --ignore_errors pandas.Timestamp.tz_convert SA01\ + --ignore_errors pandas.Timestamp.tz_localize SA01\ + --ignore_errors pandas.Timestamp.tzinfo GL08\ + --ignore_errors pandas.Timestamp.tzname SA01\ + --ignore_errors pandas.Timestamp.unit SA01\ + --ignore_errors pandas.Timestamp.utcfromtimestamp PR01,SA01\ + --ignore_errors pandas.Timestamp.utcnow SA01\ + --ignore_errors pandas.Timestamp.utcoffset SA01\ + --ignore_errors pandas.Timestamp.utctimetuple SA01\ + --ignore_errors pandas.Timestamp.value GL08\ + --ignore_errors pandas.Timestamp.week SA01\ + --ignore_errors pandas.Timestamp.weekday SA01\ + --ignore_errors pandas.Timestamp.weekofyear SA01\ + --ignore_errors pandas.Timestamp.year GL08\ + --ignore_errors pandas.UInt16Dtype SA01\ + --ignore_errors pandas.UInt32Dtype SA01\ + --ignore_errors pandas.UInt64Dtype SA01\ + --ignore_errors pandas.UInt8Dtype SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._accumulate RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._concat_same_type PR07,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._formatter SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._from_sequence SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._from_sequence_of_strings SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._hash_pandas_object RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._pad_or_backfill PR01,RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._reduce RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray._values_for_factorize SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.astype SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.copy RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.dropna RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.dtype SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.duplicated RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.equals SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.fillna SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.insert PR07,RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.interpolate PR01,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.isin PR07,RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.isna SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.nbytes SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.ndim SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.ravel RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.shape SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.shift SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.take RT03\ + --ignore_errors pandas.api.extensions.ExtensionArray.tolist RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.unique RT03,SA01\ + --ignore_errors pandas.api.extensions.ExtensionArray.view SA01\ + --ignore_errors pandas.api.extensions.register_extension_dtype SA01\ + --ignore_errors pandas.api.indexers.BaseIndexer PR01,SA01\ + --ignore_errors pandas.api.indexers.FixedForwardWindowIndexer PR01,SA01\ + --ignore_errors pandas.api.indexers.VariableOffsetWindowIndexer PR01,SA01\ + --ignore_errors pandas.api.interchange.from_dataframe RT03,SA01\ + --ignore_errors pandas.api.types.infer_dtype PR07,SA01\ + --ignore_errors pandas.api.types.is_any_real_numeric_dtype SA01\ + --ignore_errors pandas.api.types.is_bool PR01,SA01\ + --ignore_errors pandas.api.types.is_bool_dtype SA01\ + --ignore_errors pandas.api.types.is_categorical_dtype SA01\ + --ignore_errors pandas.api.types.is_complex PR01,SA01\ + --ignore_errors pandas.api.types.is_complex_dtype SA01\ + --ignore_errors pandas.api.types.is_datetime64_any_dtype SA01\ + --ignore_errors pandas.api.types.is_datetime64_dtype SA01\ + --ignore_errors pandas.api.types.is_datetime64_ns_dtype SA01\ + --ignore_errors pandas.api.types.is_datetime64tz_dtype SA01\ + --ignore_errors pandas.api.types.is_dict_like PR07,SA01\ + --ignore_errors pandas.api.types.is_extension_array_dtype SA01\ + --ignore_errors pandas.api.types.is_file_like PR07,SA01\ + --ignore_errors pandas.api.types.is_float PR01,SA01\ + --ignore_errors pandas.api.types.is_float_dtype SA01\ + --ignore_errors pandas.api.types.is_hashable PR01,RT03,SA01\ + --ignore_errors pandas.api.types.is_int64_dtype SA01\ + --ignore_errors pandas.api.types.is_integer PR01,SA01\ + --ignore_errors pandas.api.types.is_integer_dtype SA01\ + --ignore_errors pandas.api.types.is_interval_dtype SA01\ + --ignore_errors pandas.api.types.is_iterator PR07,SA01\ + --ignore_errors pandas.api.types.is_list_like SA01\ + --ignore_errors pandas.api.types.is_named_tuple PR07,SA01\ + --ignore_errors pandas.api.types.is_numeric_dtype SA01\ + --ignore_errors pandas.api.types.is_object_dtype SA01\ + --ignore_errors pandas.api.types.is_period_dtype SA01\ + --ignore_errors pandas.api.types.is_re PR07,SA01\ + --ignore_errors pandas.api.types.is_re_compilable PR07,SA01\ + --ignore_errors pandas.api.types.is_scalar SA01\ + --ignore_errors pandas.api.types.is_signed_integer_dtype SA01\ + --ignore_errors pandas.api.types.is_sparse SA01\ + --ignore_errors pandas.api.types.is_string_dtype SA01\ + --ignore_errors pandas.api.types.is_timedelta64_dtype SA01\ + --ignore_errors pandas.api.types.is_timedelta64_ns_dtype SA01\ + --ignore_errors pandas.api.types.is_unsigned_integer_dtype SA01\ + --ignore_errors pandas.api.types.pandas_dtype PR07,RT03,SA01\ + --ignore_errors pandas.api.types.union_categoricals RT03,SA01\ + --ignore_errors pandas.arrays.ArrowExtensionArray PR07,SA01\ + --ignore_errors pandas.arrays.BooleanArray SA01\ + --ignore_errors pandas.arrays.DatetimeArray SA01\ + --ignore_errors pandas.arrays.FloatingArray SA01\ + --ignore_errors pandas.arrays.IntegerArray SA01\ + --ignore_errors pandas.arrays.IntervalArray.closed SA01\ + --ignore_errors pandas.arrays.IntervalArray.contains RT03\ + --ignore_errors pandas.arrays.IntervalArray.is_non_overlapping_monotonic SA01\ + --ignore_errors pandas.arrays.IntervalArray.left SA01\ + --ignore_errors pandas.arrays.IntervalArray.length SA01\ + --ignore_errors pandas.arrays.IntervalArray.mid SA01\ + --ignore_errors pandas.arrays.IntervalArray.right SA01\ + --ignore_errors pandas.arrays.IntervalArray.set_closed RT03,SA01\ + --ignore_errors pandas.arrays.IntervalArray.to_tuples RT03,SA01\ + --ignore_errors pandas.arrays.NumpyExtensionArray SA01\ + --ignore_errors pandas.arrays.SparseArray PR07,SA01\ + --ignore_errors pandas.arrays.TimedeltaArray PR07,SA01\ + --ignore_errors pandas.bdate_range RT03,SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.__iter__ RT03,SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.agg RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.aggregate RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.apply RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.boxplot PR07,RT03,SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.cummax RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.cummin RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.cumprod RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.cumsum RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.filter RT03,SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.get_group RT03,SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.groups SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.hist RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.indices SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.max SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.mean RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.median SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.min SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.nth PR02\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.nunique RT03,SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.ohlc SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.plot PR02,SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.prod SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.rank RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.resample RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.sem SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.skew RT03\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.sum SA01\ + --ignore_errors pandas.core.groupby.DataFrameGroupBy.transform RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.__iter__ RT03,SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.agg RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.aggregate RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.apply RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.cummax RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.cummin RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.cumprod RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.cumsum RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.filter PR01,RT03,SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.get_group RT03,SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.groups SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.indices SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.is_monotonic_decreasing SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.is_monotonic_increasing SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.max SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.mean RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.median SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.min SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.nth PR02\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.nunique SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.ohlc SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.plot PR02,SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.prod SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.rank RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.resample RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.sem SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.skew RT03\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.sum SA01\ + --ignore_errors pandas.core.groupby.SeriesGroupBy.transform RT03\ + --ignore_errors pandas.core.resample.Resampler.__iter__ RT03,SA01\ + --ignore_errors pandas.core.resample.Resampler.ffill RT03\ + --ignore_errors pandas.core.resample.Resampler.get_group RT03,SA01\ + --ignore_errors pandas.core.resample.Resampler.groups SA01\ + --ignore_errors pandas.core.resample.Resampler.indices SA01\ + --ignore_errors pandas.core.resample.Resampler.max PR01,RT03,SA01\ + --ignore_errors pandas.core.resample.Resampler.mean SA01\ + --ignore_errors pandas.core.resample.Resampler.median SA01\ + --ignore_errors pandas.core.resample.Resampler.min PR01,RT03,SA01\ + --ignore_errors pandas.core.resample.Resampler.nunique SA01\ + --ignore_errors pandas.core.resample.Resampler.ohlc SA01\ + --ignore_errors pandas.core.resample.Resampler.prod SA01\ + --ignore_errors pandas.core.resample.Resampler.quantile PR01,PR07\ + --ignore_errors pandas.core.resample.Resampler.sem SA01\ + --ignore_errors pandas.core.resample.Resampler.std SA01\ + --ignore_errors pandas.core.resample.Resampler.sum SA01\ + --ignore_errors pandas.core.resample.Resampler.transform PR01,RT03,SA01\ + --ignore_errors pandas.core.resample.Resampler.var SA01\ + --ignore_errors pandas.core.window.expanding.Expanding.corr PR01\ + --ignore_errors pandas.core.window.expanding.Expanding.count PR01\ + --ignore_errors pandas.core.window.rolling.Rolling.max PR01\ + --ignore_errors pandas.core.window.rolling.Window.std PR01\ + --ignore_errors pandas.core.window.rolling.Window.var PR01\ + --ignore_errors pandas.date_range RT03\ + --ignore_errors pandas.describe_option SA01\ + --ignore_errors pandas.errors.AbstractMethodError PR01,SA01\ + --ignore_errors pandas.errors.AttributeConflictWarning SA01\ + --ignore_errors pandas.errors.CSSWarning SA01\ + --ignore_errors pandas.errors.CategoricalConversionWarning SA01\ + --ignore_errors pandas.errors.ChainedAssignmentError SA01\ + --ignore_errors pandas.errors.ClosedFileError SA01\ + --ignore_errors pandas.errors.DataError SA01\ + --ignore_errors pandas.errors.DuplicateLabelError SA01\ + --ignore_errors pandas.errors.EmptyDataError SA01\ + --ignore_errors pandas.errors.IntCastingNaNError SA01\ + --ignore_errors pandas.errors.InvalidIndexError SA01\ + --ignore_errors pandas.errors.InvalidVersion SA01\ + --ignore_errors pandas.errors.MergeError SA01\ + --ignore_errors pandas.errors.NullFrequencyError SA01\ + --ignore_errors pandas.errors.NumExprClobberingError SA01\ + --ignore_errors pandas.errors.NumbaUtilError SA01\ + --ignore_errors pandas.errors.OptionError SA01\ + --ignore_errors pandas.errors.OutOfBoundsDatetime SA01\ + --ignore_errors pandas.errors.OutOfBoundsTimedelta SA01\ + --ignore_errors pandas.errors.PerformanceWarning SA01\ + --ignore_errors pandas.errors.PossibleDataLossError SA01\ + --ignore_errors pandas.errors.PossiblePrecisionLoss SA01\ + --ignore_errors pandas.errors.SpecificationError SA01\ + --ignore_errors pandas.errors.UndefinedVariableError PR01,SA01\ + --ignore_errors pandas.errors.UnsortedIndexError SA01\ + --ignore_errors pandas.errors.UnsupportedFunctionCall SA01\ + --ignore_errors pandas.errors.ValueLabelTypeMismatch SA01\ + --ignore_errors pandas.get_option PR01,SA01\ + --ignore_errors pandas.infer_freq SA01\ + --ignore_errors pandas.interval_range RT03\ + --ignore_errors pandas.io.formats.style.Styler.apply RT03\ + --ignore_errors pandas.io.formats.style.Styler.apply_index RT03\ + --ignore_errors pandas.io.formats.style.Styler.background_gradient RT03\ + --ignore_errors pandas.io.formats.style.Styler.bar RT03,SA01\ + --ignore_errors pandas.io.formats.style.Styler.clear SA01\ + --ignore_errors pandas.io.formats.style.Styler.concat RT03,SA01\ + --ignore_errors pandas.io.formats.style.Styler.export RT03\ + --ignore_errors pandas.io.formats.style.Styler.format RT03\ + --ignore_errors pandas.io.formats.style.Styler.format_index RT03\ + --ignore_errors pandas.io.formats.style.Styler.from_custom_template SA01\ + --ignore_errors pandas.io.formats.style.Styler.hide RT03,SA01\ + --ignore_errors pandas.io.formats.style.Styler.highlight_between RT03\ + --ignore_errors pandas.io.formats.style.Styler.highlight_max RT03\ + --ignore_errors pandas.io.formats.style.Styler.highlight_min RT03\ + --ignore_errors pandas.io.formats.style.Styler.highlight_null RT03\ + --ignore_errors pandas.io.formats.style.Styler.highlight_quantile RT03\ + --ignore_errors pandas.io.formats.style.Styler.map RT03\ + --ignore_errors pandas.io.formats.style.Styler.map_index RT03\ + --ignore_errors pandas.io.formats.style.Styler.relabel_index RT03\ + --ignore_errors pandas.io.formats.style.Styler.set_caption RT03,SA01\ + --ignore_errors pandas.io.formats.style.Styler.set_properties RT03,SA01\ + --ignore_errors pandas.io.formats.style.Styler.set_sticky RT03,SA01\ + --ignore_errors pandas.io.formats.style.Styler.set_table_attributes PR07,RT03\ + --ignore_errors pandas.io.formats.style.Styler.set_table_styles RT03\ + --ignore_errors pandas.io.formats.style.Styler.set_td_classes RT03\ + --ignore_errors pandas.io.formats.style.Styler.set_tooltips RT03,SA01\ + --ignore_errors pandas.io.formats.style.Styler.set_uuid PR07,RT03,SA01\ + --ignore_errors pandas.io.formats.style.Styler.text_gradient RT03\ + --ignore_errors pandas.io.formats.style.Styler.to_excel PR01\ + --ignore_errors pandas.io.formats.style.Styler.to_string SA01\ + --ignore_errors pandas.io.formats.style.Styler.use RT03\ + --ignore_errors pandas.io.json.build_table_schema PR07,RT03,SA01\ + --ignore_errors pandas.io.stata.StataReader.data_label SA01\ + --ignore_errors pandas.io.stata.StataReader.value_labels RT03,SA01\ + --ignore_errors pandas.io.stata.StataReader.variable_labels RT03,SA01\ + --ignore_errors pandas.io.stata.StataWriter.write_file SA01\ + --ignore_errors pandas.json_normalize RT03,SA01\ + --ignore_errors pandas.merge PR07\ + --ignore_errors pandas.merge_asof PR07,RT03\ + --ignore_errors pandas.merge_ordered PR07\ + --ignore_errors pandas.option_context SA01\ + --ignore_errors pandas.period_range RT03,SA01\ + --ignore_errors pandas.pivot PR07\ + --ignore_errors pandas.pivot_table PR07\ + --ignore_errors pandas.plotting.andrews_curves RT03,SA01\ + --ignore_errors pandas.plotting.autocorrelation_plot RT03,SA01\ + --ignore_errors pandas.plotting.lag_plot RT03,SA01\ + --ignore_errors pandas.plotting.parallel_coordinates PR07,RT03,SA01\ + --ignore_errors pandas.plotting.plot_params SA01\ + --ignore_errors pandas.plotting.radviz RT03\ + --ignore_errors pandas.plotting.scatter_matrix PR07,SA01\ + --ignore_errors pandas.plotting.table PR07,RT03,SA01\ + --ignore_errors pandas.qcut PR07,SA01\ + --ignore_errors pandas.read_feather SA01\ + --ignore_errors pandas.read_orc SA01\ + --ignore_errors pandas.read_sas SA01\ + --ignore_errors pandas.read_spss SA01\ + --ignore_errors pandas.reset_option SA01\ + --ignore_errors pandas.set_eng_float_format RT03,SA01\ + --ignore_errors pandas.set_option SA01\ + --ignore_errors pandas.show_versions SA01\ + --ignore_errors pandas.test SA01\ + --ignore_errors pandas.testing.assert_extension_array_equal SA01\ + --ignore_errors pandas.testing.assert_index_equal PR07,SA01\ + --ignore_errors pandas.testing.assert_series_equal PR07,SA01\ + --ignore_errors pandas.timedelta_range SA01\ + --ignore_errors pandas.tseries.api.guess_datetime_format SA01\ + --ignore_errors pandas.tseries.offsets.BDay PR02,SA01\ + --ignore_errors pandas.tseries.offsets.BMonthBegin PR02\ + --ignore_errors pandas.tseries.offsets.BMonthEnd PR02\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin PR02\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.copy SA01\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.kwds SA01\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.n GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.name SA01\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.nanos GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.normalize GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterBegin.startingMonth GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd PR02\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.copy SA01\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.kwds SA01\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.n GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.name SA01\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.nanos GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.normalize GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.BQuarterEnd.startingMonth GL08\ + --ignore_errors pandas.tseries.offsets.BYearBegin PR02\ + --ignore_errors pandas.tseries.offsets.BYearBegin.copy SA01\ + --ignore_errors pandas.tseries.offsets.BYearBegin.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.BYearBegin.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.BYearBegin.kwds SA01\ + --ignore_errors pandas.tseries.offsets.BYearBegin.month GL08\ + --ignore_errors pandas.tseries.offsets.BYearBegin.n GL08\ + --ignore_errors pandas.tseries.offsets.BYearBegin.name SA01\ + --ignore_errors pandas.tseries.offsets.BYearBegin.nanos GL08\ + --ignore_errors pandas.tseries.offsets.BYearBegin.normalize GL08\ + --ignore_errors pandas.tseries.offsets.BYearBegin.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.BYearEnd PR02\ + --ignore_errors pandas.tseries.offsets.BYearEnd.copy SA01\ + --ignore_errors pandas.tseries.offsets.BYearEnd.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.BYearEnd.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.BYearEnd.kwds SA01\ + --ignore_errors pandas.tseries.offsets.BYearEnd.month GL08\ + --ignore_errors pandas.tseries.offsets.BYearEnd.n GL08\ + --ignore_errors pandas.tseries.offsets.BYearEnd.name SA01\ + --ignore_errors pandas.tseries.offsets.BYearEnd.nanos GL08\ + --ignore_errors pandas.tseries.offsets.BYearEnd.normalize GL08\ + --ignore_errors pandas.tseries.offsets.BYearEnd.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.BusinessDay PR02,SA01\ + --ignore_errors pandas.tseries.offsets.BusinessDay.calendar GL08\ + --ignore_errors pandas.tseries.offsets.BusinessDay.copy SA01\ + --ignore_errors pandas.tseries.offsets.BusinessDay.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.BusinessDay.holidays GL08\ + --ignore_errors pandas.tseries.offsets.BusinessDay.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.BusinessDay.kwds SA01\ + --ignore_errors pandas.tseries.offsets.BusinessDay.n GL08\ + --ignore_errors pandas.tseries.offsets.BusinessDay.name SA01\ + --ignore_errors pandas.tseries.offsets.BusinessDay.nanos GL08\ + --ignore_errors pandas.tseries.offsets.BusinessDay.normalize GL08\ + --ignore_errors pandas.tseries.offsets.BusinessDay.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.BusinessDay.weekmask GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour PR02,SA01\ + --ignore_errors pandas.tseries.offsets.BusinessHour.calendar GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.copy SA01\ + --ignore_errors pandas.tseries.offsets.BusinessHour.end GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.BusinessHour.holidays GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.kwds SA01\ + --ignore_errors pandas.tseries.offsets.BusinessHour.n GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.name SA01\ + --ignore_errors pandas.tseries.offsets.BusinessHour.nanos GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.normalize GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.start GL08\ + --ignore_errors pandas.tseries.offsets.BusinessHour.weekmask GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin PR02\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.copy SA01\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.kwds SA01\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.n GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.name SA01\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.nanos GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.normalize GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthBegin.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd PR02\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.copy SA01\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.kwds SA01\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.n GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.name SA01\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.nanos GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.normalize GL08\ + --ignore_errors pandas.tseries.offsets.BusinessMonthEnd.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.CBMonthBegin PR02\ + --ignore_errors pandas.tseries.offsets.CBMonthEnd PR02\ + --ignore_errors pandas.tseries.offsets.CDay PR02,SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay PR02,SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.calendar GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.copy SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.holidays GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.kwds SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.n GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.name SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.nanos GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.normalize GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessDay.weekmask GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour PR02,SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.calendar GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.copy SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.end GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.holidays GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.kwds SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.n GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.name SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.nanos GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.normalize GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.start GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessHour.weekmask GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin PR02\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.calendar GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.copy SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.holidays GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.is_on_offset SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.kwds SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.m_offset GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.n GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.name SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.nanos GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.normalize GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthBegin.weekmask GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd PR02\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.calendar GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.copy SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.holidays GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.is_on_offset SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.kwds SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.m_offset GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.n GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.name SA01\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.nanos GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.normalize GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.CustomBusinessMonthEnd.weekmask GL08\ + --ignore_errors pandas.tseries.offsets.DateOffset PR02\ + --ignore_errors pandas.tseries.offsets.DateOffset.copy SA01\ + --ignore_errors pandas.tseries.offsets.DateOffset.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.DateOffset.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.DateOffset.kwds SA01\ + --ignore_errors pandas.tseries.offsets.DateOffset.n GL08\ + --ignore_errors pandas.tseries.offsets.DateOffset.name SA01\ + --ignore_errors pandas.tseries.offsets.DateOffset.nanos GL08\ + --ignore_errors pandas.tseries.offsets.DateOffset.normalize GL08\ + --ignore_errors pandas.tseries.offsets.DateOffset.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.Day PR02\ + --ignore_errors pandas.tseries.offsets.Day.copy SA01\ + --ignore_errors pandas.tseries.offsets.Day.delta GL08\ + --ignore_errors pandas.tseries.offsets.Day.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Day.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Day.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Day.n GL08\ + --ignore_errors pandas.tseries.offsets.Day.name SA01\ + --ignore_errors pandas.tseries.offsets.Day.nanos SA01\ + --ignore_errors pandas.tseries.offsets.Day.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Day.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.Easter PR02\ + --ignore_errors pandas.tseries.offsets.Easter.copy SA01\ + --ignore_errors pandas.tseries.offsets.Easter.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Easter.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Easter.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Easter.n GL08\ + --ignore_errors pandas.tseries.offsets.Easter.name SA01\ + --ignore_errors pandas.tseries.offsets.Easter.nanos GL08\ + --ignore_errors pandas.tseries.offsets.Easter.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Easter.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.FY5253 PR02\ + --ignore_errors pandas.tseries.offsets.FY5253.copy SA01\ + --ignore_errors pandas.tseries.offsets.FY5253.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.FY5253.get_rule_code_suffix GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.get_year_end GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.kwds SA01\ + --ignore_errors pandas.tseries.offsets.FY5253.n GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.name SA01\ + --ignore_errors pandas.tseries.offsets.FY5253.nanos GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.normalize GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.startingMonth GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.variation GL08\ + --ignore_errors pandas.tseries.offsets.FY5253.weekday GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter PR02\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.copy SA01\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.get_rule_code_suffix GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.get_weeks GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.kwds SA01\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.n GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.name SA01\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.nanos GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.normalize GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.qtr_with_extra_week GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.startingMonth GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.variation GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.weekday GL08\ + --ignore_errors pandas.tseries.offsets.FY5253Quarter.year_has_extra_week GL08\ + --ignore_errors pandas.tseries.offsets.Hour PR02\ + --ignore_errors pandas.tseries.offsets.Hour.copy SA01\ + --ignore_errors pandas.tseries.offsets.Hour.delta GL08\ + --ignore_errors pandas.tseries.offsets.Hour.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Hour.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Hour.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Hour.n GL08\ + --ignore_errors pandas.tseries.offsets.Hour.name SA01\ + --ignore_errors pandas.tseries.offsets.Hour.nanos SA01\ + --ignore_errors pandas.tseries.offsets.Hour.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Hour.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth PR02,SA01\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.copy SA01\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.kwds SA01\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.n GL08\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.name SA01\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.nanos GL08\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.normalize GL08\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.week GL08\ + --ignore_errors pandas.tseries.offsets.LastWeekOfMonth.weekday GL08\ + --ignore_errors pandas.tseries.offsets.Micro PR02\ + --ignore_errors pandas.tseries.offsets.Micro.copy SA01\ + --ignore_errors pandas.tseries.offsets.Micro.delta GL08\ + --ignore_errors pandas.tseries.offsets.Micro.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Micro.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Micro.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Micro.n GL08\ + --ignore_errors pandas.tseries.offsets.Micro.name SA01\ + --ignore_errors pandas.tseries.offsets.Micro.nanos SA01\ + --ignore_errors pandas.tseries.offsets.Micro.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Micro.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.Milli PR02\ + --ignore_errors pandas.tseries.offsets.Milli.copy SA01\ + --ignore_errors pandas.tseries.offsets.Milli.delta GL08\ + --ignore_errors pandas.tseries.offsets.Milli.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Milli.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Milli.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Milli.n GL08\ + --ignore_errors pandas.tseries.offsets.Milli.name SA01\ + --ignore_errors pandas.tseries.offsets.Milli.nanos SA01\ + --ignore_errors pandas.tseries.offsets.Milli.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Milli.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.Minute PR02\ + --ignore_errors pandas.tseries.offsets.Minute.copy SA01\ + --ignore_errors pandas.tseries.offsets.Minute.delta GL08\ + --ignore_errors pandas.tseries.offsets.Minute.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Minute.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Minute.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Minute.n GL08\ + --ignore_errors pandas.tseries.offsets.Minute.name SA01\ + --ignore_errors pandas.tseries.offsets.Minute.nanos SA01\ + --ignore_errors pandas.tseries.offsets.Minute.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Minute.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.MonthBegin PR02\ + --ignore_errors pandas.tseries.offsets.MonthBegin.copy SA01\ + --ignore_errors pandas.tseries.offsets.MonthBegin.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.MonthBegin.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.MonthBegin.kwds SA01\ + --ignore_errors pandas.tseries.offsets.MonthBegin.n GL08\ + --ignore_errors pandas.tseries.offsets.MonthBegin.name SA01\ + --ignore_errors pandas.tseries.offsets.MonthBegin.nanos GL08\ + --ignore_errors pandas.tseries.offsets.MonthBegin.normalize GL08\ + --ignore_errors pandas.tseries.offsets.MonthBegin.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.MonthEnd PR02\ + --ignore_errors pandas.tseries.offsets.MonthEnd.copy SA01\ + --ignore_errors pandas.tseries.offsets.MonthEnd.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.MonthEnd.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.MonthEnd.kwds SA01\ + --ignore_errors pandas.tseries.offsets.MonthEnd.n GL08\ + --ignore_errors pandas.tseries.offsets.MonthEnd.name SA01\ + --ignore_errors pandas.tseries.offsets.MonthEnd.nanos GL08\ + --ignore_errors pandas.tseries.offsets.MonthEnd.normalize GL08\ + --ignore_errors pandas.tseries.offsets.MonthEnd.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.Nano PR02\ + --ignore_errors pandas.tseries.offsets.Nano.copy SA01\ + --ignore_errors pandas.tseries.offsets.Nano.delta GL08\ + --ignore_errors pandas.tseries.offsets.Nano.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Nano.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Nano.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Nano.n GL08\ + --ignore_errors pandas.tseries.offsets.Nano.name SA01\ + --ignore_errors pandas.tseries.offsets.Nano.nanos SA01\ + --ignore_errors pandas.tseries.offsets.Nano.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Nano.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.QuarterBegin PR02\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.copy SA01\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.kwds SA01\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.n GL08\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.name SA01\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.nanos GL08\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.normalize GL08\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.QuarterBegin.startingMonth GL08\ + --ignore_errors pandas.tseries.offsets.QuarterEnd PR02\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.copy SA01\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.kwds SA01\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.n GL08\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.name SA01\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.nanos GL08\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.normalize GL08\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.QuarterEnd.startingMonth GL08\ + --ignore_errors pandas.tseries.offsets.Second PR02\ + --ignore_errors pandas.tseries.offsets.Second.copy SA01\ + --ignore_errors pandas.tseries.offsets.Second.delta GL08\ + --ignore_errors pandas.tseries.offsets.Second.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Second.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Second.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Second.n GL08\ + --ignore_errors pandas.tseries.offsets.Second.name SA01\ + --ignore_errors pandas.tseries.offsets.Second.nanos SA01\ + --ignore_errors pandas.tseries.offsets.Second.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Second.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin PR02,SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.copy SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.day_of_month GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.kwds SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.n GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.name SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.nanos GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.normalize GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthBegin.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd PR02,SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.copy SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.day_of_month GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.kwds SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.n GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.name SA01\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.nanos GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.normalize GL08\ + --ignore_errors pandas.tseries.offsets.SemiMonthEnd.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.Tick GL08\ + --ignore_errors pandas.tseries.offsets.Tick.copy SA01\ + --ignore_errors pandas.tseries.offsets.Tick.delta GL08\ + --ignore_errors pandas.tseries.offsets.Tick.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Tick.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Tick.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Tick.n GL08\ + --ignore_errors pandas.tseries.offsets.Tick.name SA01\ + --ignore_errors pandas.tseries.offsets.Tick.nanos SA01\ + --ignore_errors pandas.tseries.offsets.Tick.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Tick.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.Week PR02\ + --ignore_errors pandas.tseries.offsets.Week.copy SA01\ + --ignore_errors pandas.tseries.offsets.Week.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.Week.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.Week.kwds SA01\ + --ignore_errors pandas.tseries.offsets.Week.n GL08\ + --ignore_errors pandas.tseries.offsets.Week.name SA01\ + --ignore_errors pandas.tseries.offsets.Week.nanos GL08\ + --ignore_errors pandas.tseries.offsets.Week.normalize GL08\ + --ignore_errors pandas.tseries.offsets.Week.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.Week.weekday GL08\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth PR02,SA01\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.copy SA01\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.kwds SA01\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.n GL08\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.name SA01\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.nanos GL08\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.normalize GL08\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.week GL08\ + --ignore_errors pandas.tseries.offsets.WeekOfMonth.weekday GL08\ + --ignore_errors pandas.tseries.offsets.YearBegin PR02\ + --ignore_errors pandas.tseries.offsets.YearBegin.copy SA01\ + --ignore_errors pandas.tseries.offsets.YearBegin.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.YearBegin.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.YearBegin.kwds SA01\ + --ignore_errors pandas.tseries.offsets.YearBegin.month GL08\ + --ignore_errors pandas.tseries.offsets.YearBegin.n GL08\ + --ignore_errors pandas.tseries.offsets.YearBegin.name SA01\ + --ignore_errors pandas.tseries.offsets.YearBegin.nanos GL08\ + --ignore_errors pandas.tseries.offsets.YearBegin.normalize GL08\ + --ignore_errors pandas.tseries.offsets.YearBegin.rule_code GL08\ + --ignore_errors pandas.tseries.offsets.YearEnd PR02\ + --ignore_errors pandas.tseries.offsets.YearEnd.copy SA01\ + --ignore_errors pandas.tseries.offsets.YearEnd.freqstr SA01\ + --ignore_errors pandas.tseries.offsets.YearEnd.is_on_offset GL08\ + --ignore_errors pandas.tseries.offsets.YearEnd.kwds SA01\ + --ignore_errors pandas.tseries.offsets.YearEnd.month GL08\ + --ignore_errors pandas.tseries.offsets.YearEnd.n GL08\ + --ignore_errors pandas.tseries.offsets.YearEnd.name SA01\ + --ignore_errors pandas.tseries.offsets.YearEnd.nanos GL08\ + --ignore_errors pandas.tseries.offsets.YearEnd.normalize GL08\ + --ignore_errors pandas.tseries.offsets.YearEnd.rule_code GL08\ + --ignore_errors pandas.unique PR07\ + --ignore_errors pandas.util.hash_array PR07,SA01\ + --ignore_errors pandas.util.hash_pandas_object PR07,SA01 ) - ##### - # end of PR01 group - ##### - PARAMETERS+=(--for_error_ignore_functions PR07 \ -pandas.Index,\ -pandas.Index.append,\ -pandas.Index.copy,\ -pandas.Index.difference,\ -pandas.Index.drop,\ -pandas.Index.get_indexer,\ -pandas.Index.get_indexer_non_unique,\ -pandas.Index.get_loc,\ -pandas.Index.get_slice_bound,\ -pandas.Index.insert,\ -pandas.Index.intersection,\ -pandas.Index.join,\ -pandas.Index.reindex,\ -pandas.Index.slice_indexer,\ -pandas.Index.symmetric_difference,\ -pandas.Index.take,\ -pandas.Index.union,\ -pandas.IntervalIndex.get_indexer,\ -pandas.IntervalIndex.get_loc,\ -pandas.MultiIndex.append,\ -pandas.MultiIndex.copy,\ -pandas.MultiIndex.drop,\ -pandas.MultiIndex.get_indexer,\ -pandas.MultiIndex.get_loc,\ -pandas.MultiIndex.get_loc_level,\ -pandas.MultiIndex.sortlevel,\ -pandas.PeriodIndex.from_fields,\ -pandas.RangeIndex,\ -pandas.Series.add,\ -pandas.Series.align,\ -pandas.Series.cat,\ -pandas.Series.div,\ -pandas.Series.eq,\ -pandas.Series.floordiv,\ -pandas.Series.ge,\ -pandas.Series.get,\ -pandas.Series.gt,\ -pandas.Series.le,\ -pandas.Series.lt,\ -pandas.Series.mod,\ -pandas.Series.mul,\ -pandas.Series.ne,\ -pandas.Series.pow,\ -pandas.Series.radd,\ -pandas.Series.rdiv,\ -pandas.Series.rfloordiv,\ -pandas.Series.rmod,\ -pandas.Series.rmul,\ -pandas.Series.rolling,\ -pandas.Series.rpow,\ -pandas.Series.rsub,\ -pandas.Series.rtruediv,\ -pandas.Series.sparse.from_coo,\ -pandas.Series.sparse.to_coo,\ -pandas.Series.str.decode,\ -pandas.Series.str.encode,\ -pandas.Series.sub,\ -pandas.Series.to_hdf,\ -pandas.Series.truediv,\ -pandas.Series.update,\ -pandas.Timedelta,\ -pandas.Timedelta.max,\ -pandas.Timedelta.min,\ -pandas.Timedelta.resolution,\ -pandas.TimedeltaIndex.mean,\ -pandas.Timestamp,\ -pandas.Timestamp.max,\ -pandas.Timestamp.min,\ -pandas.Timestamp.replace,\ -pandas.Timestamp.resolution,\ -pandas.api.extensions.ExtensionArray._concat_same_type,\ -pandas.api.extensions.ExtensionArray.insert,\ -pandas.api.extensions.ExtensionArray.isin,\ -pandas.api.types.infer_dtype,\ -pandas.api.types.is_dict_like,\ -pandas.api.types.is_file_like,\ -pandas.api.types.is_iterator,\ -pandas.api.types.is_named_tuple,\ -pandas.api.types.is_re,\ -pandas.api.types.is_re_compilable,\ -pandas.api.types.pandas_dtype,\ -pandas.arrays.ArrowExtensionArray,\ -pandas.arrays.SparseArray,\ -pandas.arrays.TimedeltaArray,\ -pandas.core.groupby.DataFrameGroupBy.boxplot,\ -pandas.core.resample.Resampler.quantile,\ -pandas.io.formats.style.Styler.set_table_attributes,\ -pandas.io.formats.style.Styler.set_uuid,\ -pandas.io.json.build_table_schema,\ -pandas.merge,\ -pandas.merge_asof,\ -pandas.merge_ordered,\ -pandas.pivot,\ -pandas.pivot_table,\ -pandas.plotting.parallel_coordinates,\ -pandas.plotting.scatter_matrix,\ -pandas.plotting.table,\ -pandas.qcut,\ -pandas.testing.assert_index_equal,\ -pandas.testing.assert_series_equal,\ -pandas.unique,\ -pandas.util.hash_array,\ -pandas.util.hash_pandas_object -) - ##### - # end of PR07 group - ##### - PARAMETERS+=(--for_error_ignore_functions RT03 \ -pandas.DataFrame.hist,\ -pandas.DataFrame.infer_objects,\ -pandas.DataFrame.kurt,\ -pandas.DataFrame.kurtosis,\ -pandas.DataFrame.mask,\ -pandas.DataFrame.max,\ -pandas.DataFrame.mean,\ -pandas.DataFrame.median,\ -pandas.DataFrame.min,\ -pandas.DataFrame.prod,\ -pandas.DataFrame.product,\ -pandas.DataFrame.sem,\ -pandas.DataFrame.skew,\ -pandas.DataFrame.std,\ -pandas.DataFrame.sum,\ -pandas.DataFrame.to_parquet,\ -pandas.DataFrame.unstack,\ -pandas.DataFrame.value_counts,\ -pandas.DataFrame.var,\ -pandas.DataFrame.where,\ -pandas.DatetimeIndex.indexer_at_time,\ -pandas.DatetimeIndex.indexer_between_time,\ -pandas.DatetimeIndex.snap,\ -pandas.DatetimeIndex.std,\ -pandas.DatetimeIndex.to_period,\ -pandas.DatetimeIndex.to_pydatetime,\ -pandas.DatetimeIndex.tz_convert,\ -pandas.HDFStore.info,\ -pandas.Index.append,\ -pandas.Index.difference,\ -pandas.Index.drop_duplicates,\ -pandas.Index.droplevel,\ -pandas.Index.dropna,\ -pandas.Index.duplicated,\ -pandas.Index.fillna,\ -pandas.Index.get_loc,\ -pandas.Index.insert,\ -pandas.Index.intersection,\ -pandas.Index.join,\ -pandas.Index.memory_usage,\ -pandas.Index.nunique,\ -pandas.Index.putmask,\ -pandas.Index.ravel,\ -pandas.Index.slice_indexer,\ -pandas.Index.slice_locs,\ -pandas.Index.symmetric_difference,\ -pandas.Index.to_list,\ -pandas.Index.union,\ -pandas.Index.unique,\ -pandas.Index.value_counts,\ -pandas.IntervalIndex.contains,\ -pandas.IntervalIndex.get_loc,\ -pandas.IntervalIndex.set_closed,\ -pandas.IntervalIndex.to_tuples,\ -pandas.MultiIndex.copy,\ -pandas.MultiIndex.drop,\ -pandas.MultiIndex.droplevel,\ -pandas.MultiIndex.remove_unused_levels,\ -pandas.MultiIndex.reorder_levels,\ -pandas.MultiIndex.set_levels,\ -pandas.MultiIndex.to_frame,\ -pandas.PeriodIndex.to_timestamp,\ -pandas.Series.__iter__,\ -pandas.Series.astype,\ -pandas.Series.at_time,\ -pandas.Series.case_when,\ -pandas.Series.cat.set_categories,\ -pandas.Series.dt.to_period,\ -pandas.Series.dt.tz_convert,\ -pandas.Series.ewm,\ -pandas.Series.expanding,\ -pandas.Series.filter,\ -pandas.Series.first_valid_index,\ -pandas.Series.get,\ -pandas.Series.infer_objects,\ -pandas.Series.kurt,\ -pandas.Series.kurtosis,\ -pandas.Series.last_valid_index,\ -pandas.Series.mask,\ -pandas.Series.max,\ -pandas.Series.mean,\ -pandas.Series.median,\ -pandas.Series.min,\ -pandas.Series.nunique,\ -pandas.Series.pipe,\ -pandas.Series.plot.box,\ -pandas.Series.plot.density,\ -pandas.Series.plot.kde,\ -pandas.Series.pop,\ -pandas.Series.prod,\ -pandas.Series.product,\ -pandas.Series.reindex,\ -pandas.Series.reorder_levels,\ -pandas.Series.sem,\ -pandas.Series.skew,\ -pandas.Series.sparse.to_coo,\ -pandas.Series.std,\ -pandas.Series.str.capitalize,\ -pandas.Series.str.casefold,\ -pandas.Series.str.center,\ -pandas.Series.str.decode,\ -pandas.Series.str.encode,\ -pandas.Series.str.find,\ -pandas.Series.str.fullmatch,\ -pandas.Series.str.get,\ -pandas.Series.str.index,\ -pandas.Series.str.ljust,\ -pandas.Series.str.lower,\ -pandas.Series.str.lstrip,\ -pandas.Series.str.match,\ -pandas.Series.str.normalize,\ -pandas.Series.str.partition,\ -pandas.Series.str.rfind,\ -pandas.Series.str.rindex,\ -pandas.Series.str.rjust,\ -pandas.Series.str.rpartition,\ -pandas.Series.str.rstrip,\ -pandas.Series.str.strip,\ -pandas.Series.str.swapcase,\ -pandas.Series.str.title,\ -pandas.Series.str.translate,\ -pandas.Series.str.upper,\ -pandas.Series.str.wrap,\ -pandas.Series.str.zfill,\ -pandas.Series.sum,\ -pandas.Series.to_list,\ -pandas.Series.to_numpy,\ -pandas.Series.to_timestamp,\ -pandas.Series.value_counts,\ -pandas.Series.var,\ -pandas.Series.where,\ -pandas.TimedeltaIndex.as_unit,\ -pandas.TimedeltaIndex.to_pytimedelta,\ -pandas.api.extensions.ExtensionArray._accumulate,\ -pandas.api.extensions.ExtensionArray._hash_pandas_object,\ -pandas.api.extensions.ExtensionArray._pad_or_backfill,\ -pandas.api.extensions.ExtensionArray._reduce,\ -pandas.api.extensions.ExtensionArray.copy,\ -pandas.api.extensions.ExtensionArray.dropna,\ -pandas.api.extensions.ExtensionArray.duplicated,\ -pandas.api.extensions.ExtensionArray.insert,\ -pandas.api.extensions.ExtensionArray.isin,\ -pandas.api.extensions.ExtensionArray.ravel,\ -pandas.api.extensions.ExtensionArray.take,\ -pandas.api.extensions.ExtensionArray.tolist,\ -pandas.api.extensions.ExtensionArray.unique,\ -pandas.api.interchange.from_dataframe,\ -pandas.api.types.is_hashable,\ -pandas.api.types.pandas_dtype,\ -pandas.api.types.union_categoricals,\ -pandas.arrays.IntervalArray.contains,\ -pandas.arrays.IntervalArray.set_closed,\ -pandas.arrays.IntervalArray.to_tuples,\ -pandas.bdate_range,\ -pandas.core.groupby.DataFrameGroupBy.__iter__,\ -pandas.core.groupby.DataFrameGroupBy.agg,\ -pandas.core.groupby.DataFrameGroupBy.aggregate,\ -pandas.core.groupby.DataFrameGroupBy.apply,\ -pandas.core.groupby.DataFrameGroupBy.boxplot,\ -pandas.core.groupby.DataFrameGroupBy.cummax,\ -pandas.core.groupby.DataFrameGroupBy.cummin,\ -pandas.core.groupby.DataFrameGroupBy.cumprod,\ -pandas.core.groupby.DataFrameGroupBy.cumsum,\ -pandas.core.groupby.DataFrameGroupBy.filter,\ -pandas.core.groupby.DataFrameGroupBy.get_group,\ -pandas.core.groupby.DataFrameGroupBy.hist,\ -pandas.core.groupby.DataFrameGroupBy.mean,\ -pandas.core.groupby.DataFrameGroupBy.nunique,\ -pandas.core.groupby.DataFrameGroupBy.rank,\ -pandas.core.groupby.DataFrameGroupBy.resample,\ -pandas.core.groupby.DataFrameGroupBy.skew,\ -pandas.core.groupby.DataFrameGroupBy.transform,\ -pandas.core.groupby.SeriesGroupBy.__iter__,\ -pandas.core.groupby.SeriesGroupBy.agg,\ -pandas.core.groupby.SeriesGroupBy.aggregate,\ -pandas.core.groupby.SeriesGroupBy.apply,\ -pandas.core.groupby.SeriesGroupBy.cummax,\ -pandas.core.groupby.SeriesGroupBy.cummin,\ -pandas.core.groupby.SeriesGroupBy.cumprod,\ -pandas.core.groupby.SeriesGroupBy.cumsum,\ -pandas.core.groupby.SeriesGroupBy.filter,\ -pandas.core.groupby.SeriesGroupBy.get_group,\ -pandas.core.groupby.SeriesGroupBy.mean,\ -pandas.core.groupby.SeriesGroupBy.rank,\ -pandas.core.groupby.SeriesGroupBy.resample,\ -pandas.core.groupby.SeriesGroupBy.skew,\ -pandas.core.groupby.SeriesGroupBy.transform,\ -pandas.core.resample.Resampler.__iter__,\ -pandas.core.resample.Resampler.ffill,\ -pandas.core.resample.Resampler.get_group,\ -pandas.core.resample.Resampler.max,\ -pandas.core.resample.Resampler.min,\ -pandas.core.resample.Resampler.transform,\ -pandas.date_range,\ -pandas.interval_range,\ -pandas.io.formats.style.Styler.apply,\ -pandas.io.formats.style.Styler.apply_index,\ -pandas.io.formats.style.Styler.background_gradient,\ -pandas.io.formats.style.Styler.bar,\ -pandas.io.formats.style.Styler.concat,\ -pandas.io.formats.style.Styler.export,\ -pandas.io.formats.style.Styler.format,\ -pandas.io.formats.style.Styler.format_index,\ -pandas.io.formats.style.Styler.hide,\ -pandas.io.formats.style.Styler.highlight_between,\ -pandas.io.formats.style.Styler.highlight_max,\ -pandas.io.formats.style.Styler.highlight_min,\ -pandas.io.formats.style.Styler.highlight_null,\ -pandas.io.formats.style.Styler.highlight_quantile,\ -pandas.io.formats.style.Styler.map,\ -pandas.io.formats.style.Styler.map_index,\ -pandas.io.formats.style.Styler.relabel_index,\ -pandas.io.formats.style.Styler.set_caption,\ -pandas.io.formats.style.Styler.set_properties,\ -pandas.io.formats.style.Styler.set_sticky,\ -pandas.io.formats.style.Styler.set_table_attributes,\ -pandas.io.formats.style.Styler.set_table_styles,\ -pandas.io.formats.style.Styler.set_td_classes,\ -pandas.io.formats.style.Styler.set_tooltips,\ -pandas.io.formats.style.Styler.set_uuid,\ -pandas.io.formats.style.Styler.text_gradient,\ -pandas.io.formats.style.Styler.use,\ -pandas.io.json.build_table_schema,\ -pandas.io.stata.StataReader.value_labels,\ -pandas.io.stata.StataReader.variable_labels,\ -pandas.json_normalize,\ -pandas.merge_asof,\ -pandas.period_range,\ -pandas.plotting.andrews_curves,\ -pandas.plotting.autocorrelation_plot,\ -pandas.plotting.lag_plot,\ -pandas.plotting.parallel_coordinates,\ -pandas.plotting.radviz,\ -pandas.plotting.table,\ -pandas.set_eng_float_format # There should be no backslash in the final line, please keep this comment in the last ignored function -) - ##### - # end of RT03 group - ##### - PARAMETERS+=(--for_error_ignore_functions SA01 \ -pandas.Categorical.__array__,\ -pandas.Categorical.codes,\ -pandas.Categorical.dtype,\ -pandas.Categorical.from_codes,\ -pandas.Categorical.ordered,\ -pandas.CategoricalDtype.categories,\ -pandas.CategoricalDtype.ordered,\ -pandas.CategoricalIndex.codes,\ -pandas.CategoricalIndex.ordered,\ -pandas.DataFrame.__dataframe__,\ -pandas.DataFrame.__iter__,\ -pandas.DataFrame.assign,\ -pandas.DataFrame.axes,\ -pandas.DataFrame.backfill,\ -pandas.DataFrame.bfill,\ -pandas.DataFrame.columns,\ -pandas.DataFrame.copy,\ -pandas.DataFrame.droplevel,\ -pandas.DataFrame.dtypes,\ -pandas.DataFrame.ffill,\ -pandas.DataFrame.first_valid_index,\ -pandas.DataFrame.get,\ -pandas.DataFrame.keys,\ -pandas.DataFrame.kurt,\ -pandas.DataFrame.kurtosis,\ -pandas.DataFrame.last_valid_index,\ -pandas.DataFrame.mean,\ -pandas.DataFrame.median,\ -pandas.DataFrame.pad,\ -pandas.DataFrame.plot,\ -pandas.DataFrame.pop,\ -pandas.DataFrame.reorder_levels,\ -pandas.DataFrame.sem,\ -pandas.DataFrame.skew,\ -pandas.DataFrame.sparse,\ -pandas.DataFrame.sparse.density,\ -pandas.DataFrame.sparse.from_spmatrix,\ -pandas.DataFrame.sparse.to_coo,\ -pandas.DataFrame.sparse.to_dense,\ -pandas.DataFrame.std,\ -pandas.DataFrame.swapaxes,\ -pandas.DataFrame.swaplevel,\ -pandas.DataFrame.to_feather,\ -pandas.DataFrame.to_markdown,\ -pandas.DataFrame.to_period,\ -pandas.DataFrame.to_timestamp,\ -pandas.DataFrame.tz_convert,\ -pandas.DataFrame.tz_localize,\ -pandas.DataFrame.var,\ -pandas.DatetimeIndex.ceil,\ -pandas.DatetimeIndex.date,\ -pandas.DatetimeIndex.day,\ -pandas.DatetimeIndex.day_name,\ -pandas.DatetimeIndex.day_of_year,\ -pandas.DatetimeIndex.dayofyear,\ -pandas.DatetimeIndex.floor,\ -pandas.DatetimeIndex.freqstr,\ -pandas.DatetimeIndex.hour,\ -pandas.DatetimeIndex.inferred_freq,\ -pandas.DatetimeIndex.is_leap_year,\ -pandas.DatetimeIndex.microsecond,\ -pandas.DatetimeIndex.minute,\ -pandas.DatetimeIndex.month,\ -pandas.DatetimeIndex.month_name,\ -pandas.DatetimeIndex.nanosecond,\ -pandas.DatetimeIndex.quarter,\ -pandas.DatetimeIndex.round,\ -pandas.DatetimeIndex.second,\ -pandas.DatetimeIndex.snap,\ -pandas.DatetimeIndex.time,\ -pandas.DatetimeIndex.timetz,\ -pandas.DatetimeIndex.to_pydatetime,\ -pandas.DatetimeIndex.tz,\ -pandas.DatetimeIndex.year,\ -pandas.DatetimeTZDtype,\ -pandas.DatetimeTZDtype.tz,\ -pandas.DatetimeTZDtype.unit,\ -pandas.ExcelFile,\ -pandas.ExcelFile.parse,\ -pandas.ExcelWriter,\ -pandas.Flags,\ -pandas.Float32Dtype,\ -pandas.Float64Dtype,\ -pandas.Grouper,\ -pandas.HDFStore.append,\ -pandas.HDFStore.get,\ -pandas.HDFStore.groups,\ -pandas.HDFStore.info,\ -pandas.HDFStore.keys,\ -pandas.HDFStore.put,\ -pandas.HDFStore.select,\ -pandas.HDFStore.walk,\ -pandas.Index.T,\ -pandas.Index.append,\ -pandas.Index.astype,\ -pandas.Index.copy,\ -pandas.Index.difference,\ -pandas.Index.drop,\ -pandas.Index.droplevel,\ -pandas.Index.dropna,\ -pandas.Index.dtype,\ -pandas.Index.equals,\ -pandas.Index.get_indexer,\ -pandas.Index.get_indexer_for,\ -pandas.Index.get_indexer_non_unique,\ -pandas.Index.get_loc,\ -pandas.Index.hasnans,\ -pandas.Index.identical,\ -pandas.Index.inferred_type,\ -pandas.Index.insert,\ -pandas.Index.intersection,\ -pandas.Index.item,\ -pandas.Index.join,\ -pandas.Index.map,\ -pandas.Index.name,\ -pandas.Index.nbytes,\ -pandas.Index.ndim,\ -pandas.Index.shape,\ -pandas.Index.size,\ -pandas.Index.slice_indexer,\ -pandas.Index.str,\ -pandas.Index.symmetric_difference,\ -pandas.Index.union,\ -pandas.Int16Dtype,\ -pandas.Int32Dtype,\ -pandas.Int64Dtype,\ -pandas.Int8Dtype,\ -pandas.Interval.closed,\ -pandas.Interval.left,\ -pandas.Interval.mid,\ -pandas.Interval.right,\ -pandas.IntervalDtype,\ -pandas.IntervalDtype.subtype,\ -pandas.IntervalIndex.closed,\ -pandas.IntervalIndex.get_indexer,\ -pandas.IntervalIndex.get_loc,\ -pandas.IntervalIndex.is_non_overlapping_monotonic,\ -pandas.IntervalIndex.set_closed,\ -pandas.IntervalIndex.to_tuples,\ -pandas.MultiIndex.append,\ -pandas.MultiIndex.copy,\ -pandas.MultiIndex.drop,\ -pandas.MultiIndex.droplevel,\ -pandas.MultiIndex.dtypes,\ -pandas.MultiIndex.get_indexer,\ -pandas.MultiIndex.get_level_values,\ -pandas.MultiIndex.levels,\ -pandas.MultiIndex.levshape,\ -pandas.MultiIndex.names,\ -pandas.MultiIndex.nlevels,\ -pandas.MultiIndex.remove_unused_levels,\ -pandas.MultiIndex.reorder_levels,\ -pandas.MultiIndex.set_codes,\ -pandas.MultiIndex.set_levels,\ -pandas.MultiIndex.sortlevel,\ -pandas.MultiIndex.truncate,\ -pandas.NA,\ -pandas.NaT,\ -pandas.NamedAgg,\ -pandas.Period,\ -pandas.Period.asfreq,\ -pandas.Period.freqstr,\ -pandas.Period.is_leap_year,\ -pandas.Period.month,\ -pandas.Period.now,\ -pandas.Period.quarter,\ -pandas.Period.strftime,\ -pandas.Period.to_timestamp,\ -pandas.Period.year,\ -pandas.PeriodDtype,\ -pandas.PeriodDtype.freq,\ -pandas.PeriodIndex.day,\ -pandas.PeriodIndex.day_of_week,\ -pandas.PeriodIndex.day_of_year,\ -pandas.PeriodIndex.dayofweek,\ -pandas.PeriodIndex.dayofyear,\ -pandas.PeriodIndex.days_in_month,\ -pandas.PeriodIndex.daysinmonth,\ -pandas.PeriodIndex.freqstr,\ -pandas.PeriodIndex.from_fields,\ -pandas.PeriodIndex.from_ordinals,\ -pandas.PeriodIndex.hour,\ -pandas.PeriodIndex.is_leap_year,\ -pandas.PeriodIndex.minute,\ -pandas.PeriodIndex.month,\ -pandas.PeriodIndex.quarter,\ -pandas.PeriodIndex.second,\ -pandas.PeriodIndex.to_timestamp,\ -pandas.PeriodIndex.week,\ -pandas.PeriodIndex.weekday,\ -pandas.PeriodIndex.weekofyear,\ -pandas.PeriodIndex.year,\ -pandas.RangeIndex.from_range,\ -pandas.RangeIndex.start,\ -pandas.RangeIndex.step,\ -pandas.RangeIndex.stop,\ -pandas.Series,\ -pandas.Series.T,\ -pandas.Series.__iter__,\ -pandas.Series.align,\ -pandas.Series.backfill,\ -pandas.Series.bfill,\ -pandas.Series.cat,\ -pandas.Series.cat.codes,\ -pandas.Series.cat.ordered,\ -pandas.Series.copy,\ -pandas.Series.droplevel,\ -pandas.Series.dt.ceil,\ -pandas.Series.dt.components,\ -pandas.Series.dt.date,\ -pandas.Series.dt.day,\ -pandas.Series.dt.day_name,\ -pandas.Series.dt.day_of_year,\ -pandas.Series.dt.dayofyear,\ -pandas.Series.dt.days,\ -pandas.Series.dt.days_in_month,\ -pandas.Series.dt.daysinmonth,\ -pandas.Series.dt.floor,\ -pandas.Series.dt.hour,\ -pandas.Series.dt.is_leap_year,\ -pandas.Series.dt.microsecond,\ -pandas.Series.dt.microseconds,\ -pandas.Series.dt.minute,\ -pandas.Series.dt.month,\ -pandas.Series.dt.month_name,\ -pandas.Series.dt.nanosecond,\ -pandas.Series.dt.nanoseconds,\ -pandas.Series.dt.quarter,\ -pandas.Series.dt.round,\ -pandas.Series.dt.second,\ -pandas.Series.dt.seconds,\ -pandas.Series.dt.time,\ -pandas.Series.dt.timetz,\ -pandas.Series.dt.tz,\ -pandas.Series.dt.year,\ -pandas.Series.dtype,\ -pandas.Series.dtypes,\ -pandas.Series.eq,\ -pandas.Series.ffill,\ -pandas.Series.first_valid_index,\ -pandas.Series.ge,\ -pandas.Series.get,\ -pandas.Series.gt,\ -pandas.Series.hasnans,\ -pandas.Series.is_monotonic_decreasing,\ -pandas.Series.is_monotonic_increasing,\ -pandas.Series.is_unique,\ -pandas.Series.item,\ -pandas.Series.keys,\ -pandas.Series.kurt,\ -pandas.Series.kurtosis,\ -pandas.Series.last_valid_index,\ -pandas.Series.le,\ -pandas.Series.list.__getitem__,\ -pandas.Series.list.flatten,\ -pandas.Series.list.len,\ -pandas.Series.lt,\ -pandas.Series.mean,\ -pandas.Series.median,\ -pandas.Series.mode,\ -pandas.Series.nbytes,\ -pandas.Series.ndim,\ -pandas.Series.ne,\ -pandas.Series.pad,\ -pandas.Series.plot,\ -pandas.Series.pop,\ -pandas.Series.reorder_levels,\ -pandas.Series.sem,\ -pandas.Series.shape,\ -pandas.Series.size,\ -pandas.Series.skew,\ -pandas.Series.sparse,\ -pandas.Series.sparse.density,\ -pandas.Series.sparse.fill_value,\ -pandas.Series.sparse.from_coo,\ -pandas.Series.sparse.npoints,\ -pandas.Series.sparse.sp_values,\ -pandas.Series.sparse.to_coo,\ -pandas.Series.std,\ -pandas.Series.str,\ -pandas.Series.str.center,\ -pandas.Series.str.decode,\ -pandas.Series.str.encode,\ -pandas.Series.str.get,\ -pandas.Series.str.ljust,\ -pandas.Series.str.normalize,\ -pandas.Series.str.repeat,\ -pandas.Series.str.replace,\ -pandas.Series.str.rjust,\ -pandas.Series.str.translate,\ -pandas.Series.str.wrap,\ -pandas.Series.struct.dtypes,\ -pandas.Series.swaplevel,\ -pandas.Series.to_dict,\ -pandas.Series.to_frame,\ -pandas.Series.to_markdown,\ -pandas.Series.to_period,\ -pandas.Series.to_string,\ -pandas.Series.to_timestamp,\ -pandas.Series.tz_convert,\ -pandas.Series.tz_localize,\ -pandas.Series.unstack,\ -pandas.Series.update,\ -pandas.Series.var,\ -pandas.SparseDtype,\ -pandas.Timedelta,\ -pandas.Timedelta.as_unit,\ -pandas.Timedelta.asm8,\ -pandas.Timedelta.ceil,\ -pandas.Timedelta.components,\ -pandas.Timedelta.days,\ -pandas.Timedelta.floor,\ -pandas.Timedelta.max,\ -pandas.Timedelta.min,\ -pandas.Timedelta.resolution,\ -pandas.Timedelta.round,\ -pandas.Timedelta.to_timedelta64,\ -pandas.Timedelta.total_seconds,\ -pandas.Timedelta.view,\ -pandas.TimedeltaIndex.as_unit,\ -pandas.TimedeltaIndex.ceil,\ -pandas.TimedeltaIndex.components,\ -pandas.TimedeltaIndex.days,\ -pandas.TimedeltaIndex.floor,\ -pandas.TimedeltaIndex.inferred_freq,\ -pandas.TimedeltaIndex.microseconds,\ -pandas.TimedeltaIndex.nanoseconds,\ -pandas.TimedeltaIndex.round,\ -pandas.TimedeltaIndex.seconds,\ -pandas.TimedeltaIndex.to_pytimedelta,\ -pandas.Timestamp,\ -pandas.Timestamp.as_unit,\ -pandas.Timestamp.asm8,\ -pandas.Timestamp.astimezone,\ -pandas.Timestamp.ceil,\ -pandas.Timestamp.combine,\ -pandas.Timestamp.ctime,\ -pandas.Timestamp.date,\ -pandas.Timestamp.day_name,\ -pandas.Timestamp.day_of_week,\ -pandas.Timestamp.day_of_year,\ -pandas.Timestamp.dayofweek,\ -pandas.Timestamp.dayofyear,\ -pandas.Timestamp.days_in_month,\ -pandas.Timestamp.daysinmonth,\ -pandas.Timestamp.dst,\ -pandas.Timestamp.floor,\ -pandas.Timestamp.fromordinal,\ -pandas.Timestamp.fromtimestamp,\ -pandas.Timestamp.is_leap_year,\ -pandas.Timestamp.isocalendar,\ -pandas.Timestamp.isoformat,\ -pandas.Timestamp.isoweekday,\ -pandas.Timestamp.max,\ -pandas.Timestamp.min,\ -pandas.Timestamp.month_name,\ -pandas.Timestamp.normalize,\ -pandas.Timestamp.now,\ -pandas.Timestamp.quarter,\ -pandas.Timestamp.replace,\ -pandas.Timestamp.resolution,\ -pandas.Timestamp.round,\ -pandas.Timestamp.strftime,\ -pandas.Timestamp.strptime,\ -pandas.Timestamp.time,\ -pandas.Timestamp.timestamp,\ -pandas.Timestamp.timetuple,\ -pandas.Timestamp.timetz,\ -pandas.Timestamp.to_datetime64,\ -pandas.Timestamp.to_julian_date,\ -pandas.Timestamp.to_period,\ -pandas.Timestamp.to_pydatetime,\ -pandas.Timestamp.today,\ -pandas.Timestamp.toordinal,\ -pandas.Timestamp.tz,\ -pandas.Timestamp.tz_convert,\ -pandas.Timestamp.tz_localize,\ -pandas.Timestamp.tzname,\ -pandas.Timestamp.unit,\ -pandas.Timestamp.utcfromtimestamp,\ -pandas.Timestamp.utcnow,\ -pandas.Timestamp.utcoffset,\ -pandas.Timestamp.utctimetuple,\ -pandas.Timestamp.week,\ -pandas.Timestamp.weekday,\ -pandas.Timestamp.weekofyear,\ -pandas.UInt16Dtype,\ -pandas.UInt32Dtype,\ -pandas.UInt64Dtype,\ -pandas.UInt8Dtype,\ -pandas.api.extensions.ExtensionArray,\ -pandas.api.extensions.ExtensionArray._accumulate,\ -pandas.api.extensions.ExtensionArray._concat_same_type,\ -pandas.api.extensions.ExtensionArray._formatter,\ -pandas.api.extensions.ExtensionArray._from_sequence,\ -pandas.api.extensions.ExtensionArray._from_sequence_of_strings,\ -pandas.api.extensions.ExtensionArray._hash_pandas_object,\ -pandas.api.extensions.ExtensionArray._pad_or_backfill,\ -pandas.api.extensions.ExtensionArray._reduce,\ -pandas.api.extensions.ExtensionArray._values_for_factorize,\ -pandas.api.extensions.ExtensionArray.astype,\ -pandas.api.extensions.ExtensionArray.copy,\ -pandas.api.extensions.ExtensionArray.dropna,\ -pandas.api.extensions.ExtensionArray.dtype,\ -pandas.api.extensions.ExtensionArray.duplicated,\ -pandas.api.extensions.ExtensionArray.equals,\ -pandas.api.extensions.ExtensionArray.fillna,\ -pandas.api.extensions.ExtensionArray.insert,\ -pandas.api.extensions.ExtensionArray.interpolate,\ -pandas.api.extensions.ExtensionArray.isin,\ -pandas.api.extensions.ExtensionArray.isna,\ -pandas.api.extensions.ExtensionArray.nbytes,\ -pandas.api.extensions.ExtensionArray.ndim,\ -pandas.api.extensions.ExtensionArray.ravel,\ -pandas.api.extensions.ExtensionArray.shape,\ -pandas.api.extensions.ExtensionArray.shift,\ -pandas.api.extensions.ExtensionArray.tolist,\ -pandas.api.extensions.ExtensionArray.unique,\ -pandas.api.extensions.ExtensionArray.view,\ -pandas.api.extensions.register_extension_dtype,\ -pandas.api.indexers.BaseIndexer,\ -pandas.api.indexers.FixedForwardWindowIndexer,\ -pandas.api.indexers.VariableOffsetWindowIndexer,\ -pandas.api.interchange.from_dataframe,\ -pandas.api.types.infer_dtype,\ -pandas.api.types.is_any_real_numeric_dtype,\ -pandas.api.types.is_bool,\ -pandas.api.types.is_bool_dtype,\ -pandas.api.types.is_categorical_dtype,\ -pandas.api.types.is_complex,\ -pandas.api.types.is_complex_dtype,\ -pandas.api.types.is_datetime64_any_dtype,\ -pandas.api.types.is_datetime64_dtype,\ -pandas.api.types.is_datetime64_ns_dtype,\ -pandas.api.types.is_datetime64tz_dtype,\ -pandas.api.types.is_dict_like,\ -pandas.api.types.is_extension_array_dtype,\ -pandas.api.types.is_file_like,\ -pandas.api.types.is_float,\ -pandas.api.types.is_float_dtype,\ -pandas.api.types.is_hashable,\ -pandas.api.types.is_int64_dtype,\ -pandas.api.types.is_integer,\ -pandas.api.types.is_integer_dtype,\ -pandas.api.types.is_interval_dtype,\ -pandas.api.types.is_iterator,\ -pandas.api.types.is_list_like,\ -pandas.api.types.is_named_tuple,\ -pandas.api.types.is_numeric_dtype,\ -pandas.api.types.is_object_dtype,\ -pandas.api.types.is_period_dtype,\ -pandas.api.types.is_re,\ -pandas.api.types.is_re_compilable,\ -pandas.api.types.is_scalar,\ -pandas.api.types.is_signed_integer_dtype,\ -pandas.api.types.is_sparse,\ -pandas.api.types.is_string_dtype,\ -pandas.api.types.is_timedelta64_dtype,\ -pandas.api.types.is_timedelta64_ns_dtype,\ -pandas.api.types.is_unsigned_integer_dtype,\ -pandas.api.types.pandas_dtype,\ -pandas.api.types.union_categoricals,\ -pandas.arrays.ArrowExtensionArray,\ -pandas.arrays.BooleanArray,\ -pandas.arrays.DatetimeArray,\ -pandas.arrays.FloatingArray,\ -pandas.arrays.IntegerArray,\ -pandas.arrays.IntervalArray.closed,\ -pandas.arrays.IntervalArray.is_non_overlapping_monotonic,\ -pandas.arrays.IntervalArray.left,\ -pandas.arrays.IntervalArray.length,\ -pandas.arrays.IntervalArray.mid,\ -pandas.arrays.IntervalArray.right,\ -pandas.arrays.IntervalArray.set_closed,\ -pandas.arrays.IntervalArray.to_tuples,\ -pandas.arrays.NumpyExtensionArray,\ -pandas.arrays.SparseArray,\ -pandas.arrays.TimedeltaArray,\ -pandas.bdate_range,\ -pandas.core.groupby.DataFrameGroupBy.__iter__,\ -pandas.core.groupby.DataFrameGroupBy.boxplot,\ -pandas.core.groupby.DataFrameGroupBy.filter,\ -pandas.core.groupby.DataFrameGroupBy.get_group,\ -pandas.core.groupby.DataFrameGroupBy.groups,\ -pandas.core.groupby.DataFrameGroupBy.indices,\ -pandas.core.groupby.DataFrameGroupBy.max,\ -pandas.core.groupby.DataFrameGroupBy.median,\ -pandas.core.groupby.DataFrameGroupBy.min,\ -pandas.core.groupby.DataFrameGroupBy.nunique,\ -pandas.core.groupby.DataFrameGroupBy.ohlc,\ -pandas.core.groupby.DataFrameGroupBy.plot,\ -pandas.core.groupby.DataFrameGroupBy.prod,\ -pandas.core.groupby.DataFrameGroupBy.sem,\ -pandas.core.groupby.DataFrameGroupBy.sum,\ -pandas.core.groupby.SeriesGroupBy.__iter__,\ -pandas.core.groupby.SeriesGroupBy.filter,\ -pandas.core.groupby.SeriesGroupBy.get_group,\ -pandas.core.groupby.SeriesGroupBy.groups,\ -pandas.core.groupby.SeriesGroupBy.indices,\ -pandas.core.groupby.SeriesGroupBy.is_monotonic_decreasing,\ -pandas.core.groupby.SeriesGroupBy.is_monotonic_increasing,\ -pandas.core.groupby.SeriesGroupBy.max,\ -pandas.core.groupby.SeriesGroupBy.median,\ -pandas.core.groupby.SeriesGroupBy.min,\ -pandas.core.groupby.SeriesGroupBy.nunique,\ -pandas.core.groupby.SeriesGroupBy.ohlc,\ -pandas.core.groupby.SeriesGroupBy.plot,\ -pandas.core.groupby.SeriesGroupBy.prod,\ -pandas.core.groupby.SeriesGroupBy.sem,\ -pandas.core.groupby.SeriesGroupBy.sum,\ -pandas.core.resample.Resampler.__iter__,\ -pandas.core.resample.Resampler.get_group,\ -pandas.core.resample.Resampler.groups,\ -pandas.core.resample.Resampler.indices,\ -pandas.core.resample.Resampler.max,\ -pandas.core.resample.Resampler.mean,\ -pandas.core.resample.Resampler.median,\ -pandas.core.resample.Resampler.min,\ -pandas.core.resample.Resampler.nunique,\ -pandas.core.resample.Resampler.ohlc,\ -pandas.core.resample.Resampler.prod,\ -pandas.core.resample.Resampler.sem,\ -pandas.core.resample.Resampler.std,\ -pandas.core.resample.Resampler.sum,\ -pandas.core.resample.Resampler.transform,\ -pandas.core.resample.Resampler.var,\ -pandas.describe_option,\ -pandas.errors.AbstractMethodError,\ -pandas.errors.AttributeConflictWarning,\ -pandas.errors.CSSWarning,\ -pandas.errors.CategoricalConversionWarning,\ -pandas.errors.ChainedAssignmentError,\ -pandas.errors.ClosedFileError,\ -pandas.errors.DataError,\ -pandas.errors.DuplicateLabelError,\ -pandas.errors.EmptyDataError,\ -pandas.errors.IntCastingNaNError,\ -pandas.errors.InvalidIndexError,\ -pandas.errors.InvalidVersion,\ -pandas.errors.MergeError,\ -pandas.errors.NullFrequencyError,\ -pandas.errors.NumExprClobberingError,\ -pandas.errors.NumbaUtilError,\ -pandas.errors.OptionError,\ -pandas.errors.OutOfBoundsDatetime,\ -pandas.errors.OutOfBoundsTimedelta,\ -pandas.errors.PerformanceWarning,\ -pandas.errors.PossibleDataLossError,\ -pandas.errors.PossiblePrecisionLoss,\ -pandas.errors.SpecificationError,\ -pandas.errors.UndefinedVariableError,\ -pandas.errors.UnsortedIndexError,\ -pandas.errors.UnsupportedFunctionCall,\ -pandas.errors.ValueLabelTypeMismatch,\ -pandas.get_option,\ -pandas.infer_freq,\ -pandas.io.formats.style.Styler.bar,\ -pandas.io.formats.style.Styler.clear,\ -pandas.io.formats.style.Styler.concat,\ -pandas.io.formats.style.Styler.from_custom_template,\ -pandas.io.formats.style.Styler.hide,\ -pandas.io.formats.style.Styler.set_caption,\ -pandas.io.formats.style.Styler.set_properties,\ -pandas.io.formats.style.Styler.set_sticky,\ -pandas.io.formats.style.Styler.set_tooltips,\ -pandas.io.formats.style.Styler.set_uuid,\ -pandas.io.formats.style.Styler.to_string,\ -pandas.io.json.build_table_schema,\ -pandas.io.stata.StataReader.data_label,\ -pandas.io.stata.StataReader.value_labels,\ -pandas.io.stata.StataReader.variable_labels,\ -pandas.io.stata.StataWriter.write_file,\ -pandas.json_normalize,\ -pandas.option_context,\ -pandas.period_range,\ -pandas.plotting.andrews_curves,\ -pandas.plotting.autocorrelation_plot,\ -pandas.plotting.lag_plot,\ -pandas.plotting.parallel_coordinates,\ -pandas.plotting.plot_params,\ -pandas.plotting.scatter_matrix,\ -pandas.plotting.table,\ -pandas.qcut,\ -pandas.read_feather,\ -pandas.read_orc,\ -pandas.read_sas,\ -pandas.read_spss,\ -pandas.reset_option,\ -pandas.set_eng_float_format,\ -pandas.set_option,\ -pandas.show_versions,\ -pandas.test,\ -pandas.testing.assert_extension_array_equal,\ -pandas.testing.assert_index_equal,\ -pandas.testing.assert_series_equal,\ -pandas.timedelta_range,\ -pandas.tseries.api.guess_datetime_format,\ -pandas.tseries.offsets.BDay,\ -pandas.tseries.offsets.BQuarterBegin.copy,\ -pandas.tseries.offsets.BQuarterBegin.freqstr,\ -pandas.tseries.offsets.BQuarterBegin.kwds,\ -pandas.tseries.offsets.BQuarterBegin.name,\ -pandas.tseries.offsets.BQuarterEnd.copy,\ -pandas.tseries.offsets.BQuarterEnd.freqstr,\ -pandas.tseries.offsets.BQuarterEnd.kwds,\ -pandas.tseries.offsets.BQuarterEnd.name,\ -pandas.tseries.offsets.BYearBegin.copy,\ -pandas.tseries.offsets.BYearBegin.freqstr,\ -pandas.tseries.offsets.BYearBegin.kwds,\ -pandas.tseries.offsets.BYearBegin.name,\ -pandas.tseries.offsets.BYearEnd.copy,\ -pandas.tseries.offsets.BYearEnd.freqstr,\ -pandas.tseries.offsets.BYearEnd.kwds,\ -pandas.tseries.offsets.BYearEnd.name,\ -pandas.tseries.offsets.BusinessDay,\ -pandas.tseries.offsets.BusinessDay.copy,\ -pandas.tseries.offsets.BusinessDay.freqstr,\ -pandas.tseries.offsets.BusinessDay.kwds,\ -pandas.tseries.offsets.BusinessDay.name,\ -pandas.tseries.offsets.BusinessHour,\ -pandas.tseries.offsets.BusinessHour.copy,\ -pandas.tseries.offsets.BusinessHour.freqstr,\ -pandas.tseries.offsets.BusinessHour.kwds,\ -pandas.tseries.offsets.BusinessHour.name,\ -pandas.tseries.offsets.BusinessMonthBegin.copy,\ -pandas.tseries.offsets.BusinessMonthBegin.freqstr,\ -pandas.tseries.offsets.BusinessMonthBegin.kwds,\ -pandas.tseries.offsets.BusinessMonthBegin.name,\ -pandas.tseries.offsets.BusinessMonthEnd.copy,\ -pandas.tseries.offsets.BusinessMonthEnd.freqstr,\ -pandas.tseries.offsets.BusinessMonthEnd.kwds,\ -pandas.tseries.offsets.BusinessMonthEnd.name,\ -pandas.tseries.offsets.CDay,\ -pandas.tseries.offsets.CustomBusinessDay,\ -pandas.tseries.offsets.CustomBusinessDay.copy,\ -pandas.tseries.offsets.CustomBusinessDay.freqstr,\ -pandas.tseries.offsets.CustomBusinessDay.kwds,\ -pandas.tseries.offsets.CustomBusinessDay.name,\ -pandas.tseries.offsets.CustomBusinessHour,\ -pandas.tseries.offsets.CustomBusinessHour.copy,\ -pandas.tseries.offsets.CustomBusinessHour.freqstr,\ -pandas.tseries.offsets.CustomBusinessHour.kwds,\ -pandas.tseries.offsets.CustomBusinessHour.name,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.copy,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.freqstr,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.is_on_offset,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.kwds,\ -pandas.tseries.offsets.CustomBusinessMonthBegin.name,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.copy,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.freqstr,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.is_on_offset,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.kwds,\ -pandas.tseries.offsets.CustomBusinessMonthEnd.name,\ -pandas.tseries.offsets.DateOffset.copy,\ -pandas.tseries.offsets.DateOffset.freqstr,\ -pandas.tseries.offsets.DateOffset.kwds,\ -pandas.tseries.offsets.DateOffset.name,\ -pandas.tseries.offsets.Day.copy,\ -pandas.tseries.offsets.Day.freqstr,\ -pandas.tseries.offsets.Day.kwds,\ -pandas.tseries.offsets.Day.name,\ -pandas.tseries.offsets.Day.nanos,\ -pandas.tseries.offsets.Easter.copy,\ -pandas.tseries.offsets.Easter.freqstr,\ -pandas.tseries.offsets.Easter.kwds,\ -pandas.tseries.offsets.Easter.name,\ -pandas.tseries.offsets.FY5253.copy,\ -pandas.tseries.offsets.FY5253.freqstr,\ -pandas.tseries.offsets.FY5253.kwds,\ -pandas.tseries.offsets.FY5253.name,\ -pandas.tseries.offsets.FY5253Quarter.copy,\ -pandas.tseries.offsets.FY5253Quarter.freqstr,\ -pandas.tseries.offsets.FY5253Quarter.kwds,\ -pandas.tseries.offsets.FY5253Quarter.name,\ -pandas.tseries.offsets.Hour.copy,\ -pandas.tseries.offsets.Hour.freqstr,\ -pandas.tseries.offsets.Hour.kwds,\ -pandas.tseries.offsets.Hour.name,\ -pandas.tseries.offsets.Hour.nanos,\ -pandas.tseries.offsets.LastWeekOfMonth,\ -pandas.tseries.offsets.LastWeekOfMonth.copy,\ -pandas.tseries.offsets.LastWeekOfMonth.freqstr,\ -pandas.tseries.offsets.LastWeekOfMonth.kwds,\ -pandas.tseries.offsets.LastWeekOfMonth.name,\ -pandas.tseries.offsets.Micro.copy,\ -pandas.tseries.offsets.Micro.freqstr,\ -pandas.tseries.offsets.Micro.kwds,\ -pandas.tseries.offsets.Micro.name,\ -pandas.tseries.offsets.Micro.nanos,\ -pandas.tseries.offsets.Milli.copy,\ -pandas.tseries.offsets.Milli.freqstr,\ -pandas.tseries.offsets.Milli.kwds,\ -pandas.tseries.offsets.Milli.name,\ -pandas.tseries.offsets.Milli.nanos,\ -pandas.tseries.offsets.Minute.copy,\ -pandas.tseries.offsets.Minute.freqstr,\ -pandas.tseries.offsets.Minute.kwds,\ -pandas.tseries.offsets.Minute.name,\ -pandas.tseries.offsets.Minute.nanos,\ -pandas.tseries.offsets.MonthBegin.copy,\ -pandas.tseries.offsets.MonthBegin.freqstr,\ -pandas.tseries.offsets.MonthBegin.kwds,\ -pandas.tseries.offsets.MonthBegin.name,\ -pandas.tseries.offsets.MonthEnd.copy,\ -pandas.tseries.offsets.MonthEnd.freqstr,\ -pandas.tseries.offsets.MonthEnd.kwds,\ -pandas.tseries.offsets.MonthEnd.name,\ -pandas.tseries.offsets.Nano.copy,\ -pandas.tseries.offsets.Nano.freqstr,\ -pandas.tseries.offsets.Nano.kwds,\ -pandas.tseries.offsets.Nano.name,\ -pandas.tseries.offsets.Nano.nanos,\ -pandas.tseries.offsets.QuarterBegin.copy,\ -pandas.tseries.offsets.QuarterBegin.freqstr,\ -pandas.tseries.offsets.QuarterBegin.kwds,\ -pandas.tseries.offsets.QuarterBegin.name,\ -pandas.tseries.offsets.QuarterEnd.copy,\ -pandas.tseries.offsets.QuarterEnd.freqstr,\ -pandas.tseries.offsets.QuarterEnd.kwds,\ -pandas.tseries.offsets.QuarterEnd.name,\ -pandas.tseries.offsets.Second.copy,\ -pandas.tseries.offsets.Second.freqstr,\ -pandas.tseries.offsets.Second.kwds,\ -pandas.tseries.offsets.Second.name,\ -pandas.tseries.offsets.Second.nanos,\ -pandas.tseries.offsets.SemiMonthBegin,\ -pandas.tseries.offsets.SemiMonthBegin.copy,\ -pandas.tseries.offsets.SemiMonthBegin.freqstr,\ -pandas.tseries.offsets.SemiMonthBegin.kwds,\ -pandas.tseries.offsets.SemiMonthBegin.name,\ -pandas.tseries.offsets.SemiMonthEnd,\ -pandas.tseries.offsets.SemiMonthEnd.copy,\ -pandas.tseries.offsets.SemiMonthEnd.freqstr,\ -pandas.tseries.offsets.SemiMonthEnd.kwds,\ -pandas.tseries.offsets.SemiMonthEnd.name,\ -pandas.tseries.offsets.Tick.copy,\ -pandas.tseries.offsets.Tick.freqstr,\ -pandas.tseries.offsets.Tick.kwds,\ -pandas.tseries.offsets.Tick.name,\ -pandas.tseries.offsets.Tick.nanos,\ -pandas.tseries.offsets.Week.copy,\ -pandas.tseries.offsets.Week.freqstr,\ -pandas.tseries.offsets.Week.kwds,\ -pandas.tseries.offsets.Week.name,\ -pandas.tseries.offsets.WeekOfMonth,\ -pandas.tseries.offsets.WeekOfMonth.copy,\ -pandas.tseries.offsets.WeekOfMonth.freqstr,\ -pandas.tseries.offsets.WeekOfMonth.kwds,\ -pandas.tseries.offsets.WeekOfMonth.name,\ -pandas.tseries.offsets.YearBegin.copy,\ -pandas.tseries.offsets.YearBegin.freqstr,\ -pandas.tseries.offsets.YearBegin.kwds,\ -pandas.tseries.offsets.YearBegin.name,\ -pandas.tseries.offsets.YearEnd.copy,\ -pandas.tseries.offsets.YearEnd.freqstr,\ -pandas.tseries.offsets.YearEnd.kwds,\ -pandas.tseries.offsets.YearEnd.name,\ -pandas.util.hash_array,\ -pandas.util.hash_pandas_object # There should be no backslash in the final line, please keep this comment in the last ignored function -) - ##### - # end of SA01 group - ##### $BASE_DIR/scripts/validate_docstrings.py ${PARAMETERS[@]} RET=$(($RET + $?)) ; diff --git a/scripts/tests/test_validate_docstrings.py b/scripts/tests/test_validate_docstrings.py index 479c60511f228..73bfb12316dc5 100644 --- a/scripts/tests/test_validate_docstrings.py +++ b/scripts/tests/test_validate_docstrings.py @@ -218,7 +218,7 @@ def test_validate_all_ignore_deprecated(self, monkeypatch) -> None: result = validate_docstrings.validate_all(prefix=None, ignore_deprecated=True) assert len(result) == 0 - def test_validate_all_for_error_ignore_functions(self, monkeypatch): + def test_validate_all_ignore_errors(self, monkeypatch): monkeypatch.setattr( validate_docstrings, "pandas_validate", @@ -260,14 +260,18 @@ def test_validate_all_for_error_ignore_functions(self, monkeypatch): prefix=None, errors=["ER01", "ER02"], ignore_deprecated=False, - for_error_ignore_functions={"ER01": ["pandas.DataFrame.align"]} + ignore_errors={ + "pandas.DataFrame.align": ["ER01"], + # ignoring an error that is not requested should be of no effect + "pandas.Index.all": ["ER03"] + } ) exit_status = validate_docstrings.print_validate_all_results( output_format="default", prefix=None, errors=["ER01", "ER02"], ignore_deprecated=False, - for_error_ignore_functions=None + ignore_errors=None ) # we have 2 error codes activated out of the 3 available in the validate results @@ -397,7 +401,7 @@ def test_exit_status_for_main(self, monkeypatch) -> None: output_format="default", errors=[], ignore_deprecated=False, - for_error_ignore_functions=None, + ignore_errors=None, ) assert exit_status == 0 @@ -428,7 +432,7 @@ def test_exit_status_errors_for_validate_all(self, monkeypatch) -> None: output_format="default", errors=[], ignore_deprecated=False, - for_error_ignore_functions=None, + ignore_errors=None, ) assert exit_status == 5 @@ -447,7 +451,7 @@ def test_no_exit_status_noerrors_for_validate_all(self, monkeypatch) -> None: prefix=None, errors=[], ignore_deprecated=False, - for_error_ignore_functions=None, + ignore_errors=None, ) assert exit_status == 0 @@ -472,7 +476,7 @@ def test_exit_status_for_validate_all_json(self, monkeypatch) -> None: prefix=None, errors=[], ignore_deprecated=False, - for_error_ignore_functions=None, + ignore_errors=None, ) assert exit_status == 0 @@ -517,7 +521,7 @@ def test_errors_param_filters_errors(self, monkeypatch) -> None: prefix=None, errors=["ER01"], ignore_deprecated=False, - for_error_ignore_functions=None, + ignore_errors=None, ) assert exit_status == 3 @@ -527,6 +531,6 @@ def test_errors_param_filters_errors(self, monkeypatch) -> None: output_format="default", errors=["ER03"], ignore_deprecated=False, - for_error_ignore_functions=None, + ignore_errors=None, ) assert exit_status == 1 diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 35575e12639a0..25b5ac5f5f487 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -342,12 +342,12 @@ def print_validate_all_results( prefix: str | None, errors: list[str] | None, ignore_deprecated: bool, - for_error_ignore_functions: dict[str, list[str]] | None, + ignore_errors: dict[str, list[str]] | None, ): if output_format not in ("default", "json", "actions"): raise ValueError(f'Unknown output_format "{output_format}"') - if for_error_ignore_functions is None: - for_error_ignore_functions = {} + if ignore_errors is None: + ignore_errors = {} result = validate_all(prefix, ignore_deprecated) @@ -359,10 +359,9 @@ def print_validate_all_results( exit_status = 0 for func_name, res in result.items(): for err_code, err_desc in res["errors"]: - ignore_functions = for_error_ignore_functions.get(err_code, []) - if errors and err_code not in errors: - continue - elif func_name in ignore_functions: + is_not_requested_error = errors and err_code not in errors + is_ignored_error = err_code in ignore_errors.get(func_name, []) + if is_not_requested_error or is_ignored_error: continue sys.stdout.write( @@ -415,32 +414,22 @@ def main( prefix, errors, ignore_deprecated, - for_error_ignore_functions + ignore_errors ): """ Main entry point. Call the validation for one or for all docstrings. """ - if errors is None: - errors = [] - if for_error_ignore_functions is None: - for_error_ignore_functions = {} - partial_validation_errors = for_error_ignore_functions.keys() - errors = [error for error in errors if error not in partial_validation_errors] - - msg = [] if func_name is None: - if errors: - error_str = ", ".join(errors) - msg.append(f"Validate docstrings ({error_str})\n") - if partial_validation_errors: - error_str = ", ".join(partial_validation_errors) - msg.append(f"Partially validate docstrings ({error_str})\n") + error_str = ", ".join(errors) + msg = f"Validate docstrings ({error_str})\n" else: - msg.append(f"Validate docstring in function {func_name}\n") - msg = "and\n".join(msg) + msg = f"Validate docstring in function {func_name}\n" sys.stdout.write(msg) validate_error_codes(errors) + if ignore_errors is not None: + for error_codes in ignore_errors.values(): + validate_error_codes(error_codes) if func_name is None: exit_status = print_validate_all_results( @@ -448,7 +437,7 @@ def main( prefix, errors, ignore_deprecated, - for_error_ignore_functions + ignore_errors ) else: print_validate_one_results(func_name) @@ -502,22 +491,36 @@ def main( "all docstrings", ) argparser.add_argument( - "--for_error_ignore_functions", + "--ignore_errors", action="append", nargs=2, - metavar=("error_code", "functions"), - help="error code for which comma separated list " - "of functions should not be validated" - "(e.g. PR01 pandas.DataFrame.head). " - "Partial validation for more than one error code" + metavar=("function", "error_codes"), + help="function for which comma separated list " + "of error codes should not be validated" + "(e.g. pandas.DataFrame.head PR01,SA01). " + "Partial validation for more than one function" "can be achieved by repeating this parameter.", ) args = argparser.parse_args(sys.argv[1:]) args.errors = args.errors.split(",") if args.errors else None - args.for_error_ignore_functions = {error_code: functions.split(",") - for error_code, functions - in args.for_error_ignore_functions} + if args.ignore_errors: + args.ignore_errors = {function: error_codes.split(",") + for function, error_codes + in args.ignore_errors} + else: + args.ignore_errors = None + func_to_errors = {} + for error, funcs in args.ignore_errors.items(): + for func in funcs: + if func_to_errors.get(func, None) is None: + func_to_errors[func] = [] + func_to_errors[func].append(error) + param = " PARAMETERS+=(\\\n" + for func in sorted(func_to_errors.keys()): + errors = sorted(func_to_errors[func]) + param += f" --ignore_errors {func} {','.join(errors)}\\\n" + param += ")\n" sys.exit( main(args.function, @@ -525,6 +528,6 @@ def main( args.prefix, args.errors, args.ignore_deprecated, - args.for_error_ignore_functions + args.ignore_errors ) ) From a172c67bf7c2cc5c5264321fd00e5276b96ef047 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sat, 16 Mar 2024 23:22:58 +0100 Subject: [PATCH 17/23] remove cmd formatting code --- scripts/validate_docstrings.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 25b5ac5f5f487..b42deff66f546 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -492,6 +492,7 @@ def main( ) argparser.add_argument( "--ignore_errors", + default=None, action="append", nargs=2, metavar=("function", "error_codes"), @@ -508,19 +509,6 @@ def main( args.ignore_errors = {function: error_codes.split(",") for function, error_codes in args.ignore_errors} - else: - args.ignore_errors = None - func_to_errors = {} - for error, funcs in args.ignore_errors.items(): - for func in funcs: - if func_to_errors.get(func, None) is None: - func_to_errors[func] = [] - func_to_errors[func].append(error) - param = " PARAMETERS+=(\\\n" - for func in sorted(func_to_errors.keys()): - errors = sorted(func_to_errors[func]) - param += f" --ignore_errors {func} {','.join(errors)}\\\n" - param += ")\n" sys.exit( main(args.function, From a3c2a766231b9f2ba21bf7b847860aeaf0b0892b Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sun, 17 Mar 2024 02:28:18 +0100 Subject: [PATCH 18/23] fix validate pep8 --- scripts/tests/test_validate_docstrings.py | 1 - scripts/validate_docstrings.py | 135 +++++++++++++--------- 2 files changed, 83 insertions(+), 53 deletions(-) diff --git a/scripts/tests/test_validate_docstrings.py b/scripts/tests/test_validate_docstrings.py index a95357c130e41..9360de74dcbad 100644 --- a/scripts/tests/test_validate_docstrings.py +++ b/scripts/tests/test_validate_docstrings.py @@ -293,7 +293,6 @@ def test_validate_all_for_error_ignore_functions(self, monkeypatch): assert exit_status_ignore_func == exit_status - 1 - class TestApiItems: @property def api_doc(self): diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index dcfe24da5e5f7..dc6e6b0ac9394 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -148,12 +148,28 @@ def get_api_items(api_doc_fd): previous_line = line_stripped -def bulk_validate_pep8(docs: dict[str, PandasDocstring]) -> list[list]: - all_docs_error_messages = [] - temp_files = [] +def validate_pep8_for_examples( docs: list[PandasDocstring]) -> dict[str, list[tuple]]: + """ + Call the pep8 validation for docstrings with examples, and add the errors found. + + Parameters + ---------- + docs : list[PandasDocString] + List of docstrings to validate. - try: - for func_name, doc in docs.items(): + Returns + ------- + dict[str, list] + Dict of function names and the pep8 error messages found in their docstrings. + The errors messages are of the form + (error_code, message, line_number, col_number). + """ + if isinstance(docs, PandasDocstring): + docs = [docs] + + with tempfile.TemporaryDirectory() as temp_dir: + func_name_to_file_name = {} + for doc in docs: if not doc.examples: continue @@ -165,14 +181,16 @@ def bulk_validate_pep8(docs: dict[str, PandasDocstring]) -> list[list]: ) ) - temp_file = tempfile.NamedTemporaryFile(mode="w", encoding="utf-8", + temp_file = tempfile.NamedTemporaryFile(mode="w", + dir=temp_dir, + encoding="utf-8", delete=False) temp_file.write(content) temp_file.flush() - temp_files.append(temp_file) + func_name_to_file_name[doc.func_name] = temp_file.name - if not temp_files: # No docs with examples to process - return all_docs_error_messages + if not func_name_to_file_name: # No docs with examples to process + return {} cmd = [ sys.executable, @@ -182,35 +200,35 @@ def bulk_validate_pep8(docs: dict[str, PandasDocstring]) -> list[list]: "--max-line-length=88", "--ignore=E203,E3,W503,W504,E402,E731,E128,E124,E704", ] - # Extend cmd with names of all temporary files - cmd.extend([temp_file.name for temp_file in temp_files]) + cmd.extend(func_name_to_file_name.values()) response = subprocess.run(cmd, capture_output=True, check=False, text=True) - # Parsing output for each file - for temp_file in temp_files: - error_messages = [] - for output in ("stdout", "stderr"): - out = getattr(response, output).replace(temp_file.name, - "").strip( - "\n").splitlines() - if out: - error_messages.extend(out) - - # Parsing error messages for each document - doc_error_messages = [] - for error_message in error_messages: - line_number, col_number, error_code, message = error_message.split( - "\t", maxsplit=3) - doc_error_messages.append((error_code, message, - int(line_number) - 2, - int(col_number))) - all_docs_error_messages.append(doc_error_messages) - - finally: - for temp_file in temp_files: - temp_file.close() - os.unlink(temp_file.name) + all_docs_error_messages = {doc.func_name: [] for doc in docs} + for func_name, temp_file_name in func_name_to_file_name.items(): + # one output for each error, each error must be mapped to the func_name + for output in ("stdout", "stderr"): + out = getattr(response, output) + out = out.replace(temp_file_name, "").strip("\n").splitlines() + if out: + all_docs_error_messages[func_name].extend(out) + + for func_name, raw_error_messages in all_docs_error_messages.items(): + doc_error_messages = [] + for raw_error_message in raw_error_messages: + line_num, col_num, err_code, msg = raw_error_message.split("\t", maxsplit=3) + # Note: we subtract 2 from the line number because + # 'import numpy as np\nimport pandas as pd\n' + # is prepended to the docstrings. + doc_error_messages.append( + ( + err_code, + msg, + int(line_num) - 2, + int(col_num) + ) + ) + all_docs_error_messages[func_name] = doc_error_messages return all_docs_error_messages @@ -288,7 +306,13 @@ def non_hyphenated_array_like(self): return "array_like" in self.raw_doc -def pandas_validate(func_names: str | list[str]): +def pandas_validate_single_func(func_name: str) -> dict: + func_names = [func_name] + results = pandas_validate(func_names) + return results[func_name] + + +def pandas_validate(func_names: str | list[str]) -> dict[str, dict]: """ Call the numpydoc validation, and add the errors specific to pandas. @@ -299,19 +323,23 @@ def pandas_validate(func_names: str | list[str]): Returns ------- - dict - Information about the docstrings and the errors found. + dict[str, dict] + Information about the docstrings and the errors found for each function. """ if isinstance(func_names, str): func_names = [func_names] - results = {} - docs = {} + + docs_to_results = {} for func_name in func_names: func_obj = Validator._load_obj(func_name) # Some objects are instances, e.g. IndexSlice, which numpydoc can't validate doc_obj = get_doc_object(func_obj, doc=func_obj.__doc__) doc = PandasDocstring(func_name, doc_obj) result = validate(doc_obj) + docs_to_results[doc] = result + + # add errors not from examples to the result + for doc, result in docs_to_results.items(): mentioned_errs = doc.mentioned_private_classes if mentioned_errs: result["errors"].append( @@ -331,35 +359,38 @@ def pandas_validate(func_names: str | list[str]): if rel_name.startswith("pandas.") ) + if doc.non_hyphenated_array_like(): + result["errors"].append(pandas_error("PD01")) + result["examples_errs"] = "" - results[func_name] = result - docs[func_name] = doc - for func_name, doc in docs.items(): + pep8_errors = validate_pep8_for_examples(list(docs_to_results.keys())) + + for doc, result in docs_to_results.items(): if not doc.examples: continue - for error_code, error_message, line_number, col_number in doc.validate_pep8(): - results[func_name]["errors"].append( + for err_code, err_msg, line_number, col_number in pep8_errors[doc.func_name]: + result["errors"].append( pandas_error( "EX03", - error_code=error_code, - error_message=error_message, + error_code=err_code, + error_message=err_msg, line_number=line_number, col_number=col_number, ) ) examples_source_code = "".join(doc.examples_source_code) - results[func_name]["errors"].extend( + result["errors"].extend( pandas_error("EX04", imported_library=wrong_import) for wrong_import in ("numpy", "pandas") if f"import {wrong_import}" in examples_source_code ) - if doc.non_hyphenated_array_like(): - results[func_name]["errors"].append(pandas_error("PD01")) - plt.close("all") - return results + validation_results = {doc.func_name: result + for doc, result + in docs_to_results.items()} + return validation_results def validate_all(prefix, ignore_deprecated=False): From 3e315c72e75f7d3196d179cf928a674ebf7861b9 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sun, 17 Mar 2024 02:37:04 +0100 Subject: [PATCH 19/23] add comment --- ci/code_checks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/code_checks.sh b/ci/code_checks.sh index 24773f9eaa076..ff31e082b3699 100755 --- a/ci/code_checks.sh +++ b/ci/code_checks.sh @@ -1291,7 +1291,7 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then --ignore_errors pandas.tseries.offsets.YearEnd.rule_code GL08\ --ignore_errors pandas.unique PR07\ --ignore_errors pandas.util.hash_array PR07,SA01\ - --ignore_errors pandas.util.hash_pandas_object PR07,SA01 + --ignore_errors pandas.util.hash_pandas_object PR07,SA01 # There should be no backslash in the final line, please keep this comment in the last ignored function ) $BASE_DIR/scripts/validate_docstrings.py ${PARAMETERS[@]} RET=$(($RET + $?)) ; From e116dc4233d6cb7c233f51185c236eebeb450b7e Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sun, 17 Mar 2024 03:02:05 +0100 Subject: [PATCH 20/23] remove old validate_pep8 --- scripts/validate_docstrings.py | 53 ++-------------------------------- 1 file changed, 2 insertions(+), 51 deletions(-) diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index dc6e6b0ac9394..3c4f295d7d9d0 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -148,7 +148,7 @@ def get_api_items(api_doc_fd): previous_line = line_stripped -def validate_pep8_for_examples( docs: list[PandasDocstring]) -> dict[str, list[tuple]]: +def validate_pep8_for_examples(docs: list[PandasDocstring]) -> dict[str, list[tuple]]: """ Call the pep8 validation for docstrings with examples, and add the errors found. @@ -253,55 +253,6 @@ def examples_source_code(self): lines = doctest.DocTestParser().get_examples(self.raw_doc) return [line.source for line in lines] - def validate_pep8(self): - if not self.examples: - return - - # F401 is needed to not generate flake8 errors in examples - # that do not user numpy or pandas - content = "".join( - ( - "import numpy as np # noqa: F401\n", - "import pandas as pd # noqa: F401\n", - *self.examples_source_code, - ) - ) - - error_messages = [] - - file = tempfile.NamedTemporaryFile(mode="w", encoding="utf-8", delete=False) - try: - file.write(content) - file.flush() - cmd = [ - sys.executable, - "-m", - "flake8", - "--format=%(row)d\t%(col)d\t%(code)s\t%(text)s", - "--max-line-length=88", - "--ignore=E203,E3,W503,W504,E402,E731,E128,E124,E704", - file.name, - ] - response = subprocess.run(cmd, capture_output=True, check=False, text=True) - for output in ("stdout", "stderr"): - out = getattr(response, output) - out = out.replace(file.name, "") - messages = out.strip("\n").splitlines() - if messages: - error_messages.extend(messages) - finally: - file.close() - os.unlink(file.name) - - for error_message in error_messages: - line_number, col_number, error_code, message = error_message.split( - "\t", maxsplit=3 - ) - # Note: we subtract 2 from the line number because - # 'import numpy as np\nimport pandas as pd\n' - # is prepended to the docstrings. - yield error_code, message, int(line_number) - 2, int(col_number) - def non_hyphenated_array_like(self): return "array_like" in self.raw_doc @@ -509,7 +460,7 @@ def header(title, width=80, char="#") -> str: if result["examples_errs"]: sys.stderr.write(header("Doctests")) - sys.stderr.write(result["examples_errs"]) + sys.stderr.write(str(result["examples_errs"])) def validate_error_codes(errors): From a958037653441e48e42fbef599296bd4d09581fb Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Sun, 17 Mar 2024 03:07:56 +0100 Subject: [PATCH 21/23] fix line cont char --- ci/code_checks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/code_checks.sh b/ci/code_checks.sh index dc0afea8a8102..4b8e632f3246c 100755 --- a/ci/code_checks.sh +++ b/ci/code_checks.sh @@ -339,7 +339,7 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then --ignore_errors pandas.Series.copy SA01\ --ignore_errors pandas.Series.div PR07\ --ignore_errors pandas.Series.droplevel SA01\ - --ignore_errors pandas.Series.dt PR01\`# Accessors are implemented as classes, but we do not document the Parameters section` \ + --ignore_errors pandas.Series.dt PR01`# Accessors are implemented as classes, but we do not document the Parameters section` \ --ignore_errors pandas.Series.dt.as_unit GL08,PR01,PR02\ --ignore_errors pandas.Series.dt.ceil PR01,PR02,SA01\ --ignore_errors pandas.Series.dt.components SA01\ From 4c5c859dff35e8075077efd9d336fa9e8c3484b4 Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Mon, 18 Mar 2024 00:18:55 +0100 Subject: [PATCH 22/23] remove examples_errs; clean up code --- scripts/tests/test_validate_docstrings.py | 6 +- scripts/validate_docstrings.py | 165 +++++++++++----------- 2 files changed, 87 insertions(+), 84 deletions(-) diff --git a/scripts/tests/test_validate_docstrings.py b/scripts/tests/test_validate_docstrings.py index 46376530c77e8..ca76cf6934e32 100644 --- a/scripts/tests/test_validate_docstrings.py +++ b/scripts/tests/test_validate_docstrings.py @@ -213,7 +213,6 @@ def test_validate_all_ignore_deprecated(self, monkeypatch) -> None: ("ER03", "err desc"), ], "warnings": [], - "examples_errors": "", "deprecated": True, } monkeypatch.setattr( @@ -237,7 +236,6 @@ def test_validate_all_ignore_errors(self, monkeypatch): ("ER03", "err desc") ], "warnings": [], - "examples_errors": "", "deprecated": True, "file": "file1", "file_line": "file_line1" @@ -387,7 +385,8 @@ class TestPandasDocstringClass: ) def test_encode_content_write_to_file(self, name) -> None: # GH25466 - docstr = validate_docstrings.PandasDocstring(name).validate_pep8() + docstr = validate_docstrings.PandasDocstring(name) + docstr = validate_docstrings.validate_pep8_for_examples(docstr)[docstr] # the list of pep8 errors should be empty assert not list(docstr) @@ -404,7 +403,6 @@ def test_exit_status_for_main(self, monkeypatch) -> None: ("ER02", "err desc"), ("ER03", "err desc"), ], - "examples_errs": "", }, ) exit_status = validate_docstrings.main( diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 3c4f295d7d9d0..95e7fe56b9e24 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -56,14 +56,14 @@ PRIVATE_CLASSES = ["NDFrame", "IndexOpsMixin"] ERROR_MSGS = { "GL04": "Private classes ({mentioned_private_classes}) should not be " - "mentioned in public docstrings", + "mentioned in public docstrings", "PD01": "Use 'array-like' rather than 'array_like' in docstrings.", "SA05": "{reference_name} in `See Also` section does not need `pandas` " - "prefix, use {right_reference} instead.", + "prefix, use {right_reference} instead.", "EX03": "flake8 error: line {line_number}, col {col_number}: {error_code} " - "{error_message}", + "{error_message}", "EX04": "Do not import {imported_library}, as it is imported " - "automatically for the examples (numpy as np, pandas as pd)", + "automatically for the examples (numpy as np, pandas as pd)", } @@ -148,9 +148,10 @@ def get_api_items(api_doc_fd): previous_line = line_stripped -def validate_pep8_for_examples(docs: list[PandasDocstring]) -> dict[str, list[tuple]]: +def validate_pep8_for_examples(docs: list[PandasDocstring] | PandasDocstring + ) -> dict[PandasDocstring, list[tuple]]: """ - Call the pep8 validation for docstrings with examples, and add the errors found. + Call the pep8 validation for docstrings with examples and add the found errors. Parameters ---------- @@ -159,7 +160,7 @@ def validate_pep8_for_examples(docs: list[PandasDocstring]) -> dict[str, list[tu Returns ------- - dict[str, list] + dict[PandasDocstring, list] Dict of function names and the pep8 error messages found in their docstrings. The errors messages are of the form (error_code, message, line_number, col_number). @@ -168,11 +169,13 @@ def validate_pep8_for_examples(docs: list[PandasDocstring]) -> dict[str, list[tu docs = [docs] with tempfile.TemporaryDirectory() as temp_dir: - func_name_to_file_name = {} + doc_to_filename = {} for doc in docs: if not doc.examples: continue + # F401 is needed to not generate flake8 errors in examples + # that do not use numpy or pandas content = "".join( ( "import numpy as np # noqa: F401\n", @@ -187,9 +190,10 @@ def validate_pep8_for_examples(docs: list[PandasDocstring]) -> dict[str, list[tu delete=False) temp_file.write(content) temp_file.flush() - func_name_to_file_name[doc.func_name] = temp_file.name + doc_to_filename[doc] = temp_file.name - if not func_name_to_file_name: # No docs with examples to process + # No docs with examples to process + if not doc_to_filename: return {} cmd = [ @@ -200,20 +204,20 @@ def validate_pep8_for_examples(docs: list[PandasDocstring]) -> dict[str, list[tu "--max-line-length=88", "--ignore=E203,E3,W503,W504,E402,E731,E128,E124,E704", ] - cmd.extend(func_name_to_file_name.values()) + cmd.extend(doc_to_filename.values()) response = subprocess.run(cmd, capture_output=True, check=False, text=True) - all_docs_error_messages = {doc.func_name: [] for doc in docs} - for func_name, temp_file_name in func_name_to_file_name.items(): + all_docs_error_messages = {doc: [] for doc in docs} + for doc, temp_file_name in doc_to_filename.items(): # one output for each error, each error must be mapped to the func_name for output in ("stdout", "stderr"): out = getattr(response, output) out = out.replace(temp_file_name, "").strip("\n").splitlines() if out: - all_docs_error_messages[func_name].extend(out) + all_docs_error_messages[doc].extend(out) - for func_name, raw_error_messages in all_docs_error_messages.items(): + for doc, raw_error_messages in all_docs_error_messages.items(): doc_error_messages = [] for raw_error_message in raw_error_messages: line_num, col_num, err_code, msg = raw_error_message.split("\t", maxsplit=3) @@ -226,9 +230,14 @@ def validate_pep8_for_examples(docs: list[PandasDocstring]) -> dict[str, list[tu msg, int(line_num) - 2, int(col_num) - ) + ) ) - all_docs_error_messages[func_name] = doc_error_messages + all_docs_error_messages[doc] = doc_error_messages + + for doc in docs: + if doc.examples and doc not in all_docs_error_messages.keys(): + raise KeyError(f"Docstring\n###\n{doc}\n###\nhas examples but " + f"no pep8 validation results.") return all_docs_error_messages @@ -275,7 +284,7 @@ def pandas_validate(func_names: str | list[str]) -> dict[str, dict]: Returns ------- dict[str, dict] - Information about the docstrings and the errors found for each function. + For each function, information about the docstring and the errors found. """ if isinstance(func_names, str): func_names = [func_names] @@ -300,42 +309,38 @@ def pandas_validate(func_names: str | list[str]) -> dict[str, dict]: ) if doc.see_also: - result["errors"].extend( - pandas_error( - "SA05", - reference_name=rel_name, - right_reference=rel_name[len("pandas."):], - ) + see_also_prefix_errors = [ + pandas_error("SA05", + reference_name=rel_name, + right_reference=rel_name[len("pandas."):], + ) for rel_name in doc.see_also if rel_name.startswith("pandas.") - ) + ] + result["errors"].extend(see_also_prefix_errors) if doc.non_hyphenated_array_like(): result["errors"].append(pandas_error("PD01")) - result["examples_errs"] = "" - - pep8_errors = validate_pep8_for_examples(list(docs_to_results.keys())) - - for doc, result in docs_to_results.items(): - if not doc.examples: - continue - for err_code, err_msg, line_number, col_number in pep8_errors[doc.func_name]: - result["errors"].append( - pandas_error( - "EX03", - error_code=err_code, - error_message=err_msg, - line_number=line_number, - col_number=col_number, - ) - ) + pep8_results = validate_pep8_for_examples(list(docs_to_results.keys())) + + for doc, pep8_errors in pep8_results.items(): + result = docs_to_results[doc] + pep8_pandas_errors = [ + pandas_error( + "EX03", + error_code=err_code, + error_message=err_msg, + line_number=line_number, + col_number=col_number, + ) for err_code, err_msg, line_number, col_number in pep8_errors + ] + result["errors"].extend(pep8_pandas_errors) examples_source_code = "".join(doc.examples_source_code) - result["errors"].extend( - pandas_error("EX04", imported_library=wrong_import) - for wrong_import in ("numpy", "pandas") - if f"import {wrong_import}" in examples_source_code - ) + import_errors = [pandas_error("EX04", imported_library=wrong_import) + for wrong_import in ("numpy", "pandas") + if f"import {wrong_import}" in examples_source_code] + result["errors"].extend(import_errors) plt.close("all") validation_results = {doc.func_name: result @@ -366,8 +371,12 @@ def validate_all(prefix, ignore_deprecated=False): result = {} seen = {} - func_names = [func_name for func_name, _, _, _ in get_all_api_items() - if not prefix or prefix and func_name.startswith(prefix)] + def matches_prefix(func_name): + return func_name.startswith(prefix) if prefix else True + + func_names = [func_name for func_name, _, _, _ + in get_all_api_items() + if matches_prefix(func_name)] doc_infos = pandas_validate(func_names) for func_name, _, section, subsection in get_all_api_items(): @@ -401,11 +410,11 @@ def get_all_api_items(): def print_validate_all_results( - output_format: str, - prefix: str | None, - errors: list[str] | None, - ignore_deprecated: bool, - ignore_errors: dict[str, list[str]] | None, + output_format: str, + prefix: str | None, + errors: list[str] | None, + ignore_deprecated: bool, + ignore_errors: dict[str, list[str]] | None, ): if output_format not in ("default", "json", "actions"): raise ValueError(f'Unknown output_format "{output_format}"') @@ -458,10 +467,6 @@ def header(title, width=80, char="#") -> str: else: sys.stderr.write(f'Docstring for "{func_name}" correct. :)\n') - if result["examples_errs"]: - sys.stderr.write(header("Doctests")) - sys.stderr.write(str(result["examples_errs"])) - def validate_error_codes(errors): overlapped_errors = set(NUMPYDOC_ERROR_MSGS).intersection(set(ERROR_MSGS)) @@ -472,12 +477,12 @@ def validate_error_codes(errors): def main( - func_name, - output_format, - prefix, - errors, - ignore_deprecated, - ignore_errors + func_name, + output_format, + prefix, + errors, + ignore_deprecated, + ignore_errors ): """ Main entry point. Call the validation for one or for all docstrings. @@ -528,34 +533,34 @@ def main( default="default", choices=format_opts, help="format of the output when validating " - "multiple docstrings (ignored when validating one). " - "It can be {str(format_opts)[1:-1]}", + "multiple docstrings (ignored when validating one). " + "It can be {str(format_opts)[1:-1]}", ) argparser.add_argument( "--prefix", default=None, help="pattern for the " - "docstring names, in order to decide which ones " - 'will be validated. A prefix "pandas.Series.str."' - "will make the script validate all the docstrings " - "of methods starting by this pattern. It is " - "ignored if parameter function is provided", + "docstring names, in order to decide which ones " + 'will be validated. A prefix "pandas.Series.str."' + "will make the script validate all the docstrings " + "of methods starting by this pattern. It is " + "ignored if parameter function is provided", ) argparser.add_argument( "--errors", default=None, help="comma separated " - "list of error codes to validate. By default it " - "validates all errors (ignored when validating " - "a single docstring)", + "list of error codes to validate. By default it " + "validates all errors (ignored when validating " + "a single docstring)", ) argparser.add_argument( "--ignore_deprecated", default=False, action="store_true", help="if this flag is set, " - "deprecated objects are ignored when validating " - "all docstrings", + "deprecated objects are ignored when validating " + "all docstrings", ) argparser.add_argument( "--ignore_errors", @@ -564,10 +569,10 @@ def main( nargs=2, metavar=("function", "error_codes"), help="function for which comma separated list " - "of error codes should not be validated" - "(e.g. pandas.DataFrame.head PR01,SA01). " - "Partial validation for more than one function" - "can be achieved by repeating this parameter.", + "of error codes should not be validated" + "(e.g. pandas.DataFrame.head PR01,SA01). " + "Partial validation for more than one function" + "can be achieved by repeating this parameter.", ) args = argparser.parse_args(sys.argv[1:]) From 14e3915f21dc35fcdcc5ce198b35245fb51a68dd Mon Sep 17 00:00:00 2001 From: Philipp Hoffmann Date: Mon, 18 Mar 2024 01:10:18 +0100 Subject: [PATCH 23/23] fix prefix bug, add test, refactor tests --- scripts/tests/test_validate_docstrings.py | 165 +++++++++++----------- scripts/validate_docstrings.py | 77 +++++----- 2 files changed, 121 insertions(+), 121 deletions(-) diff --git a/scripts/tests/test_validate_docstrings.py b/scripts/tests/test_validate_docstrings.py index ca76cf6934e32..ed9b52557b28f 100644 --- a/scripts/tests/test_validate_docstrings.py +++ b/scripts/tests/test_validate_docstrings.py @@ -90,6 +90,69 @@ def leftover_files(self) -> None: """ +def _print_validate_all_base(monkeypatch, + prefix=None, + ignore_deprecated=False, + ignore_errors=None, + overwrite_api_items=True + ) -> tuple[int, int]: + dummy_docinfo = { + "docstring": "docstring1", + "errors": [ + ("ER01", "err desc"), + ("ER02", "err desc"), + ("ER03", "err desc") + ], + "warnings": [], + "deprecated": True, + "file": "file1", + "file_line": "file_line1" + } + monkeypatch.setattr( + validate_docstrings, + "pandas_validate", + lambda func_names: { + func_name: dummy_docinfo + for func_name in func_names}, + ) + if overwrite_api_items: + monkeypatch.setattr( + validate_docstrings, + "get_all_api_items", + lambda: [ + ( + "pandas.DataFrame.align", + "func", + "current_section", + "current_subsection", + ), + ( + "pandas.Index.all", + "func", + "current_section", + "current_subsection", + ), + ], + ) + + exit_status = validate_docstrings.print_validate_all_results( + output_format="default", + prefix=prefix, + errors=["ER01", "ER02"], + ignore_deprecated=ignore_deprecated, + ignore_errors=ignore_errors + ) + exit_status_reference = validate_docstrings.print_validate_all_results( + output_format="default", + prefix=None, + errors=["ER01", "ER02"], + ignore_deprecated=False, + ignore_errors=None + ) + + return exit_status_reference, exit_status + + class TestValidator: def _import_path(self, klass=None, func=None): """ @@ -204,91 +267,33 @@ def test_bad_docstrings(self, capsys, klass, func, msgs) -> None: for msg in msgs: assert msg in " ".join([err[1] for err in result["errors"]]) - def test_validate_all_ignore_deprecated(self, monkeypatch) -> None: - dummy_docinfo = { - "docstring": "docstring1", - "errors": [ - ("ER01", "err desc"), - ("ER02", "err desc"), - ("ER03", "err desc"), - ], - "warnings": [], - "deprecated": True, - } - monkeypatch.setattr( - validate_docstrings, - "pandas_validate", - lambda func_names: { - func_name: dummy_docinfo - for func_name in func_names - }, - ) - results = validate_docstrings.validate_all(prefix=None, ignore_deprecated=True) - for docinfo in results.values(): - assert len(docinfo) == 0 + def test_print_validate_all_ignore_deprecated(self, monkeypatch) -> None: + status, status_ignore_depr = _print_validate_all_base(monkeypatch, + ignore_deprecated=True, + overwrite_api_items=False) + assert status_ignore_depr == 0 + assert status > 100 + assert status % 2 == 0 - def test_validate_all_ignore_errors(self, monkeypatch): - dummy_docinfo = { - "docstring": "docstring1", - "errors": [ - ("ER01", "err desc"), - ("ER02", "err desc"), - ("ER03", "err desc") - ], - "warnings": [], - "deprecated": True, - "file": "file1", - "file_line": "file_line1" - } - monkeypatch.setattr( - validate_docstrings, - "pandas_validate", - lambda func_names: { - func_name: dummy_docinfo - for func_name in func_names}, - ) - monkeypatch.setattr( - validate_docstrings, - "get_all_api_items", - lambda: [ - ( - "pandas.DataFrame.align", - "func", - "current_section", - "current_subsection", - ), - ( - "pandas.Index.all", - "func", - "current_section", - "current_subsection", - ), - ], - ) + def test_validate_all_prefix(self, monkeypatch): + status, status_prefix = _print_validate_all_base(monkeypatch, + prefix="pandas.DataFrame") + # the two errors of pandas.Index shall not be counted + assert status_prefix == status - 2 - exit_status_ignore_func = validate_docstrings.print_validate_all_results( - output_format="default", - prefix=None, - errors=["ER01", "ER02"], - ignore_deprecated=False, - ignore_errors={ - "pandas.DataFrame.align": ["ER01"], - # ignoring an error that is not requested should be of no effect - "pandas.Index.all": ["ER03"] - } - ) - exit_status = validate_docstrings.print_validate_all_results( - output_format="default", - prefix=None, - errors=["ER01", "ER02"], - ignore_deprecated=False, - ignore_errors=None - ) + def test_validate_all_ignore_errors(self, monkeypatch): + ignore_errs = { + "pandas.DataFrame.align": ["ER01"], + # ignoring an error that is not requested should be of no effect + "pandas.Index.all": ["ER03"] + } + status, status_ignore_func = _print_validate_all_base(monkeypatch, + ignore_errors=ignore_errs) # we have 2 error codes activated out of the 3 available in the validate results # one run has a function to ignore, the other does not - assert exit_status == 2*2 - assert exit_status_ignore_func == exit_status - 1 + assert status == 2*2 + assert status_ignore_func == status - 1 class TestApiItems: diff --git a/scripts/validate_docstrings.py b/scripts/validate_docstrings.py index 95e7fe56b9e24..f117324a571c3 100755 --- a/scripts/validate_docstrings.py +++ b/scripts/validate_docstrings.py @@ -266,12 +266,6 @@ def non_hyphenated_array_like(self): return "array_like" in self.raw_doc -def pandas_validate_single_func(func_name: str) -> dict: - func_names = [func_name] - results = pandas_validate(func_names) - return results[func_name] - - def pandas_validate(func_names: str | list[str]) -> dict[str, dict]: """ Call the numpydoc validation, and add the errors specific to pandas. @@ -279,7 +273,7 @@ def pandas_validate(func_names: str | list[str]) -> dict[str, dict]: Parameters ---------- func_names : list[str] - List of name of the object of the docstrings to validate. + The names of the objects of the docstrings to validate. Returns ------- @@ -371,15 +365,16 @@ def validate_all(prefix, ignore_deprecated=False): result = {} seen = {} - def matches_prefix(func_name): - return func_name.startswith(prefix) if prefix else True + def matches_prefix(function_name): + return function_name.startswith(prefix) if prefix else True - func_names = [func_name for func_name, _, _, _ - in get_all_api_items() - if matches_prefix(func_name)] + api_items = [api_item for api_item + in get_all_api_items() + if matches_prefix(api_item[0])] + func_names = [api_item[0] for api_item in api_items] doc_infos = pandas_validate(func_names) - for func_name, _, section, subsection in get_all_api_items(): + for func_name, _, section, subsection in api_items: doc_info = doc_infos[func_name] if ignore_deprecated and doc_info["deprecated"]: continue @@ -410,12 +405,12 @@ def get_all_api_items(): def print_validate_all_results( - output_format: str, - prefix: str | None, - errors: list[str] | None, - ignore_deprecated: bool, - ignore_errors: dict[str, list[str]] | None, -): + output_format: str, + prefix: str | None, + errors: list[str] | None, + ignore_deprecated: bool, + ignore_errors: dict[str, list[str]] | None, +) -> int: if output_format not in ("default", "json", "actions"): raise ValueError(f'Unknown output_format "{output_format}"') if ignore_errors is None: @@ -477,12 +472,12 @@ def validate_error_codes(errors): def main( - func_name, - output_format, - prefix, - errors, - ignore_deprecated, - ignore_errors + func_name, + output_format, + prefix, + errors, + ignore_deprecated, + ignore_errors ): """ Main entry point. Call the validation for one or for all docstrings. @@ -533,34 +528,34 @@ def main( default="default", choices=format_opts, help="format of the output when validating " - "multiple docstrings (ignored when validating one). " - "It can be {str(format_opts)[1:-1]}", + "multiple docstrings (ignored when validating one). " + "It can be {str(format_opts)[1:-1]}", ) argparser.add_argument( "--prefix", default=None, help="pattern for the " - "docstring names, in order to decide which ones " - 'will be validated. A prefix "pandas.Series.str."' - "will make the script validate all the docstrings " - "of methods starting by this pattern. It is " - "ignored if parameter function is provided", + "docstring names, in order to decide which ones " + 'will be validated. A prefix "pandas.Series.str."' + "will make the script validate all the docstrings " + "of methods starting by this pattern. It is " + "ignored if parameter function is provided", ) argparser.add_argument( "--errors", default=None, help="comma separated " - "list of error codes to validate. By default it " - "validates all errors (ignored when validating " - "a single docstring)", + "list of error codes to validate. By default it " + "validates all errors (ignored when validating " + "a single docstring)", ) argparser.add_argument( "--ignore_deprecated", default=False, action="store_true", help="if this flag is set, " - "deprecated objects are ignored when validating " - "all docstrings", + "deprecated objects are ignored when validating " + "all docstrings", ) argparser.add_argument( "--ignore_errors", @@ -569,10 +564,10 @@ def main( nargs=2, metavar=("function", "error_codes"), help="function for which comma separated list " - "of error codes should not be validated" - "(e.g. pandas.DataFrame.head PR01,SA01). " - "Partial validation for more than one function" - "can be achieved by repeating this parameter.", + "of error codes should not be validated" + "(e.g. pandas.DataFrame.head PR01,SA01). " + "Partial validation for more than one function" + "can be achieved by repeating this parameter.", ) args = argparser.parse_args(sys.argv[1:])