@@ -830,6 +830,42 @@ static_assert(not is_subtype_of(object, Any))
830830static_assert(is_subtype_of(int , Any | int ))
831831static_assert(is_subtype_of(Intersection[Any, int ], int ))
832832static_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]))
833869```
834870
835871The same for ` Unknown ` :
0 commit comments