From a19c844c354fb1d3d089233de1bafdecbdf869a2 Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Sat, 12 Oct 2019 23:52:25 +0200 Subject: [PATCH 01/12] CLN: fix mypy errors in pandas/tests/extension/test_numpy.py #28926 --- pandas/tests/extension/base/ops.py | 9 +++++---- setup.cfg | 3 --- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/pandas/tests/extension/base/ops.py b/pandas/tests/extension/base/ops.py index e35464964f432..cee45943e0976 100644 --- a/pandas/tests/extension/base/ops.py +++ b/pandas/tests/extension/base/ops.py @@ -1,4 +1,5 @@ import operator +from typing import Type, Union import pytest @@ -61,10 +62,10 @@ class BaseArithmeticOpsTests(BaseOpsUtil): * divmod_exc = TypeError """ - series_scalar_exc = TypeError - frame_scalar_exc = TypeError - series_array_exc = TypeError - divmod_exc = TypeError + series_scalar_exc = TypeError # type: Union[Type[Exception], None] + frame_scalar_exc = TypeError # type: Union[Type[Exception], None] + series_array_exc = TypeError # type: Union[Type[Exception], None] + divmod_exc = TypeError # type: Union[Type[Exception], None] def test_arith_series_with_scalar(self, data, all_arithmetic_operators): # series & scalar diff --git a/setup.cfg b/setup.cfg index 9c841b76761f5..4b14089ea9a63 100644 --- a/setup.cfg +++ b/setup.cfg @@ -166,9 +166,6 @@ ignore_errors=True [mypy-pandas.tests.extension.json.test_json] ignore_errors=True -[mypy-pandas.tests.extension.test_numpy] -ignore_errors=True - [mypy-pandas.tests.extension.test_sparse] ignore_errors=True From 28b71205821a5786c9e69aa241f95282f0036724 Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Sun, 13 Oct 2019 12:58:42 +0200 Subject: [PATCH 02/12] Applied suggestions, PR also fixes errors in test_sparse.py --- pandas/tests/extension/base/ops.py | 8 ++++---- setup.cfg | 3 --- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/pandas/tests/extension/base/ops.py b/pandas/tests/extension/base/ops.py index cee45943e0976..162a0e3b3058d 100644 --- a/pandas/tests/extension/base/ops.py +++ b/pandas/tests/extension/base/ops.py @@ -62,10 +62,10 @@ class BaseArithmeticOpsTests(BaseOpsUtil): * divmod_exc = TypeError """ - series_scalar_exc = TypeError # type: Union[Type[Exception], None] - frame_scalar_exc = TypeError # type: Union[Type[Exception], None] - series_array_exc = TypeError # type: Union[Type[Exception], None] - divmod_exc = TypeError # type: Union[Type[Exception], None] + series_scalar_exc = TypeError # type: Optional[Type[TypeError]] + frame_scalar_exc = TypeError # type: Optional[Type[TypeError]] + series_array_exc = TypeError # type: Optional[Type[TypeError]] + divmod_exc = TypeError # type: Optional[Type[TypeError]] def test_arith_series_with_scalar(self, data, all_arithmetic_operators): # series & scalar diff --git a/setup.cfg b/setup.cfg index 4b14089ea9a63..9af7215b1dc56 100644 --- a/setup.cfg +++ b/setup.cfg @@ -166,9 +166,6 @@ ignore_errors=True [mypy-pandas.tests.extension.json.test_json] ignore_errors=True -[mypy-pandas.tests.extension.test_sparse] -ignore_errors=True - [mypy-pandas.tests.frame.test_constructors] ignore_errors=True From 008fe48c8eae07dc9916aa003cdefec880e6d57b Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Sun, 13 Oct 2019 13:09:24 +0200 Subject: [PATCH 03/12] Adjusted imports --- pandas/tests/extension/base/ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/extension/base/ops.py b/pandas/tests/extension/base/ops.py index 162a0e3b3058d..e968962caf0b7 100644 --- a/pandas/tests/extension/base/ops.py +++ b/pandas/tests/extension/base/ops.py @@ -1,5 +1,5 @@ import operator -from typing import Type, Union +from typing import Optional, Type import pytest From 217adc84dc69045c566ec2c510ae11e1d531bbac Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Tue, 15 Oct 2019 10:02:25 +0200 Subject: [PATCH 04/12] CLN: added type hint for mypy to test_coercion.py --- pandas/tests/indexing/test_coercion.py | 3 ++- setup.cfg | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pandas/tests/indexing/test_coercion.py b/pandas/tests/indexing/test_coercion.py index 05b58b0eca9b8..dd0d310616142 100644 --- a/pandas/tests/indexing/test_coercion.py +++ b/pandas/tests/indexing/test_coercion.py @@ -1,4 +1,5 @@ import itertools +from typing import Any, Dict, List import numpy as np import pytest @@ -928,7 +929,7 @@ class TestReplaceSeriesCoercion(CoercionBase): klasses = ["series"] method = "replace" - rep = {} + rep = {} # type: Dict[str, List[Any]] rep["object"] = ["a", "b"] rep["int64"] = [4, 5] rep["float64"] = [1.1, 2.2] diff --git a/setup.cfg b/setup.cfg index 9af7215b1dc56..a615d938de829 100644 --- a/setup.cfg +++ b/setup.cfg @@ -199,9 +199,6 @@ ignore_errors=True [mypy-pandas.tests.indexes.timedeltas.test_timedelta] ignore_errors=True -[mypy-pandas.tests.indexing.test_coercion] -ignore_errors=True - [mypy-pandas.tests.indexing.test_loc] ignore_errors=True From 8e8daedb6e3c4d167400bfc24929faa53a15946c Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Tue, 15 Oct 2019 11:08:35 +0200 Subject: [PATCH 05/12] Fixed mypy error in test_json.py The error is due to the fact that the builtins.staticmethod type defined in extension.base.base.BaseExtensionTests does not match the function type in extension.json.test_json.BaseJSON. I don't see a possibility for a type hint fix without changing the structure of the code. One way would be to replace the call of staticmethod by function definitions that call the corresponding methods. Here I propose an easier suppression of the error using type: Any. What do you think? --- pandas/tests/extension/json/test_json.py | 1 - setup.cfg | 3 --- 2 files changed, 4 deletions(-) diff --git a/pandas/tests/extension/json/test_json.py b/pandas/tests/extension/json/test_json.py index bc75ec6aeb2df..38f64f0a78eb8 100644 --- a/pandas/tests/extension/json/test_json.py +++ b/pandas/tests/extension/json/test_json.py @@ -93,7 +93,6 @@ def assert_series_equal(self, left, right, **kwargs): name=right.name, ) tm.assert_series_equal(left, right, **kwargs) - def assert_frame_equal(self, left, right, *args, **kwargs): tm.assert_index_equal( left.columns, diff --git a/setup.cfg b/setup.cfg index eb6e0269a2ea5..88d7cbbafbfa9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -160,9 +160,6 @@ ignore_errors=True [mypy-pandas.tests.extension.json.array] ignore_errors=True -[mypy-pandas.tests.extension.json.test_json] -ignore_errors=True - [mypy-pandas.tests.frame.test_constructors] ignore_errors=True From 524ce17f1187d97d3bb550319a305386ecd0a338 Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Tue, 15 Oct 2019 11:23:33 +0200 Subject: [PATCH 06/12] reformatting --- pandas/tests/extension/base/base.py | 6 ++++-- pandas/tests/extension/json/test_json.py | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pandas/tests/extension/base/base.py b/pandas/tests/extension/base/base.py index 2f808d20acd31..1e28f14709df7 100644 --- a/pandas/tests/extension/base/base.py +++ b/pandas/tests/extension/base/base.py @@ -1,9 +1,11 @@ +from typing import Any + import pandas.util.testing as tm class BaseExtensionTests: assert_equal = staticmethod(tm.assert_equal) - assert_series_equal = staticmethod(tm.assert_series_equal) - assert_frame_equal = staticmethod(tm.assert_frame_equal) + assert_series_equal = staticmethod(tm.assert_series_equal) # type: Any + assert_frame_equal = staticmethod(tm.assert_frame_equal) # type: Any assert_extension_array_equal = staticmethod(tm.assert_extension_array_equal) diff --git a/pandas/tests/extension/json/test_json.py b/pandas/tests/extension/json/test_json.py index 38f64f0a78eb8..bc75ec6aeb2df 100644 --- a/pandas/tests/extension/json/test_json.py +++ b/pandas/tests/extension/json/test_json.py @@ -93,6 +93,7 @@ def assert_series_equal(self, left, right, **kwargs): name=right.name, ) tm.assert_series_equal(left, right, **kwargs) + def assert_frame_equal(self, left, right, *args, **kwargs): tm.assert_index_equal( left.columns, From c642adeb2c8868821cab66f8730e197022ae259f Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Wed, 16 Oct 2019 19:59:10 +0200 Subject: [PATCH 07/12] Revert "CLN: added type hint for mypy to test_coercion.py" This reverts commit 217adc84dc69045c566ec2c510ae11e1d531bbac. --- pandas/tests/indexing/test_coercion.py | 3 +-- setup.cfg | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pandas/tests/indexing/test_coercion.py b/pandas/tests/indexing/test_coercion.py index dd0d310616142..05b58b0eca9b8 100644 --- a/pandas/tests/indexing/test_coercion.py +++ b/pandas/tests/indexing/test_coercion.py @@ -1,5 +1,4 @@ import itertools -from typing import Any, Dict, List import numpy as np import pytest @@ -929,7 +928,7 @@ class TestReplaceSeriesCoercion(CoercionBase): klasses = ["series"] method = "replace" - rep = {} # type: Dict[str, List[Any]] + rep = {} rep["object"] = ["a", "b"] rep["int64"] = [4, 5] rep["float64"] = [1.1, 2.2] diff --git a/setup.cfg b/setup.cfg index 88d7cbbafbfa9..b1239dafd65bb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -193,6 +193,9 @@ ignore_errors=True [mypy-pandas.tests.indexes.timedeltas.test_timedelta] ignore_errors=True +[mypy-pandas.tests.indexing.test_coercion] +ignore_errors=True + [mypy-pandas.tests.indexing.test_loc] ignore_errors=True From acf78f9269baf8ff2d67c386183c1d6f952a47c3 Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Sun, 20 Oct 2019 11:18:11 +0200 Subject: [PATCH 08/12] Matching arguments of assert_..._equal methods --- pandas/tests/extension/base/base.py | 19 +++++++++++++++---- pandas/tests/extension/json/test_json.py | 6 +++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pandas/tests/extension/base/base.py b/pandas/tests/extension/base/base.py index 1e28f14709df7..0610cfea1f76c 100644 --- a/pandas/tests/extension/base/base.py +++ b/pandas/tests/extension/base/base.py @@ -5,7 +5,18 @@ class BaseExtensionTests: - assert_equal = staticmethod(tm.assert_equal) - assert_series_equal = staticmethod(tm.assert_series_equal) # type: Any - assert_frame_equal = staticmethod(tm.assert_frame_equal) # type: Any - assert_extension_array_equal = staticmethod(tm.assert_extension_array_equal) + @staticmethod + def assert_equal(left, right, **kwargs): + return tm.assert_equal(left, right, **kwargs) + + @staticmethod + def assert_series_equal(left, right, **kwargs): + return tm.assert_series_equal(left, right, **kwargs) + + @staticmethod + def assert_frame_equal(left, right, **kwargs): + return tm.assert_frame_equal(left, right, **kwargs) + + @staticmethod + def assert_extension_array_equal(left, right, **kwargs): + return tm.assert_extension_array_equal(left, right, **kwargs) \ No newline at end of file diff --git a/pandas/tests/extension/json/test_json.py b/pandas/tests/extension/json/test_json.py index bc75ec6aeb2df..f8fe993169c71 100644 --- a/pandas/tests/extension/json/test_json.py +++ b/pandas/tests/extension/json/test_json.py @@ -94,7 +94,7 @@ def assert_series_equal(self, left, right, **kwargs): ) tm.assert_series_equal(left, right, **kwargs) - def assert_frame_equal(self, left, right, *args, **kwargs): + def assert_frame_equal(self, left, right, **kwargs): tm.assert_index_equal( left.columns, right.columns, @@ -108,11 +108,11 @@ def assert_frame_equal(self, left, right, *args, **kwargs): jsons = (left.dtypes == "json").index for col in jsons: - self.assert_series_equal(left[col], right[col], *args, **kwargs) + self.assert_series_equal(left[col], right[col], **kwargs) left = left.drop(columns=jsons) right = right.drop(columns=jsons) - tm.assert_frame_equal(left, right, *args, **kwargs) + tm.assert_frame_equal(left, right, **kwargs) class TestDtype(BaseJSON, base.BaseDtypeTests): From 6636d8e57f97cb2627e47fba0d2c20265ada94a8 Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Sun, 20 Oct 2019 11:27:17 +0200 Subject: [PATCH 09/12] Reformatting --- pandas/tests/extension/base/base.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pandas/tests/extension/base/base.py b/pandas/tests/extension/base/base.py index 0610cfea1f76c..f2c3f1f29fbe2 100644 --- a/pandas/tests/extension/base/base.py +++ b/pandas/tests/extension/base/base.py @@ -1,10 +1,7 @@ -from typing import Any - import pandas.util.testing as tm class BaseExtensionTests: - @staticmethod def assert_equal(left, right, **kwargs): return tm.assert_equal(left, right, **kwargs) @@ -19,4 +16,4 @@ def assert_frame_equal(left, right, **kwargs): @staticmethod def assert_extension_array_equal(left, right, **kwargs): - return tm.assert_extension_array_equal(left, right, **kwargs) \ No newline at end of file + return tm.assert_extension_array_equal(left, right, **kwargs) From cfd604cd725d34467a4cdd5c555160bae2b4c34d Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Wed, 23 Oct 2019 19:10:36 +0200 Subject: [PATCH 10/12] Removed returns --- pandas/tests/extension/base/base.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pandas/tests/extension/base/base.py b/pandas/tests/extension/base/base.py index f2c3f1f29fbe2..ba9cb5ed4232c 100644 --- a/pandas/tests/extension/base/base.py +++ b/pandas/tests/extension/base/base.py @@ -4,16 +4,16 @@ class BaseExtensionTests: @staticmethod def assert_equal(left, right, **kwargs): - return tm.assert_equal(left, right, **kwargs) + tm.assert_equal(left, right, **kwargs) @staticmethod def assert_series_equal(left, right, **kwargs): - return tm.assert_series_equal(left, right, **kwargs) + tm.assert_series_equal(left, right, **kwargs) @staticmethod def assert_frame_equal(left, right, **kwargs): - return tm.assert_frame_equal(left, right, **kwargs) + tm.assert_frame_equal(left, right, **kwargs) @staticmethod def assert_extension_array_equal(left, right, **kwargs): - return tm.assert_extension_array_equal(left, right, **kwargs) + tm.assert_extension_array_equal(left, right, **kwargs) From d5856b8a40c2982978f6ea7701850308cca07f9d Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Sat, 16 Nov 2019 16:50:11 +0100 Subject: [PATCH 11/12] Fix stata files --- pandas/tests/io/data/stata/S4_EDUC1.dta | Bin 0 -> 2997 bytes pandas/tests/io/data/stata/stata10_115.dta | Bin 0 -> 2298 bytes pandas/tests/io/data/stata/stata10_117.dta | Bin 0 -> 2298 bytes pandas/tests/io/data/stata/stata11_115.dta | Bin 0 -> 810 bytes pandas/tests/io/data/stata/stata11_117.dta | Bin 0 -> 1268 bytes pandas/tests/io/data/stata/stata12_117.dta | Bin 0 -> 1285 bytes pandas/tests/io/data/stata/stata13_dates.dta | Bin 0 -> 3386 bytes pandas/tests/io/data/stata/stata14_118.dta | Bin 0 -> 5556 bytes pandas/tests/io/data/stata/stata15.dta | Bin 0 -> 3183 bytes pandas/tests/io/data/stata/stata16_118.dta | Bin 0 -> 4614 bytes pandas/tests/io/data/stata/stata1_114.dta | Bin 0 -> 1130 bytes pandas/tests/io/data/stata/stata1_117.dta | Bin 0 -> 1569 bytes pandas/tests/io/data/stata/stata1_encoding.dta | Bin 0 -> 3507 bytes .../tests/io/data/stata/stata1_encoding_118.dta | Bin 0 -> 5587 bytes pandas/tests/io/data/stata/stata2_113.dta | Bin 0 -> 1490 bytes pandas/tests/io/data/stata/stata2_114.dta | Bin 0 -> 1786 bytes pandas/tests/io/data/stata/stata2_115.dta | Bin 0 -> 1786 bytes pandas/tests/io/data/stata/stata2_117.dta | Bin 0 -> 2228 bytes pandas/tests/io/data/stata/stata3_113.dta | Bin 0 -> 12737 bytes pandas/tests/io/data/stata/stata3_114.dta | Bin 0 -> 13255 bytes pandas/tests/io/data/stata/stata3_115.dta | Bin 0 -> 13255 bytes pandas/tests/io/data/stata/stata3_117.dta | Bin 0 -> 13703 bytes pandas/tests/io/data/stata/stata4_113.dta | Bin 0 -> 1528 bytes pandas/tests/io/data/stata/stata4_114.dta | Bin 0 -> 1713 bytes pandas/tests/io/data/stata/stata4_115.dta | Bin 0 -> 1713 bytes pandas/tests/io/data/stata/stata4_117.dta | Bin 0 -> 2185 bytes pandas/tests/io/data/stata/stata5_113.dta | Bin 0 -> 4628 bytes pandas/tests/io/data/stata/stata5_114.dta | Bin 0 -> 4924 bytes pandas/tests/io/data/stata/stata5_115.dta | Bin 0 -> 4924 bytes pandas/tests/io/data/stata/stata5_117.dta | Bin 0 -> 5366 bytes pandas/tests/io/data/stata/stata6_113.dta | Bin 0 -> 2752 bytes pandas/tests/io/data/stata/stata6_114.dta | Bin 0 -> 3048 bytes pandas/tests/io/data/stata/stata6_115.dta | Bin 0 -> 3048 bytes pandas/tests/io/data/stata/stata6_117.dta | Bin 0 -> 3490 bytes pandas/tests/io/data/stata/stata7_111.dta | Bin 0 -> 1024 bytes pandas/tests/io/data/stata/stata7_115.dta | Bin 0 -> 722 bytes pandas/tests/io/data/stata/stata7_117.dta | Bin 0 -> 1159 bytes pandas/tests/io/data/stata/stata8_113.dta | Bin 0 -> 1439 bytes pandas/tests/io/data/stata/stata8_115.dta | Bin 0 -> 1624 bytes pandas/tests/io/data/stata/stata8_117.dta | Bin 0 -> 2063 bytes pandas/tests/io/data/stata/stata9_115.dta | Bin 0 -> 2342 bytes pandas/tests/io/data/stata/stata9_117.dta | Bin 0 -> 2342 bytes 42 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 pandas/tests/io/data/stata/S4_EDUC1.dta create mode 100644 pandas/tests/io/data/stata/stata10_115.dta create mode 100644 pandas/tests/io/data/stata/stata10_117.dta create mode 100644 pandas/tests/io/data/stata/stata11_115.dta create mode 100644 pandas/tests/io/data/stata/stata11_117.dta create mode 100644 pandas/tests/io/data/stata/stata12_117.dta create mode 100644 pandas/tests/io/data/stata/stata13_dates.dta create mode 100644 pandas/tests/io/data/stata/stata14_118.dta create mode 100644 pandas/tests/io/data/stata/stata15.dta create mode 100644 pandas/tests/io/data/stata/stata16_118.dta create mode 100644 pandas/tests/io/data/stata/stata1_114.dta create mode 100644 pandas/tests/io/data/stata/stata1_117.dta create mode 100644 pandas/tests/io/data/stata/stata1_encoding.dta create mode 100644 pandas/tests/io/data/stata/stata1_encoding_118.dta create mode 100644 pandas/tests/io/data/stata/stata2_113.dta create mode 100644 pandas/tests/io/data/stata/stata2_114.dta create mode 100644 pandas/tests/io/data/stata/stata2_115.dta create mode 100644 pandas/tests/io/data/stata/stata2_117.dta create mode 100644 pandas/tests/io/data/stata/stata3_113.dta create mode 100644 pandas/tests/io/data/stata/stata3_114.dta create mode 100644 pandas/tests/io/data/stata/stata3_115.dta create mode 100644 pandas/tests/io/data/stata/stata3_117.dta create mode 100644 pandas/tests/io/data/stata/stata4_113.dta create mode 100644 pandas/tests/io/data/stata/stata4_114.dta create mode 100644 pandas/tests/io/data/stata/stata4_115.dta create mode 100644 pandas/tests/io/data/stata/stata4_117.dta create mode 100644 pandas/tests/io/data/stata/stata5_113.dta create mode 100644 pandas/tests/io/data/stata/stata5_114.dta create mode 100644 pandas/tests/io/data/stata/stata5_115.dta create mode 100644 pandas/tests/io/data/stata/stata5_117.dta create mode 100644 pandas/tests/io/data/stata/stata6_113.dta create mode 100644 pandas/tests/io/data/stata/stata6_114.dta create mode 100644 pandas/tests/io/data/stata/stata6_115.dta create mode 100644 pandas/tests/io/data/stata/stata6_117.dta create mode 100644 pandas/tests/io/data/stata/stata7_111.dta create mode 100644 pandas/tests/io/data/stata/stata7_115.dta create mode 100644 pandas/tests/io/data/stata/stata7_117.dta create mode 100644 pandas/tests/io/data/stata/stata8_113.dta create mode 100644 pandas/tests/io/data/stata/stata8_115.dta create mode 100644 pandas/tests/io/data/stata/stata8_117.dta create mode 100644 pandas/tests/io/data/stata/stata9_115.dta create mode 100644 pandas/tests/io/data/stata/stata9_117.dta diff --git a/pandas/tests/io/data/stata/S4_EDUC1.dta b/pandas/tests/io/data/stata/S4_EDUC1.dta new file mode 100644 index 0000000000000000000000000000000000000000..2d5533b7e621ce311de87989c9b7368be4c86bb5 GIT binary patch literal 2997 zcmbW2XK++i7>3VXLPCH92%rQImJ*26kfkI*_M979kPvzgq&E%8nxbO8I+h<6u#E)U z+OXHCSSPWgu3blG)UkIRdl?IO?suP2e!w5{BhS9y_kQm==kC3G8$ymsQYDT$jK7A; z%G#>N_SUwh_N^+`(ooh~Ro|#$_J5gF{14R)tp_A$U{{Nl>Mi2Q>c2Lt2 zwo6vlv|tOVRT+Eip-MBH31L7WlWx2I^U zXsW6?xI;P0>0v{=L&^#HOj3@2LA!gZ&_1O+oopRS#Z3zJUQ$;k74{B%U3~(r`zmL@ zKc8mxONruw^q{Z%(eH1$t0PknATI+B4Ekn}WqIvxJy^7-kFfM}j>I=a>M=J{sPs@c z%rZC986A%ADCMO1`xqg8PmdIK>oEOMLA`4<=N=9O>);5ey&XvQ<2E!^u)pg&P` z+)P4GhEt@z)18XWfzwzo7e=U0hcn4?3Az})6kUQ|Ci@Dz%Y`v_g;2RGx!+caKklxUdfcp$xo)$T`E^n^ zX1y@%Zct8N|NGpioFt!{B*)XG_&2lu7V#GqmI+G>%azl|_gB!bg4NQGyR|~EtB!g- zY#{eo_In)lMz|F=!Dh)ZCWby9wvf|`ZiDUcgkXJrVz3``67_BD>ty<;z*8;#=ixN; z>ExdwT4|5x?@ZBga~A!xsh>msx$wLo$DGgn1@J=4y@^D@MS(WkEfb02=nnM7LSrr= z|5C}@;a*1W<$+IM0e9l-pufx3vrD%ZT#3F)e4f4C!v>){Q2KQ}UW6Wk4N zhPNpDwoqQzt$|=>HA>VQ!zS7dHDX{pZxi%lp)E{P(FbA)(Ses3*am^pnvku$L43 zex=#~fBiHkcweW}?+5$SAArt)1K}VicpnbNHw0$V9}0(&Kb-yu^hk6V-zYfR?%V%e z7-Q-GUW~Qe)zJ~nl6oRK4&QjImFn+ilXEn=6VMa!O@fo*6gU;;z-cfSM&NWf1I`qB zdKNkl=EK==4x9@MU=(U-pbHD(JUAaN5E`>k&K-6a1$9+Ke=+A?f-Z(jxh^H>WpFw5 z70j)KtKe$6Jv_Ze)>CFJTqlg1_2g`Dg6DQ4{Y|ix{LT2bpv%zZtW$xmv~!V2L|37! P@z>z14RUoIzIymCo1Z8n literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata10_115.dta b/pandas/tests/io/data/stata/stata10_115.dta new file mode 100644 index 0000000000000000000000000000000000000000..b917dde5ad47dfecfc872b5a5ea756ce603eda59 GIT binary patch literal 2298 zcmeHJy>1jS5O$8A1PUZ1puUEdy$cahqLH)WuL-&aD5zH6TZgQ)KPTH9L_#7GFF;Fo zqT*?I0-k{)4TvVpc)ZzF?v@&f>}hVspJ!*rW6yZOI^|T7IVIsxt4tdSMi*LHEyv?+ zh?)VUM^4v<6rMeQ3Q;?ReYq|m+LthqSA;-uBB4;JE+oniKYU zG~ODHc6PT$5Vf-qHBppmCefOIJ_mkljfF>n?+tjI1^(?4kH24L{$QQ?tH4hJU)x~( zN8rB$hlsqwT$x;@g-+bjOk4T$wEg`$h3MQgsaFb@Cw+Q!#Qz&WRkgR# zuW(S*%H`GTUJb91l)1G%T2<}0q}PDRD|derExhYniO&G97;J4^kz0pbbt7y7TZZUt z3Jz*hDre>0oqMDH$X7&k@xqFvEI|-83C5#XywQo@;DmQ5RW_e4z0v{x1%*yHtHr9W z{$5;kCeJUutz(}ME5+OLD%lU+Lp-_t@gd3a$&0wbX#Q)^3*F*O|M4BxpM7fdFAV+% zIqY=&aFAensEnFAZLsy_Q!61_LNdHpu`3?$39*Rrj3JTC6iypqNFor+0|Zz7RevT4&QmC-{2^3(A*;Cd)bEs)|rAL4!l!0h!$xfM`*EIaM!}IfBEIT zFO#M`$YHoR#Q`W9ZkK%;H=vgc+t)0&L2ctMtT4M literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata10_117.dta b/pandas/tests/io/data/stata/stata10_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..b917dde5ad47dfecfc872b5a5ea756ce603eda59 GIT binary patch literal 2298 zcmeHJy>1jS5O$8A1PUZ1puUEdy$cahqLH)WuL-&aD5zH6TZgQ)KPTH9L_#7GFF;Fo zqT*?I0-k{)4TvVpc)ZzF?v@&f>}hVspJ!*rW6yZOI^|T7IVIsxt4tdSMi*LHEyv?+ zh?)VUM^4v<6rMeQ3Q;?ReYq|m+LthqSA;-uBB4;JE+oniKYU zG~ODHc6PT$5Vf-qHBppmCefOIJ_mkljfF>n?+tjI1^(?4kH24L{$QQ?tH4hJU)x~( zN8rB$hlsqwT$x;@g-+bjOk4T$wEg`$h3MQgsaFb@Cw+Q!#Qz&WRkgR# zuW(S*%H`GTUJb91l)1G%T2<}0q}PDRD|derExhYniO&G97;J4^kz0pbbt7y7TZZUt z3Jz*hDre>0oqMDH$X7&k@xqFvEI|-83C5#XywQo@;DmQ5RW_e4z0v{x1%*yHtHr9W z{$5;kCeJUutz(}ME5+OLD%lU+Lp-_t@gd3a$&0wbX#Q)^3*F*O|M4BxpM7fdFAV+% zIqY=&aFAensEnFAZLsy_Q!61_LNdHpu`3?$39*Rrj3JTC6iypqNFor+0|Zz7RevT4&QmC-{2^3(A*;Cd)bEs)|rAL4!l!0h!$xfM`*EIaM!}IfBEIT zFO#M`$YHoR#Q`W9ZkK%;H=vgc+t)0&L2ctMtT4M literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata11_115.dta b/pandas/tests/io/data/stata/stata11_115.dta new file mode 100644 index 0000000000000000000000000000000000000000..cfcd250f1cd9fd5b3c2a77f1414fea73d407d955 GIT binary patch literal 810 zcmbVK%}N7749?b{gC_+qg2;dr6l~ckUBn)AQT(|mLcxe3rmOGBFa+pinzxAmYO5Glt_&dPzw6_kJKMl=8vKP literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata11_117.dta b/pandas/tests/io/data/stata/stata11_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..79dfffd94483f30bcf6f155711caa392d849f970 GIT binary patch literal 1268 zcmbtUPiqrF6d$94coTZ@A_FC$V4ZA9(a2+55bL25gn-v&lDsy7Nj9CG26Jk`leb>I z_3p)Q(6isdqaQ#Jyu|lrXPdRgia0R){>*RQ|5+%!@g^I3qhW+*h)#n;i>5%GB#%K= z0`wOibH{*Jy`i^YNZa$aWt)wlJ zCr?`)P^(i=RTL95(_}5I50P$ME16EDr;&b)R5r@<_mOt5m-1nxpCUbv^y`iC{9B}; z*elG98=Jnx%r9nG=%IiYt^@?*r7e)Ld=2_*SGz8#>oIQ4Q%%UPbg z2XcqmL~I@k9)~ZV&$Hz*F=y`@ET8_n!GsO&{Lx@-CSuGm7#U{<9vyXXJSa4%-!wyd zZ`9nAlxH-h!Anz`#*=3^qbQD%xbWfAvy_4-2&ixo3hyl2jkH!s(%Qb&J-S`*0Nbsv zTTx*BX5{(VZqU9<`yOqs7l+5sgr5duUsMGbZ_q8|L7orAOaAPdu@kSU1N_=4fM24h b2IX&2uvhlZQE)W8{x6F9jFkneesn(pwkR(F literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata12_117.dta b/pandas/tests/io/data/stata/stata12_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..7d1d6181f53bf2b443798b2842cdb95f258b56a1 GIT binary patch literal 1285 zcmd5+%}yIJ5Oxdnz>Nwa^%hm)S|>;dZ5g?!2M_|mfd`1Zn+aKILl)bm4Qdg}od@W1 zaN{XBaYDQX;zT|6EJ;{6RO+ECt-qOX{_NTDf_2*IcE@Q2J=7gE3JeygEvi;)4P>Q2 zI&?TNF>LSZBOsykK6;8Ct zby{HC4NJ7@{_&j<=OCZa2?HX|=9}>aiNwfpJA{-BWu&K2gve zn7(#aEhnFvhxI(KGs}s6-T0E_uLD3t_N*3(934vinPJhKX9jp_LR zhM&OmFFMV*U-1@hY-Fhx*riUy`*`(L2sCa;480&jFj!{_tF{jIiKO7sykC624t5WF pxnK(=8NK(*@psA+mMB&p6hERnOc{Opn0Ru^=m-;EpVaZ6?+@SE-rE2G literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata13_dates.dta b/pandas/tests/io/data/stata/stata13_dates.dta new file mode 100644 index 0000000000000000000000000000000000000000..87b857559e501e555b74131bce5abc7b2b1d98ff GIT binary patch literal 3386 zcmeHKO=uHA6n?g1#Xl&Bco706;HBM75vy@nAq`TfjY{jGc-T&}lkVbfwwax@1`qAg zqZbd_i+F1f;=zMntXFS}XQ3bz5%Hi#4y9Q z!?1;1f*nFFM2SyuM666^2pM$)P1hI+sUTb(zk-a0iAJpxfQ(TK6|4gQyj!r4kEe-m z@xJOH<^_aH1+!M~;Q7?GB1;XLnW2<LIc&PED$j^@(8qakr zdq(5gL&`pLSmD!S3g2n$I0bzJIf=t2MXQ(g=cCi|< zFn~(6jRYsicxqG9mf&K)1em9{=dkZNn0ev9qYwm{!T~S@WyJmet%=uYueF|95%8_u4DozI6c{JqU1%w+Fm^;Oz_d!JdSLIR5@4 z{xc_@V>vc(JQd%O&!p;G3>|`~^Lx*OsBf(+-1s4s>mD`g-KXc>qD;JfvucZa2aoP| z342l7@5d^#jMVK*eaha(mrErsorIk^gwD2s&YRLGCQaYgy8fV|izzNLLiyL1SBxxV zZ1eEXL(B`+;^*AGYOap!x%J#8Y{C-}$`x&U|KYB&eW? zVL=HVV|18>1c%ILG-4zkZ^y2!;N*m0Jd_Ik1HITSRPlLIhp>B|;0t6o(h0j42=-}` z`Q!*19P=Uv{;A_+=K?RqhnX`BRvo2)U9E?OmuBEiIz#rgv^ys=q0t5*6RqG! zL5f}LXqsk-F^HB;p>3BgjF`O2xOCLyFKe~@`d*#W{W_mDdDj75e`fLr2X%eXh*)FSA1>Syjp?pN-64!i5bQazwBJOWq*qmk~iEYBWKc&wZb4Cxt= z(2gVqMCk7<5N87sp;#=wvsR0&_4=Gj7m8l(Y_S_c8SIx2fqpK7AXYvERD|k?#1RjL z??nQZlBY9rJ?X2_Id=0RJi@~?d^FPBQDW?rqv5gGXekq`xuevE@wU=hmTVEb_QSvu z>tAIFwU;FHmn~)Nl{OUwwiN-YX5_YZ`JZ(r*V^@=S>R6!o{03ZkU1275l=HmJ5vVvuEwteylyiM)UTpUsF}uj`jQX?~VOI zYXMBVJHEr;-kJQrvP zVGXPRxMcw4orJ~@RREMhYBsk`Zz4XN%PIh((s$van;%1Lu-r9hO0W=)m|iL(*!|~? zybL2fRKOSO=A&HDYNYpj`JC!Bd;eRJs78w4pwB>t&?JKgqz{vqd>Sxx z8AudD)$q4Lx&#IUALQc`929Dl#-AJ*>e6M@*oE$Vk?cl4^Ii1ce@M`fN^d){tGvc) znIdNfE=pULrA*gDMGYl;7a5s$7oq6}kPY3q8jNS3WWwySm0Mp`+rf~hqwJEE8OPAH zq)Dg!?81$eM=Q7C(otJ4KKlW{e$pq$LD5ieR(!u?cdeV#O^OfNI;g8;>sH=qc6(cY zaqf-Mvn-(N&e*yCg Br&0g_ literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata15.dta b/pandas/tests/io/data/stata/stata15.dta new file mode 100644 index 0000000000000000000000000000000000000000..d13e2fa337db39f73c2fc2a252126a1a73396180 GIT binary patch literal 3183 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 G4}Jh1&UZfm literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata1_117.dta b/pandas/tests/io/data/stata/stata1_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..18014cec77a9109d4fec7f0d3b90ec389f7c8ab9 GIT binary patch literal 1569 zcmeHIJx;?g6gHqDF(SdjfC^Gq+>}aC^kl@+rKk%Bh@93fk({QoT_jk_HMjr=VPjz6 z1}q)80JJQ@j-9p&YNd*W0T227e*Av?-g7`Is;J*ql)yEkZ6*i^#u=52c-{%%jDX-) zu~-;|%d0xz83_$iK!6(rnq&3VRuW9;j7?r`F8Z{6|_H!Nn~$AaBGJA8LIcDTD~h-pPZ& z(wTg}W$El(reFRy`1?DYdu3dipmj|JZ7C-7z=kbJ0RP~$^*e56d1xE(ZOBH$QIZS+ VrxK7#aC6Y%Tyq$1j-34!z5zE}`_upc literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata1_encoding.dta b/pandas/tests/io/data/stata/stata1_encoding.dta new file mode 100644 index 0000000000000000000000000000000000000000..b4230eda73e06b49c18e8c685d15ee5f5199e021 GIT binary patch literal 3507 zcmXS7Vq{=sn9cwM^&o-)$YWp-n6cCm#Qspi2BH`g7C`t8(`PYG2daCJ0}%(Q1p(*H zrVb!FLG~n=R(N*8fx*a7!Lc-5!N|bSSi#WT%EXL8D7z>%v)ItW#FC*nJ~_WMuLPtC z6)-cX8d?;iic!i7C@L*3&P>cxa0b~~soZLfax(MM|>mV4!jV02;b2 Ap8x;= literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata1_encoding_118.dta b/pandas/tests/io/data/stata/stata1_encoding_118.dta new file mode 100644 index 0000000000000000000000000000000000000000..475f172feff8757337f408f75454add10ed276c9 GIT binary patch literal 5587 zcmeHLQEOa96h5ngwyCnHEmWT_QlCn4vs=NW45Kz{tfa=8RR|QiOm-*Dr8m3Fo!O9m zN=pjOldk~-eQcpGHV=h9_Dvc@MSp-w#0o7`iltck&~xU_*I=j~y+Fu&WgzyRx8~xIx-3 zdwesO4ur>_Jl^&A-b<HM$36xR=?c+KOt9)I>ILON9}sw7ggv98#5Qycj@ zUZYP$CUu2ZlIIc~nZoG1V_+)PMyqbq6Q19%^DXs7m_}mb$XG|52s=|T*GLwWHS(Rp zsCg#WM95p<)#H|~xaV3)&wZvH|IbClLBCVor|4WY@>J3?CQ|iaoE}p)hHh09TIN_txDUs*!C+H5lPG za|B1wfEXgEgMt9QgkdOS51@oH0~Qj*Dq;ZRXxXAOY_b^BMLxlcP|qFTfa_Z~@^_Fd zma!gCPBLoukFNOIca0pd5OHuJyI?Xf-fcMu^mLagjT`Hr(< zdsz7xy`;{ptRpKdqZ`qfSaFC$V&zfKyq^`eBixpiwpIyNQ_so3Zs4TyMLD8K0laew zeW%WxOd}^OBTi^coH)cGaq@T1yq^=cBixpgLYI(3yM&OMjxm4n!ZYYNbtdHD=bIfF z5kfj5#32rekiEZm=lz7R9pScw94QQQ<~vN&zY{gPqP}3%G*w-@sNq_|Bwa<4SVknd zdVwT4^d!BQ^#xh6_+{i?KU4>(Gb^W&6_$1C3$jBpYX7M(sG|_!s>^nS96A)D|Ejt@ z^#zMe-@B=XpS!a3#26jd8p#|?90rZ=`Am|rkwrq51z8qkS&(HxmIYZBWLdCNSs+69 Ykt&Q$V*EEH^w{(77D@Z2-T!f)0%MyuzyJUM literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata2_113.dta b/pandas/tests/io/data/stata/stata2_113.dta new file mode 100644 index 0000000000000000000000000000000000000000..09c90dca943d1cdf84bb15b884958ed941705b58 GIT binary patch literal 1490 zcmXS9Vr1Z8U}k`T316L{EFh&|sNkDeq+n!VX!4K|A}j=z-FrN=9K=j;Hgp0>9q{gU z0MPMPq+h|%*viO+;s5_XfByXb{U;@{B()?nH#I&PtQwPmD@e*r$EpaV z08<;1NO@{%c1~qHZgsi&c_kV6R1}sb7L}wH;Z~B7n3EP?nVN`G2|hU_ry?^|4Ndh7 z(jftg!cJj8h?kTzz}1xGBC!jR*cnLdN;n(Yt`W`dh~o$QzhU94H|?cPS?-!#5lmJo zx7b0VGeolwg6L(F%?^rvU;g*V|99V*KmtJUpdLm)tp~x>)TdyPQ3FTAkc?ylNlY3y M-vSdM162|u07r08-T(jq literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata2_114.dta b/pandas/tests/io/data/stata/stata2_114.dta new file mode 100644 index 0000000000000000000000000000000000000000..c60cf480ad5dd82db28475872f08a5280e7a80ed GIT binary patch literal 1786 zcmXS7Vr1Z8U}k`TuZEwM#2Zf-J2W&hG6IDfv<-ps3=9Vt6HsUdi{;E9@ed#O$N#Tq zVAxmxX)=h0=`ZV<+WFtmSiv{3NWsVe$S^dwGB#oO|NqaQKfizfNl7e8Ey>JHjZcPH zi$TH_BxR;!RRmIip$l1{JT)~tr!pS5y4?J{k_>z*3QH4Yn(E6GUANsF&cO~k1L zpB%DVk=Uvw$qWYRNCJeIswK{(YDi%q#R3M^l5$ctvBq-v-nO#`7|AC(^s zfzc44dkARUeA`~?#L%$t)f*t4<*vyU!DN+kiyh>U8KT(-LG-f8W(UQ-FaLYw|GRHY VAORqF0IZuJ^wW9}Oig`S4*($EbN>JU literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata2_115.dta b/pandas/tests/io/data/stata/stata2_115.dta new file mode 100644 index 0000000000000000000000000000000000000000..ad7dda3fdc4b38fe4a34a2615414ec13bae8389e GIT binary patch literal 1786 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 xEV;(&K79pRrrC*w6$PYn%^F{$E9G|0B`c?H{+^ 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 literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata4_113.dta b/pandas/tests/io/data/stata/stata4_113.dta new file mode 100644 index 0000000000000000000000000000000000000000..9d7d5abb1b92156dfa03b076bc88c20cd9afcf71 GIT binary patch literal 1528 zcmd5+y>1gh5S}Ci5|B_78j2Jvq)2J7Y|904le_eJ26HB3d!_YVxI5b*A>lS9;stmS zBo{nD9w0@U^eLzyi8J5cIxP4HnTnNWc6N8>o7tJ!eY?6s>-3n4G5Y%Xa7DyAe;AOe zsG}%V)pDgaUULd=y88CX>d|;S#ujWa&dzt9SOGYmy(;h5Yc=|Ldvkr;>KXICVWK7* zJ|;I=BgcMIs8XTlE9m%5(mgSpvj^lWIPk_m=bc7ZXPJ)MnXk|?Nt72cAc)0d_f@If zb}GC3o?NNkFXrjsE)CN(#FkGx`m4gP%g#Y?_nUJn9`9XDdoOlEWmB$P+EhPEb<{Lm z!f}AohhU%}ctCUkMxbG^PBa3e%a24~f`^ucaguj9T>!f*;8bjCAP!h%NtcVWOhvMG z$tckM<|{!ySxZCP+DPjN#Q2o!Jxbq%J(olz#oC73QtAyo9b%&$K(T$6QbAO z5A6(#ij|6P0sd2=XF|_~c7$FC?FqdU0tjw~Mnmn;R?<*}Fky>;fSJTh`5>XZlQL5) z>7~@teWpymqm26;6YF*-r&vQ#mUS`u;~mWm7*4l^Fd$C?_5+&^03MJM{~^kYpXuSh GNy#011gh5dIPfe+7!5p#W)x6p02azDOvf$z4N1!7Es27~3nY?;_vXh6=Z-sHovl z+#?#EAPr9eM9g=$C+^}ObOjPCeX~2e^S3j*lkM(c4|mWU-@bm?;m)JxHt@0BueO(7 zuHtX{#itK1f#8{WA$=1Zc8^T=_#`;OkIP>_F9%cS-t}DE7bkDvr^*25hCqN)t}bAc z*Xj7oNiH=*bpda@H@EqyH?~=3lVMgD7`Qaf%NQ8M_Hl6BIUH^mX`UWDZ>!J^+G+gz zkXVGC>pMt6n-?VaSAjoO+F-#KX2WUS#j5vmCo;ubF}~hr7Ef&4chbSDYhHpg5r)@+ z3lb2Ea1U6L;QM>vb9kd5QIh5(nQSx*L@f=j#AfE|Kung7r98__th`S~r-*J_gli1y zE3fo51#T)?2h~OkgT<%NpJL8Zo8+}*wlknbFn@P4FyZE?!xM%F~|10qlLTUi pqa2B)pt2{bwDuoe37AgrDLCo@*8^J(fF78VwO{#)hyNxezX9{t7M%b9 literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata4_115.dta b/pandas/tests/io/data/stata/stata4_115.dta new file mode 100644 index 0000000000000000000000000000000000000000..2c68cfb393b9ec5defdbf78959bb9ea2b174a942 GIT binary patch literal 1713 zcmd5+%}yIJ5FVhEpF@S(13hrCDj{(pN}?PJ7rYP9S0LKJB(db|qV*;LaUfR?eTPcC z2#=BrPtg)FpR))@DTx*d2}|FsXZ_81>=}<+U7>Z_rgCGopx>R|U1PdC_^nq07k;j4 z>Q|hpdbQS2)uZD^gZ@q)|4rI`Yp^S?%M~o^H4za6p!FxBF$4i4y-suwK@T@X zfAnWBq9o0`oGox$*5O=iYA749a%qpJYfi!Skwd<$OZg=5quMT7wids2o3~?0vr-2L!p6> zvXX)#gb7;&1fOZbln+zNyBRaJ(|$&6GhlM&k{k~>AvT?EPKg0g)MGJP`i_KyO}`2- W!hplT<^#YExRRw$SvVi&N}d1$bO#*( literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata4_117.dta b/pandas/tests/io/data/stata/stata4_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..412c2c0d7b3569148266f331338aab76ff4b46fc GIT binary patch literal 2185 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 NEtiWnH$#s2{{X{R*%$x- literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata5_117.dta b/pandas/tests/io/data/stata/stata5_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..afbd3b0e0afe31bef669b8e9398c623beff57d74 GIT binary patch literal 5366 zcmeHL%WoS+7@s9b^`SyS$^p1^qtL2IDBg7fA=PMUQ{t4SgqE~C%E64iWACQBUUzrg zCLpoyt&tE9i3=}@1Fr*r00#YQ=e2>$%Zx^`0GwDT;(W)%b50K7{G5a5 zoxKQgb>6`NDbv8=x>7LnL(01f8_xaqxOu!;Hw%_MVcOOqi+9qg#d$r7kTe_~O_ujS z4jW3D0a?CB*()F)z88QXZtYRZNKVObhLyYu@;8t-K;pdU6<;8+Ps#x;vE>F$oWHZb zvd!#fc7y-@i3~oe9)M_2CwzjAV5NjC8~WcW{5s?HI{<>HUfVH3HHZk0v3+r)rWpGU z0Kx~!-0cAgi+wSQZ3_UlpQfZpQG$~wW`UnDzM2PMopfNFZ&%`K6o-T*&i<(}tEK^W zBKx8NUyj{Px-c=3+zC4xvwtetT@N^~SA?f`(4-}~lS^t*b<{zZBF}rd=^P)DvBW_? z9F%zvhZbt0nQ5V0Kb<)V)>{k*8=eKxV{yu15#O+R{k`gX-mj1g6tSrlfcHi|gGSgQ#S7hdYIy$Rt=c=?X zqwnR-ZGerS-745a-_<1k4_y!8b$x4d8a)3o9zb3B^}LLi`zRU`E-m%-bg3&|J1{83 zFp!#a>q+I>5HclYglM(q`HSa*upTvf+vz#=6BlK^PNE>x`WCnll59<)$hPuImB$pIGz z-y=W2TO5I{@QA*c!T!wXae)6ANc|>h{4*^*n-A8d)R*#GLs#UzwP*buDUW_IdQkul zFM0Ak^7ij<$oD~GShf4O{E4)6+%FatzP0b1jH~e`^mF;m6^WOXUH>#5-&FDSJPv-Y z@WMWlW+@+3ihcwx9^zc^v*Q5786+;w@;w6Q1 qZcj~G!s;qIx4K+X?T0-whV$~X1oLw;5MM1IyFSK+x5w=K)Oj2C0b$Aj literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata6_113.dta b/pandas/tests/io/data/stata/stata6_113.dta new file mode 100644 index 0000000000000000000000000000000000000000..2e4795b167f266cf86afd73033bc1a43ae9afc5e GIT binary patch literal 2752 zcmXS9Vr1Z8U}b=S1A8YsF#?%ZsWs&c3Wf^4iA4%V28Jez%uoeT>cf$VV08@t|NjRG zf%JgDf~Bh5UB>f5omR2Sf48Q;U{rCUh7sjN@lGJzx14FPW2~Zx7f}H%k zbi5{{<>V&<&A<&(@=KF)fUdv^QWAlVEJ?vB&rn=alnHVLP5@Pa+nWpwYD}oQRW0=l z(xE~mvr`xldW}p>is9xIGr-uWwvAxk*QG32e4hvugQaCG(hRWl&i6Ug0i^E1k4|tt zSgOo0Y9KVgM#B&@PP?<<#M!}c3Y^v%p?p{(egNe&pG*g< z{{)kVx&S8M@WTo2CcK#gs%r1!La=!pbMwK~28@Okb&W{o!3~Bo5*Zm8Aa*p^Lxeuq zJE-mPNK9g2NKH%6$jr*l$<50zK-UNJ6J`hx-LOakrWz1nU})G64U7E@ALh6vCMA!! zut-jMQV&cQ4ay(>|1&OGVj<5ELH$kdkV=JiA9OYC8KPJJT!HB#1v!rt78RG2mX%jjRzY(MI4vSl}3&VdPD7`tI;j1s#T!}4{8B2iT%}=H?lmoHk zWTVysf7Y_?{ERX=Kz$eaw=e_%_%szPpJ zMP_bku0l>~UV2G}LP2U#Ze~eIYKlTqr9yB?Vo9Q&!XP&^rIE4W$^ZZLz_6%;gvFhD ihJ+MXV7f>_&Lf3I#U-U>Zp6cc4dZ z9C!c_XOQ{^Jwz%G5S1T++QzKyH8vFvqNh@r%lwaLKh5r#bt%vXy%15qu9Zuw*$z)W|04R8&iJkx7(@COOUY1LLk4bdgCiAp4jA!y&v$g`wg| zPEXXkrT-#9pnShWj}{8-Zfuf>p(4BA7n0ORE}d=n+=2iRw%~opB;WS~-@wUy_>MF$ zHm8F4?Ll}dC_#I|Py&%+*<+Im`cwRSAZMcC9RC^)X9JGHSy!YEvYV#VyASm+{zvSW zjl_QMB3XtVFNe(A|Gpa5>-*w#2d0?EE1{mMCsVE&Q51;2;Y~!w*2LuS-Yii8v?bjz zm)~1<*;%15E_;s5L2eL^ri&tw8yebV&9o~vT3T7>2CitXZE~(r zRI5102`3}?j~AtN#XI)>n!w_7gvGZSEYfK)7c_lGR$ay`A3m;C*X1P%XX&=(^>FWq Fb_Muvm<#{_ literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata6_117.dta b/pandas/tests/io/data/stata/stata6_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..bf4f3838e8be7d375d83dffe1ab3c06493f791f2 GIT binary patch literal 3490 zcmeHK&1)1f6wg@2UK9lHM*4A*&Td} z(2L;BKcUi-pn_*F9t!pkC@NY#bj;`OvSs^mleU53_g?bLOY-val0l3UPKrJ!7zLF0 zG{q>T5haY`eEu48t%AHdr%5Uaw`Zr2+fvaq?ghx5#%Kng0YHc|7)8XR5f-u*5D#N2 zhKj5BLVg6^s#V}{Ejs}2d~Fc9a#XZP(vWx&E%JJmGW<9DlWk|evtQ!-2^_Jg4ub4ZA!318 zdZh?*c{BcQ2rFE)??H%?N_kHUb5TNsjqb%yYI5#-5Qvy0_q!7qPeVD2uEh|#FH^Zl zy9BW$oOk-Bl|Gcm7zXeARot7T1!|x$DdpUkyA!rfI`V_z znPeq0jV|2Ld=OjyiNO;en&3D@*tFeSCNfbeASo$vnu`1!mKa9vt{Pvw51JQob5Jc1 z0X9lInzWi_nH0|dxUV98V|!Ia{+qrVTF0N2{tSFlH@9PSVESzsz2{?D@xR-4Gnj2} zY)_h+edc3W@4hW4d%drc9$974UQa7+_L_!`KpY3?H8;j})z~ ziYrOAv!7klQSyZ+_DL218tcXv>tO5U6!A*O&KD(rb6Lbiqi-wQ8R2iyr6+3{xZ@Y@ z1tEj_!2|=spt!hU^N_JCkR^}@gu^g}g2)33W3m*+wHQXUQsx1y(lib^r#|%Ra8^Fo zhv0v1)L(HLn_0FjeDPHK;_EVa;1@((`0Zz8A!WR__-LvA*qjy>OGhhTP~@rs|+wxM4);;*k`~LLur`X7#uRuWF(+^I2^JV08VNl4*&oF literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata7_115.dta b/pandas/tests/io/data/stata/stata7_115.dta new file mode 100644 index 0000000000000000000000000000000000000000..133713b201ba8d5f3c8ff716bfa4e61638979da5 GIT binary patch literal 722 zcmXSBVq{=uU}S)RQ(-XR+Sng9taQ!|FYjQ`3KiwqeI z3=DCa1XN&zQxYTrRA3A=!2pjUaVC(Ys->PmIv!ORQmU543?ynG(FTTiSyl{dsVk6^ zn3S3W3|?5&!A!q+Ef6JYS7bYnqd9}F;2j|uNRbGx1PjAMpk9I2lNNnx2v@fk zKywuutW1D57&KXl5EPpX65bLCLpc*b_fmnW(g9nKqRQnksYF4zhuhKq0npqF)K`)6 z0mEo^y*b=4@o^nH{BZc`aI}*7{l2-HNp*+U4(}X3JA8Er)MSMbmp$G}M690%Lb0E5 ziF}WNPMHnuk>jx#3Ly!C(5Ib2Bt$dDq5%mtj1UxU6SB>oWdqfhI_W8m?b)&i2Kr}$ z`@T%MR;*gz4IU;!%u%X!MHc*E!3;osaoD@7zglc%P4zqQv*Q|(gzJoF$@xkD+nmF>^=TSBnbwI#E>8{BuFF%{~1cz zqh)qH?tA$XsDOlE5PZq4-}~+^@7}!$yG_!^6+f z8Yt9HbR2B9+jLWFS2fmHD(}f|FskRb&G=kAUso+gy^2I*adXf=-Q-nn<8yvOUndw1 z-ULb<=!E(@uljn0{*kd>D$H+=(@O-yPm30O@rLwu!?bB^fxZ}tDk1hXluc%C3 zR$l=QLVo}O(}Z&Jt3J&;N zjNRgvsY@uGFn)(Srf#7O!o)r9nRXq0B20x4Vj369CQOGBW||kuAFo|!g;@(J@VcwyQSDj+Pp;+1JzsF1MuhBu}ip(4Uk1QDh^ mp<=>v6j7#qp%TJM3^Ardp;E$X9C4;2p)vwYm`uk)<%D+)Z-evz literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata8_115.dta b/pandas/tests/io/data/stata/stata8_115.dta new file mode 100644 index 0000000000000000000000000000000000000000..bb78368b3462b142ccd0c8c399e3a18f335a88d3 GIT binary patch literal 1624 zcmeIzIV=QG7zgm#W!?9EG}{oB%q($LbV@qi5@FreeJy{bQmIrbl}a5YjYRh~?)zT$ z81EaO&Dw;BO2kXvzVH3=e{W{qPBLS5o956;wYTQq%CJjm4f_6KG8diED78NQ30dI9W61n3RJn=+UGlT z4-9u$k(h;%sTHWH{^}y-k%K6!uhcz}rQaz2!h&x+<}ZkJWm^A|E#_8s_gWjHZB25H znB4o6v(|gA{crewCOZKIfdd0eWy5Ost|Gz`pE>uA9 l1rcQ05Go|hhY(`g6e=Ptgb`-i7Ahvdg!%wL+Yu@uyaK&w28I9t literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata8_117.dta b/pandas/tests/io/data/stata/stata8_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..fcfa7abd7b0d995add24f8504e6ae6e7d36194a0 GIT binary patch literal 2063 zcmeI!J4_To7y#e}MDPhHDq=%SG*<2{5o{+Vz7-Ffcjm@gga*xl0MEH0dG;c?~( zS2(`lmes<{e1&xmN|Ev~;r^q$%q&z{J1;kw+0I!9zhD@;*uk0WbPAX2a#Ub4krcYC zWSZAlEe*Fay$y{qt4aUduo{_JXk})86iFw|_1(hHCyKQtQQ;=V9L4(5$S;;rB84yI zQQ;@W;fkm}O0ldms#j5DCicqu9WUW@y26%&Y2owrAQ!9!*FKS_BncLJkcjx zZ6jt;&wGPTu$t|?z9Tx}TBB|3e}^77<%B6amlPGkgyyFGI|;`hjhFc;Pr3P5ax z%ZGcn!>lLeB^~MWOV_W)dW(8Gu=+1tz|8#g^%lDsVTb3~j@ItL+5at#xYxx4FP!Xf zIzBf0KH@Q)gJ{tqcDn8NmQbscMQgms)wlSo&H$`w4Df+?gJ(P0JdG)yD45>+Tj&cF;(8&Rc#zFC+>x<_kRA{nRgj*Cd8Efg#}qtYfCZ!{M8_3)i?E0kCpw|PUxFp1G|@=~av7G928gN@ zWL97W=^atEg8o%lMS4$Equ@mrvPd6@PAM2zgEgd&M5h%D<{*dknW$F5%XL^s8X`KQ z;ME3fAblk|tKjt}Y$AOlI;Y^x7HlDXC#qBMb{n>leh{5k009I@zliD;Ff%*{%$J^v Q$AsdpR{?5KweTO{HzJm*I{*Lx literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata9_115.dta b/pandas/tests/io/data/stata/stata9_115.dta new file mode 100644 index 0000000000000000000000000000000000000000..5ad6cd6a2c8ff90bd34341ce087b1e14822d00a6 GIT binary patch literal 2342 zcmeH}OK4L;6o#ihPICwgGxMK$oOvV=2r6jW z6_h}pQI~N7oOz4}j3kr00f!D`DuNZc5*#=*2)OCO5Ltr&4-pua29oA50gq;wN2F~G z5Cxyfq5KlrkV?k-%eh!8k=z+eruHOKfSav=!&&&WL}YKe+_c=-V~l;4dsi6WwVYXL zg%-Qid}JB1{Ib^gzbv<`Gk&inU^Oa?Q(mAMkEKPW!~*i|ck2gmTeFg%qH=k}r9#GJ zO`l7B8-cr2lc_U;iEaYFn_#S)Am2?;Sze$sU{(x4kqfU72)R|gdJ|U3IAs7{Y=VXZr7x}0Gm1qHg!vxEt=#^Po-?_BeAvB6t zcP93)t5IjNed*16tP>It^z@Rx==SwMWwd`l*@?FYov==2rqAl^tAWBc(PQ+;5B2{$ z{0DN_^5WZr1lc_0G%FaFPhTM$5WpQZ@+qf_KVXsWTkVd6Q1v4}&Ifedm4@_XacYL> zjHPRN*wDG_pbM{Ox4rwU;;KA1*e{7rU)-!Ye|16Y>bdut)!eM%N%3d zd%X3TBD%d$*KE8oT>r%Kz9AZM5PB(&j!x=%&VT(WeL3*M8BKI#+VH~-!@2W@)02|l zPkh=@)8k#+{-cg$sZKRC(fE|%z3YaxbB2Al9Hh(K*{B4pw*vyfJ+)hwEpLXZZF8G{ Gjs5^At5M(p literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/stata/stata9_117.dta b/pandas/tests/io/data/stata/stata9_117.dta new file mode 100644 index 0000000000000000000000000000000000000000..5ad6cd6a2c8ff90bd34341ce087b1e14822d00a6 GIT binary patch literal 2342 zcmeH}OK4L;6o#ihPICwgGxMK$oOvV=2r6jW z6_h}pQI~N7oOz4}j3kr00f!D`DuNZc5*#=*2)OCO5Ltr&4-pua29oA50gq;wN2F~G z5Cxyfq5KlrkV?k-%eh!8k=z+eruHOKfSav=!&&&WL}YKe+_c=-V~l;4dsi6WwVYXL zg%-Qid}JB1{Ib^gzbv<`Gk&inU^Oa?Q(mAMkEKPW!~*i|ck2gmTeFg%qH=k}r9#GJ zO`l7B8-cr2lc_U;iEaYFn_#S)Am2?;Sze$sU{(x4kqfU72)R|gdJ|U3IAs7{Y=VXZr7x}0Gm1qHg!vxEt=#^Po-?_BeAvB6t zcP93)t5IjNed*16tP>It^z@Rx==SwMWwd`l*@?FYov==2rqAl^tAWBc(PQ+;5B2{$ z{0DN_^5WZr1lc_0G%FaFPhTM$5WpQZ@+qf_KVXsWTkVd6Q1v4}&Ifedm4@_XacYL> zjHPRN*wDG_pbM{Ox4rwU;;KA1*e{7rU)-!Ye|16Y>bdut)!eM%N%3d zd%X3TBD%d$*KE8oT>r%Kz9AZM5PB(&j!x=%&VT(WeL3*M8BKI#+VH~-!@2W@)02|l zPkh=@)8k#+{-cg$sZKRC(fE|%z3YaxbB2Al9Hh(K*{B4pw*vyfJ+)hwEpLXZZF8G{ Gjs5^At5M(p literal 0 HcmV?d00001 From 2da8bad9c22b4dff27afee5bd8c1f9aa58e7e0e6 Mon Sep 17 00:00:00 2001 From: Lukas Bentkamp Date: Sat, 16 Nov 2019 17:34:38 +0100 Subject: [PATCH 12/12] Change more references to tm --- pandas/tests/extension/base/constructors.py | 6 +++--- pandas/tests/extension/base/getitem.py | 5 +++-- pandas/tests/extension/base/methods.py | 14 +++++++------- pandas/tests/extension/base/missing.py | 4 ++-- pandas/tests/extension/base/setitem.py | 2 +- pandas/tests/extension/decimal/test_decimal.py | 2 +- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/pandas/tests/extension/base/constructors.py b/pandas/tests/extension/base/constructors.py index 09585c5a4dd5c..def478ccb6a00 100644 --- a/pandas/tests/extension/base/constructors.py +++ b/pandas/tests/extension/base/constructors.py @@ -11,11 +11,11 @@ class BaseConstructorsTests(BaseExtensionTests): def test_from_sequence_from_cls(self, data): result = type(data)._from_sequence(data, dtype=data.dtype) - self.assert_extension_array_equal(result, data) + tm.assert_extension_array_equal(result, data) data = data[:0] result = type(data)._from_sequence(data, dtype=data.dtype) - self.assert_extension_array_equal(result, data) + tm.assert_extension_array_equal(result, data) def test_array_from_scalars(self, data): scalars = [data[0], data[1], data[2]] @@ -68,7 +68,7 @@ def test_from_dtype(self, data): def test_pandas_array(self, data): # pd.array(extension_array) should be idempotent... result = pd.array(data) - self.assert_extension_array_equal(result, data) + tm.assert_extension_array_equal(result, data) def test_pandas_array_dtype(self, data): # ... but specifying dtype will override idempotency diff --git a/pandas/tests/extension/base/getitem.py b/pandas/tests/extension/base/getitem.py index d56cc50f4739c..bfde796ce7229 100644 --- a/pandas/tests/extension/base/getitem.py +++ b/pandas/tests/extension/base/getitem.py @@ -2,6 +2,7 @@ import pytest import pandas as pd +import pandas.util.testing as tm from .base import BaseExtensionTests @@ -200,7 +201,7 @@ def test_take_negative(self, data): n = len(data) result = data.take([0, -n, n - 1, -1]) expected = data.take([0, 0, n - 1, n - 1]) - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) def test_take_non_na_fill_value(self, data_missing): fill_value = data_missing[1] # valid @@ -209,7 +210,7 @@ def test_take_non_na_fill_value(self, data_missing): array = data_missing._from_sequence([na, fill_value, na]) result = array.take([-1, 1], fill_value=fill_value, allow_fill=True) expected = array.take([1, 1]) - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) def test_take_pandas_style_negative_raises(self, data, na_value): with pytest.raises(ValueError): diff --git a/pandas/tests/extension/base/methods.py b/pandas/tests/extension/base/methods.py index d84d4d1cbc079..b09a86bfd32dc 100644 --- a/pandas/tests/extension/base/methods.py +++ b/pandas/tests/extension/base/methods.py @@ -120,7 +120,7 @@ def test_factorize(self, data_for_grouping, na_sentinel): expected_uniques = data_for_grouping.take([0, 4, 7]) tm.assert_numpy_array_equal(codes, expected_codes) - self.assert_extension_array_equal(uniques, expected_uniques) + tm.assert_extension_array_equal(uniques, expected_uniques) @pytest.mark.parametrize("na_sentinel", [-1, -2]) def test_factorize_equivalence(self, data_for_grouping, na_sentinel): @@ -128,7 +128,7 @@ def test_factorize_equivalence(self, data_for_grouping, na_sentinel): codes_2, uniques_2 = data_for_grouping.factorize(na_sentinel=na_sentinel) tm.assert_numpy_array_equal(codes_1, codes_2) - self.assert_extension_array_equal(uniques_1, uniques_2) + tm.assert_extension_array_equal(uniques_1, uniques_2) def test_factorize_empty(self, data): codes, uniques = pd.factorize(data[:0]) @@ -136,7 +136,7 @@ def test_factorize_empty(self, data): expected_uniques = type(data)._from_sequence([], dtype=data[:0].dtype) tm.assert_numpy_array_equal(codes, expected_codes) - self.assert_extension_array_equal(uniques, expected_uniques) + tm.assert_extension_array_equal(uniques, expected_uniques) def test_fillna_copy_frame(self, data_missing): arr = data_missing.take([1, 1]) @@ -240,7 +240,7 @@ def test_shift_non_empty_array(self, data, periods, indices): subset = data[:2] result = subset.shift(periods) expected = subset.take(indices, allow_fill=True) - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) @pytest.mark.parametrize("periods", [-4, -1, 0, 1, 4]) def test_shift_empty_array(self, data, periods): @@ -248,18 +248,18 @@ def test_shift_empty_array(self, data, periods): empty = data[:0] result = empty.shift(periods) expected = empty - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) def test_shift_fill_value(self, data): arr = data[:4] fill_value = data[0] result = arr.shift(1, fill_value=fill_value) expected = data.take([0, 0, 1, 2]) - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) result = arr.shift(-2, fill_value=fill_value) expected = data.take([2, 3, 0, 0]) - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) def test_hash_pandas_object_works(self, data, as_frame): # https://github.com/pandas-dev/pandas/issues/23066 diff --git a/pandas/tests/extension/base/missing.py b/pandas/tests/extension/base/missing.py index 21bbb365ab0f3..596e390151660 100644 --- a/pandas/tests/extension/base/missing.py +++ b/pandas/tests/extension/base/missing.py @@ -25,7 +25,7 @@ def test_isna(self, data_missing): def test_dropna_array(self, data_missing): result = data_missing.dropna() expected = data_missing[[1]] - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) def test_dropna_series(self, data_missing): ser = pd.Series(data_missing) @@ -56,7 +56,7 @@ def test_fillna_scalar(self, data_missing): valid = data_missing[1] result = data_missing.fillna(valid) expected = data_missing.fillna(valid) - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) def test_fillna_limit_pad(self, data_missing): arr = data_missing.take([1, 0, 0, 0, 1]) diff --git a/pandas/tests/extension/base/setitem.py b/pandas/tests/extension/base/setitem.py index 37cd680142673..da251c5b18211 100644 --- a/pandas/tests/extension/base/setitem.py +++ b/pandas/tests/extension/base/setitem.py @@ -181,7 +181,7 @@ def test_setitem_slice_mismatch_length_raises(self, data): def test_setitem_slice_array(self, data): arr = data[:5].copy() arr[:5] = data[-5:] - self.assert_extension_array_equal(arr, data[-5:]) + tm.assert_extension_array_equal(arr, data[-5:]) def test_setitem_scalar_key_sequence_raise(self, data): arr = data[:5].copy() diff --git a/pandas/tests/extension/decimal/test_decimal.py b/pandas/tests/extension/decimal/test_decimal.py index 86724d4d09819..f6a41019b555a 100644 --- a/pandas/tests/extension/decimal/test_decimal.py +++ b/pandas/tests/extension/decimal/test_decimal.py @@ -135,7 +135,7 @@ def test_take_na_value_other_decimal(self): arr = DecimalArray([decimal.Decimal("1.0"), decimal.Decimal("2.0")]) result = arr.take([0, -1], allow_fill=True, fill_value=decimal.Decimal("-1.0")) expected = DecimalArray([decimal.Decimal("1.0"), decimal.Decimal("-1.0")]) - self.assert_extension_array_equal(result, expected) + tm.assert_extension_array_equal(result, expected) class TestMissing(BaseDecimal, base.BaseMissingTests):