#10368·numba

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.