@@ -1830,7 +1830,8 @@ reveal_type(unify(func)) # N: Revealed type is "<nothing>"
18301830--
18311831
18321832[case testLiteralIntelligentIndexingTuples]
1833- from typing import Tuple, NamedTuple
1833+ # flags: --strict-optional
1834+ from typing import Tuple, NamedTuple, Optional, Final
18341835from typing_extensions import Literal
18351836
18361837class A: pass
@@ -1846,17 +1847,23 @@ idx3: Literal[3]
18461847idx4: Literal[4]
18471848idx5: Literal[5]
18481849idx_neg1: Literal[-1]
1850+ idx_final: Final = 2
18491851
1850- tup1: Tuple[A, B, C , D, E]
1852+ tup1: Tuple[A, B, Optional[C] , D, E]
18511853reveal_type(tup1[idx0]) # N: Revealed type is "__main__.A"
18521854reveal_type(tup1[idx1]) # N: Revealed type is "__main__.B"
1853- reveal_type(tup1[idx2]) # N: Revealed type is "__main__.C"
1855+ reveal_type(tup1[idx2]) # N: Revealed type is "Union[__main__.C, None]"
1856+ reveal_type(tup1[idx_final]) # N: Revealed type is "Union[__main__.C, None]"
18541857reveal_type(tup1[idx3]) # N: Revealed type is "__main__.D"
18551858reveal_type(tup1[idx4]) # N: Revealed type is "__main__.E"
18561859reveal_type(tup1[idx_neg1]) # N: Revealed type is "__main__.E"
18571860tup1[idx5] # E: Tuple index out of range
1858- reveal_type(tup1[idx2:idx4]) # N: Revealed type is "Tuple[__main__.C, __main__.D]"
1859- reveal_type(tup1[::idx2]) # N: Revealed type is "Tuple[__main__.A, __main__.C, __main__.E]"
1861+ reveal_type(tup1[idx2:idx4]) # N: Revealed type is "Tuple[Union[__main__.C, None], __main__.D]"
1862+ reveal_type(tup1[::idx2]) # N: Revealed type is "Tuple[__main__.A, Union[__main__.C, None], __main__.E]"
1863+ if tup1[idx2] is not None:
1864+ reveal_type(tup1[idx2]) # N: Revealed type is "Union[__main__.C, None]"
1865+ if tup1[idx_final] is not None:
1866+ reveal_type(tup1[idx_final]) # N: Revealed type is "__main__.C"
18601867
18611868Tup2Class = NamedTuple('Tup2Class', [('a', A), ('b', B), ('c', C), ('d', D), ('e', E)])
18621869tup2: Tup2Class
@@ -1870,7 +1877,6 @@ tup2[idx5] # E: Tuple index out of range
18701877reveal_type(tup2[idx2:idx4]) # N: Revealed type is "Tuple[__main__.C, __main__.D, fallback=__main__.Tup2Class]"
18711878reveal_type(tup2[::idx2]) # N: Revealed type is "Tuple[__main__.A, __main__.C, __main__.E, fallback=__main__.Tup2Class]"
18721879[builtins fixtures/slice.pyi]
1873- [out]
18741880
18751881[case testLiteralIntelligentIndexingTypedDict]
18761882from typing_extensions import Literal
0 commit comments