You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			133 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
import pytest
 | 
						|
 | 
						|
from pandas import Series
 | 
						|
from pandas.core.strings.accessor import StringMethods
 | 
						|
 | 
						|
_any_string_method = [
 | 
						|
    ("cat", (), {"sep": ","}),
 | 
						|
    ("cat", (Series(list("zyx")),), {"sep": ",", "join": "left"}),
 | 
						|
    ("center", (10,), {}),
 | 
						|
    ("contains", ("a",), {}),
 | 
						|
    ("count", ("a",), {}),
 | 
						|
    ("decode", ("UTF-8",), {}),
 | 
						|
    ("encode", ("UTF-8",), {}),
 | 
						|
    ("endswith", ("a",), {}),
 | 
						|
    ("endswith", ((),), {}),
 | 
						|
    ("endswith", (("a",),), {}),
 | 
						|
    ("endswith", (("a", "b"),), {}),
 | 
						|
    ("endswith", (("a", "MISSING"),), {}),
 | 
						|
    ("endswith", ("a",), {"na": True}),
 | 
						|
    ("endswith", ("a",), {"na": False}),
 | 
						|
    ("extract", ("([a-z]*)",), {"expand": False}),
 | 
						|
    ("extract", ("([a-z]*)",), {"expand": True}),
 | 
						|
    ("extractall", ("([a-z]*)",), {}),
 | 
						|
    ("find", ("a",), {}),
 | 
						|
    ("findall", ("a",), {}),
 | 
						|
    ("get", (0,), {}),
 | 
						|
    # because "index" (and "rindex") fail intentionally
 | 
						|
    # if the string is not found, search only for empty string
 | 
						|
    ("index", ("",), {}),
 | 
						|
    ("join", (",",), {}),
 | 
						|
    ("ljust", (10,), {}),
 | 
						|
    ("match", ("a",), {}),
 | 
						|
    ("fullmatch", ("a",), {}),
 | 
						|
    ("normalize", ("NFC",), {}),
 | 
						|
    ("pad", (10,), {}),
 | 
						|
    ("partition", (" ",), {"expand": False}),
 | 
						|
    ("partition", (" ",), {"expand": True}),
 | 
						|
    ("repeat", (3,), {}),
 | 
						|
    ("replace", ("a", "z"), {}),
 | 
						|
    ("rfind", ("a",), {}),
 | 
						|
    ("rindex", ("",), {}),
 | 
						|
    ("rjust", (10,), {}),
 | 
						|
    ("rpartition", (" ",), {"expand": False}),
 | 
						|
    ("rpartition", (" ",), {"expand": True}),
 | 
						|
    ("slice", (0, 1), {}),
 | 
						|
    ("slice_replace", (0, 1, "z"), {}),
 | 
						|
    ("split", (" ",), {"expand": False}),
 | 
						|
    ("split", (" ",), {"expand": True}),
 | 
						|
    ("startswith", ("a",), {}),
 | 
						|
    ("startswith", (("a",),), {}),
 | 
						|
    ("startswith", (("a", "b"),), {}),
 | 
						|
    ("startswith", (("a", "MISSING"),), {}),
 | 
						|
    ("startswith", ((),), {}),
 | 
						|
    ("startswith", ("a",), {"na": True}),
 | 
						|
    ("startswith", ("a",), {"na": False}),
 | 
						|
    ("removeprefix", ("a",), {}),
 | 
						|
    ("removesuffix", ("a",), {}),
 | 
						|
    # translating unicode points of "a" to "d"
 | 
						|
    ("translate", ({97: 100},), {}),
 | 
						|
    ("wrap", (2,), {}),
 | 
						|
    ("zfill", (10,), {}),
 | 
						|
] + list(
 | 
						|
    zip(
 | 
						|
        [
 | 
						|
            # methods without positional arguments: zip with empty tuple and empty dict
 | 
						|
            "capitalize",
 | 
						|
            "cat",
 | 
						|
            "get_dummies",
 | 
						|
            "isalnum",
 | 
						|
            "isalpha",
 | 
						|
            "isdecimal",
 | 
						|
            "isdigit",
 | 
						|
            "islower",
 | 
						|
            "isnumeric",
 | 
						|
            "isspace",
 | 
						|
            "istitle",
 | 
						|
            "isupper",
 | 
						|
            "len",
 | 
						|
            "lower",
 | 
						|
            "lstrip",
 | 
						|
            "partition",
 | 
						|
            "rpartition",
 | 
						|
            "rsplit",
 | 
						|
            "rstrip",
 | 
						|
            "slice",
 | 
						|
            "slice_replace",
 | 
						|
            "split",
 | 
						|
            "strip",
 | 
						|
            "swapcase",
 | 
						|
            "title",
 | 
						|
            "upper",
 | 
						|
            "casefold",
 | 
						|
        ],
 | 
						|
        [()] * 100,
 | 
						|
        [{}] * 100,
 | 
						|
    )
 | 
						|
)
 | 
						|
ids, _, _ = zip(*_any_string_method)  # use method name as fixture-id
 | 
						|
missing_methods = {f for f in dir(StringMethods) if not f.startswith("_")} - set(ids)
 | 
						|
 | 
						|
# test that the above list captures all methods of StringMethods
 | 
						|
assert not missing_methods
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture(params=_any_string_method, ids=ids)
 | 
						|
def any_string_method(request):
 | 
						|
    """
 | 
						|
    Fixture for all public methods of `StringMethods`
 | 
						|
 | 
						|
    This fixture returns a tuple of the method name and sample arguments
 | 
						|
    necessary to call the method.
 | 
						|
 | 
						|
    Returns
 | 
						|
    -------
 | 
						|
    method_name : str
 | 
						|
        The name of the method in `StringMethods`
 | 
						|
    args : tuple
 | 
						|
        Sample values for the positional arguments
 | 
						|
    kwargs : dict
 | 
						|
        Sample values for the keyword arguments
 | 
						|
 | 
						|
    Examples
 | 
						|
    --------
 | 
						|
    >>> def test_something(any_string_method):
 | 
						|
    ...     s = Series(['a', 'b', np.nan, 'd'])
 | 
						|
    ...
 | 
						|
    ...     method_name, args, kwargs = any_string_method
 | 
						|
    ...     method = getattr(s.str, method_name)
 | 
						|
    ...     # will not raise
 | 
						|
    ...     method(*args, **kwargs)
 | 
						|
    """
 | 
						|
    return request.param
 |