@@ -51,7 +51,6 @@ def function(x: int, y: list[int], z: Any):
51
51
import pyanalyze
52
52
from pyanalyze .extensions import CustomCheck
53
53
54
- from .find_unused import used
55
54
from .safe import all_of_type , safe_equals , safe_issubclass , safe_isinstance
56
55
57
56
T = TypeVar ("T" )
@@ -1023,133 +1022,6 @@ def simplify(self) -> GenericValue:
1023
1022
return GenericValue (self .typ , [arg ])
1024
1023
1025
1024
1026
- # TODO(jelle): Replace with SequenceValue
1027
- @used # for compatibility for now
1028
- @dataclass (unsafe_hash = True , init = False )
1029
- class SequenceIncompleteValue (GenericValue ):
1030
- """A :class:`TypedValue` subclass representing a sequence of known type and length.
1031
-
1032
- For example, the expression ``[int(self.foo)]`` may be typed as
1033
- ``SequenceIncompleteValue(list, [TypedValue(int)])``.
1034
-
1035
- This is only used for ``set``, ``list``, and ``tuple``.
1036
-
1037
- This type is being phased out in favor of :class:`SequenceValue`.
1038
-
1039
- """
1040
-
1041
- members : Tuple [Value , ...]
1042
- """The elements of the sequence."""
1043
-
1044
- def __init__ (self , typ : Union [type , str ], members : Sequence [Value ]) -> None :
1045
- if members :
1046
- args = (unite_values (* members ),)
1047
- else :
1048
- args = (AnyValue (AnySource .unreachable ),)
1049
- super ().__init__ (typ , args )
1050
- self .members = tuple (members )
1051
-
1052
- @classmethod
1053
- def make_or_known (
1054
- cls , typ : type , members : Sequence [Value ]
1055
- ) -> Union [KnownValue , "SequenceIncompleteValue" ]:
1056
- if all_of_type (members , KnownValue ):
1057
- return KnownValue (typ (member .val for member in members ))
1058
- else :
1059
- return SequenceIncompleteValue (typ , members )
1060
-
1061
- def can_assign (self , other : Value , ctx : CanAssignContext ) -> CanAssign :
1062
- if isinstance (other , SequenceIncompleteValue ):
1063
- can_assign = self .get_type_object (ctx ).can_assign (self , other , ctx )
1064
- if isinstance (can_assign , CanAssignError ):
1065
- return CanAssignError (
1066
- f"Cannot assign { stringify_object (other .typ )} to"
1067
- f" { stringify_object (self .typ )} "
1068
- )
1069
- my_len = len (self .members )
1070
- their_len = len (other .members )
1071
- if my_len != their_len :
1072
- type_str = stringify_object (self .typ )
1073
- return CanAssignError (
1074
- f"Cannot assign { type_str } of length { their_len } to { type_str } of"
1075
- f" length { my_len } "
1076
- )
1077
- if my_len == 0 :
1078
- return {} # they're both empty
1079
- bounds_maps = [can_assign ]
1080
- for i , (my_member , their_member ) in enumerate (
1081
- zip (self .members , other .members )
1082
- ):
1083
- can_assign = my_member .can_assign (their_member , ctx )
1084
- if isinstance (can_assign , CanAssignError ):
1085
- return CanAssignError (
1086
- f"Types for member { i } are incompatible" , [can_assign ]
1087
- )
1088
- bounds_maps .append (can_assign )
1089
- return unify_bounds_maps (bounds_maps )
1090
- elif isinstance (other , SequenceValue ):
1091
- can_assign = self .get_type_object (ctx ).can_assign (self , other , ctx )
1092
- if isinstance (can_assign , CanAssignError ):
1093
- return CanAssignError (
1094
- f"Cannot assign { stringify_object (other .typ )} to"
1095
- f" { stringify_object (self .typ )} "
1096
- )
1097
- my_len = len (self .members )
1098
- their_len = len (other .members )
1099
- if my_len != their_len :
1100
- type_str = stringify_object (self .typ )
1101
- return CanAssignError (
1102
- f"Cannot assign { type_str } of length { their_len } to { type_str } of"
1103
- f" length { my_len } "
1104
- )
1105
- if my_len == 0 :
1106
- return {} # they're both empty
1107
- bounds_maps = [can_assign ]
1108
- for i , (my_member , (is_many , their_member )) in enumerate (
1109
- zip (self .members , other .members )
1110
- ):
1111
- if is_many :
1112
- return CanAssignError (
1113
- f"Member { i } is a single element, but an unpacked type is"
1114
- " provided"
1115
- )
1116
- can_assign = my_member .can_assign (their_member , ctx )
1117
- if isinstance (can_assign , CanAssignError ):
1118
- return CanAssignError (
1119
- f"Types for member { i } are incompatible" , [can_assign ]
1120
- )
1121
- bounds_maps .append (can_assign )
1122
- return unify_bounds_maps (bounds_maps )
1123
- return super ().can_assign (other , ctx )
1124
-
1125
- def substitute_typevars (self , typevars : TypeVarMap ) -> Value :
1126
- return SequenceIncompleteValue (
1127
- self .typ , [member .substitute_typevars (typevars ) for member in self .members ]
1128
- )
1129
-
1130
- def __str__ (self ) -> str :
1131
- members = ", " .join (str (m ) for m in self .members )
1132
- if self .typ is tuple :
1133
- return f"tuple[{ members } ]"
1134
- return f"<{ stringify_object (self .typ )} containing [{ members } ]>"
1135
-
1136
- def walk_values (self ) -> Iterable [Value ]:
1137
- yield self
1138
- for member in self .members :
1139
- yield from member .walk_values ()
1140
-
1141
- def simplify (self ) -> GenericValue :
1142
- if self .typ is tuple :
1143
- return SequenceIncompleteValue (
1144
- tuple , [member .simplify () for member in self .members ]
1145
- )
1146
- members = [member .simplify () for member in self .members ]
1147
- arg = unite_values (* members )
1148
- if arg is NO_RETURN_VALUE :
1149
- arg = AnyValue (AnySource .unreachable )
1150
- return GenericValue (self .typ , [arg ])
1151
-
1152
-
1153
1025
@dataclass (frozen = True )
1154
1026
class KVPair :
1155
1027
"""Represents a single entry in a :class:`DictIncompleteValue`."""
0 commit comments