Skip to content

Commit f04be0d

Browse files
committed
Fix get_structs method of dict_comprehension
1 parent 884db18 commit f04be0d

File tree

6 files changed

+240
-19
lines changed

6 files changed

+240
-19
lines changed
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 1,
6+
"metadata": {},
7+
"outputs": [],
8+
"source": [
9+
"# for running tests from local astx module\n",
10+
"import os,sys\n",
11+
"# print(os.path.abspath(os.path.join(os.getcwd(), \"../../\", \"src\")))\n",
12+
"sys.path.insert(0, os.path.abspath(os.path.join(os.getcwd(), \"../../\", \"src\")))\n",
13+
"\n"
14+
]
15+
},
16+
{
17+
"cell_type": "code",
18+
"execution_count": 2,
19+
"metadata": {},
20+
"outputs": [],
21+
"source": [
22+
"import astx"
23+
]
24+
},
25+
{
26+
"cell_type": "code",
27+
"execution_count": 3,
28+
"metadata": {},
29+
"outputs": [],
30+
"source": [
31+
"import warnings\n",
32+
"warnings.filterwarnings(\"ignore\")"
33+
]
34+
},
35+
{
36+
"cell_type": "code",
37+
"execution_count": 4,
38+
"metadata": {},
39+
"outputs": [],
40+
"source": [
41+
"# create Dict_comprehension object\n",
42+
"dict_comp = astx.DictComprehension(\n",
43+
" key= astx.Identifier('x'),\n",
44+
" value= astx.Identifier('ord(x)'),\n",
45+
" iterable= astx.Identifier('x'),\n",
46+
" iterator = astx.LiteralList(\n",
47+
" elements=[\n",
48+
" astx.LiteralInt32(10),\n",
49+
" astx.LiteralInt32(20),\n",
50+
" astx.LiteralInt32(30)\n",
51+
" ]\n",
52+
" )\n",
53+
" # iterator=astx.Identifier('meyList')\n",
54+
")"
55+
]
56+
},
57+
{
58+
"cell_type": "code",
59+
"execution_count": 5,
60+
"metadata": {},
61+
"outputs": [
62+
{
63+
"name": "stdout",
64+
"output_type": "stream",
65+
"text": [
66+
"hel\n"
67+
]
68+
},
69+
{
70+
"data": {
71+
"text/plain": [
72+
"{'DICT-COMPREHENSION': {'content': {'key': {'IDENTIFIER[x]': {'content': 'x',\n",
73+
" 'metadata': {'loc': {'line': -1, 'col': -1},\n",
74+
" 'comment': '',\n",
75+
" 'ref': '',\n",
76+
" 'kind': -100}}},\n",
77+
" 'value': {'IDENTIFIER[ord(x)]': {'content': 'ord(x)',\n",
78+
" 'metadata': {'loc': {'line': -1, 'col': -1},\n",
79+
" 'comment': '',\n",
80+
" 'ref': '',\n",
81+
" 'kind': -100}}},\n",
82+
" 'iterable': {'IDENTIFIER[x]': {'content': 'x',\n",
83+
" 'metadata': {'loc': {'line': -1, 'col': -1},\n",
84+
" 'comment': '',\n",
85+
" 'ref': '',\n",
86+
" 'kind': -100}}},\n",
87+
" 'iterator': {'LiteralList': {'ELEMENT[0]': 0,\n",
88+
" 'ELEMENT[1]': 1,\n",
89+
" 'ELEMENT[2]': 2}}},\n",
90+
" 'metadata': {'loc': {'line': -1, 'col': -1},\n",
91+
" 'comment': '',\n",
92+
" 'ref': '',\n",
93+
" 'kind': -515}}}"
94+
]
95+
},
96+
"execution_count": 5,
97+
"metadata": {},
98+
"output_type": "execute_result"
99+
}
100+
],
101+
"source": [
102+
"dict_comp.get_struct()"
103+
]
104+
},
105+
{
106+
"cell_type": "code",
107+
"execution_count": 6,
108+
"metadata": {},
109+
"outputs": [
110+
{
111+
"name": "stdout",
112+
"output_type": "stream",
113+
"text": [
114+
"{x: ord(x) for x in [10, 20, 30]}\n"
115+
]
116+
}
117+
],
118+
"source": [
119+
"print(dict_comp)"
120+
]
121+
},
122+
{
123+
"cell_type": "code",
124+
"execution_count": 7,
125+
"metadata": {},
126+
"outputs": [
127+
{
128+
"name": "stdout",
129+
"output_type": "stream",
130+
"text": [
131+
"hel\n"
132+
]
133+
},
134+
{
135+
"data": {
136+
"image/png": "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",
137+
"text/plain": [
138+
"<IPython.core.display.Image object>"
139+
]
140+
},
141+
"metadata": {},
142+
"output_type": "display_data"
143+
},
144+
{
145+
"data": {
146+
"text/plain": []
147+
},
148+
"execution_count": 7,
149+
"metadata": {},
150+
"output_type": "execute_result"
151+
}
152+
],
153+
"source": [
154+
"dict_comp"
155+
]
156+
}
157+
],
158+
"metadata": {
159+
"kernelspec": {
160+
"display_name": "ast",
161+
"language": "python",
162+
"name": "python3"
163+
},
164+
"language_info": {
165+
"codemirror_mode": {
166+
"name": "ipython",
167+
"version": 3
168+
},
169+
"file_extension": ".py",
170+
"mimetype": "text/x-python",
171+
"name": "python",
172+
"nbconvert_exporter": "python",
173+
"pygments_lexer": "ipython3",
174+
"version": "3.13.2"
175+
}
176+
},
177+
"nbformat": 4,
178+
"nbformat_minor": 2
179+
}

docs/tutorials/for-loop.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
},
2929
{
3030
"cell_type": "code",
31-
"execution_count": 2,
31+
"execution_count": null,
3232
"id": "45319c53",
3333
"metadata": {},
3434
"outputs": [],

src/astx/flows.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from __future__ import annotations
44

5-
from typing import Optional, cast, Union, List
5+
from typing import Optional, cast, Union, List, Dict
66

77
from public import public
88

@@ -694,9 +694,9 @@ def get_struct(self, simplified: bool = False) -> ReprStruct:
694694
class DictComprehension(Expr):
695695
def __init__(
696696
self,
697-
key:Expr,
698-
value:Expr,
699-
iterable:Expr,
697+
key: Expr,
698+
value: Expr,
699+
iterable: Expr,
700700
iterator: Union[LiteralList, LiteralTuple, LiteralSet, LiteralString, Identifier],
701701
loc: SourceLocation = NO_SOURCE_LOCATION,
702702
parent: Optional[ASTNodes] = None
@@ -721,14 +721,31 @@ def __str__(self):
721721
return f"{{{self.key.value}: {self.value.value} for {self.iterable.value} in {self.iterator.value}}}"
722722
else:
723723
return f"{{{self.key.value}: {self.value.value} for {self.iterable.value} in {self.iterator}}}"
724-
725-
def get_struct(self, simplified = False) -> ReprStruct:
724+
725+
def get_struct(self, simplified: bool = False) -> ReprStruct:
726+
print("hel")
726727
"""Return the AST structure of the object."""
727728
key = "DICT-COMPREHENSION"
728-
value = {
729+
value: ReprStruct = {
729730
"key": self.key.get_struct(simplified),
730731
"value": self.value.get_struct(simplified),
731732
"iterable": self.iterable.get_struct(simplified),
732-
"iterator": self.iterator.get_struct(simplified),
733733
}
734-
return self._prepare_struct(key, value, simplified)
734+
735+
if isinstance(self.iterator, (LiteralList, LiteralSet, LiteralTuple)):
736+
elements_struct = [
737+
element.get_struct(simplified)
738+
for element in cast(
739+
Union[LiteralList, LiteralSet, LiteralTuple], self.iterator
740+
).elements
741+
]
742+
value["iterator"] = {
743+
f"{self.iterator.__class__.__name__}": {
744+
f"ELEMENT[{i}]": element
745+
for i, element in enumerate(elements_struct)
746+
}
747+
}
748+
else:
749+
value["iterator"] = self.iterator.get_struct(simplified)
750+
751+
return self._prepare_struct(key, value, simplified)

src/astx/tools/transpilers/python.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -677,10 +677,7 @@ def visit(self, node: astx.LiteralDict) -> str:
677677

678678
@dispatch # type: ignore[no-redef]
679679
def visit(self, node:astx.DictComprehension) -> str:
680-
"""Handle DictCompregension nodes."""
681-
return f"{
682-
{{self.visit(node.key)}: {self.visit(node.value)}
683-
for {self.visit(node.iterable)} in {self.visit(node.iterator)}}
684-
}"
680+
"""Handle DictComprehension nodes."""
681+
return f"{{{self.visit(node.key)}: {self.visit(node.value)} for {self.visit(node.iterable)} in {self.visit(node.iterator)}}}"
685682

686683

tests/test_flows.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
"""Tests for control flow statements."""
22

3+
# for running tests from local astx module
4+
# import os,sys
5+
# # print(os.path.abspath(os.path.join(os.getcwd(), ".", "src")))
6+
# sys.path.insert(0, os.path.abspath(os.path.join(os.getcwd(), ".", "src")))
7+
8+
39
import astx
410
import pytest
511

0 commit comments

Comments
 (0)