# Iterator IR: best practices ###### tags: `discussion` [TOC] ## Tasks - Move `itir_makers` to a common place to be used everywhere [✔] - Utilities to deal with unique symbol name creation (TODO, still unclear who or how to implement) ## Discussion and conventions - **Issue:** Should we promote `itir_makers` from `ffront` to more general `ITIR makers` to be used everywhere? - **Decision** - Yes. Let's move it to `next.iterator` package - Let's rename unneeded `something__` symbols (two underscores at the end) to just `something_` (one underscore) - Let's use `itir_makers` for new passes, but we don't need to refactor all existing passes. - **Decision** - Many passes have the same `is_<something>() -> Typeguard[something]` functions (e.g. `is_applield_lift`) implemented and they should be defined only once and reused everywhere. - **Issue**: utilities for dealing with symbol creation are currently hidden in some passes (e.g. double-check lowering for symbol clashes (lifted_lambda construction), double-check fuse_maps - **Decision**: Let's define these utilities only once and reuse from all passes. - Idea: `make_unique_name(preferred_name: str, existing_names: Collection[SymbolTable | Collection[str]], collision_resolver: Callable[[str, Collection[str]], str] = str_append) -> str` - Idea: look for proposal from @egparedes for naming scheme (maybe one of the scalar if stmt PR). Something like `{preferred_name}{some_unicode_character}{incresing_number}`. ``` Python unicode symbols for identifiers: - xid_start = all characters in id_start after NFKC normalization, that is general categories Lu, Ll, Lt, Lm, Lo, Nl, and the underscore - xid_continue = all characters in id_continue after NFKC normalization, that is all chars in id_start plus characters in the categories Mn, Mc, Nd, Pc Unicode symbols per class: https://www.compart.com/en/unicode/category https://www.compart.com/en/unicode/U+10307: 𐌇 https://www.compart.com/en/unicode/U+10318: 𐌘 https://www.compart.com/en/unicode/U+A788: ꞈ https://www.compart.com/en/unicode/U+141E: ᐞ https://www.compart.com/en/unicode/U+1421: ᐡ https://www.compart.com/en/unicode/U+1506: ᔆ https://www.compart.com/en/unicode/U+15B0: ᖰ https://www.compart.com/en/unicode/U+15B1: ᖱ https://www.compart.com/en/unicode/U+15B2: ᖲ https://www.compart.com/en/unicode/U+15B3: ᖳ https://www.compart.com/en/unicode/U+1601: ᘁ https://www.compart.com/en/unicode/U+166E: ᙮ https://www.compart.com/en/unicode/U+167F: ᙿ varꞈ2 varᔆ2 varᐞ2 varᘁ3 var᙮3 varᙿ2 ``` - Idea: `_generate_unique_symbol()` from `inline_lifts.py` at https://github.com/GridTools/gt4py/blob/64d8311e6dd473db4cb532ec6ed21bc05a32a1cf/src/gt4py/next/iterator/transforms/inline_lifts.py#L26 [itir-frontend-tests](https://hackmd.io/46Oa6MspRoSTiFozHzun5A#itir-frontend-tests)