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

feat[next]: Infer as_fieldop type without domain #1853

Open
wants to merge 107 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
9b856cd
New global ordering relation of dimensions
SF-N Feb 5, 2025
a23c6cb
Minor text edits
SF-N Feb 5, 2025
545f98e
Merge branch 'main' into decouple_inferences
SF-N Feb 5, 2025
c851f8f
Use new promote_dims and update tests
SF-N Feb 7, 2025
74e4584
Merge branch 'main' into decouple_inferences
SF-N Feb 7, 2025
31a611d
Minor fix
SF-N Feb 7, 2025
428a979
Remove unnecesary test
SF-N Feb 7, 2025
4c2b63b
Fix Doctests
SF-N Feb 7, 2025
279fbb0
Merge branch 'main' into decouple_inferences
SF-N Feb 10, 2025
2f91dcf
Add functionality to ifer return type of as_fieldop without domain, n…
SF-N Feb 11, 2025
fbfce3e
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Feb 11, 2025
c0849a4
Merge branch 'main' into decouple_inferences
SF-N Feb 11, 2025
98e424d
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Feb 12, 2025
392153a
clean up type inference of as_fieldop
SF-N Feb 12, 2025
360c10f
Working on tuples
SF-N Feb 13, 2025
da549c0
Some more fixes
SF-N Feb 13, 2025
462b672
Run pre-commit
SF-N Feb 13, 2025
9050385
Merge branch 'main' into decouple_inferences
SF-N Feb 13, 2025
e0be279
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Feb 13, 2025
5b2da27
Fix some tests
SF-N Feb 13, 2025
2a9a25a
Merge branch 'main' into decouple_inferences
SF-N Feb 14, 2025
e1c2bef
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Feb 14, 2025
9e48581
Merge branch 'main' into decouple_inferences
SF-N Feb 17, 2025
8bea1b5
Some fixes and add more tests
SF-N Feb 18, 2025
249ba8b
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Feb 18, 2025
2820315
Merge branch 'main' into decouple_inferences
SF-N Feb 24, 2025
c6a841a
Address review comments
SF-N Feb 25, 2025
bd66acb
Fix tests
SF-N Feb 25, 2025
e5ed262
Fix test
SF-N Feb 25, 2025
6627c8f
Merge decouple_inferences
SF-N Feb 25, 2025
392a91d
Fix tests
SF-N Feb 25, 2025
435df54
Address some review comments
SF-N Feb 25, 2025
657bd9d
Fix for no offset_provider_type
SF-N Feb 25, 2025
dd3e6db
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Feb 25, 2025
38d1ac6
Merge branch 'main' into decouple_inferences
SF-N Feb 25, 2025
8b82ae5
Fix ListType issue
SF-N Feb 28, 2025
29a68c8
Impove and clean code
SF-N Feb 28, 2025
744f2b9
Merge branch 'main' into decouple_inferences
SF-N Feb 28, 2025
ac9e6ce
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Feb 28, 2025
f708649
Fix some tests
SF-N Feb 28, 2025
62ae6ea
Merge branch 'infer_as_fieldop_type_without_domain' of github.com:SF-…
SF-N Feb 28, 2025
5cb80c3
Fix test_inline_center_deref_lift_vars
SF-N Feb 28, 2025
716399a
Address review comments
SF-N Feb 28, 2025
3a553bf
Fix test_gt4py_builtins
SF-N Feb 28, 2025
bd35a7b
Minor
SF-N Feb 28, 2025
79b1c43
Merge branch 'main' into decouple_inferences
SF-N Feb 28, 2025
93f288f
Minor
SF-N Mar 3, 2025
eaa4cee
Merge branch 'main' into decouple_inferences
SF-N Mar 3, 2025
4c332b0
Further improvements
SF-N Mar 3, 2025
7744cf9
Merge decouple_inferences
SF-N Mar 3, 2025
0b6637f
Merge main
SF-N Mar 3, 2025
dfd222e
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 4, 2025
b8e7241
Some more fixes
SF-N Mar 4, 2025
06a62eb
Merge branch 'infer_as_fieldop_type_without_domain' of github.com:SF-…
SF-N Mar 4, 2025
8d12222
Fix the unnecessary promotion in the domain inference
SF-N Mar 4, 2025
b64aa77
Some more fixes
SF-N Mar 5, 2025
111bcb6
Minor fix
SF-N Mar 5, 2025
3bc348d
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 5, 2025
99efd64
Some more fixes for Tuples
SF-N Mar 5, 2025
ad29a2a
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 6, 2025
0c30009
Cleanup OffsetLiteralType
SF-N Mar 6, 2025
498ce41
Use offset_type in ListType
SF-N Mar 6, 2025
e812d18
Add type inference tests for ListType.offset_type everywhere.
SF-N Mar 6, 2025
1dc0136
Fix format
SF-N Mar 6, 2025
d6d2577
Fix typo
SF-N Mar 6, 2025
2bd6c84
Merge cleanup_OffsetLiteralType and fix some domain_inference tests
SF-N Mar 6, 2025
071c5fe
Fix some more tests
SF-N Mar 7, 2025
7fa7449
Minor
SF-N Mar 7, 2025
b12e51b
Move trace_shifts to ITIRTypeInference
SF-N Mar 7, 2025
fe703cf
Keep vertical dimensions for applied as_fieldop with scan
SF-N Mar 10, 2025
d3a7c5a
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 10, 2025
0a8762c
Fix for tuples
SF-N Mar 10, 2025
8cdf16c
Merge branch 'infer_as_fieldop_type_without_domain' of github.com:SF-…
SF-N Mar 10, 2025
0a16d51
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 12, 2025
5550915
Introduce broadcast builtin including type inference
SF-N Mar 12, 2025
3fa68c3
Merge branch 'infer_as_fieldop_type_without_domain' of github.com:SF-…
SF-N Mar 12, 2025
7ee529b
Fix lowering tests
SF-N Mar 12, 2025
d632aa1
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 13, 2025
d50f23c
Do transform_broadcast after infer_domain
SF-N Mar 13, 2025
7a14221
Edit add_domains to also work for tuples
SF-N Mar 13, 2025
5f11039
Don't do transform_broadcast in apply_fieldview_transforms
SF-N Mar 14, 2025
9eb66f2
Do transform_broadcast in apply_fieldview_transforms and add assert i…
SF-N Mar 14, 2025
930184e
Fix assert
SF-N Mar 14, 2025
59c5037
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 17, 2025
03d6296
Fix tests
SF-N Mar 17, 2025
a41d04a
Don't reach broadcast
SF-N Mar 17, 2025
99519ed
remove broadcast from embedded
SF-N Mar 17, 2025
652a5e2
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 17, 2025
e32dcde
Add broadcast builtin
SF-N Mar 17, 2025
cdfd8a4
Add transform_broadcast
SF-N Mar 17, 2025
f948592
Merge branch 'main' into broadcast_builtin
SF-N Mar 17, 2025
0fe7213
Fix format
SF-N Mar 17, 2025
e310efb
Small cleanup
tehrengruber Mar 18, 2025
5a6c715
Add visit_Attribute
SF-N Mar 18, 2025
6b4de6a
Rename transform_broadcast -> prune_broadcast
SF-N Mar 18, 2025
397bb7e
Minor
SF-N Mar 18, 2025
1c5f753
Merge broadcast_builtin
SF-N Mar 18, 2025
d72e3e8
Run mypy
SF-N Mar 18, 2025
00bc018
Fix import
SF-N Mar 18, 2025
b7a07d5
Merge branch 'main' into infer_as_fieldop_type_without_domain
SF-N Mar 19, 2025
0be16e5
Merge branch 'main' into broadcast_builtin
SF-N Mar 19, 2025
b8a26d3
Update tests/next_tests/unit_tests/ffront_tests/test_foast_to_gtir.py
SF-N Mar 19, 2025
b5e63a7
Update tests/next_tests/unit_tests/ffront_tests/test_foast_to_gtir.py
SF-N Mar 19, 2025
0d19eb8
Update src/gt4py/next/ffront/foast_to_gtir.py
SF-N Mar 19, 2025
e17f844
Merge branch 'main' into broadcast_builtin
SF-N Mar 19, 2025
e63961f
Rename TransformBroadcast and run pre-commit
SF-N Mar 19, 2025
fff4722
Merge branch 'broadcast_builtin' into infer_as_fieldop_type_without_d…
SF-N Mar 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Address some review comments
SF-N committed Feb 25, 2025
commit 435df5484f10eb9b2aa40c16dc4a06a9e1305420
1 change: 0 additions & 1 deletion src/gt4py/next/common.py
Original file line number Diff line number Diff line change
@@ -1169,7 +1169,6 @@ def promote_dims(*dims_list: Sequence[Dimension]) -> list[Dimension]:
check_dims(list(dims))
unique_dims = {dim for dims in dims_list for dim in dims}


