Skip to content

Commit 9478cfd

Browse files
committed
Intermediate changes
commit_hash:e8f03143f071def87f56790176fbdc918784ed35
1 parent 6b6dd52 commit 9478cfd

File tree

1,212 files changed

+8603
-4402
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,212 files changed

+8603
-4402
lines changed

build/mapping.conf.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,10 @@
911911
"6990860705": "https://devtools-registry.s3.yandex.net/6990860705",
912912
"6990881789": "https://devtools-registry.s3.yandex.net/6990881789",
913913
"7324461836": "https://devtools-registry.s3.yandex.net/7324461836",
914+
"7512107516": "https://devtools-registry.s3.yandex.net/7512107516",
914915
"7193803465": "https://devtools-registry.s3.yandex.net/7193803465",
916+
"7512042091": "https://devtools-registry.s3.yandex.net/7512042091",
917+
"7512103615": "https://devtools-registry.s3.yandex.net/7512103615",
915918
"7324464594": "https://devtools-registry.s3.yandex.net/7324464594",
916919
"7487656957": "https://devtools-registry.s3.yandex.net/7487656957",
917920
"7458707245": "https://devtools-registry.s3.yandex.net/7458707245",
@@ -1962,7 +1965,10 @@
19621965
"6990860705": "none-none-none-sandbox/backup/d386643e-58f8-43e1-8760-341d73801df8/yfm-docs.tar",
19631966
"6990881789": "none-none-none-sandbox/backup/efc428e5-52a5-4a6f-8f0c-53f1d255efea/yfm-docs.tar",
19641967
"7324461836": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/0541e185-8261-4b07-9149-257f03a9c8ae/yfm-docs.tar",
1968+
"7512107516": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/0ae16953-fe8d-4f1b-9a76-137110f40faf/yfm-docs.tar",
19651969
"7193803465": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/17df2ad2-24bc-49e8-8909-b58685dac393/yfm-docs.tar",
1970+
"7512042091": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/203a60f0-6d4d-46bf-93eb-a2a5f998b768/yfm-docs.tar",
1971+
"7512103615": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/29fcd2aa-e0b5-481e-83c8-b7ff5e0157c9/yfm-docs.tar",
19661972
"7324464594": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/32cc8c74-decd-44a8-bc8c-f8f0d7edfffe/yfm-docs.tar",
19671973
"7487656957": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/4b747fb6-2d4e-4a7b-bbed-abb9a1e21761/yfm-docs.tar",
19681974
"7458707245": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/4e7df89f-3762-4eba-ba73-562ccaeae548/yfm-docs.tar",

contrib/python/pythran/.dist-info/METADATA

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Metadata-Version: 2.1
22
Name: pythran
3-
Version: 0.16.1
3+
Version: 0.17.0
44
Summary: Ahead of Time compiler for numeric kernels
55
Author-email: Serge Guelton <serge.guelton@telecom-bretagne.eu>
66
License: Copyright (c) 2012, HPC Project and Serge Guelton
@@ -52,22 +52,24 @@ Requires-Python: >=3.7
5252
Description-Content-Type: text/x-rst
5353
License-File: LICENSE
5454
License-File: AUTHORS
55-
Requires-Dist: ply>=3.4
55+
Requires-Dist: ply >=3.4
5656
Requires-Dist: setuptools
57-
Requires-Dist: gast~=0.5.0
57+
Requires-Dist: gast ~=0.6.0
5858
Requires-Dist: numpy
59-
Requires-Dist: beniget~=0.4.0
59+
Requires-Dist: beniget ~=0.4.0
6060
Provides-Extra: doc
61-
Requires-Dist: numpy; extra == "doc"
62-
Requires-Dist: nbsphinx; extra == "doc"
63-
Requires-Dist: scipy; extra == "doc"
64-
Requires-Dist: guzzle-sphinx-theme; extra == "doc"
61+
Requires-Dist: numpy ; extra == 'doc'
62+
Requires-Dist: nbsphinx ; extra == 'doc'
63+
Requires-Dist: scipy ; extra == 'doc'
64+
Requires-Dist: guzzle-sphinx-theme ; extra == 'doc'
6565
Provides-Extra: test
66-
Requires-Dist: ipython; extra == "test"
67-
Requires-Dist: nbval; extra == "test"
68-
Requires-Dist: cython; extra == "test"
69-
Requires-Dist: wheel; extra == "test"
70-
Requires-Dist: packaging; extra == "test"
66+
Requires-Dist: ipython ; extra == 'test'
67+
Requires-Dist: nbval ; extra == 'test'
68+
Requires-Dist: cython ; extra == 'test'
69+
Requires-Dist: wheel ; extra == 'test'
70+
Requires-Dist: packaging ; extra == 'test'
71+
Requires-Dist: ninja ; extra == 'test'
72+
Requires-Dist: meson ; extra == 'test'
7173

