@@ -2339,6 +2339,55 @@ reveal_type(B().x) # revealed: Unknown | Literal[1]
23392339reveal_type(A().x) # revealed: Unknown | Literal[1]
23402340```
23412341
2342+ And cycles between many attributes:
2343+
2344+ ``` py
2345+ class ManyCycles :
2346+ def __init__ (self : " ManyCycles" ):
2347+ self .x1 = 0
2348+ self .x2 = 0
2349+ self .x3 = 0
2350+ self .x4 = 0
2351+ self .x5 = 0
2352+ self .x6 = 0
2353+ self .x7 = 1
2354+
2355+ def f1 (self : " ManyCycles" ):
2356+ self .x1 = self .x2 + self .x3 + self .x4 + self .x5 + self .x6 + self .x7
2357+ self .x2 = self .x1 + self .x3 + self .x4 + self .x5 + self .x6 + self .x7
2358+ self .x3 = self .x1 + self .x2 + self .x4 + self .x5 + self .x6 + self .x7
2359+ self .x4 = self .x1 + self .x2 + self .x3 + self .x5 + self .x6 + self .x7
2360+ self .x5 = self .x1 + self .x2 + self .x3 + self .x4 + self .x6 + self .x7
2361+ self .x6 = self .x1 + self .x2 + self .x3 + self .x4 + self .x5 + self .x7
2362+ self .x7 = self .x1 + self .x2 + self .x3 + self .x4 + self .x5 + self .x6
2363+
2364+ def f2 (self : " ManyCycles" ):
2365+ self .x1 = self .x2 + self .x3 + self .x4 + self .x5 + self .x6 + self .x7
2366+ self .x2 = self .x1 + self .x3 + self .x4 + self .x5 + self .x6 + self .x7
2367+ self .x3 = self .x1 + self .x2 + self .x4 + self .x5 + self .x6 + self .x7
2368+ self .x4 = self .x1 + self .x2 + self .x3 + self .x5 + self .x6 + self .x7
2369+ self .x5 = self .x1 + self .x2 + self .x3 + self .x4 + self .x6 + self .x7
2370+ self .x6 = self .x1 + self .x2 + self .x3 + self .x4 + self .x5 + self .x7
2371+ self .x7 = self .x1 + self .x2 + self .x3 + self .x4 + self .x5 + self .x6
2372+
2373+ def f3 (self : " ManyCycles" ):
2374+ self .x1 = self .x2 + self .x3 + self .x4 + self .x5 + self .x6 + self .x7
2375+ self .x2 = self .x1 + self .x3 + self .x4 + self .x5 + self .x6 + self .x7
2376+ self .x3 = self .x1 + self .x2 + self .x4 + self .x5 + self .x6 + self .x7
2377+ self .x4 = self .x1 + self .x2 + self .x3 + self .x5 + self .x6 + self .x7
2378+ self .x5 = self .x1 + self .x2 + self .x3 + self .x4 + self .x6 + self .x7
2379+ self .x6 = self .x1 + self .x2 + self .x3 + self .x4 + self .x5 + self .x7
2380+ self .x7 = self .x1 + self .x2 + self .x3 + self .x4 + self .x5 + self .x6
2381+
2382+ reveal_type(self .x1) # revealed: Unknown | int
2383+ reveal_type(self .x2) # revealed: Unknown | int
2384+ reveal_type(self .x3) # revealed: Unknown | int
2385+ reveal_type(self .x4) # revealed: Unknown | int
2386+ reveal_type(self .x5) # revealed: Unknown | int
2387+ reveal_type(self .x6) # revealed: Unknown | int
2388+ reveal_type(self .x7) # revealed: Unknown | int
2389+ ```
2390+
23422391This case additionally tests our union/intersection simplification logic:
23432392
23442393``` py
0 commit comments