monocongo/climate_indices

LoweringError

Opened this issue · 8 comments

I get LoweringError from the following code:

import pandas as pd
from climate_indices import indices

metadata = pd.read_csv("data/1012475.metadata")
station_id = metadata["Station"][0]
lat = metadata["Lat"][0]
awc = metadata["AWCmm"][0]
column_names = ["station_id", "year", "month", "day", "tmax", "tmin", "prcp"]
station_data = pd.read_csv("data/1012475.dat", header=None, names=column_names, delim_whitespace=True)
station_data["date"] = station_data[["year", "month", "day"]].apply(lambda s : pd.datetime(*s), axis = 1)
station_data.drop(columns=["year", "month", "day"], inplace=True)
station_data.set_index("date", inplace=True)
start_year = station_data.index[0].year
end_year = station_data.index[-1].year
tavg_daily = ((station_data["tmin"] + station_data["tmax"]) / 2)
tavg = tavg_daily.resample('1M').mean().values
prcp = station_data["prcp"].resample('1M').sum().values
pet = indices.pet(tavg, lat, start_year)
prcp = prcp * 0.0393701
pet = pet * 0.0393701
awc = awc * 0.0393701
scpdsi, pdsi, phdi, pmdi, zindex = indices.scpdsi(prcp, pet, awc, start_year, start_year, end_year)

Traceback

```python Traceback (most recent call last):

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/errors.py", line 717, in new_error_context
yield

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/lowering.py", line 288, in lower_block
self.lower_inst(inst)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/pylowering.py", line 176, in lower_inst
raise NotImplementedError(type(inst), inst)

NotImplementedError: (<class 'numba.ir.EnterWith'>, <numba.ir.EnterWith object at 0x7f64e823de80>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "", line 4, in
scpdsi, pdsi, phdi, pmdi, zindex = indices.scpdsi(prcp, pet, awc, start_year, start_year, end_year)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/dispatcher.py", line 420, in _compile_for_args
raise e

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/dispatcher.py", line 353, in _compile_for_args
return self.compile(tuple(argtypes))

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler_lock.py", line 32, in _acquire_compile_lock
return func(*args, **kwargs)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/dispatcher.py", line 768, in compile
cres = self._compiler.compile(args, return_type)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/dispatcher.py", line 77, in compile
status, retval = self._compile_cached(args, return_type)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/dispatcher.py", line 91, in _compile_cached
retval = self._compile_core(args, return_type)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/dispatcher.py", line 109, in _compile_core
pipeline_class=self.pipeline_class)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler.py", line 551, in compile_extra
return pipeline.compile_extra(func)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler.py", line 331, in compile_extra
return self._compile_bytecode()

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler.py", line 393, in _compile_bytecode
return self._compile_core()

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler.py", line 373, in _compile_core
raise e

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler.py", line 364, in _compile_core
pm.run(self.state)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler_machinery.py", line 347, in run
raise patched_exception

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler_machinery.py", line 338, in run
self._runPass(idx, pass_inst, state)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler_lock.py", line 32, in _acquire_compile_lock
return func(*args, **kwargs)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler_machinery.py", line 302, in _runPass
mutated |= check(pss.run_pass, internal_state)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/compiler_machinery.py", line 275, in check
mangled = func(compiler_state)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/object_mode_passes.py", line 145, in run_pass
lowered = backend_object_mode()

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/object_mode_passes.py", line 143, in backend_object_mode
state.flags)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/object_mode_passes.py", line 100, in _py_lowering_stage
lower.lower()

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/lowering.py", line 195, in lower
self.lower_normal_function(self.fndesc)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/lowering.py", line 248, in lower_normal_function
entry_block_tail = self.lower_function_body()

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/lowering.py", line 273, in lower_function_body
self.lower_block(block)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/lowering.py", line 288, in lower_block
self.lower_inst(inst)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/contextlib.py", line 130, in exit
self.gen.throw(type, value, traceback)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/errors.py", line 725, in new_error_context
six.reraise(type(newerr), newerr, tb)

File "/home/pmburu/miniconda3/envs/indices_env/lib/python3.7/site-packages/numba/six.py", line 669, in reraise
raise value

LoweringError: (<class 'numba.ir.EnterWith'>, <numba.ir.EnterWith object at 0x7f64e823de80>)


</details>

**Desktop:**
- OS: Linux Mint 
- Version: 19.2 Tina

**Additional context**
`climate-indices==1.0.9`

Please provide me with the file 1012475.metadata so I can reproduce the error and debug. This is an issue with numba. My assumption is that at a minimum you can bypass numba by setting NUMBA_DISABLE_JIT=1 to get you past this issue until a more suitable solution is worked out.

Thanks a lot for the quick response and solution. I'm testing the code using the data in https://github.com/monocongo/climate_indices/tree/master/notebooks/data.

@samburu This appears to be remedied by removing the Numba just-in-time compilation decorator on the palmer._cafec_coefficients function (line 428). Try commenting that out and running the code again to see if it works for you then.

@monocongo Thanks a ton commenting numba decorator for palmer._cafec_coefficients works.

@monocongo what do you think of a new version of climate-indices==1.1.0 with numba decorator for palmer._cafec_coefficients commented?

Yes, I agree, that numba decorator needs to be removed until we can work out how to use numba effectively for the palmer._cafec_coefficients function.

Anything I can do to assist with release of new version of climate-indices?

Sorry for the delay on this, @samburu. I hope to make a new release v1.0.10 to include this removed numba decorator and a few other minor changes in the next few days.