Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Upgrading from 0.15.2 to 0.16.x goes boom, boom, boom #527

Open
Kochise opened this issue May 23, 2023 · 9 comments
Open

[BUG] Upgrading from 0.15.2 to 0.16.x goes boom, boom, boom #527

Kochise opened this issue May 23, 2023 · 9 comments

Comments

@Kochise
Copy link

Kochise commented May 23, 2023

Enaml app, using @enamlx as well, worked nice on Feb 20th 2023, but then 0.16.0 was published :

Install

pip install --no-cache-dir --upgrade pip

pip install --no-cache-dir --upgrade qtpy
pip install --no-cache-dir --upgrade qasync
pip install --no-cache-dir --upgrade enaml

pip install --no-cache-dir --upgrade pyqtgraph
pip install --no-cache-dir --upgrade enamlx

pip install --no-cache-dir --upgrade asyncua
pip install --no-cache-dir --upgrade opcua
pip install --no-cache-dir --upgrade opcua-webclient
pip install --no-cache-dir --upgrade opcua-client
pip install --no-cache-dir --upgrade opcua-modeler
pip install --no-cache-dir --upgrade "git+https://github.com/PrediktorAS/opcua-tools.git"

export PATH=$PATH:/home/Kochise/.local/bin 
export QT_QPA_PLATFORM=wayland

Run

ph2_Baseline_cm7_client_view.enaml.txt

enaml-run ph2_Baseline_cm7_client_view.enaml

Cry

There are some external files (icons for the tree) that are missing but not mandatory to get the error.

ph2_Baseline_cm7_client_view.error.txt

Regards.

@MatthieuDartiailh
Copy link
Member

Look like you uncovered a bug in the new parser based on pegen. I will try to investigate ASAP.

@MatthieuDartiailh
Copy link
Member

A quick investigation points to fn_opcua_get_tree as the function that we fail to parse

@Kochise
Copy link
Author

Kochise commented May 23, 2023

fn_opcua_get_tree

Such a beautiful function though 😢

@MatthieuDartiailh
Copy link
Member

I have one likely suspect but I will dive deeper later today. I will keep you posted.

@MatthieuDartiailh
Copy link
Member

MatthieuDartiailh commented May 23, 2023

Okay, so my first suspicion was silly, and you simply suffer from the deeply recursive nature of the parser. One workaround woud be to avoid so many nested comprehensions.

A solution would consist in adopting the trampoline pattern as used in bytecode when computing stack depth. The bad news is that it requires some fundamental changes into how pegen generates parsers. I will look into it though.

@Kochise
Copy link
Author

Kochise commented May 24, 2023

Thank. I don't see how to improve the enamlx tree's walker with generic depth traversal algorithm.

It worked in enaml 0.15.2 though.

What were the reasons to switch to the pegen parser again ?

@Kochise
Copy link
Author

Kochise commented Oct 25, 2023

Hi, any news on this ?

@MatthieuDartiailh
Copy link
Member

I have been busy working on Python 3.12 support so there has been no definitive fix for this.

However I believe you could easily refactor your code to use a factory function to generate the list of children and replace the deep syntactic nesting by some recursive calls. Something like:

def create_children(infos):
	return [EnamlxNode(
		str_text = f"{inner['name']}",
		list_data = [inner['id'], inner['cls'], inner['type']],
		list_node = create_children[inner['children']]
	) for inner in infos]*

@Kochise
Copy link
Author

Kochise commented Nov 9, 2023

Thank for the feedback, I'll give it a try.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants