Skip to content

Commit

Permalink
Merge pull request #389 from EvgSkv/ti2023
Browse files Browse the repository at this point in the history
Fixing type error for aggregation. Making iterative recursion work as…
EvgSkv authored Oct 11, 2024
2 parents 7dd2498 + fb10ec1 commit d1425f1
Showing 10 changed files with 46 additions and 18 deletions.
2 changes: 1 addition & 1 deletion common/image.py
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ def Animate(spacetime,
r = numpy.zeros(field_shape)
img = pyplot.imshow(r.T, cmap=cmap, vmin=vmin, vmax=vmax)

num_frames = max(spacetime[column_t])
num_frames = max(spacetime[column_t]) + 1
def Update(frame):
if show_progress:
total = 40
4 changes: 2 additions & 2 deletions compiler/dialect_libraries/recursion_library.py
Original file line number Diff line number Diff line change
@@ -172,11 +172,11 @@ def GetFlatIterativeRecursionFunctor(depth, cover, direct_args_of,
result_rules.append(rule)

iterate_over = iterate_over_upper_half + iterate_over_lower_half
iterate_over_str = ', '.join('"%s"' % p for p in iterate_over)
iterate_over_str = ', '.join(p for p in iterate_over)
maybe_stop = ''
if stop:
maybe_stop = ', stop_signal: "%s"' % stop_file_name
rule = f'@Iteration(Iterate{min(cover)}, predicates: [{iterate_over_str}], repetitions: {(depth + 1 - ignition_steps) // 2 + 1}{maybe_stop});'
rule = f'@Iteration({min(cover)}, predicates: [{iterate_over_str}], repetitions: {(depth + 1 - ignition_steps) // 2 + 1}{maybe_stop});'
result_rules.append(rule)

program = '\n'.join(result_rules)
2 changes: 1 addition & 1 deletion compiler/functors.py
Original file line number Diff line number Diff line change
@@ -359,7 +359,7 @@ def CollectAnnotations(self, predicates):
result = []
for annotation, rules in self.rules_of.items():
if annotation not in ['@Limit', '@OrderBy', '@Ground',
'@NoInject']:
'@NoInject', '@Iteration']:
continue
for rule in rules:
if ('literal' not in
3 changes: 2 additions & 1 deletion compiler/universe.py
Original file line number Diff line number Diff line change
@@ -289,7 +289,8 @@ def Iterations(self):
'Iteration must specify number of repetitions.',
self.annotations['@Iteration'][iteration_name]['__rule_text']
)
result[iteration_name] = {'predicates': args['predicates'],
predicates = [p['predicate_name'] for p in args['predicates']]
result[iteration_name] = {'predicates': predicates,
'repetitions': args['repetitions'],
'stop_signal': args.get('stop_signal')}
return result
29 changes: 22 additions & 7 deletions parser_py/parse.py
Original file line number Diff line number Diff line change
@@ -474,7 +474,8 @@ def ParseRecordInternals(s,
'value': {
'aggregation': {
'operator': operator,
'argument': ParseExpression(expression)
'argument': ParseExpression(expression),
'expression_heritage': value
}
}
})
@@ -652,7 +653,8 @@ def BuildTreeForCombine(parsed_expression, operator, parsed_body, full_text):
'value': {
'aggregation': {
'operator': operator,
'argument': parsed_expression
'argument': parsed_expression,
'expression_heritage': full_text
}
}
}
@@ -1083,7 +1085,8 @@ def NegationTree(s, negated_proposition):
'value': {
'aggregation': {
'operator': 'Min',
'argument': number_one
'argument': number_one,
'expression_heritage': s
}
}
}]
@@ -1158,7 +1161,8 @@ def ParseHeadCall(s):
'value': {
'aggregation': {
'operator': operator_str,
'argument': ParseExpression(expression_str)
'argument': ParseExpression(expression_str),
'expression_heritage': post_call_str
}
}
}
@@ -1374,6 +1378,14 @@ class MultiBodyAggregation(object):
"""This is a namespace for multi-body-aggregation processing functions."""

