Sometimes I want to define and call pure python method of jitclass instance in python context because there can be a method that is intended to be called in python context and hard to be implemented without using pure python code.
Below is a simple example.
from numba.experimental import jitclass
def some_pure_python_function1():
...
def some_pure_python_function2():
...
@jitclass
class A:
def __init__(self):
pass
# Do some heavy computation in numba context. Implementation is omitted
def compute(self):
pass
# Pure python method
def pretty_print(self):
some_pure_python_function1()
@jitclass
class B:
def __init__(self):
pass
# Do some heavy computation in numba context. Implementation is omitted
def compute(self):
pass
# Pure python method
def pretty_print(self):
some_pure_python_function2()
def compute_and_print(v):
"""
:param v: instance of any class that defines compute(self) and pretty_print(self) method
:return:
"""
v.compute()
v.pretty_print() # Throw TypeError for instance of A and B
a = A()
b = B()
compute_and_print(a) # Doesn't work
compute_and_print(b) # Doesn't work
I is there any way to do this?
If there is any way to get underlying python class from jitclass, the line v.pretty_print()
can be replaced by something like this : get_pyclass(v.__class__).pretty_print(v)
which works on python context but I’m not sure if it is possible to get underlying python class from jitclass.