promoted_dims = sorted(unique_dims, key=lambda dim: (dims_kind_order[dim.kind], dim.value))
check_dims(promoted_dims)
return promoted_dims if unique_dims else []
34 changes: 16 additions & 18 deletions src/gt4py/next/iterator/type_system/type_synthesizer.py
Original file line number Diff line number Diff line change
@@ -330,7 +330,7 @@ def applied_as_fieldop(*fields) -> ts.FieldType | ts.DeferredType:

def resolve_shift(
input_dim: common.Dimension, shift_tuple: tuple[itir.OffsetLiteral, ...]
) -> common.Dimension | None:
) -> common.Dimension:
"""
Resolves the final dimension by applying shifts from the given shift tuple.

@@ -341,12 +341,10 @@ def resolve_shift(
- shift_tuple (tuple[itir.OffsetLiteral, ...]): A tuple of offset literals defining the shift.

Returns:
- common.Dimension | None: The resolved dimension or `None` if no shift is applied.
- common.Dimension: The resolved dimension or `input_dim` if no shift is applied.
"""
if not shift_tuple or not offset_provider_type:
return None

final_target: common.Dimension | None = None
final_target: common.Dimension = input_dim

for off_literal in shift_tuple[::2]:
offset_type = offset_provider_type[off_literal.value] # type: ignore [index] # ensured by accessing only every second element
@@ -377,19 +375,14 @@ def resolve_shift(
input_dim = target # Update input_dim for next iteration
return final_target

if any(shifts_results[i]):
for shift_tuple in shifts_results[
i
]: # Use shift tuple corresponding to the input field
for input_dim in input_dims:
for shift_tuple in shifts_results[
i
]: # Use shift tuple corresponding to the input field
final_dim = (
resolve_shift(input_dim, shift_tuple) or input_dim
) # If ther are no shifts, take input_dim
if final_dim not in seen:
seen.add(final_dim)
output_dims.append(final_dim)
else:
output_dims.extend(input_dims)
final_dim = resolve_shift(input_dim, shift_tuple)
if final_dim not in seen:
seen.add(final_dim)
output_dims.append(final_dim)
else:
output_dims = domain.dims

@@ -401,7 +394,12 @@ def resolve_shift(
assert isinstance(stencil_return, ts.DataType)
return type_info.apply_to_primitive_constituents(
lambda el_type: ts.FieldType(
dims=sorted({dim for dim in output_dims}, key=lambda dim: (common.dims_kind_order[dim.kind], dim.value)) if output_dims != "unknown" else [],
dims=sorted(
{dim for dim in output_dims},
key=lambda dim: (common.dims_kind_order[dim.kind], dim.value),
)
if output_dims != "unknown"
else [],
dtype=el_type,
),
stencil_return,
19 changes: 19 additions & 0 deletions tests/next_tests/unit_tests/iterator_tests/test_type_inference.py
Original file line number Diff line number Diff line change
@@ -589,6 +589,25 @@ def test_as_fieldop_without_domain_V2E():
)


def test_as_fieldop_without_domain_V2E_new():
stencil = im.lambda_("it")(
im.deref(im.shift("C2E", 0)(im.shift("E2V", 0)(im.shift("V2E", 0)("it"))))
)

testee = im.as_fieldop(stencil)(im.ref("inp", float_edge_field))
result = itir_type_inference.infer(
testee,
offset_provider_type={"C2E": C2E, "E2V": E2V, "V2E": V2E},
allow_undeclared_symbols=True,
)
assert result.type == ts.FieldType(dims=[Cell], dtype=float64_type)
assert result.fun.args[0].type.pos_only_args[0] == it_ts.IteratorType(
position_dims="unknown",
defined_dims=float_edge_field.dims,
element_type=float_edge_field.dtype,
)


def test_as_fieldop_without_domain_only_one_shift():
stencil = im.lambda_("it1", "it2")(
im.plus(im.deref(im.shift("V2E", 1)("it1")), im.deref("it2"))