@@ -830,6 +830,42 @@ static_assert(not is_subtype_of(object, Any))
830
830
static_assert(is_subtype_of(int , Any | int ))
831
831
static_assert(is_subtype_of(Intersection[Any, int ], int ))
832
832
static_assert(not is_subtype_of(tuple[int , int ], tuple[int , Any]))
833
+
834
+ class Covariant[T]:
835
+ def get (self ) -> T:
836
+ raise NotImplementedError
837
+
838
+ static_assert(not is_subtype_of(Covariant[Any], Covariant[Any]))
839
+ static_assert(not is_subtype_of(Covariant[Any], Covariant[int ]))
840
+ static_assert(not is_subtype_of(Covariant[int ], Covariant[Any]))
841
+ static_assert(is_subtype_of(Covariant[Any], Covariant[object ]))
842
+ static_assert(not is_subtype_of(Covariant[object ], Covariant[Any]))
843
+
844
+ class Contravariant[T]:
845
+ def receive (self , input : T): ...
846
+
847
+ static_assert(not is_subtype_of(Contravariant[Any], Contravariant[Any]))
848
+ static_assert(not is_subtype_of(Contravariant[Any], Contravariant[int ]))
849
+ static_assert(not is_subtype_of(Contravariant[int ], Contravariant[Any]))
850
+ static_assert(not is_subtype_of(Contravariant[Any], Contravariant[object ]))
851
+ static_assert(is_subtype_of(Contravariant[object ], Contravariant[Any]))
852
+
853
+ class Invariant[T]:
854
+ mutable_attribute: T
855
+
856
+ static_assert(not is_subtype_of(Invariant[Any], Invariant[Any]))
857
+ static_assert(not is_subtype_of(Invariant[Any], Invariant[int ]))
858
+ static_assert(not is_subtype_of(Invariant[int ], Invariant[Any]))
859
+ static_assert(not is_subtype_of(Invariant[Any], Invariant[object ]))
860
+ static_assert(not is_subtype_of(Invariant[object ], Invariant[Any]))
861
+
862
+ class Bivariant[T]: ...
863
+
864
+ static_assert(is_subtype_of(Bivariant[Any], Bivariant[Any]))
865
+ static_assert(is_subtype_of(Bivariant[Any], Bivariant[int ]))
866
+ static_assert(is_subtype_of(Bivariant[int ], Bivariant[Any]))
867
+ static_assert(is_subtype_of(Bivariant[Any], Bivariant[object ]))
868
+ static_assert(is_subtype_of(Bivariant[object ], Bivariant[Any]))
833
869
```
834
870
835
871
The same for ` Unknown ` :
0 commit comments