-
Notifications
You must be signed in to change notification settings - Fork 18
Description
Executing the following statements within, e.g., Pycharm's Python Console results in a segfault:
from hydpy.models.hland_96 import *
parameterstep() # Process finished with exit code -1073741819 (0xC0000005)The reason is that Pycharm tries to find information about Cython-level arrays that have not been initialised. Hence, our current workaround is to play around in Pycharm's Python Console only in the pure Python mode:
from hydpy import pub
pub.options.usecython = False
from hydpy.models.hland_96 import *
parameterstep() # no problemWe could avoid this problem by activating Cython's initializedcheck option when compiling the models. However, this would increase simulation time by a few percent. Hence, we thought about just discussing this problem in the online documentation, but it would be clearly better if we could solve it without losing performance.
Here is a toy example:
class A:
@property
def p(self):
sys.exit(666)
a = A()
a. # Process finished with exit code 666Making p private (_p) or "special" (__p__) does not help. But removing p from the dir results fixes the problem:
import sys
class A:
@property
def f(self):
sys.exit(9)
def __dir__(self):
return [n for n in super().__dir__() if n != "f"]
a = A()
a. # no problemI hope 99% of all potentially uninitialised arrays are hidden behind a fastaccess attribute. Hence, we could either remove fastaccess from the __dir__ methods of classes that define a fastaccess attribute (at best, only when working in Cython mode). Or, we could remove the potentially problematic arrays (or just everything) from the __dir__ method of all FastAccess classes (at best, only from the Cython extension classes).