isinstance in jit code yields an unsafe cast warning
Author: c200chromebookCreated Dec 4, 2025Updated Sep 16, 2026
Labelsbugeasy
import numba as nb
from typing import List
from numba.experimental import jitclass
from numba.typed import List as NumbaList
class NumbaClass:
def __init__(self):
self.value = 2
value: int
class NumbaClass2:
def __init__(self):
self.value = 2
self.value2 = 3
value: int
value2: int
NumbaClassJit = nb.experimental.jitclass(NumbaClass)
NumbaClassJitInst = NumbaClassJit.class_type.instance_type
NumbaClass2Jit = nb.experimental.jitclass(NumbaClass2)
NumbaClass2JitInst = NumbaClass2Jit.class_type.instance_type
@nb.experimental.jitclass
class NumbaClassHolder:
def __init__(self):
self.ncj = NumbaList.empty_list(NumbaClassJitInst)
self.ncj2 = NumbaList.empty_list(NumbaClass2JitInst)
ncj: List[NumbaClassJit]
ncj2: List[NumbaClass2Jit]
def add_item(self,item):
if isinstance(item, NumbaClassJit):
self.ncj.append(item)
elif isinstance(item, NumbaClass2Jit):
self.ncj2.append(item)
nch = NumbaClassHolder()
nch.add_item(NumbaClassJit())
nch.add_item(NumbaClass2Jit())
print(nch.ncj,nch.ncj2)The above code yields:
<string>:3: NumbaTypeSafetyWarning: unsafe cast from instance.jitclass.NumbaClass#20d5195b9e0<value:int64> to instance.jitclass.NumbaClass2#20d51de3ef0<value:int64,value2:int64>. Precision may be lost.
<string>:3: NumbaTypeSafetyWarning: unsafe cast from instance.jitclass.NumbaClass2#20d51de3ef0<value:int64,value2:int64> to instance.jitclass.NumbaClass#20d5195b9e0<value:int64>. Precision may be lost.The warning is, I'm pretty sure, not correct.
Source: numba/numba