7274
Pythran
7375
#######

contrib/python/pythran/pythran/analyses/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import analyses.Foo
1010
"""
1111

12-
from .aliases import Aliases, StrictAliases
12+
from .aliases import Aliases, StrictAliases, InterproceduralAliases
1313
from .ancestors import Ancestors, AncestorsWithBody
1414
from .argument_effects import ArgumentEffects
1515
from .argument_read_once import ArgumentReadOnce

contrib/python/pythran/pythran/analyses/aliases.py

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,11 @@ def visit_DictComp(self, node):
544544

545545
# aliasing created by statements
546546

547+
def init_function_alias(self, node):
548+
"each argument is bound to a different identifier"
549+
self.aliases.update((arg.id, {arg})
550+
for arg in node.args.args)
551+
547552
def visit_FunctionDef(self, node):
548553
'''
549554
Initialise aliasing default value before visiting.
@@ -558,8 +563,7 @@ def visit_FunctionDef(self, node):
558563
self.aliases.update((k, {v})
559564
for k, v in self.global_declarations.items())
560565

561-
self.aliases.update((arg.id, {arg})
562-
for arg in node.args.args)
566+
self.init_function_alias(node)
563567

564568
self.generic_visit(node)
565569
if Aliases.RetId in self.aliases:
@@ -612,6 +616,27 @@ def merge_return_aliases(args):
612616

613617
node.return_alias = merge_return_aliases
614618

619+
def visit_Assert(self, node):
620+
self.generic_visit(node)
621+
622+
if not isinstance(node.test, ast.Compare):
623+
return
624+
if len(node.test.ops) != 1:
625+
return
626+
op = node.test.ops[0]
627+
comparator = node.test.comparators[0]
628+
629+
if not isinstance(node.test.left, ast.Name):
630+
return
631+
if not isinstance(comparator, ast.Name):
632+
return
633+
634+
if isinstance(op, ast.IsNot):
635+
left_aliases = self.aliases[node.test.left.id]
636+
right_aliases = self.aliases[comparator.id]
637+
self.aliases[node.test.left.id] = self.aliases[node.test.left.id].difference(right_aliases)
638+
right_aliases.difference_update(left_aliases)
639+
615640
def visit_Assign(self, node):
616641
r'''
617642
Assignment creates aliasing between lhs and rhs
@@ -626,8 +651,9 @@ def visit_Assign(self, node):
626651
Everyone points to the formal parameter 'a' \o/
627652
'''
628653
md.visit(self, node)
629-
value_aliases = self.visit(node.value)
630-
for t in node.targets:
654+
value_aliases = self.visit(node.value) if node.value else {}
655+
targets = node.targets if isinstance(node, ast.Assign) else (node.target,)
656+
for t in targets:
631657
if isinstance(t, ast.Name):
632658
self.aliases[t.id] = set(value_aliases) or {t}
633659
for alias in list(value_aliases):
@@ -638,6 +664,8 @@ def visit_Assign(self, node):
638664
else:
639665
self.visit(t)
640666

667+
visit_AnnAssign = visit_Assign
668+
641669
def visit_For(self, node):
642670
'''
643671
For loop creates aliasing between the target
@@ -786,3 +814,14 @@ class StrictAliases(Aliases):
786814

787815
def get_unbound_value_set(self):
788816
return set()
817+
818+
819+
class InterproceduralAliases(Aliases):
820+
"""
821+
Gather aliases while assuming two different parameters can point to the same
822+
value
823+
"""
824+
825+
def init_function_alias(self, node):
826+
self.aliases.update((arg.id, set(node.args.args))
827+
for arg in node.args.args)

contrib/python/pythran/pythran/analyses/argument_effects.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,16 @@ def visit_AugAssign(self, node):
135135
self.generic_visit(node)
136136

137137
def visit_Assign(self, node):
138-
for t in node.targets:
138+
targets = node.targets if isinstance(node, ast.Assign) else (node.target,)
139+
for t in targets:
139140
if isinstance(t, ast.Subscript):
140141
n = self.argument_index(t)
141142
if n >= 0:
142143
self.current_function.update_effects[n] = True
143144
self.generic_visit(node)
144145

146+
visit_AnnAssign = visit_Assign
147+
145148
def visit_Call(self, node):
146149
for i, arg in enumerate(node.args):
147150
n = self.argument_index(arg)

contrib/python/pythran/pythran/analyses/argument_read_once.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,13 @@ def visit_Return(self, node):
147147

148148
def visit_Assign(self, node):
149149
dep = self.generic_visit(node)
150-
local = [self.local_effect(t, 2) for t in node.targets
150+
targets = node.targets if isinstance(node, ast.Assign) else (node.target,)
151+
local = [self.local_effect(t, 2) for t in targets
151152
if isinstance(t, ast.Subscript)]
152153
return lambda ctx: dep(ctx) + sum(l(ctx) for l in local)
153154

155+
visit_AnnAssign = visit_Assign
156+
154157
def visit_AugAssign(self, node):
155158
dep = self.generic_visit(node)
156159
local = self.local_effect(node.target, 2)

contrib/python/pythran/pythran/analyses/cfg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def visit_Pass(self, node):
6161
return (node,), ()
6262

6363
# All these nodes have the same behavior as pass
64-
visit_Assign = visit_AugAssign = visit_Import = visit_Pass
64+
visit_Assign = visit_AnnAssign = visit_AugAssign = visit_Import = visit_Pass
6565
visit_Expr = visit_Print = visit_ImportFrom = visit_Pass
6666
visit_Yield = visit_Delete = visit_Pass
6767

contrib/python/pythran/pythran/analyses/constant_expressions.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,9 @@ def visit_Slice(self, node):
9999

100100
def visit_Index(self, node):
101101
return self.visit(node.value) and self.add(node)
102+
103+
def visit_AnnAssign(self, node):
104+
self.visit(node.target)
105+
# skip annotation
106+
if node.value:
107+
self.visit(node.value)

contrib/python/pythran/pythran/analyses/fixed_size_list.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,13 @@ def is_safe_use(self, use):
5757

5858
def visit_Assign(self, node):
5959
self.generic_visit(node)
60+
if not node.value:
61+
return
6062
if not self.is_fixed_size_list_def(node.value):
6163
return
6264

63-
for target in node.targets:
65+
targets = node.targets if isinstance(node, ast.Assign) else (node.target,)
66+
for target in targets:
6467
def_ = self.def_use_chains.chains[target]
6568
if any(not self.is_safe_use(u) for u in def_.users()):
6669
break
@@ -72,6 +75,8 @@ def visit_Assign(self, node):
7275
else:
7376
self.result.add(node.value)
7477

78+
visit_AnnAssign = visit_Assign
79+
7580
def visit_Call(self, node):
7681
self.generic_visit(node)
7782
for i, arg in enumerate(node.args):

contrib/python/pythran/pythran/analyses/imported_ids.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,14 @@ def visit_Assign(self, node):
5050
# order matter as an assignation
5151
# is evaluated before being assigned
5252
md.visit(self, node)
53-
self.visit(node.value)
54-
for target in node.targets:
53+
if node.value:
54+
self.visit(node.value)
55+
targets = node.targets if isinstance(node, ast.Assign) else (node.target,)
56+
for target in targets:
5557
self.visit(target)
5658

59+
visit_AnnAssign = visit_Assign
60+
5761
def visit_AugAssign(self, node):
5862
self.in_augassign = True
5963
self.generic_visit(node)

0 commit comments

Comments
 (0)