incomp-flame-post/python/code_gen/index.html
2026-06-05 13:27:38 +00:00

1991 lines
No EOL
67 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../..">
<link rel="next" href="../post/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
<title>Code Generator - HPC DNS Post-Processing Reference Manual</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../assets/_mkdocstrings.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="cyan">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#code-generator-code_genpy" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="HPC DNS Post-Processing Reference Manual" class="md-header__button md-logo" aria-label="HPC DNS Post-Processing Reference Manual" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
HPC DNS Post-Processing Reference Manual
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Code Generator
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="cyan" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="cyan" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../.." class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="./" class="md-tabs__link">
Python API Reference
</a>
</li>
<li class="md-tabs__item">
<a href="../../archive/pycompact/" class="md-tabs__link">
Archived Components
</a>
</li>
<li class="md-tabs__item">
<a href="../../fortran/" class="md-tabs__link">
Fortran Core Reference
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="HPC DNS Post-Processing Reference Manual" class="md-nav__button md-logo" aria-label="HPC DNS Post-Processing Reference Manual" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
HPC DNS Post-Processing Reference Manual
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-ellipsis">
Python API Reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Python API Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Code Generator
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Code Generator
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#code_gen" class="md-nav__link">
<span class="md-ellipsis">
code_gen
</span>
</a>
<nav class="md-nav" aria-label="code_gen">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#code_gen.VersionInfo" class="md-nav__link">
<span class="md-ellipsis">
VersionInfo
</span>
</a>
<nav class="md-nav" aria-label="VersionInfo">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#code_gen.VersionInfo.__init__" class="md-nav__link">
<span class="md-ellipsis">
__init__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.VersionInfo.fparams" class="md-nav__link">
<span class="md-ellipsis">
fparams
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#code_gen.build_info" class="md-nav__link">
<span class="md-ellipsis">
build_info
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.compile_terms" class="md-nav__link">
<span class="md-ellipsis">
compile_terms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.escape_fortran_string" class="md-nav__link">
<span class="md-ellipsis">
escape_fortran_string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.generate_build_info_module" class="md-nav__link">
<span class="md-ellipsis">
generate_build_info_module
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.get_latex_equations_str" class="md-nav__link">
<span class="md-ellipsis">
get_latex_equations_str
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.test" class="md-nav__link">
<span class="md-ellipsis">
test
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../post/" class="md-nav__link">
<span class="md-ellipsis">
Compiler Stages
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Archived Components
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Archived Components
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../archive/pycompact/" class="md-nav__link">
<span class="md-ellipsis">
Python Bindings
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Fortran Core Reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Fortran Core Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../fortran/" class="md-nav__link">
<span class="md-ellipsis">
Modules & Procedures
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#code_gen" class="md-nav__link">
<span class="md-ellipsis">
code_gen
</span>
</a>
<nav class="md-nav" aria-label="code_gen">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#code_gen.VersionInfo" class="md-nav__link">
<span class="md-ellipsis">
VersionInfo
</span>
</a>
<nav class="md-nav" aria-label="VersionInfo">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#code_gen.VersionInfo.__init__" class="md-nav__link">
<span class="md-ellipsis">
__init__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.VersionInfo.fparams" class="md-nav__link">
<span class="md-ellipsis">
fparams
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#code_gen.build_info" class="md-nav__link">
<span class="md-ellipsis">
build_info
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.compile_terms" class="md-nav__link">
<span class="md-ellipsis">
compile_terms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.escape_fortran_string" class="md-nav__link">
<span class="md-ellipsis">
escape_fortran_string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.generate_build_info_module" class="md-nav__link">
<span class="md-ellipsis">
generate_build_info_module
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.get_latex_equations_str" class="md-nav__link">
<span class="md-ellipsis">
get_latex_equations_str
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code_gen.test" class="md-nav__link">
<span class="md-ellipsis">
test
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="code-generator-code_genpy">Code Generator (<code>code_gen.py</code>)</h1>
<div class="doc doc-object doc-module">
<h2 id="code_gen" class="doc doc-heading">
<code>code_gen</code>
</h2>
<div class="doc doc-contents first">
<div class="doc doc-children">
<div class="doc doc-object doc-class">
<h3 id="code_gen.VersionInfo" class="doc doc-heading">
<code>VersionInfo</code>
</h3>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code>object</code></p>
<p>Encapsulates build and version metadata for the code generator execution.</p>
<p>This class queries the current Git repository state to fetch the HEAD commit
hash and checks if there are uncommitted changes, appending metadata to
identify the exact codebase state used to generate the output files.</p>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">VersionInfo</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Encapsulates build and version metadata for the code generator execution.</span>
<span class="sd"> This class queries the current Git repository state to fetch the HEAD commit</span>
<span class="sd"> hash and checks if there are uncommitted changes, appending metadata to</span>
<span class="sd"> identify the exact codebase state used to generate the output files.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">input_raw</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Initializes VersionInfo with build date, git hash, and terms metadata.</span>
<span class="sd"> Args:</span>
<span class="sd"> input_raw (str): The raw input string containing DSL term definitions.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">bd</span> <span class="o">=</span> <span class="s1">&#39;build date: </span><span class="si">{}</span><span class="s1">&#39;</span>
<span class="n">bb</span> <span class="o">=</span> <span class="s1">&#39;build base: </span><span class="si">{}</span><span class="s1">&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">build_date</span> <span class="o">=</span> <span class="n">bd</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">today</span><span class="p">()</span><span class="o">.</span><span class="n">ctime</span><span class="p">())</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">build_base</span> <span class="o">=</span> <span class="n">bb</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sp</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s2">&quot;git&quot;</span><span class="p">,</span> <span class="s2">&quot;rev-parse&quot;</span><span class="p">,</span> <span class="s2">&quot;HEAD&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="k">except</span> <span class="n">sp</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">build_base</span> <span class="o">=</span> <span class="s2">&quot;None&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">sp</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="s2">&quot;git diff --exit-code&quot;</span><span class="o">.</span><span class="n">split</span><span class="p">())</span>
<span class="n">sp</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="s2">&quot;git diff --cached --exit-code&quot;</span><span class="o">.</span><span class="n">split</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">off_base</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">except</span> <span class="n">sp</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">off_base</span> <span class="o">=</span> <span class="s2">&quot;built with changes not commited&quot;</span>
<span class="n">tinfo</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;</span>
<span class="s1">================================================================================</span>
<span class="s1">************************************ terms *************************************</span>
<span class="s1">--------------------------------------------------------------------------------</span>
<span class="si">{}</span>
<span class="s1">================================================================================</span>
<span class="s1">&#39;&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">term_info</span> <span class="o">=</span> <span class="n">tinfo</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">input_raw</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">fparams</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Formats the collected build parameters into a single string.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: Multi-line string summarizing build date, revision, and terms details.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">build_date</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">build_base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">off_base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">term_info</span><span class="p">])</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h4 id="code_gen.VersionInfo.__init__" class="doc doc-heading">
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">input_raw</span><span class="p">)</span></code>
</h4>
<div class="doc doc-contents ">
<p>Initializes VersionInfo with build date, git hash, and terms metadata.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>input_raw</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw input string containing DSL term definitions.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span></pre></div></td><td class="code"><div><pre><span></span><code> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">input_raw</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Initializes VersionInfo with build date, git hash, and terms metadata.</span>
<span class="sd"> Args:</span>
<span class="sd"> input_raw (str): The raw input string containing DSL term definitions.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">bd</span> <span class="o">=</span> <span class="s1">&#39;build date: </span><span class="si">{}</span><span class="s1">&#39;</span>
<span class="n">bb</span> <span class="o">=</span> <span class="s1">&#39;build base: </span><span class="si">{}</span><span class="s1">&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">build_date</span> <span class="o">=</span> <span class="n">bd</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">today</span><span class="p">()</span><span class="o">.</span><span class="n">ctime</span><span class="p">())</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">build_base</span> <span class="o">=</span> <span class="n">bb</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sp</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s2">&quot;git&quot;</span><span class="p">,</span> <span class="s2">&quot;rev-parse&quot;</span><span class="p">,</span> <span class="s2">&quot;HEAD&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="k">except</span> <span class="n">sp</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">build_base</span> <span class="o">=</span> <span class="s2">&quot;None&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">sp</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="s2">&quot;git diff --exit-code&quot;</span><span class="o">.</span><span class="n">split</span><span class="p">())</span>
<span class="n">sp</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="s2">&quot;git diff --cached --exit-code&quot;</span><span class="o">.</span><span class="n">split</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">off_base</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">except</span> <span class="n">sp</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">off_base</span> <span class="o">=</span> <span class="s2">&quot;built with changes not commited&quot;</span>
<span class="n">tinfo</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;</span>
<span class="s1">================================================================================</span>
<span class="s1">************************************ terms *************************************</span>
<span class="s1">--------------------------------------------------------------------------------</span>
<span class="si">{}</span>
<span class="s1">================================================================================</span>
<span class="s1">&#39;&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">term_info</span> <span class="o">=</span> <span class="n">tinfo</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">input_raw</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h4 id="code_gen.VersionInfo.fparams" class="doc doc-heading">
<code class="highlight language-python"><span class="n">fparams</span><span class="p">()</span></code>
</h4>
<div class="doc doc-contents ">
<p>Formats the collected build parameters into a single string.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
</td>
<td>
<div class="doc-md-description">
<p>Multi-line string summarizing build date, revision, and terms details.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">fparams</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Formats the collected build parameters into a single string.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: Multi-line string summarizing build date, revision, and terms details.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">build_date</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">build_base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">off_base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">term_info</span><span class="p">])</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="code_gen.build_info" class="doc doc-heading">
<code class="highlight language-python"><span class="n">build_info</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Generates and prints build information for the current code generation run.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>terms_raw</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw string contents of the DSL terms specification input file.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">186</span>
<span class="normal">187</span>
<span class="normal">188</span>
<span class="normal">189</span>
<span class="normal">190</span>
<span class="normal">191</span>
<span class="normal">192</span>
<span class="normal">193</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">build_info</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Generates and prints build information for the current code generation run.</span>
<span class="sd"> Args:</span>
<span class="sd"> terms_raw (str): The raw string contents of the DSL terms specification input file.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">vinfo</span> <span class="o">=</span> <span class="n">VersionInfo</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">vinfo</span><span class="o">.</span><span class="n">fparams</span><span class="p">())</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="code_gen.compile_terms" class="doc doc-heading">
<code class="highlight language-python"><span class="n">compile_terms</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Parses DSL terms spec and runs it through the five compiler stages.</p>
<p>This function initializes a new <code>CompilationContext</code> and executes the compiler pipeline
sequentially: parsing, derivative/fluctuation expansion, SymPy expression simplification,
data dependency resolution, and array buffer pooling.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>terms_raw</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw string contents of the DSL terms specification input file.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>CompilationContext</code></td> <td>
</td>
<td>
<div class="doc-md-description">
<p>The fully compiled and optimized compilation context.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">compile_terms</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Parses DSL terms spec and runs it through the five compiler stages.</span>
<span class="sd"> This function initializes a new `CompilationContext` and executes the compiler pipeline</span>
<span class="sd"> sequentially: parsing, derivative/fluctuation expansion, SymPy expression simplification,</span>
<span class="sd"> data dependency resolution, and array buffer pooling.</span>
<span class="sd"> Args:</span>
<span class="sd"> terms_raw (str): The raw string contents of the DSL terms specification input file.</span>
<span class="sd"> Returns:</span>
<span class="sd"> CompilationContext: The fully compiled and optimized compilation context.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">CompilationContext</span><span class="p">()</span>
<span class="n">ParserStage</span><span class="p">()</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">,</span> <span class="n">ctx</span><span class="p">)</span>
<span class="n">DerivativeExpansionStage</span><span class="p">()</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="n">SympySimplificationStage</span><span class="p">()</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="n">DependencyResolutionStage</span><span class="p">()</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="n">SympyOptimizationStage</span><span class="p">()</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ctx</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="code_gen.escape_fortran_string" class="doc doc-heading">
<code class="highlight language-python"><span class="n">escape_fortran_string</span><span class="p">(</span><span class="n">s</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Escapes string content for standard Fortran source formatting.</p>
<p>Converts internal double quotes into double-double quotes and splits the string lines,
wrapping them in Fortran concatenation syntax <code>// char(10) // &amp;</code> to respect line length limit.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>s</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw string to escape.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
</td>
<td>
<div class="doc-md-description">
<p>The escaped and formatted Fortran string parameter literal.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">escape_fortran_string</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Escapes string content for standard Fortran source formatting.</span>
<span class="sd"> Converts internal double quotes into double-double quotes and splits the string lines,</span>
<span class="sd"> wrapping them in Fortran concatenation syntax `// char(10) // &amp;` to respect line length limit.</span>
<span class="sd"> Args:</span>
<span class="sd"> s (str): The raw string to escape.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: The escaped and formatted Fortran string parameter literal.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">escaped</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&quot;&#39;</span><span class="p">)</span>
<span class="n">lines</span> <span class="o">=</span> <span class="n">escaped</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">lines</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">&#39;&quot;&quot;&#39;</span>
<span class="n">formatted_lines</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">line</span><span class="si">}</span><span class="s1">&quot;&#39;</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">]</span>
<span class="k">return</span> <span class="s1">&#39; // char(10) // &amp;</span><span class="se">\n</span><span class="s1"> &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">formatted_lines</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="code_gen.generate_build_info_module" class="doc doc-heading">
<code class="highlight language-python"><span class="n">generate_build_info_module</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Generates a complete standard Fortran module containing build info and LaTeX equations.</p>
<p>The generated module contains metadata about the compiler run, including the build base Git hash,
and a string representations of the LaTeX equations.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>terms_raw</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw string contents of the DSL terms specification input file.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span>
<span class="normal">163</span>
<span class="normal">164</span>
<span class="normal">165</span>
<span class="normal">166</span>
<span class="normal">167</span>
<span class="normal">168</span>
<span class="normal">169</span>
<span class="normal">170</span>
<span class="normal">171</span>
<span class="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span>
<span class="normal">183</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generate_build_info_module</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Generates a complete standard Fortran module containing build info and LaTeX equations.</span>
<span class="sd"> The generated module contains metadata about the compiler run, including the build base Git hash,</span>
<span class="sd"> and a string representations of the LaTeX equations.</span>
<span class="sd"> Args:</span>
<span class="sd"> terms_raw (str): The raw string contents of the DSL terms specification input file.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">vinfo</span> <span class="o">=</span> <span class="n">VersionInfo</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span>
<span class="n">build_info_str</span> <span class="o">=</span> <span class="n">vinfo</span><span class="o">.</span><span class="n">fparams</span><span class="p">()</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">compile_terms</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span>
<span class="n">latex_str</span> <span class="o">=</span> <span class="n">get_latex_equations_str</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="n">fortran_build_info</span> <span class="o">=</span> <span class="n">escape_fortran_string</span><span class="p">(</span><span class="n">build_info_str</span><span class="p">)</span>
<span class="n">fortran_latex</span> <span class="o">=</span> <span class="n">escape_fortran_string</span><span class="p">(</span><span class="n">latex_str</span><span class="p">)</span>
<span class="n">fortran_code</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;module m_build_info</span>
<span class="s2"> implicit none</span>
<span class="s2"> character(len=*), parameter :: build_info_str = &amp;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">fortran_build_info</span><span class="si">}</span>
<span class="s2"> character(len=*), parameter :: latex_equations_str = &amp;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">fortran_latex</span><span class="si">}</span>
<span class="s2">end module m_build_info</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="nb">print</span><span class="p">(</span><span class="n">fortran_code</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="code_gen.get_latex_equations_str" class="doc doc-heading">
<code class="highlight language-python"><span class="n">get_latex_equations_str</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Generates the LaTeX equations dictionary string from the context.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>ctx</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="post.CompilationContext" href="../post/#post.CompilationContext">CompilationContext</a></code>
</td>
<td>
<div class="doc-md-description">
<p>The compiled context containing the averaged fields.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
</td>
<td>
<div class="doc-md-description">
<p>A formatted string representing a Python dictionary mapping field names to LaTeX code.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">get_latex_equations_str</span><span class="p">(</span><span class="n">ctx</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Generates the LaTeX equations dictionary string from the context.</span>
<span class="sd"> Args:</span>
<span class="sd"> ctx (CompilationContext): The compiled context containing the averaged fields.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: A formatted string representing a Python dictionary mapping field names to LaTeX code.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">latex_lines</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;{&quot;</span><span class="p">]</span>
<span class="k">for</span> <span class="n">avg</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="n">latex_lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39; &quot;</span><span class="si">{}</span><span class="s1">&quot; : r&quot;$</span><span class="si">{}</span><span class="s1">$&quot;,&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">avg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">avg</span><span class="o">.</span><span class="n">latex</span><span class="p">))</span>
<span class="n">latex_lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;}&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">latex_lines</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="code_gen.test" class="doc doc-heading">
<code class="highlight language-python"><span class="n">test</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">,</span> <span class="n">report</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">latex</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Compiles the post-processing term specifications from DSL into targets.</p>
<p>This compiles the Lark AST through all 4 pipeline stages
and outputs the resulting Fortran source code via FortranProgramWriter,
a LaTeX equation dictionary via LatexWriter, or an IR report via ReportWriter.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>terms_raw</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>The raw string contents of the DSL terms specification.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td><code>report</code></td>
<td>
<code>bool</code>
</td>
<td>
<div class="doc-md-description">
<p>If True, prints a JSON-based compilation IR report instead. Defaults to False.</p>
</div>
</td>
<td>
<code>False</code>
</td>
</tr>
<tr class="doc-section-item">
<td><code>latex</code></td>
<td>
<code>bool</code>
</td>
<td>
<div class="doc-md-description">
<p>If True, prints LaTeX equation dictionary instead. Defaults to False.</p>
</div>
</td>
<td>
<code>False</code>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>code/code_gen/code_gen.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">,</span> <span class="n">report</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">latex</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Compiles the post-processing term specifications from DSL into targets.</span>
<span class="sd"> This compiles the Lark AST through all 4 pipeline stages</span>
<span class="sd"> and outputs the resulting Fortran source code via FortranProgramWriter,</span>
<span class="sd"> a LaTeX equation dictionary via LatexWriter, or an IR report via ReportWriter.</span>
<span class="sd"> Args:</span>
<span class="sd"> terms_raw (str): The raw string contents of the DSL terms specification.</span>
<span class="sd"> report (bool, optional): If True, prints a JSON-based compilation IR report instead. Defaults to False.</span>
<span class="sd"> latex (bool, optional): If True, prints LaTeX equation dictionary instead. Defaults to False.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">compile_terms</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span>
<span class="k">if</span> <span class="n">report</span><span class="p">:</span>
<span class="n">ReportWriter</span><span class="p">()</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">latex</span><span class="p">:</span>
<span class="n">LatexWriter</span><span class="p">()</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">FortranProgramWriter</span><span class="p">()</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.sections", "navigation.expand", "content.code.copy"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
</body>
</html>