connorferster / handcalcs

Python library for converting Python calculations into rendered latex.
Apache License 2.0
5.59k stars 427 forks source link

KeyErrors on import handcalcs.render #192

Open MJFraker opened 10 months ago

MJFraker commented 10 months ago

Windows 11 machine, python 3.12 installed. Succesfully installed (I think) jupyterlab, handcalcs, and forallpeople; however, after opening the jupyter coding broweser and typing import handcalcs.render, i get a sereies of "KeyErrors":


KeyError Traceback (most recent call last) Cell In[6], line 1 ----> 1 import handcalcs.render

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\handcalcs__init.py:18 14 """ 15 Render arithmetic calucations in Jupyter as though they were written by hand. 16 """ 17 version__ = "1.6.5" # ---> 18 from .decorator import handcalc 19 from .global_config import set_option, save_config 21 all = ["handcalc"]

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\handcalcs\decorator.py:6 4 from functools import wraps 5 import inspect ----> 6 import innerscope 7 from .handcalcs import LatexRenderer 10 def handcalc( 11 override: str = "", 12 precision: int = 3, (...) 17 jupyter_display: bool = False, 18 ):

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\innerscope__init__.py:3 1 import importlib.metadata ----> 3 from .core import bindwith, call, callwith, scoped_function 5 try: 6 version = importlib.metadata.version("innerscope")

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\innerscope\core.py:39 16 NEW_CODE = ( 17 bytes([dis.opmap["LOAD_GLOBAL"]]) 18 + b"%b" (...) 21 + bytes([dis.opmap["BUILD_TUPLE"], 3, dis.opmap["RETURN_VALUE"], 0]) 22 ) 23 else: 24 NEW_CODE = ( 25 bytes([dis.opmap["LOAD_GLOBAL"]]) 26 + b"%b" 27 + bytes( 28 [ 29 dis.opmap["CACHE"], 30 0, 31 dis.opmap["CACHE"], 32 0, 33 dis.opmap["CACHE"], 34 0, 35 dis.opmap["CACHE"], 36 0, 37 dis.opmap["CACHE"], 38 0, ---> 39 dis.opmap["PRECALL"], 40 0, 41 dis.opmap["CACHE"], 42 0, 43 dis.opmap["CALL"], 44 0, 45 dis.opmap["CACHE"], 46 0, 47 dis.opmap["CACHE"], 48 0, 49 dis.opmap["CACHE"], 50 0, 51 dis.opmap["CACHE"], 52 0, 53 dis.opmap["LOAD_GLOBAL"], 54 ] 55 ) 56 + b"%b" 57 + bytes( 58 [ 59 dis.opmap["CACHE"], 60 0, 61 dis.opmap["CACHE"], 62 0, 63 dis.opmap["CACHE"], 64 0, 65 dis.opmap["CACHE"], 66 0, 67 dis.opmap["CACHE"], 68 0, 69 dis.opmap["BUILD_TUPLE"], 70 3, 71 dis.opmap["RETURN_VALUE"], 72 0, 73 ] 74 ) 75 ) 76 BUILTINS = set(dir(builtins)) 79 def _get_globals_recursive(func, *, seen=None, isclass=False):

KeyError: 'PRECALL'

raianerosa commented 10 months ago

I'm having the same problem and according to the comments in my question "Python 3.12 has removed PRECALL from its bytecode instructions, so it's likely that the handcalcs package needs an update."

MJFraker commented 10 months ago

I'm having the same problem and according to the comments in my question "Python 3.12 has removed PRECALL from its bytecode instructions, so it's likely that the handcalcs package needs an update."

Thanks for the response!

connorferster commented 10 months ago

Agreed. @eriknw it seems that there was a Python API breaking change affecting innerscope.

My bad for not testing the 3.12 release candidate. Should have seen it coming because of all the speed improvements planned for each upcoming Python release.

connorferster commented 10 months ago

Thanks @raianerosa @MJFraker for raising this issue

eriknw commented 10 months ago

My bad for being slow! Been traveling too much... I'll try to get to this soon even if it's just a workaround to make 3.12 work.

AnmolTanwar786 commented 8 months ago

I am facing the same issue while import handcalcs.render

rwaltera commented 7 months ago

Same problem, any updates regarding this topic?

eriknw commented 7 months ago

Try updating to the latest innerscope. I just created a new release (0.7.0) that should hopefully resolve this issue.

I'm sorry for the delay! I've had lots of, uh, "adventures" lately, and I updated innerscope to try to avoid issues like this in the future.

rwaltera commented 7 months ago

This seems to work for me, thank you :)