SUFFIX = '_MultBodyAggAux'
@classmethod
def StripHeritage(cls, field_values):
"""Removing hertiage for comparison."""
result = copy.deepcopy(field_values)
for fv in result:
if 'aggregation' in fv['value']:
del fv['value']['aggregation']['expression_heritage']
return result

@classmethod
def Rewrite(cls, rules):
@@ -1393,7 +1405,8 @@ def Rewrite(cls, rules):
aggregation, new_rule = cls.SplitAggregation(rule)
if name in aggregation_field_values_per_predicate:
expected_aggregation = aggregation_field_values_per_predicate[name]
if expected_aggregation != aggregation:
strip = cls.StripHeritage
if strip(expected_aggregation) != strip(aggregation):
raise ParsingException(
'Signature differs for bodies of >>%s<<. '
'Signatures observed: >>%s<<' % (name,
@@ -1468,7 +1481,8 @@ def SplitAggregation(cls, rule):
'variable': {
'var_name': field_value['field']
}
}
},
'expression_heritage': field_value['value']['aggregation']['expression_heritage']
}
}
}
@@ -1587,7 +1601,8 @@ def Convert(cls, a):
}
]
}
}
},
'expression_heritage': a['expression_heritage']
}

@classmethod
Original file line number Diff line number Diff line change
@@ -122,12 +122,14 @@
]
}
},
"expression_heritage": "+= t",
"type": {
"rendered_type": "Num",
"the_type": "Num",
"type_id": 2
}
}
},
"expression_heritage": "+= t"
}
}
}
Original file line number Diff line number Diff line change
@@ -209,6 +209,7 @@
]
}
},
"expression_heritage": "x List= ({a:} :- a in [{z:}])",
"type": {
"element_type_name": "logicarecord350574256",
"rendered_type": "[{a: {z: Num}}]",
@@ -221,7 +222,8 @@
],
"type_id": 6
}
}
},
"expression_heritage": "x List= ({a:} :- a in [{z:}])"
}
}
}
Original file line number Diff line number Diff line change
@@ -129,12 +129,14 @@
]
}
},
"expression_heritage": "x += (a :- a in [1,2,3])",
"type": {
"rendered_type": "Num",
"the_type": "Num",
"type_id": 5
}
}
},
"expression_heritage": "x += (a :- a in [1,2,3])"
}
}
}
@@ -268,6 +270,7 @@
]
}
},
"expression_heritage": "y List= (a :- a in [\"a\", \"b\"])",
"type": {
"element_type_name": "text",
"rendered_type": "[Str]",
@@ -276,7 +279,8 @@
],
"type_id": 11
}
}
},
"expression_heritage": "y List= (a :- a in [\"a\", \"b\"])"
}
}
}
Original file line number Diff line number Diff line change
@@ -920,6 +920,7 @@
]
}
},
"expression_heritage": "overview List= (\n {item:, quantity:} :-\n quantity = (\n if num > 9 then\n \"large\"\n else\n \"small\"\n ),\n num > 5,\n {item:, num:} in items\n )",
"type": {
"element_type_name": "logicarecord980116590",
"rendered_type": "[{item: Str, quantity: Str}]",
@@ -931,7 +932,8 @@
],
"type_id": 7
}
}
},
"expression_heritage": "overview List= (\n {item:, quantity:} :-\n quantity = (\n if num > 9 then\n \"large\"\n else\n \"small\"\n ),\n num > 5,\n {item:, num:} in items\n )"
}
}
}
Original file line number Diff line number Diff line change
@@ -1861,6 +1861,7 @@
]
}
},
"expression_heritage": " ArgMin= path -> Size(path.path)",
"type": {
"rendered_type": "{path: [Str]}",
"the_type": {
@@ -1871,7 +1872,8 @@
"type_id": 1,
"type_name": "logicarecord808144452"
}
}
},
"expression_heritage": " ArgMin= path -> Size(path.path)"
}
}
}

0 comments on commit d1425f1

Please sign in to comment.