Path 1: 42 calls (0.79)

'w' (13) 'wb' (8) 'w+b' (3) 'wt' (3) 'w+' (3) 'r' (2) 'rb' (1) 'x' (1) 'br' (1) '+r' (1)

True (42)

1def _check_mode_str(mode: Any) -> bool:
2    # check type
3    if not isinstance(mode, str):
4        return False
5    # check syntax
6    modes = set(mode)
7    _mode = "rwatb+Ux"
8    creating = "x" in modes
9    if modes - set(_mode) or len(mode) > len(modes):
10        return False
11    # check logic
12    reading = "r" in modes
13    writing = "w" in modes
14    appending = "a" in modes
15    text = "t" in modes
16    binary = "b" in modes
17    if "U" in modes:
18        if writing or appending or creating:
19            return False
20        reading = True
21    if text and binary:
22        return False
23    total = reading + writing + appending + creating
24    if total > 1:
25        return False
26    if not (reading or writing or appending or creating):
27        return False
28    return True
            

Path 2: 3 calls (0.06)

'+rUb' (1) 'Ut' (1) 'Ubr' (1)

True (3)

1def _check_mode_str(mode: Any) -> bool:
2    # check type
3    if not isinstance(mode, str):
4        return False
5    # check syntax
6    modes = set(mode)
7    _mode = "rwatb+Ux"
8    creating = "x" in modes
9    if modes - set(_mode) or len(mode) > len(modes):
10        return False
11    # check logic
12    reading = "r" in modes
13    writing = "w" in modes
14    appending = "a" in modes
15    text = "t" in modes
16    binary = "b" in modes
17    if "U" in modes:
18        if writing or appending or creating:
19            return False
20        reading = True
21    if text and binary:
22        return False
23    total = reading + writing + appending + creating
24    if total > 1:
25        return False
26    if not (reading or writing or appending or creating):
27        return False
28    return True
            

Path 3: 2 calls (0.04)

'rwx' (1) 'xw' (1)

False (2)

1def _check_mode_str(mode: Any) -> bool:
2    # check type
3    if not isinstance(mode, str):
4        return False
5    # check syntax
6    modes = set(mode)
7    _mode = "rwatb+Ux"
8    creating = "x" in modes
9    if modes - set(_mode) or len(mode) > len(modes):
10        return False
11    # check logic
12    reading = "r" in modes
13    writing = "w" in modes
14    appending = "a" in modes
15    text = "t" in modes
16    binary = "b" in modes
17    if "U" in modes:
18        if writing or appending or creating:
19            return False
20        reading = True
21    if text and binary:
22        return False
23    total = reading + writing + appending + creating
24    if total > 1:
25        return False
26    if not (reading or writing or appending or creating):
27        return False
28    return True
            

Path 4: 2 calls (0.04)

'rr' (1) 'Ur++' (1)

False (2)

1def _check_mode_str(mode: Any) -> bool:
2    # check type
3    if not isinstance(mode, str):
4        return False
5    # check syntax
6    modes = set(mode)
7    _mode = "rwatb+Ux"
8    creating = "x" in modes
9    if modes - set(_mode) or len(mode) > len(modes):
10        return False
11    # check logic
12    reading = "r" in modes
13    writing = "w" in modes
14    appending = "a" in modes
15    text = "t" in modes
16    binary = "b" in modes
17    if "U" in modes:
18        if writing or appending or creating:
19            return False
20        reading = True
21    if text and binary:
22        return False
23    total = reading + writing + appending + creating
24    if total > 1:
25        return False
26    if not (reading or writing or appending or creating):
27        return False
28    return True
            

Path 5: 2 calls (0.04)

None (1) 2 (1)

False (2)

1def _check_mode_str(mode: Any) -> bool:
2    # check type
3    if not isinstance(mode, str):
4        return False
5    # check syntax
6    modes = set(mode)
7    _mode = "rwatb+Ux"
8    creating = "x" in modes
9    if modes - set(_mode) or len(mode) > len(modes):
10        return False
11    # check logic
12    reading = "r" in modes
13    writing = "w" in modes
14    appending = "a" in modes
15    text = "t" in modes
16    binary = "b" in modes
17    if "U" in modes:
18        if writing or appending or creating:
19            return False
20        reading = True
21    if text and binary:
22        return False
23    total = reading + writing + appending + creating
24    if total > 1:
25        return False
26    if not (reading or writing or appending or creating):
27        return False
28    return True
            

Path 6: 1 calls (0.02)

'+' (1)

False (1)

1def _check_mode_str(mode: Any) -> bool:
2    # check type
3    if not isinstance(mode, str):
4        return False
5    # check syntax
6    modes = set(mode)
7    _mode = "rwatb+Ux"
8    creating = "x" in modes
9    if modes - set(_mode) or len(mode) > len(modes):
10        return False
11    # check logic
12    reading = "r" in modes
13    writing = "w" in modes
14    appending = "a" in modes
15    text = "t" in modes
16    binary = "b" in modes
17    if "U" in modes:
18        if writing or appending or creating:
19            return False
20        reading = True
21    if text and binary:
22        return False
23    total = reading + writing + appending + creating
24    if total > 1:
25        return False
26    if not (reading or writing or appending or creating):
27        return False
28    return True
            

Path 7: 1 calls (0.02)

'Ua' (1)

False (1)

1def _check_mode_str(mode: Any) -> bool:
2    # check type
3    if not isinstance(mode, str):
4        return False
5    # check syntax
6    modes = set(mode)
7    _mode = "rwatb+Ux"
8    creating = "x" in modes
9    if modes - set(_mode) or len(mode) > len(modes):
10        return False
11    # check logic
12    reading = "r" in modes
13    writing = "w" in modes
14    appending = "a" in modes
15    text = "t" in modes
16    binary = "b" in modes
17    if "U" in modes:
18        if writing or appending or creating:
19            return False
20        reading = True
21    if text and binary:
22        return False
23    total = reading + writing + appending + creating
24    if total > 1:
25        return False
26    if not (reading or writing or appending or creating):
27        return False
28    return True