Skip to content

Commit 4d1d703

Browse files
committed
Improve nLevels checking for Integer
1 parent 05d6403 commit 4d1d703

2 files changed

Lines changed: 21 additions & 3 deletions

File tree

Deeploy/AbstractDataTypes.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ def typeMin(cls) -> int:
209209
else:
210210
return 0
211211

212+
@_classproperty
213+
def nLevels(cls) -> int:
214+
return cls.typeMax - cls.typeMin + 1
215+
212216
@classmethod
213217
def partialOrderUpcast(cls, otherCls: Type[Immediate]) -> bool:
214218
if issubclass(otherCls, IntegerImmediate):
@@ -234,6 +238,10 @@ def checkValue(cls, value: Union[int, Iterable[int], np.ndarray], ctxt: Optional
234238
return False
235239
return True
236240

241+
@classmethod
242+
def checkNumLevels(cls, nLevels: int, signed: bool) -> bool:
243+
return nLevels <= (cls.typeMax - cls.typeMin + 1)
244+
237245

238246
class FloatImmediate(Immediate[Union[float, Iterable[float]], _ImmediateType]):
239247
typeMantissa: int #: int: Represents the number of bits reserved for the mantissa part
@@ -353,6 +361,10 @@ def checkPromotion(cls, _value: Union[Optional[str], Pointer], ctxt: Optional[_N
353361
value = _value
354362
return cls.checkValue(value, ctxt)
355363

364+
@classmethod
365+
def checkNumLevels(cls, nLevels: int, signed: bool) -> bool:
366+
return cls.referencedType.checkNumLevels(nLevels, signed)
367+
356368
def __init__(self, _value: Union[Optional[str], Pointer], ctxt: Optional[_NetworkContext] = None):
357369
"""Initializes a pointer to a registered object in the NetworkContext
358370

Deeploy/CommonExtensions/TypeCheckers/SignPropTypeChecker.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import onnx_graphsurgeon as gs
2929

30+
from Deeploy.AbstractDataTypes import IntegerImmediate
3031
from Deeploy.DeeployTypes import ConstantBuffer, NetworkContext, NodeTypeChecker, OperatorRepresentation, VariableBuffer
3132

3233

@@ -66,9 +67,14 @@ def typeInferOutput(self, ctxt: NetworkContext, node: gs.Node,
6667
if signProp:
6768
nLevels = self._inferNumLevels(inputs, operatorRepresentation)
6869
signedness = self._inferSignedness(inputs, operatorRepresentation)
69-
70-
for obj, nLevels, sign in zip(outputs, nLevels, signedness):
71-
obj.nLevels = nLevels
70+
for obj, nLevel, sign in zip(outputs, nLevels, signedness):
71+
obj.nLevels = nLevel
7272
obj._signed = sign
7373

74+
if issubclass(obj._type.referencedType,
75+
IntegerImmediate) and not obj._type.checkNumLevels(nLevel, sign):
76+
print(
77+
f"[WARNING] {obj.name} has {nLevel} levels, but {obj._type.referencedType.typeName} only supports {obj._type.referencedType.nLevels} levels."
78+
)
79+
7480
return ctxt

0 commit comments

Comments
 (0)