24460 lines
No EOL
1.1 MiB
24460 lines
No EOL
1.1 MiB
|
|
<!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="../code_gen/">
|
|
|
|
|
|
<link rel="next" href="../../archive/pycompact/">
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="icon" href="../../assets/images/favicon.png">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
|
|
|
|
|
|
|
<title>Compiler Stages - 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="#compiler-stages-postpy" 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">
|
|
|
|
Compiler Stages
|
|
|
|
</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="../code_gen/" 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">
|
|
<a href="../code_gen/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Code Generator
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<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">
|
|
|
|
|
|
Compiler Stages
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Compiler Stages
|
|
|
|
|
|
|
|
</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="#post" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
post
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="post">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post--dns-post-processing-code-generator-core-postpy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DNS Post-Processing Code Generator Core (post.py)
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ArrayFCodePrinter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ArrayFCodePrinter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ArrayFCodePrinter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ArrayFCodePrinter.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
AveragedField
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="AveragedField">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.id" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
id
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.isWeighted" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
isWeighted
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.pass1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
pass1
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.pass2" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
pass2
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CollectDefinitions
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CollectDefinitions">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions.assign_avg_var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
assign_avg_var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions.assign_var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
assign_var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions.varlist" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
varlist
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CompilationContext" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CompilationContext
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CompilationContext">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CompilationContext.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DependencyNode
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DependencyNode">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.checkFluctuation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
checkFluctuation
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.depClosure" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
depClosure
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.depends_on" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
depends_on
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.is_fluctuation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
is_fluctuation
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyResolutionStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DependencyResolutionStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DependencyResolutionStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyResolutionStage.calc_size" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
calc_size
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyResolutionStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyResolutionStage.sort_vars_new" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
sort_vars_new
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DerivativeExpansionStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DerivativeExpansionStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DerivativeExpansionStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DerivativeExpansionStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DerivedField" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DerivedField
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DerivedField">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DerivedField.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DifferentialOperatorRegistry" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DifferentialOperatorRegistry
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DifferentialOperatorRegistry">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DifferentialOperatorRegistry.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DifferentialOperatorRegistry.get_latex_symbol" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_latex_symbol
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DifferentialOperatorRegistry.register" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
register
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ExpInspector
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ExpInspector">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.__call__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__call__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.dnx" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dnx
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.fluc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fluc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.inspect" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
inspect
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ExpToCode
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ExpToCode">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.add" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
add
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.div" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
div
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.dnx" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dnx
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.env" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.fcall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fcall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.fluc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fluc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.icall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
icall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.mul" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
mul
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.neg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
neg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.number" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
number
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.paren" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
paren
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.sub" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
sub
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ExpToLatex
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ExpToLatex">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.add" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
add
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.arithmatic_rooted" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
arithmatic_rooted
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.div" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
div
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.dnx" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dnx
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.env" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.fcall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fcall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.fluc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fluc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.icall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
icall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.mul" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
mul
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.neg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
neg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.number" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
number
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.paren" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
paren
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.parenthise" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
parenthise
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.sub" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
sub
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.Field" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Field
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Field">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.Field.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.Field.export_on" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
export_on
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldBase" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FieldBase
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FieldBase">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldBase.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldBase.__repr__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__repr__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldBase.export_on" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
export_on
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldExporter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FieldExporter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FieldExporter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldExporter.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FluctuationField" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FluctuationField
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FluctuationField">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FluctuationField.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FluctuationField.id" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
id
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FortranCodeGenerator
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FortranCodeGenerator">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_alloc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_alloc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_avg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_avg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_decl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_decl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_free" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_free
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_write_avg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_write_avg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_alloc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_alloc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_avg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_avg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_decl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_decl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_free" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_free
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_AveragedField_avg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_AveragedField_avg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_AveragedField_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_AveragedField_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_DerivedField_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_DerivedField_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FieldExporter_alloc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FieldExporter_alloc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FieldExporter_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FieldExporter_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FieldExporter_decl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FieldExporter_decl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FieldExporter_free" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FieldExporter_free
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_Field_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_Field_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FluctuationField_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FluctuationField_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_PrimaryField_alloc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_PrimaryField_alloc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_PrimaryField_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_PrimaryField_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_PrimaryField_decl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_PrimaryField_decl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_PrimaryField_free" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_PrimaryField_free
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranProgramWriter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FortranProgramWriter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FortranProgramWriter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranProgramWriter.work_array_codes" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
work_array_codes
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranProgramWriter.write" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
write
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranTemplateStore" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FortranTemplateStore
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FunctionRegistry
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FunctionRegistry">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.register_latex" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
register_latex
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.register_sympy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
register_sympy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.to_latex" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
to_latex
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.to_sympy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
to_sympy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
LarkToSympy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="LarkToSympy">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.add" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
add
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.div" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
div
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.dnx" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dnx
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.env" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.fcall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fcall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.fluc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fluc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.icall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
icall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.mul" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
mul
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.neg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
neg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.number" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
number
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.paren" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
paren
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.sub" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
sub
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.udf" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
udf
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LatexWriter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
LatexWriter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="LatexWriter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LatexWriter.write" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
write
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ParserStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ParserStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ParserStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ParserStage.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ParserStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.PrimaryField" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
PrimaryField
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="PrimaryField">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.PrimaryField.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ReportWriter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ReportWriter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ReportWriter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ReportWriter.write" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
write
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizationStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
SympyOptimizationStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="SympyOptimizationStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizationStage.allocate_arr" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
allocate_arr
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizationStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizationStage.liveness" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
liveness
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
SympyOptimizer
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="SympyOptimizer">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.calculate_flops_and_heavy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
calculate_flops_and_heavy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.count_3d_loads" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
count_3d_loads
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.get_instance" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_instance
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.get_sympy_expr" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_sympy_expr
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.optimize_field" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
optimize_field
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.set_averaged" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
set_averaged
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympySimplificationStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
SympySimplificationStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="SympySimplificationStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympySimplificationStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.make_allocate" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
make_allocate
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.tok_to_bool" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
tok_to_bool
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.tok_to_int" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
tok_to_int
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.tok_to_str" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
tok_to_str
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
</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="#post" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
post
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="post">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post--dns-post-processing-code-generator-core-postpy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DNS Post-Processing Code Generator Core (post.py)
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ArrayFCodePrinter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ArrayFCodePrinter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ArrayFCodePrinter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ArrayFCodePrinter.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
AveragedField
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="AveragedField">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.id" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
id
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.isWeighted" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
isWeighted
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.pass1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
pass1
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.AveragedField.pass2" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
pass2
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CollectDefinitions
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CollectDefinitions">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions.assign_avg_var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
assign_avg_var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions.assign_var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
assign_var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CollectDefinitions.varlist" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
varlist
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CompilationContext" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CompilationContext
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CompilationContext">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.CompilationContext.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DependencyNode
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DependencyNode">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.checkFluctuation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
checkFluctuation
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.depClosure" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
depClosure
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.depends_on" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
depends_on
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyNode.is_fluctuation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
is_fluctuation
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyResolutionStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DependencyResolutionStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DependencyResolutionStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyResolutionStage.calc_size" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
calc_size
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyResolutionStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DependencyResolutionStage.sort_vars_new" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
sort_vars_new
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DerivativeExpansionStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DerivativeExpansionStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DerivativeExpansionStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DerivativeExpansionStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DerivedField" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DerivedField
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DerivedField">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DerivedField.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DifferentialOperatorRegistry" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DifferentialOperatorRegistry
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="DifferentialOperatorRegistry">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DifferentialOperatorRegistry.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DifferentialOperatorRegistry.get_latex_symbol" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_latex_symbol
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.DifferentialOperatorRegistry.register" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
register
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ExpInspector
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ExpInspector">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.__call__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__call__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.dnx" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dnx
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.fluc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fluc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.inspect" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
inspect
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpInspector.var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ExpToCode
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ExpToCode">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.add" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
add
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.div" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
div
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.dnx" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dnx
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.env" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.fcall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fcall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.fluc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fluc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.icall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
icall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.mul" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
mul
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.neg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
neg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.number" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
number
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.paren" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
paren
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.sub" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
sub
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToCode.var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ExpToLatex
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ExpToLatex">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.add" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
add
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.arithmatic_rooted" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
arithmatic_rooted
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.div" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
div
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.dnx" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dnx
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.env" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.fcall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fcall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.fluc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fluc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.icall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
icall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.mul" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
mul
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.neg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
neg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.number" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
number
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.paren" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
paren
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.parenthise" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
parenthise
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.sub" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
sub
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ExpToLatex.var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.Field" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Field
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Field">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.Field.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.Field.export_on" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
export_on
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldBase" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FieldBase
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FieldBase">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldBase.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldBase.__repr__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__repr__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldBase.export_on" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
export_on
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldExporter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FieldExporter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FieldExporter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FieldExporter.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FluctuationField" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FluctuationField
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FluctuationField">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FluctuationField.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FluctuationField.id" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
id
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FortranCodeGenerator
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FortranCodeGenerator">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_alloc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_alloc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_avg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_avg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_decl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_decl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_free" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_free
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generate_write_avg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generate_write_avg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_alloc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_alloc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_avg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_avg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_decl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_decl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.generic_free" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
generic_free
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_AveragedField_avg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_AveragedField_avg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_AveragedField_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_AveragedField_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_DerivedField_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_DerivedField_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FieldExporter_alloc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FieldExporter_alloc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FieldExporter_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FieldExporter_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FieldExporter_decl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FieldExporter_decl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FieldExporter_free" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FieldExporter_free
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_Field_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_Field_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_FluctuationField_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_FluctuationField_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_PrimaryField_alloc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_PrimaryField_alloc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_PrimaryField_code" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_PrimaryField_code
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_PrimaryField_decl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_PrimaryField_decl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranCodeGenerator.visit_PrimaryField_free" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
visit_PrimaryField_free
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranProgramWriter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FortranProgramWriter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FortranProgramWriter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranProgramWriter.work_array_codes" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
work_array_codes
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranProgramWriter.write" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
write
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FortranTemplateStore" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FortranTemplateStore
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
FunctionRegistry
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="FunctionRegistry">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.register_latex" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
register_latex
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.register_sympy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
register_sympy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.to_latex" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
to_latex
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.FunctionRegistry.to_sympy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
to_sympy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
LarkToSympy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="LarkToSympy">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.add" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
add
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.div" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
div
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.dnx" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dnx
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.env" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.fcall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fcall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.fluc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
fluc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.icall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
icall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.mul" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
mul
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.neg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
neg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.number" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
number
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.paren" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
paren
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.sub" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
sub
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.udf" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
udf
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LarkToSympy.var" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
var
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LatexWriter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
LatexWriter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="LatexWriter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.LatexWriter.write" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
write
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ParserStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ParserStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ParserStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ParserStage.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ParserStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.PrimaryField" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
PrimaryField
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="PrimaryField">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.PrimaryField.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ReportWriter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ReportWriter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ReportWriter">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.ReportWriter.write" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
write
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizationStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
SympyOptimizationStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="SympyOptimizationStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizationStage.allocate_arr" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
allocate_arr
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizationStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizationStage.liveness" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
liveness
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
SympyOptimizer
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="SympyOptimizer">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.calculate_flops_and_heavy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
calculate_flops_and_heavy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.count_3d_loads" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
count_3d_loads
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.get_instance" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_instance
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.get_sympy_expr" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_sympy_expr
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.optimize_field" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
optimize_field
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympyOptimizer.set_averaged" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
set_averaged
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympySimplificationStage" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
SympySimplificationStage
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="SympySimplificationStage">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.SympySimplificationStage.execute" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
execute
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.make_allocate" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
make_allocate
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.tok_to_bool" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
tok_to_bool
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.tok_to_int" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
tok_to_int
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post.tok_to_str" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
tok_to_str
|
|
|
|
</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="compiler-stages-postpy">Compiler Stages (<code>post.py</code>)</h1>
|
|
|
|
|
|
<div class="doc doc-object doc-module">
|
|
|
|
|
|
|
|
<h2 id="post" class="doc doc-heading">
|
|
<code>post</code>
|
|
|
|
|
|
</h2>
|
|
|
|
<div class="doc doc-contents first">
|
|
|
|
<h3 id="post--dns-post-processing-code-generator-core-postpy">DNS Post-Processing Code Generator Core (post.py)</h3>
|
|
<p>이 모듈은 난류 및 연소 DNS(Direct Numerical Simulation) 데이터의 후처리를 위한 고성능 Fortran 코드를 생성하는 컴파일러의 코어입니다.
|
|
사용자가 정의한 DSL(Domain Specific Language) 입력 식을 읽어 파싱한 후, 다음과 같은 4단계 최적화 컴파일 과정을 거쳐 극도로 최적화된 3차원 루프 Fortran 모듈 코드를 자동 생성합니다.</p>
|
|
<p>[컴파일러 파이프라인 4단계 개요]
|
|
1. Stage 1 (AST 수집 및 변수 정의):
|
|
- Lark 파서가 생성한 AST(Abstract Syntax Tree)를 순회하며 기본 입력 변수(Primary), 계산이 필요한 대입식(Derived),
|
|
그리고 통계 물리량 계산을 위한 평균화 변수(Averaged)를 추출하고 필드 메타데이터 객체를 구성합니다.
|
|
2. Stage 2 (수치 미분 및 변동량 확장):
|
|
- 수식 내에 수치 미분자(ddx, d2dy 등)나 변동량(fluctuation, u')이 존재하면, 이를 물리적으로 차분 연산할 중간
|
|
미분 필드(DerivedField) 및 변동량 필드(FluctuationField)로 자동 변환하고 변수 테이블에 등록하여 확장합니다.
|
|
3. Stage 3 (의존성 분석 및 위상 정렬):
|
|
- 필드 간의 선후 연산 관계를 분석하여 유향 의존성 그래프(Directed Dependency Graph)를 생성합니다.
|
|
- 난류 통계의 특성상 평균 연산을 기준으로 "평균치 계산 전의 루프(Pass 1)"와 "평균치를 구한 후 변동량을 계산하는 루프(Pass 2)"로
|
|
전체 연산 블록을 논리적으로 분할하고, 각각의 블록 내에서 올바른 순서로 계산되도록 위상 정렬(Topological Sort)을 수행합니다.
|
|
4. Stage 4 (수식 기호 최적화, Liveness 분석 및 Buffer Array Pooling):
|
|
- SymPy 기호 수학 라이브러리를 이용하여 복잡한 3차원 수식을 대수적으로 간소화하고, 공통 부분 식 제거(CSE)를 적용하여 연산 비용(Flops)을 최적화합니다.
|
|
- 격자 데이터가 거대하므로 모든 변수에 개별 3D 배열을 할당하면 메모리가 고갈됩니다. 이를 방지하기 위해 변수들의
|
|
생명 주기(Liveness Window)를 수학적으로 추적하고, 동적 메모리 풀을 구축하여 동시에 활성화되지 않는 임시 변수들이
|
|
공통의 제한된 버퍼 배열(xyzbuffer0, xyzbuffer1, ...)을 나누어 사용(Array Pooling)하도록 할당하여 메모리 사용량을 최소화합니다.</p>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.ArrayFCodePrinter" class="doc doc-heading">
|
|
<code>ArrayFCodePrinter</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><span title="sympy.printing.fortran.FCodePrinter">FCodePrinter</span></code></p>
|
|
|
|
|
|
<p>Custom SymPy printer that formats symbols as Fortran multidimensional array accesses.</p>
|
|
<p>Transforms plain SymPy symbols into:
|
|
- 3D grid accesses (e.g., var(i,j,k)) for spatial fields.
|
|
- 1D array accesses (e.g., var(i)) for spatial averages.
|
|
- Subtraction expressions (e.g., (u(i,j,k) - avg_u(i))) for fluctuation variables.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">898</span>
|
|
<span class="normal">899</span>
|
|
<span class="normal">900</span>
|
|
<span class="normal">901</span>
|
|
<span class="normal">902</span>
|
|
<span class="normal">903</span>
|
|
<span class="normal">904</span>
|
|
<span class="normal">905</span>
|
|
<span class="normal">906</span>
|
|
<span class="normal">907</span>
|
|
<span class="normal">908</span>
|
|
<span class="normal">909</span>
|
|
<span class="normal">910</span>
|
|
<span class="normal">911</span>
|
|
<span class="normal">912</span>
|
|
<span class="normal">913</span>
|
|
<span class="normal">914</span>
|
|
<span class="normal">915</span>
|
|
<span class="normal">916</span>
|
|
<span class="normal">917</span>
|
|
<span class="normal">918</span>
|
|
<span class="normal">919</span>
|
|
<span class="normal">920</span>
|
|
<span class="normal">921</span>
|
|
<span class="normal">922</span>
|
|
<span class="normal">923</span>
|
|
<span class="normal">924</span>
|
|
<span class="normal">925</span>
|
|
<span class="normal">926</span>
|
|
<span class="normal">927</span>
|
|
<span class="normal">928</span>
|
|
<span class="normal">929</span>
|
|
<span class="normal">930</span>
|
|
<span class="normal">931</span>
|
|
<span class="normal">932</span>
|
|
<span class="normal">933</span>
|
|
<span class="normal">934</span>
|
|
<span class="normal">935</span>
|
|
<span class="normal">936</span>
|
|
<span class="normal">937</span>
|
|
<span class="normal">938</span>
|
|
<span class="normal">939</span>
|
|
<span class="normal">940</span>
|
|
<span class="normal">941</span>
|
|
<span class="normal">942</span>
|
|
<span class="normal">943</span>
|
|
<span class="normal">944</span>
|
|
<span class="normal">945</span>
|
|
<span class="normal">946</span>
|
|
<span class="normal">947</span>
|
|
<span class="normal">948</span>
|
|
<span class="normal">949</span>
|
|
<span class="normal">950</span>
|
|
<span class="normal">951</span>
|
|
<span class="normal">952</span>
|
|
<span class="normal">953</span>
|
|
<span class="normal">954</span>
|
|
<span class="normal">955</span>
|
|
<span class="normal">956</span>
|
|
<span class="normal">957</span>
|
|
<span class="normal">958</span>
|
|
<span class="normal">959</span>
|
|
<span class="normal">960</span>
|
|
<span class="normal">961</span>
|
|
<span class="normal">962</span>
|
|
<span class="normal">963</span>
|
|
<span class="normal">964</span>
|
|
<span class="normal">965</span>
|
|
<span class="normal">966</span>
|
|
<span class="normal">967</span>
|
|
<span class="normal">968</span>
|
|
<span class="normal">969</span>
|
|
<span class="normal">970</span>
|
|
<span class="normal">971</span>
|
|
<span class="normal">972</span>
|
|
<span class="normal">973</span>
|
|
<span class="normal">974</span>
|
|
<span class="normal">975</span>
|
|
<span class="normal">976</span>
|
|
<span class="normal">977</span>
|
|
<span class="normal">978</span>
|
|
<span class="normal">979</span>
|
|
<span class="normal">980</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">ArrayFCodePrinter</span><span class="p">(</span><span class="n">FCodePrinter</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Custom SymPy printer that formats symbols as Fortran multidimensional array accesses.</span>
|
|
|
|
<span class="sd"> Transforms plain SymPy symbols into:</span>
|
|
<span class="sd"> - 3D grid accesses (e.g., var(i,j,k)) for spatial fields.</span>
|
|
<span class="sd"> - 1D array accesses (e.g., var(i)) for spatial averages.</span>
|
|
<span class="sd"> - Subtraction expressions (e.g., (u(i,j,k) - avg_u(i))) for fluctuation variables.</span>
|
|
<span class="sd"> """</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">settings</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">array_symbols</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">avg_symbols</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes ArrayFCodePrinter with array settings and symbol catalogs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> settings (dict, optional): Printer settings configuration. Defaults to None.</span>
|
|
<span class="sd"> array_symbols (dict, optional): Maps 3D fields to their buffer array names. Defaults to None.</span>
|
|
<span class="sd"> avg_symbols (dict, optional): Maps averaged fields to their 1D arrays. Defaults to None.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
<span class="n">settings</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'source_format'</span><span class="p">,</span> <span class="s1">'free'</span><span class="p">)</span> <span class="c1"># Default to free-form Fortran 95</span>
|
|
<span class="n">settings</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'standard'</span><span class="p">,</span> <span class="mi">95</span><span class="p">)</span>
|
|
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">settings</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">array_symbols</span> <span class="o">=</span> <span class="n">array_symbols</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg_symbols</span> <span class="o">=</span> <span class="n">avg_symbols</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_print_Float</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Prints Float constants with double precision (d0) suffix.</span>
|
|
|
|
<span class="sd"> Ensures precision is not degraded during Fortran compilation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> expr (sympy.Float): SymPy float node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Double precision literal string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="s1">'e'</span> <span class="ow">in</span> <span class="n">val</span> <span class="ow">or</span> <span class="s1">'E'</span> <span class="ow">in</span> <span class="n">val</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">val</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'e'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'E'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="s1">'.'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">val</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">val</span> <span class="o">+</span> <span class="s2">".0d0"</span>
|
|
<span class="k">return</span> <span class="n">val</span> <span class="o">+</span> <span class="s2">"d0"</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_print_Symbol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps a SymPy Symbol to a Fortran array expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> expr (sympy.Symbol): SymPy Symbol to print.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Formatted Fortran variable access or inline fluctuation calculation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="c1"># 1. 3D grid array</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">array_symbols</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">array_symbols</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">(i,j,k)"</span>
|
|
<span class="c1"># 2. 1D averaged array</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">avg_symbols</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">avg_symbols</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">(i)"</span>
|
|
<span class="c1"># 3. Fluctuation substitution (e.g. u' -> u - <u_w>)</span>
|
|
<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"__prime"</span><span class="p">):</span>
|
|
<span class="n">base</span> <span class="o">=</span> <span class="n">name</span><span class="p">[:</span><span class="o">-</span><span class="mi">7</span><span class="p">]</span>
|
|
<span class="n">arr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">array_symbols</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">base</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
|
|
<span class="n">avg_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"avg_</span><span class="si">{</span><span class="n">base</span><span class="si">}</span><span class="s2">"</span>
|
|
<span class="n">printed_avg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">avg_symbols</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">avg_name</span><span class="p">,</span><span class="w"> </span><span class="n">avg_name</span><span class="p">)</span><span class="si">}</span><span class="s2">(i)"</span>
|
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="n">arr</span><span class="si">}</span><span class="s2">(i,j,k) - </span><span class="si">{</span><span class="n">printed_avg</span><span class="si">}</span><span class="s2">)"</span>
|
|
<span class="k">return</span> <span class="n">name</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_print_Function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Prints custom non-standard functions securely in Fortran output.</span>
|
|
|
|
<span class="sd"> Fallback logic for rxn_rate, udf, etc.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> expr (sympy.Function): SymPy Function node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Standard Fortran call syntax for the function.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_print_Function</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="s2">", "</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">doprint</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expr</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">expr</span><span class="o">.</span><span class="n">func</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)"</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ArrayFCodePrinter.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">settings</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">array_symbols</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">avg_symbols</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes ArrayFCodePrinter with array settings and symbol catalogs.</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>settings</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Printer settings configuration. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>array_symbols</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Maps 3D fields to their buffer array names. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>avg_symbols</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Maps averaged fields to their 1D arrays. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">907</span>
|
|
<span class="normal">908</span>
|
|
<span class="normal">909</span>
|
|
<span class="normal">910</span>
|
|
<span class="normal">911</span>
|
|
<span class="normal">912</span>
|
|
<span class="normal">913</span>
|
|
<span class="normal">914</span>
|
|
<span class="normal">915</span>
|
|
<span class="normal">916</span>
|
|
<span class="normal">917</span>
|
|
<span class="normal">918</span>
|
|
<span class="normal">919</span>
|
|
<span class="normal">920</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">settings</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">array_symbols</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">avg_symbols</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes ArrayFCodePrinter with array settings and symbol catalogs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> settings (dict, optional): Printer settings configuration. Defaults to None.</span>
|
|
<span class="sd"> array_symbols (dict, optional): Maps 3D fields to their buffer array names. Defaults to None.</span>
|
|
<span class="sd"> avg_symbols (dict, optional): Maps averaged fields to their 1D arrays. Defaults to None.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
<span class="n">settings</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'source_format'</span><span class="p">,</span> <span class="s1">'free'</span><span class="p">)</span> <span class="c1"># Default to free-form Fortran 95</span>
|
|
<span class="n">settings</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'standard'</span><span class="p">,</span> <span class="mi">95</span><span class="p">)</span>
|
|
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">settings</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">array_symbols</span> <span class="o">=</span> <span class="n">array_symbols</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg_symbols</span> <span class="o">=</span> <span class="n">avg_symbols</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.AveragedField" class="doc doc-heading">
|
|
<code>AveragedField</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code></p>
|
|
|
|
|
|
<p>특정 물리 필드를 격자의 동질 차원(예: X 방향 1D선상 평균)에 대해
|
|
공간 통계 평균(Average) 연산을 수행하는 1차원 필드 클래스입니다.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2149</span>
|
|
<span class="normal">2150</span>
|
|
<span class="normal">2151</span>
|
|
<span class="normal">2152</span>
|
|
<span class="normal">2153</span>
|
|
<span class="normal">2154</span>
|
|
<span class="normal">2155</span>
|
|
<span class="normal">2156</span>
|
|
<span class="normal">2157</span>
|
|
<span class="normal">2158</span>
|
|
<span class="normal">2159</span>
|
|
<span class="normal">2160</span>
|
|
<span class="normal">2161</span>
|
|
<span class="normal">2162</span>
|
|
<span class="normal">2163</span>
|
|
<span class="normal">2164</span>
|
|
<span class="normal">2165</span>
|
|
<span class="normal">2166</span>
|
|
<span class="normal">2167</span>
|
|
<span class="normal">2168</span>
|
|
<span class="normal">2169</span>
|
|
<span class="normal">2170</span>
|
|
<span class="normal">2171</span>
|
|
<span class="normal">2172</span>
|
|
<span class="normal">2173</span>
|
|
<span class="normal">2174</span>
|
|
<span class="normal">2175</span>
|
|
<span class="normal">2176</span>
|
|
<span class="normal">2177</span>
|
|
<span class="normal">2178</span>
|
|
<span class="normal">2179</span>
|
|
<span class="normal">2180</span>
|
|
<span class="normal">2181</span>
|
|
<span class="normal">2182</span>
|
|
<span class="normal">2183</span>
|
|
<span class="normal">2184</span>
|
|
<span class="normal">2185</span>
|
|
<span class="normal">2186</span>
|
|
<span class="normal">2187</span>
|
|
<span class="normal">2188</span>
|
|
<span class="normal">2189</span>
|
|
<span class="normal">2190</span>
|
|
<span class="normal">2191</span>
|
|
<span class="normal">2192</span>
|
|
<span class="normal">2193</span>
|
|
<span class="normal">2194</span>
|
|
<span class="normal">2195</span>
|
|
<span class="normal">2196</span>
|
|
<span class="normal">2197</span>
|
|
<span class="normal">2198</span>
|
|
<span class="normal">2199</span>
|
|
<span class="normal">2200</span>
|
|
<span class="normal">2201</span>
|
|
<span class="normal">2202</span>
|
|
<span class="normal">2203</span>
|
|
<span class="normal">2204</span>
|
|
<span class="normal">2205</span>
|
|
<span class="normal">2206</span>
|
|
<span class="normal">2207</span>
|
|
<span class="normal">2208</span>
|
|
<span class="normal">2209</span>
|
|
<span class="normal">2210</span>
|
|
<span class="normal">2211</span>
|
|
<span class="normal">2212</span>
|
|
<span class="normal">2213</span>
|
|
<span class="normal">2214</span>
|
|
<span class="normal">2215</span>
|
|
<span class="normal">2216</span>
|
|
<span class="normal">2217</span>
|
|
<span class="normal">2218</span>
|
|
<span class="normal">2219</span>
|
|
<span class="normal">2220</span>
|
|
<span class="normal">2221</span>
|
|
<span class="normal">2222</span>
|
|
<span class="normal">2223</span>
|
|
<span class="normal">2224</span>
|
|
<span class="normal">2225</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">AveragedField</span><span class="p">(</span><span class="n">FieldBase</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""특정 물리 필드를 격자의 동질 차원(예: X 방향 1D선상 평균)에 대해 </span>
|
|
<span class="sd"> 공간 통계 평균(Average) 연산을 수행하는 1차원 필드 클래스입니다.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates average field naming key.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> w (str/None): Weight parameter.</span>
|
|
<span class="sd"> tgt (str): Target field variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Generated averaged variable key name.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">w</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_avg_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"avg_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tgt</span><span class="p">)</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">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes AveragedField and populates dependency closure.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> w (str/None): Average weights.</span>
|
|
<span class="sd"> tgt (str): Target variable to average.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">)</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">AveragedField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shape</span> <span class="o">=</span> <span class="s2">"nxp"</span> <span class="c1"># Y, Z dimensions averaged out, leaving X-dimension array of size nxp</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dim</span> <span class="o">=</span> <span class="s2">":"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">tgt</span>
|
|
|
|
<span class="n">tfield</span> <span class="o">=</span> <span class="n">fdict</span><span class="p">[</span><span class="n">tgt</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fset</span> <span class="o">=</span> <span class="n">tfield</span><span class="o">.</span><span class="n">checkFluctuation</span><span class="p">()</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\left\langle </span><span class="si">{}</span><span class="s2"> \right\rangle"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tfield</span><span class="o">.</span><span class="n">latex</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">fset</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">tgt</span> <span class="o">=</span> <span class="n">tgt</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">tgt</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">ftgt</span> <span class="o">=</span> <span class="n">FluctuationField</span><span class="o">.</span><span class="n">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">tgt</span> <span class="o">=</span> <span class="n">ftgt</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">ftgt</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">weighted</span> <span class="o">=</span> <span class="n">w</span>
|
|
<span class="k">if</span> <span class="n">w</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">w</span> <span class="o">=</span> <span class="n">fdict</span><span class="p">[</span><span class="n">w</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">w</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">+=</span> <span class="p">(</span><span class="s2">"_{{</span><span class="si">{}</span><span class="s2">}}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">w</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span> <span class="nf">isWeighted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if average has a weighted density variable.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if weighted.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">weighted</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span> <span class="nf">pass1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if average variable can be computed in loop Pass 1.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if Pass 1 average.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pass2</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">pass2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if average variable requires Pass 2 (dependent on fluctuation).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if Pass 2 average.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fset</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.AveragedField.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes AveragedField and populates dependency closure.</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>w</code></td>
|
|
<td>
|
|
<code>str / None</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Average weights.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>tgt</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Target variable to average.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Global variable registry dictionary.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2170</span>
|
|
<span class="normal">2171</span>
|
|
<span class="normal">2172</span>
|
|
<span class="normal">2173</span>
|
|
<span class="normal">2174</span>
|
|
<span class="normal">2175</span>
|
|
<span class="normal">2176</span>
|
|
<span class="normal">2177</span>
|
|
<span class="normal">2178</span>
|
|
<span class="normal">2179</span>
|
|
<span class="normal">2180</span>
|
|
<span class="normal">2181</span>
|
|
<span class="normal">2182</span>
|
|
<span class="normal">2183</span>
|
|
<span class="normal">2184</span>
|
|
<span class="normal">2185</span>
|
|
<span class="normal">2186</span>
|
|
<span class="normal">2187</span>
|
|
<span class="normal">2188</span>
|
|
<span class="normal">2189</span>
|
|
<span class="normal">2190</span>
|
|
<span class="normal">2191</span>
|
|
<span class="normal">2192</span>
|
|
<span class="normal">2193</span>
|
|
<span class="normal">2194</span>
|
|
<span class="normal">2195</span>
|
|
<span class="normal">2196</span>
|
|
<span class="normal">2197</span>
|
|
<span class="normal">2198</span>
|
|
<span class="normal">2199</span>
|
|
<span class="normal">2200</span>
|
|
<span class="normal">2201</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">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes AveragedField and populates dependency closure.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> w (str/None): Average weights.</span>
|
|
<span class="sd"> tgt (str): Target variable to average.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">)</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">AveragedField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shape</span> <span class="o">=</span> <span class="s2">"nxp"</span> <span class="c1"># Y, Z dimensions averaged out, leaving X-dimension array of size nxp</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dim</span> <span class="o">=</span> <span class="s2">":"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">tgt</span>
|
|
|
|
<span class="n">tfield</span> <span class="o">=</span> <span class="n">fdict</span><span class="p">[</span><span class="n">tgt</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fset</span> <span class="o">=</span> <span class="n">tfield</span><span class="o">.</span><span class="n">checkFluctuation</span><span class="p">()</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\left\langle </span><span class="si">{}</span><span class="s2"> \right\rangle"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tfield</span><span class="o">.</span><span class="n">latex</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">fset</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">tgt</span> <span class="o">=</span> <span class="n">tgt</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">tgt</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">ftgt</span> <span class="o">=</span> <span class="n">FluctuationField</span><span class="o">.</span><span class="n">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">tgt</span> <span class="o">=</span> <span class="n">ftgt</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">ftgt</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">weighted</span> <span class="o">=</span> <span class="n">w</span>
|
|
<span class="k">if</span> <span class="n">w</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">w</span> <span class="o">=</span> <span class="n">fdict</span><span class="p">[</span><span class="n">w</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">w</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">+=</span> <span class="p">(</span><span class="s2">"_{{</span><span class="si">{}</span><span class="s2">}}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">w</span><span class="p">))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.AveragedField.id" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="nb">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">)</span></code>
|
|
|
|
<span class="doc doc-labels">
|
|
<small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
|
|
</span>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates average field naming key.</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>w</code></td>
|
|
<td>
|
|
<code>str / None</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Weight parameter.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>tgt</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Target field variable name.</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>Generated averaged variable key name.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2154</span>
|
|
<span class="normal">2155</span>
|
|
<span class="normal">2156</span>
|
|
<span class="normal">2157</span>
|
|
<span class="normal">2158</span>
|
|
<span class="normal">2159</span>
|
|
<span class="normal">2160</span>
|
|
<span class="normal">2161</span>
|
|
<span class="normal">2162</span>
|
|
<span class="normal">2163</span>
|
|
<span class="normal">2164</span>
|
|
<span class="normal">2165</span>
|
|
<span class="normal">2166</span>
|
|
<span class="normal">2167</span>
|
|
<span class="normal">2168</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates average field naming key.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> w (str/None): Weight parameter.</span>
|
|
<span class="sd"> tgt (str): Target field variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Generated averaged variable key name.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">w</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_avg_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">tgt</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"avg_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tgt</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.AveragedField.isWeighted" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">isWeighted</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if average has a weighted density variable.</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>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if weighted.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2203</span>
|
|
<span class="normal">2204</span>
|
|
<span class="normal">2205</span>
|
|
<span class="normal">2206</span>
|
|
<span class="normal">2207</span>
|
|
<span class="normal">2208</span>
|
|
<span class="normal">2209</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">isWeighted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if average has a weighted density variable.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if weighted.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">weighted</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.AveragedField.pass1" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">pass1</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if average variable can be computed in loop Pass 1.</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>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if Pass 1 average.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2211</span>
|
|
<span class="normal">2212</span>
|
|
<span class="normal">2213</span>
|
|
<span class="normal">2214</span>
|
|
<span class="normal">2215</span>
|
|
<span class="normal">2216</span>
|
|
<span class="normal">2217</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">pass1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if average variable can be computed in loop Pass 1.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if Pass 1 average.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pass2</span><span class="p">()</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.AveragedField.pass2" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">pass2</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if average variable requires Pass 2 (dependent on fluctuation).</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>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if Pass 2 average.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2219</span>
|
|
<span class="normal">2220</span>
|
|
<span class="normal">2221</span>
|
|
<span class="normal">2222</span>
|
|
<span class="normal">2223</span>
|
|
<span class="normal">2224</span>
|
|
<span class="normal">2225</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">pass2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if average variable requires Pass 2 (dependent on fluctuation).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if Pass 2 average.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fset</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.CollectDefinitions" class="doc doc-heading">
|
|
<code>CollectDefinitions</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><span title="lark.Visitor">Visitor</span></code></p>
|
|
|
|
|
|
<p>Visitor that walks the Lark AST to collect variable and assignment declarations.</p>
|
|
<p>Gathers the primary fields (direct file inputs), derived calculation definitions,
|
|
and average directives (statistical averages) to build the compiler's initial model.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1262</span>
|
|
<span class="normal">1263</span>
|
|
<span class="normal">1264</span>
|
|
<span class="normal">1265</span>
|
|
<span class="normal">1266</span>
|
|
<span class="normal">1267</span>
|
|
<span class="normal">1268</span>
|
|
<span class="normal">1269</span>
|
|
<span class="normal">1270</span>
|
|
<span class="normal">1271</span>
|
|
<span class="normal">1272</span>
|
|
<span class="normal">1273</span>
|
|
<span class="normal">1274</span>
|
|
<span class="normal">1275</span>
|
|
<span class="normal">1276</span>
|
|
<span class="normal">1277</span>
|
|
<span class="normal">1278</span>
|
|
<span class="normal">1279</span>
|
|
<span class="normal">1280</span>
|
|
<span class="normal">1281</span>
|
|
<span class="normal">1282</span>
|
|
<span class="normal">1283</span>
|
|
<span class="normal">1284</span>
|
|
<span class="normal">1285</span>
|
|
<span class="normal">1286</span>
|
|
<span class="normal">1287</span>
|
|
<span class="normal">1288</span>
|
|
<span class="normal">1289</span>
|
|
<span class="normal">1290</span>
|
|
<span class="normal">1291</span>
|
|
<span class="normal">1292</span>
|
|
<span class="normal">1293</span>
|
|
<span class="normal">1294</span>
|
|
<span class="normal">1295</span>
|
|
<span class="normal">1296</span>
|
|
<span class="normal">1297</span>
|
|
<span class="normal">1298</span>
|
|
<span class="normal">1299</span>
|
|
<span class="normal">1300</span>
|
|
<span class="normal">1301</span>
|
|
<span class="normal">1302</span>
|
|
<span class="normal">1303</span>
|
|
<span class="normal">1304</span>
|
|
<span class="normal">1305</span>
|
|
<span class="normal">1306</span>
|
|
<span class="normal">1307</span>
|
|
<span class="normal">1308</span>
|
|
<span class="normal">1309</span>
|
|
<span class="normal">1310</span>
|
|
<span class="normal">1311</span>
|
|
<span class="normal">1312</span>
|
|
<span class="normal">1313</span>
|
|
<span class="normal">1314</span>
|
|
<span class="normal">1315</span>
|
|
<span class="normal">1316</span>
|
|
<span class="normal">1317</span>
|
|
<span class="normal">1318</span>
|
|
<span class="normal">1319</span>
|
|
<span class="normal">1320</span>
|
|
<span class="normal">1321</span>
|
|
<span class="normal">1322</span>
|
|
<span class="normal">1323</span>
|
|
<span class="normal">1324</span>
|
|
<span class="normal">1325</span>
|
|
<span class="normal">1326</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">CollectDefinitions</span><span class="p">(</span><span class="n">Visitor</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Visitor that walks the Lark AST to collect variable and assignment declarations.</span>
|
|
|
|
<span class="sd"> Gathers the primary fields (direct file inputs), derived calculation definitions,</span>
|
|
<span class="sd"> and average directives (statistical averages) to build the compiler's initial model.</span>
|
|
<span class="sd"> """</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">primary</span><span class="p">,</span> <span class="n">derived</span><span class="p">,</span> <span class="n">averaged</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes CollectDefinitions visitor.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> primary (set): Set to accumulate primary input field names.</span>
|
|
<span class="sd"> derived (dict): Dictionary to accumulate derived Field objects.</span>
|
|
<span class="sd"> averaged (dict): Dictionary to accumulate average variable targets.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">primary</span> <span class="o">=</span> <span class="n">primary</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derived</span> <span class="o">=</span> <span class="n">derived</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged</span> <span class="o">=</span> <span class="n">averaged</span>
|
|
|
|
<span class="k">def</span> <span class="nf">varlist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Parses list of primary inputs declared in bracket syntax (e.g. [u, v, w]).</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST node for varlist.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">primary</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="n">PrimaryField</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">assign_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Parses variable assignment statements and registers corresponding Field objects.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST node for assignment.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="n">lval</span><span class="p">,</span> <span class="n">lattr</span><span class="p">,</span> <span class="n">rval</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">lval</span><span class="p">,</span> <span class="n">rval</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span>
|
|
<span class="n">lattr</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="n">attr_dict</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="k">if</span> <span class="n">lattr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">lattr</span><span class="o">.</span><span class="n">children</span><span class="p">:</span>
|
|
<span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">children</span>
|
|
<span class="n">attr_dict</span><span class="p">[</span><span class="n">k</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="k">if</span> <span class="n">lval</span><span class="o">.</span><span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"duplicate definition of "</span> <span class="o">+</span> <span class="n">lval</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">lval</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">lval</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">attr_dict</span><span class="p">,</span> <span class="n">rval</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">assign_avg_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Parses average directives and registers target variables for spatial averaging.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST node for average declaration.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">w</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">targets</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
|
|
|
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">w</span><span class="o">.</span><span class="n">children</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">targets</span><span class="p">])</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">w</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">targets</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="post.CollectDefinitions.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">primary</span><span class="p">,</span> <span class="n">derived</span><span class="p">,</span> <span class="n">averaged</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes CollectDefinitions visitor.</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>primary</code></td>
|
|
<td>
|
|
<code>set</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Set to accumulate primary input field names.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>derived</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Dictionary to accumulate derived Field objects.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>averaged</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Dictionary to accumulate average variable targets.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1269</span>
|
|
<span class="normal">1270</span>
|
|
<span class="normal">1271</span>
|
|
<span class="normal">1272</span>
|
|
<span class="normal">1273</span>
|
|
<span class="normal">1274</span>
|
|
<span class="normal">1275</span>
|
|
<span class="normal">1276</span>
|
|
<span class="normal">1277</span>
|
|
<span class="normal">1278</span>
|
|
<span class="normal">1279</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">primary</span><span class="p">,</span> <span class="n">derived</span><span class="p">,</span> <span class="n">averaged</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes CollectDefinitions visitor.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> primary (set): Set to accumulate primary input field names.</span>
|
|
<span class="sd"> derived (dict): Dictionary to accumulate derived Field objects.</span>
|
|
<span class="sd"> averaged (dict): Dictionary to accumulate average variable targets.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">primary</span> <span class="o">=</span> <span class="n">primary</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derived</span> <span class="o">=</span> <span class="n">derived</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged</span> <span class="o">=</span> <span class="n">averaged</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.CollectDefinitions.assign_avg_var" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">assign_avg_var</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Parses average directives and registers target variables for spatial averaging.</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>tree</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Lark AST node for average declaration.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1314</span>
|
|
<span class="normal">1315</span>
|
|
<span class="normal">1316</span>
|
|
<span class="normal">1317</span>
|
|
<span class="normal">1318</span>
|
|
<span class="normal">1319</span>
|
|
<span class="normal">1320</span>
|
|
<span class="normal">1321</span>
|
|
<span class="normal">1322</span>
|
|
<span class="normal">1323</span>
|
|
<span class="normal">1324</span>
|
|
<span class="normal">1325</span>
|
|
<span class="normal">1326</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">assign_avg_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Parses average directives and registers target variables for spatial averaging.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST node for average declaration.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">w</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">targets</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
|
|
|
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">w</span><span class="o">.</span><span class="n">children</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">targets</span><span class="p">])</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">w</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">targets</span><span class="p">])</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.CollectDefinitions.assign_var" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">assign_var</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Parses variable assignment statements and registers corresponding Field objects.</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>tree</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Lark AST node for assignment.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1291</span>
|
|
<span class="normal">1292</span>
|
|
<span class="normal">1293</span>
|
|
<span class="normal">1294</span>
|
|
<span class="normal">1295</span>
|
|
<span class="normal">1296</span>
|
|
<span class="normal">1297</span>
|
|
<span class="normal">1298</span>
|
|
<span class="normal">1299</span>
|
|
<span class="normal">1300</span>
|
|
<span class="normal">1301</span>
|
|
<span class="normal">1302</span>
|
|
<span class="normal">1303</span>
|
|
<span class="normal">1304</span>
|
|
<span class="normal">1305</span>
|
|
<span class="normal">1306</span>
|
|
<span class="normal">1307</span>
|
|
<span class="normal">1308</span>
|
|
<span class="normal">1309</span>
|
|
<span class="normal">1310</span>
|
|
<span class="normal">1311</span>
|
|
<span class="normal">1312</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">assign_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Parses variable assignment statements and registers corresponding Field objects.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST node for assignment.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="n">lval</span><span class="p">,</span> <span class="n">lattr</span><span class="p">,</span> <span class="n">rval</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">lval</span><span class="p">,</span> <span class="n">rval</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span>
|
|
<span class="n">lattr</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="n">attr_dict</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="k">if</span> <span class="n">lattr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">lattr</span><span class="o">.</span><span class="n">children</span><span class="p">:</span>
|
|
<span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">children</span>
|
|
<span class="n">attr_dict</span><span class="p">[</span><span class="n">k</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="k">if</span> <span class="n">lval</span><span class="o">.</span><span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"duplicate definition of "</span> <span class="o">+</span> <span class="n">lval</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">lval</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span><span class="n">lval</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">attr_dict</span><span class="p">,</span> <span class="n">rval</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.CollectDefinitions.varlist" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">varlist</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Parses list of primary inputs declared in bracket syntax (e.g. [u, v, w]).</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>tree</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Lark AST node for varlist.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1281</span>
|
|
<span class="normal">1282</span>
|
|
<span class="normal">1283</span>
|
|
<span class="normal">1284</span>
|
|
<span class="normal">1285</span>
|
|
<span class="normal">1286</span>
|
|
<span class="normal">1287</span>
|
|
<span class="normal">1288</span>
|
|
<span class="normal">1289</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">varlist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Parses list of primary inputs declared in bracket syntax (e.g. [u, v, w]).</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST node for varlist.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">primary</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="n">PrimaryField</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.CompilationContext" class="doc doc-heading">
|
|
<code>CompilationContext</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Holds compilation pipeline state across parsing, resolution, and optimization stages.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.primary">primary</span></code></td>
|
|
<td>
|
|
<code>set of str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Names of primary input fields.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.derived">derived</span></code></td>
|
|
<td>
|
|
<code>dict of str -> FieldBase</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Calculated, derivative, and fluctuation fields.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.averaged">averaged</span></code></td>
|
|
<td>
|
|
<code>dict of str -> AveragedField</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Spatial averaged variables.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.dependency">dependency</span></code></td>
|
|
<td>
|
|
<code>dict of str -> set of str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>DAG representing direct dependencies.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.pass1">pass1</span></code></td>
|
|
<td>
|
|
<code>list of str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Topologically sorted variables for average-precursor calculation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.pass2">pass2</span></code></td>
|
|
<td>
|
|
<code>list of str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Topologically sorted variables for post-average calculations.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.avg1">avg1</span></code></td>
|
|
<td>
|
|
<code>set of AveragedField</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Averaged variables calculated in Pass 1.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.avg2">avg2</span></code></td>
|
|
<td>
|
|
<code>set of AveragedField</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Averaged variables calculated in Pass 2.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.alloc1">alloc1</span></code></td>
|
|
<td>
|
|
<code>dict of str -> str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer pooling maps for Pass 1.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.alloc2">alloc2</span></code></td>
|
|
<td>
|
|
<code>dict of str -> str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer pooling maps for Pass 2.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.CompilationContext.narr">narr</span></code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Maximum number of shared XYZ buffer arrays needed.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2228</span>
|
|
<span class="normal">2229</span>
|
|
<span class="normal">2230</span>
|
|
<span class="normal">2231</span>
|
|
<span class="normal">2232</span>
|
|
<span class="normal">2233</span>
|
|
<span class="normal">2234</span>
|
|
<span class="normal">2235</span>
|
|
<span class="normal">2236</span>
|
|
<span class="normal">2237</span>
|
|
<span class="normal">2238</span>
|
|
<span class="normal">2239</span>
|
|
<span class="normal">2240</span>
|
|
<span class="normal">2241</span>
|
|
<span class="normal">2242</span>
|
|
<span class="normal">2243</span>
|
|
<span class="normal">2244</span>
|
|
<span class="normal">2245</span>
|
|
<span class="normal">2246</span>
|
|
<span class="normal">2247</span>
|
|
<span class="normal">2248</span>
|
|
<span class="normal">2249</span>
|
|
<span class="normal">2250</span>
|
|
<span class="normal">2251</span>
|
|
<span class="normal">2252</span>
|
|
<span class="normal">2253</span>
|
|
<span class="normal">2254</span>
|
|
<span class="normal">2255</span>
|
|
<span class="normal">2256</span>
|
|
<span class="normal">2257</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">CompilationContext</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Holds compilation pipeline state across parsing, resolution, and optimization stages.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> primary (set of str): Names of primary input fields.</span>
|
|
<span class="sd"> derived (dict of str -> FieldBase): Calculated, derivative, and fluctuation fields.</span>
|
|
<span class="sd"> averaged (dict of str -> AveragedField): Spatial averaged variables.</span>
|
|
<span class="sd"> dependency (dict of str -> set of str): DAG representing direct dependencies.</span>
|
|
<span class="sd"> pass1 (list of str): Topologically sorted variables for average-precursor calculation.</span>
|
|
<span class="sd"> pass2 (list of str): Topologically sorted variables for post-average calculations.</span>
|
|
<span class="sd"> avg1 (set of AveragedField): Averaged variables calculated in Pass 1.</span>
|
|
<span class="sd"> avg2 (set of AveragedField): Averaged variables calculated in Pass 2.</span>
|
|
<span class="sd"> alloc1 (dict of str -> str): Buffer pooling maps for Pass 1.</span>
|
|
<span class="sd"> alloc2 (dict of str -> str): Buffer pooling maps for Pass 2.</span>
|
|
<span class="sd"> narr (int): Maximum number of shared XYZ buffer arrays needed.</span>
|
|
<span class="sd"> """</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="w"> </span><span class="sd">"""Initializes an empty CompilationContext."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">primary</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derived</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dependency</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">pass1</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">pass2</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg1</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg2</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">alloc1</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">alloc2</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">narr</span> <span class="o">=</span> <span class="mi">0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.CompilationContext.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes an empty CompilationContext.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2245</span>
|
|
<span class="normal">2246</span>
|
|
<span class="normal">2247</span>
|
|
<span class="normal">2248</span>
|
|
<span class="normal">2249</span>
|
|
<span class="normal">2250</span>
|
|
<span class="normal">2251</span>
|
|
<span class="normal">2252</span>
|
|
<span class="normal">2253</span>
|
|
<span class="normal">2254</span>
|
|
<span class="normal">2255</span>
|
|
<span class="normal">2256</span>
|
|
<span class="normal">2257</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="w"> </span><span class="sd">"""Initializes an empty CompilationContext."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">primary</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derived</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dependency</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">pass1</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">pass2</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg1</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg2</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">alloc1</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">alloc2</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">narr</span> <span class="o">=</span> <span class="mi">0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.DependencyNode" class="doc doc-heading">
|
|
<code>DependencyNode</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>의존성 관계 분석을 담당하는 추상 인터페이스 및 노드 클래스입니다.</p>
|
|
<p>Compiler pipeline stages use this graph to resolve topological sort order.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1862</span>
|
|
<span class="normal">1863</span>
|
|
<span class="normal">1864</span>
|
|
<span class="normal">1865</span>
|
|
<span class="normal">1866</span>
|
|
<span class="normal">1867</span>
|
|
<span class="normal">1868</span>
|
|
<span class="normal">1869</span>
|
|
<span class="normal">1870</span>
|
|
<span class="normal">1871</span>
|
|
<span class="normal">1872</span>
|
|
<span class="normal">1873</span>
|
|
<span class="normal">1874</span>
|
|
<span class="normal">1875</span>
|
|
<span class="normal">1876</span>
|
|
<span class="normal">1877</span>
|
|
<span class="normal">1878</span>
|
|
<span class="normal">1879</span>
|
|
<span class="normal">1880</span>
|
|
<span class="normal">1881</span>
|
|
<span class="normal">1882</span>
|
|
<span class="normal">1883</span>
|
|
<span class="normal">1884</span>
|
|
<span class="normal">1885</span>
|
|
<span class="normal">1886</span>
|
|
<span class="normal">1887</span>
|
|
<span class="normal">1888</span>
|
|
<span class="normal">1889</span>
|
|
<span class="normal">1890</span>
|
|
<span class="normal">1891</span>
|
|
<span class="normal">1892</span>
|
|
<span class="normal">1893</span>
|
|
<span class="normal">1894</span>
|
|
<span class="normal">1895</span>
|
|
<span class="normal">1896</span>
|
|
<span class="normal">1897</span>
|
|
<span class="normal">1898</span>
|
|
<span class="normal">1899</span>
|
|
<span class="normal">1900</span>
|
|
<span class="normal">1901</span>
|
|
<span class="normal">1902</span>
|
|
<span class="normal">1903</span>
|
|
<span class="normal">1904</span>
|
|
<span class="normal">1905</span>
|
|
<span class="normal">1906</span>
|
|
<span class="normal">1907</span>
|
|
<span class="normal">1908</span>
|
|
<span class="normal">1909</span>
|
|
<span class="normal">1910</span>
|
|
<span class="normal">1911</span>
|
|
<span class="normal">1912</span>
|
|
<span class="normal">1913</span>
|
|
<span class="normal">1914</span>
|
|
<span class="normal">1915</span>
|
|
<span class="normal">1916</span>
|
|
<span class="normal">1917</span>
|
|
<span class="normal">1918</span>
|
|
<span class="normal">1919</span>
|
|
<span class="normal">1920</span>
|
|
<span class="normal">1921</span>
|
|
<span class="normal">1922</span>
|
|
<span class="normal">1923</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">DependencyNode</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""의존성 관계 분석을 담당하는 추상 인터페이스 및 노드 클래스입니다.</span>
|
|
|
|
<span class="sd"> Compiler pipeline stages use this graph to resolve topological sort order.</span>
|
|
<span class="sd"> """</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">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes DependencyNode.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fluc</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="k">def</span> <span class="nf">depends_on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if this node depends directly on the given variable.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Target variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if directly dependent.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span>
|
|
|
|
<span class="k">def</span> <span class="nf">is_fluctuation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if this node is a fluctuation variable.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if fluctuation variable.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fluc</span>
|
|
|
|
<span class="k">def</span> <span class="nf">checkFluctuation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""본 변수 혹은 의존하고 있는 하위 기호들 중에 변동량(Fluctuation) 관련 계산이 개입되어 있는지</span>
|
|
<span class="sd"> 상향식으로 전파 추적하는 재귀 메서드입니다.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> set: Set of variable names that require fluctuation calculations.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fset</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">):</span>
|
|
<span class="n">fset</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">checkFluctuation</span><span class="p">())</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_fluctuation</span><span class="p">()</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">fset</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">fset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fset</span>
|
|
|
|
<span class="k">def</span> <span class="nf">depClosure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""해당 변수를 계산하기 위해 선행 계산되어야 하는 모든 하위 변수 노드들을 </span>
|
|
<span class="sd"> 재귀적으로 타고 내려가 총합 폐쇄 집합(Closure Set)으로 묶어 반환합니다.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> set: Complete transitive dependency set.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fset</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">:</span>
|
|
<span class="n">fset</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">d</span><span class="p">]</span><span class="o">.</span><span class="n">depClosure</span><span class="p">())</span>
|
|
<span class="k">return</span> <span class="n">fset</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DependencyNode.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes DependencyNode.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable name.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Global variable registry dictionary.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1868</span>
|
|
<span class="normal">1869</span>
|
|
<span class="normal">1870</span>
|
|
<span class="normal">1871</span>
|
|
<span class="normal">1872</span>
|
|
<span class="normal">1873</span>
|
|
<span class="normal">1874</span>
|
|
<span class="normal">1875</span>
|
|
<span class="normal">1876</span>
|
|
<span class="normal">1877</span>
|
|
<span class="normal">1878</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">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes DependencyNode.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fluc</span> <span class="o">=</span> <span class="kc">False</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DependencyNode.checkFluctuation" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">checkFluctuation</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>본 변수 혹은 의존하고 있는 하위 기호들 중에 변동량(Fluctuation) 관련 계산이 개입되어 있는지
|
|
상향식으로 전파 추적하는 재귀 메서드입니다.</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>set</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Set of variable names that require fluctuation calculations.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1899</span>
|
|
<span class="normal">1900</span>
|
|
<span class="normal">1901</span>
|
|
<span class="normal">1902</span>
|
|
<span class="normal">1903</span>
|
|
<span class="normal">1904</span>
|
|
<span class="normal">1905</span>
|
|
<span class="normal">1906</span>
|
|
<span class="normal">1907</span>
|
|
<span class="normal">1908</span>
|
|
<span class="normal">1909</span>
|
|
<span class="normal">1910</span>
|
|
<span class="normal">1911</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">checkFluctuation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""본 변수 혹은 의존하고 있는 하위 기호들 중에 변동량(Fluctuation) 관련 계산이 개입되어 있는지</span>
|
|
<span class="sd"> 상향식으로 전파 추적하는 재귀 메서드입니다.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> set: Set of variable names that require fluctuation calculations.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fset</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">):</span>
|
|
<span class="n">fset</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">checkFluctuation</span><span class="p">())</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_fluctuation</span><span class="p">()</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">fset</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">fset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fset</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DependencyNode.depClosure" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">depClosure</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>해당 변수를 계산하기 위해 선행 계산되어야 하는 모든 하위 변수 노드들을
|
|
재귀적으로 타고 내려가 총합 폐쇄 집합(Closure Set)으로 묶어 반환합니다.</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>set</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Complete transitive dependency set.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1913</span>
|
|
<span class="normal">1914</span>
|
|
<span class="normal">1915</span>
|
|
<span class="normal">1916</span>
|
|
<span class="normal">1917</span>
|
|
<span class="normal">1918</span>
|
|
<span class="normal">1919</span>
|
|
<span class="normal">1920</span>
|
|
<span class="normal">1921</span>
|
|
<span class="normal">1922</span>
|
|
<span class="normal">1923</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">depClosure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""해당 변수를 계산하기 위해 선행 계산되어야 하는 모든 하위 변수 노드들을 </span>
|
|
<span class="sd"> 재귀적으로 타고 내려가 총합 폐쇄 집합(Closure Set)으로 묶어 반환합니다.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> set: Complete transitive dependency set.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fset</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">:</span>
|
|
<span class="n">fset</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">d</span><span class="p">]</span><span class="o">.</span><span class="n">depClosure</span><span class="p">())</span>
|
|
<span class="k">return</span> <span class="n">fset</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DependencyNode.depends_on" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">depends_on</span><span class="p">(</span><span class="n">a</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if this node depends directly on the given variable.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Target variable name.</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>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if directly dependent.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1880</span>
|
|
<span class="normal">1881</span>
|
|
<span class="normal">1882</span>
|
|
<span class="normal">1883</span>
|
|
<span class="normal">1884</span>
|
|
<span class="normal">1885</span>
|
|
<span class="normal">1886</span>
|
|
<span class="normal">1887</span>
|
|
<span class="normal">1888</span>
|
|
<span class="normal">1889</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">depends_on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if this node depends directly on the given variable.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Target variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if directly dependent.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DependencyNode.is_fluctuation" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">is_fluctuation</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if this node is a fluctuation variable.</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>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if fluctuation variable.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1891</span>
|
|
<span class="normal">1892</span>
|
|
<span class="normal">1893</span>
|
|
<span class="normal">1894</span>
|
|
<span class="normal">1895</span>
|
|
<span class="normal">1896</span>
|
|
<span class="normal">1897</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">is_fluctuation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if this node is a fluctuation variable.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if fluctuation variable.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fluc</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.DependencyResolutionStage" class="doc doc-heading">
|
|
<code>DependencyResolutionStage</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Compiler pipeline Stage 3: Resolves data dependencies and orders calculations.</p>
|
|
<p>Splits loops into:
|
|
- Pass 1 (calculating variables required prior to averages).
|
|
- Pass 2 (calculating fluctuations and statistics after averages are resolved).
|
|
Performs topological sorting to ensure correctness.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2411</span>
|
|
<span class="normal">2412</span>
|
|
<span class="normal">2413</span>
|
|
<span class="normal">2414</span>
|
|
<span class="normal">2415</span>
|
|
<span class="normal">2416</span>
|
|
<span class="normal">2417</span>
|
|
<span class="normal">2418</span>
|
|
<span class="normal">2419</span>
|
|
<span class="normal">2420</span>
|
|
<span class="normal">2421</span>
|
|
<span class="normal">2422</span>
|
|
<span class="normal">2423</span>
|
|
<span class="normal">2424</span>
|
|
<span class="normal">2425</span>
|
|
<span class="normal">2426</span>
|
|
<span class="normal">2427</span>
|
|
<span class="normal">2428</span>
|
|
<span class="normal">2429</span>
|
|
<span class="normal">2430</span>
|
|
<span class="normal">2431</span>
|
|
<span class="normal">2432</span>
|
|
<span class="normal">2433</span>
|
|
<span class="normal">2434</span>
|
|
<span class="normal">2435</span>
|
|
<span class="normal">2436</span>
|
|
<span class="normal">2437</span>
|
|
<span class="normal">2438</span>
|
|
<span class="normal">2439</span>
|
|
<span class="normal">2440</span>
|
|
<span class="normal">2441</span>
|
|
<span class="normal">2442</span>
|
|
<span class="normal">2443</span>
|
|
<span class="normal">2444</span>
|
|
<span class="normal">2445</span>
|
|
<span class="normal">2446</span>
|
|
<span class="normal">2447</span>
|
|
<span class="normal">2448</span>
|
|
<span class="normal">2449</span>
|
|
<span class="normal">2450</span>
|
|
<span class="normal">2451</span>
|
|
<span class="normal">2452</span>
|
|
<span class="normal">2453</span>
|
|
<span class="normal">2454</span>
|
|
<span class="normal">2455</span>
|
|
<span class="normal">2456</span>
|
|
<span class="normal">2457</span>
|
|
<span class="normal">2458</span>
|
|
<span class="normal">2459</span>
|
|
<span class="normal">2460</span>
|
|
<span class="normal">2461</span>
|
|
<span class="normal">2462</span>
|
|
<span class="normal">2463</span>
|
|
<span class="normal">2464</span>
|
|
<span class="normal">2465</span>
|
|
<span class="normal">2466</span>
|
|
<span class="normal">2467</span>
|
|
<span class="normal">2468</span>
|
|
<span class="normal">2469</span>
|
|
<span class="normal">2470</span>
|
|
<span class="normal">2471</span>
|
|
<span class="normal">2472</span>
|
|
<span class="normal">2473</span>
|
|
<span class="normal">2474</span>
|
|
<span class="normal">2475</span>
|
|
<span class="normal">2476</span>
|
|
<span class="normal">2477</span>
|
|
<span class="normal">2478</span>
|
|
<span class="normal">2479</span>
|
|
<span class="normal">2480</span>
|
|
<span class="normal">2481</span>
|
|
<span class="normal">2482</span>
|
|
<span class="normal">2483</span>
|
|
<span class="normal">2484</span>
|
|
<span class="normal">2485</span>
|
|
<span class="normal">2486</span>
|
|
<span class="normal">2487</span>
|
|
<span class="normal">2488</span>
|
|
<span class="normal">2489</span>
|
|
<span class="normal">2490</span>
|
|
<span class="normal">2491</span>
|
|
<span class="normal">2492</span>
|
|
<span class="normal">2493</span>
|
|
<span class="normal">2494</span>
|
|
<span class="normal">2495</span>
|
|
<span class="normal">2496</span>
|
|
<span class="normal">2497</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">DependencyResolutionStage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Compiler pipeline Stage 3: Resolves data dependencies and orders calculations.</span>
|
|
|
|
<span class="sd"> Splits loops into:</span>
|
|
<span class="sd"> - Pass 1 (calculating variables required prior to averages).</span>
|
|
<span class="sd"> - Pass 2 (calculating fluctuations and statistics after averages are resolved).</span>
|
|
<span class="sd"> Performs topological sorting to ensure correctness.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes Stage 3 dependency resolution and topological sort.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># 이름 충돌 방지 검증</span>
|
|
<span class="k">assert</span> <span class="nb">set</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span><span class="o">.</span><span class="n">isdisjoint</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
|
|
|
<span class="c1"># Pass 1과 Pass 2 대상 평균화 변수 논리 분할</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">avg1</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">AveragedField</span><span class="o">.</span><span class="n">pass1</span><span class="p">,</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">ctx</span><span class="o">.</span><span class="n">avg2</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">AveragedField</span><span class="o">.</span><span class="n">pass2</span><span class="p">,</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="c1"># Pass 1 위상 정렬: Pass 1 평균 변수들의 연산에 관여하는 모든 종속 관계를 수집하여 정렬</span>
|
|
<span class="n">pass1calc</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">repr</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg1</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg1</span><span class="p">:</span>
|
|
<span class="n">pass1calc</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">depClosure</span><span class="p">())</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">pass1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_vars_new</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="p">,</span> <span class="n">pass1calc</span> <span class="o">-</span> <span class="n">ctx</span><span class="o">.</span><span class="n">primary</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Pass 2 위상 정렬: Pass 2 평균 변수(변동 연산 연계)들의 연산에 관여하는 종속성을 정렬</span>
|
|
<span class="n">pass2calc</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">repr</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg2</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg2</span><span class="p">:</span>
|
|
<span class="n">pass2calc</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">depClosure</span><span class="p">())</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">pass2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_vars_new</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="p">,</span> <span class="n">pass2calc</span> <span class="o">-</span> <span class="n">ctx</span><span class="o">.</span><span class="n">primary</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">calc_size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dependency</span><span class="p">,</span> <span class="n">ordered</span><span class="p">,</span> <span class="n">remaining</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates topological dependency metrics for ordering weight sorting.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dependency (dict): Graph mapping variable names to dependency sets.</span>
|
|
<span class="sd"> ordered (set): Topologically ordered variable names.</span>
|
|
<span class="sd"> remaining (set): Unsorted remaining variable names.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> int: The degree of active connection impact.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">dep_union</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">remaining</span><span class="p">:</span>
|
|
<span class="n">dep_union</span> <span class="o">|=</span> <span class="nb">set</span><span class="p">(</span><span class="n">dependency</span><span class="p">[</span><span class="n">v</span><span class="p">])</span>
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ordered</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">dep_union</span><span class="p">:</span>
|
|
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">count</span>
|
|
|
|
<span class="k">def</span> <span class="nf">sort_vars_new</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dependency</span><span class="p">,</span> <span class="n">group</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Performs topological sort using an impact-weight heuristic.</span>
|
|
|
|
<span class="sd"> Minimizes variable lifetime durations to optimize array reuse.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dependency (dict): Graph mapping variable names to dependency sets.</span>
|
|
<span class="sd"> group (set): Set of variable names to sort.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> list: Topologically sorted list of variable names.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">order</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">remain</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
|
|
<span class="n">remain</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
|
|
|
|
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">remain</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">candidate</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">remain</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">set</span><span class="p">(</span><span class="n">dependency</span><span class="p">[</span><span class="n">v</span><span class="p">])</span><span class="o">.</span><span class="n">isdisjoint</span><span class="p">(</span><span class="n">remain</span><span class="p">):</span>
|
|
<span class="n">candidate</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
|
|
|
<span class="n">impact</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="n">size0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calc_size</span><span class="p">(</span><span class="n">dependency</span><span class="p">,</span> <span class="nb">set</span><span class="p">(</span><span class="n">order</span><span class="p">),</span> <span class="nb">set</span><span class="p">(</span><span class="n">remain</span><span class="p">))</span>
|
|
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">candidate</span><span class="p">:</span>
|
|
<span class="n">impact</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calc_size</span><span class="p">(</span><span class="n">dependency</span><span class="p">,</span> <span class="nb">set</span><span class="p">(</span><span class="n">order</span><span class="p">)</span> <span class="o">|</span> <span class="nb">set</span><span class="p">([</span><span class="n">v</span><span class="p">]),</span> <span class="nb">set</span><span class="p">(</span><span class="n">remain</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">([</span><span class="n">v</span><span class="p">]))</span> <span class="o">-</span> <span class="n">size0</span>
|
|
|
|
<span class="n">candidate</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">impact</span><span class="o">.</span><span class="n">get</span><span class="p">)</span>
|
|
<span class="n">order</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">candidate</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="n">remain</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">candidate</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
|
|
<span class="k">return</span> <span class="n">order</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DependencyResolutionStage.calc_size" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">calc_size</span><span class="p">(</span><span class="n">dependency</span><span class="p">,</span> <span class="n">ordered</span><span class="p">,</span> <span class="n">remaining</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates topological dependency metrics for ordering weight sorting.</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>dependency</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Graph mapping variable names to dependency sets.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>ordered</code></td>
|
|
<td>
|
|
<code>set</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Topologically ordered variable names.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>remaining</code></td>
|
|
<td>
|
|
<code>set</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Unsorted remaining variable names.</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>int</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The degree of active connection impact.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2445</span>
|
|
<span class="normal">2446</span>
|
|
<span class="normal">2447</span>
|
|
<span class="normal">2448</span>
|
|
<span class="normal">2449</span>
|
|
<span class="normal">2450</span>
|
|
<span class="normal">2451</span>
|
|
<span class="normal">2452</span>
|
|
<span class="normal">2453</span>
|
|
<span class="normal">2454</span>
|
|
<span class="normal">2455</span>
|
|
<span class="normal">2456</span>
|
|
<span class="normal">2457</span>
|
|
<span class="normal">2458</span>
|
|
<span class="normal">2459</span>
|
|
<span class="normal">2460</span>
|
|
<span class="normal">2461</span>
|
|
<span class="normal">2462</span>
|
|
<span class="normal">2463</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">calc_size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dependency</span><span class="p">,</span> <span class="n">ordered</span><span class="p">,</span> <span class="n">remaining</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates topological dependency metrics for ordering weight sorting.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dependency (dict): Graph mapping variable names to dependency sets.</span>
|
|
<span class="sd"> ordered (set): Topologically ordered variable names.</span>
|
|
<span class="sd"> remaining (set): Unsorted remaining variable names.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> int: The degree of active connection impact.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">dep_union</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">remaining</span><span class="p">:</span>
|
|
<span class="n">dep_union</span> <span class="o">|=</span> <span class="nb">set</span><span class="p">(</span><span class="n">dependency</span><span class="p">[</span><span class="n">v</span><span class="p">])</span>
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ordered</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">dep_union</span><span class="p">:</span>
|
|
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">count</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DependencyResolutionStage.execute" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">execute</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Executes Stage 3 dependency resolution and topological sort.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Active compilation context.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2420</span>
|
|
<span class="normal">2421</span>
|
|
<span class="normal">2422</span>
|
|
<span class="normal">2423</span>
|
|
<span class="normal">2424</span>
|
|
<span class="normal">2425</span>
|
|
<span class="normal">2426</span>
|
|
<span class="normal">2427</span>
|
|
<span class="normal">2428</span>
|
|
<span class="normal">2429</span>
|
|
<span class="normal">2430</span>
|
|
<span class="normal">2431</span>
|
|
<span class="normal">2432</span>
|
|
<span class="normal">2433</span>
|
|
<span class="normal">2434</span>
|
|
<span class="normal">2435</span>
|
|
<span class="normal">2436</span>
|
|
<span class="normal">2437</span>
|
|
<span class="normal">2438</span>
|
|
<span class="normal">2439</span>
|
|
<span class="normal">2440</span>
|
|
<span class="normal">2441</span>
|
|
<span class="normal">2442</span>
|
|
<span class="normal">2443</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes Stage 3 dependency resolution and topological sort.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># 이름 충돌 방지 검증</span>
|
|
<span class="k">assert</span> <span class="nb">set</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span><span class="o">.</span><span class="n">isdisjoint</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
|
|
|
<span class="c1"># Pass 1과 Pass 2 대상 평균화 변수 논리 분할</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">avg1</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">AveragedField</span><span class="o">.</span><span class="n">pass1</span><span class="p">,</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">ctx</span><span class="o">.</span><span class="n">avg2</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">AveragedField</span><span class="o">.</span><span class="n">pass2</span><span class="p">,</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="c1"># Pass 1 위상 정렬: Pass 1 평균 변수들의 연산에 관여하는 모든 종속 관계를 수집하여 정렬</span>
|
|
<span class="n">pass1calc</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">repr</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg1</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg1</span><span class="p">:</span>
|
|
<span class="n">pass1calc</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">depClosure</span><span class="p">())</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">pass1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_vars_new</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="p">,</span> <span class="n">pass1calc</span> <span class="o">-</span> <span class="n">ctx</span><span class="o">.</span><span class="n">primary</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Pass 2 위상 정렬: Pass 2 평균 변수(변동 연산 연계)들의 연산에 관여하는 종속성을 정렬</span>
|
|
<span class="n">pass2calc</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">repr</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg2</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg2</span><span class="p">:</span>
|
|
<span class="n">pass2calc</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">depClosure</span><span class="p">())</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">pass2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_vars_new</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="p">,</span> <span class="n">pass2calc</span> <span class="o">-</span> <span class="n">ctx</span><span class="o">.</span><span class="n">primary</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DependencyResolutionStage.sort_vars_new" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">sort_vars_new</span><span class="p">(</span><span class="n">dependency</span><span class="p">,</span> <span class="n">group</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Performs topological sort using an impact-weight heuristic.</p>
|
|
<p>Minimizes variable lifetime durations to optimize array reuse.</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>dependency</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Graph mapping variable names to dependency sets.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>group</code></td>
|
|
<td>
|
|
<code>set</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Set of variable names to sort.</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>list</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Topologically sorted list of variable names.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2465</span>
|
|
<span class="normal">2466</span>
|
|
<span class="normal">2467</span>
|
|
<span class="normal">2468</span>
|
|
<span class="normal">2469</span>
|
|
<span class="normal">2470</span>
|
|
<span class="normal">2471</span>
|
|
<span class="normal">2472</span>
|
|
<span class="normal">2473</span>
|
|
<span class="normal">2474</span>
|
|
<span class="normal">2475</span>
|
|
<span class="normal">2476</span>
|
|
<span class="normal">2477</span>
|
|
<span class="normal">2478</span>
|
|
<span class="normal">2479</span>
|
|
<span class="normal">2480</span>
|
|
<span class="normal">2481</span>
|
|
<span class="normal">2482</span>
|
|
<span class="normal">2483</span>
|
|
<span class="normal">2484</span>
|
|
<span class="normal">2485</span>
|
|
<span class="normal">2486</span>
|
|
<span class="normal">2487</span>
|
|
<span class="normal">2488</span>
|
|
<span class="normal">2489</span>
|
|
<span class="normal">2490</span>
|
|
<span class="normal">2491</span>
|
|
<span class="normal">2492</span>
|
|
<span class="normal">2493</span>
|
|
<span class="normal">2494</span>
|
|
<span class="normal">2495</span>
|
|
<span class="normal">2496</span>
|
|
<span class="normal">2497</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">sort_vars_new</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dependency</span><span class="p">,</span> <span class="n">group</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Performs topological sort using an impact-weight heuristic.</span>
|
|
|
|
<span class="sd"> Minimizes variable lifetime durations to optimize array reuse.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dependency (dict): Graph mapping variable names to dependency sets.</span>
|
|
<span class="sd"> group (set): Set of variable names to sort.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> list: Topologically sorted list of variable names.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">order</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">remain</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
|
|
<span class="n">remain</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
|
|
|
|
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">remain</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">candidate</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">remain</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">set</span><span class="p">(</span><span class="n">dependency</span><span class="p">[</span><span class="n">v</span><span class="p">])</span><span class="o">.</span><span class="n">isdisjoint</span><span class="p">(</span><span class="n">remain</span><span class="p">):</span>
|
|
<span class="n">candidate</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
|
|
|
<span class="n">impact</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="n">size0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calc_size</span><span class="p">(</span><span class="n">dependency</span><span class="p">,</span> <span class="nb">set</span><span class="p">(</span><span class="n">order</span><span class="p">),</span> <span class="nb">set</span><span class="p">(</span><span class="n">remain</span><span class="p">))</span>
|
|
|
|
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">candidate</span><span class="p">:</span>
|
|
<span class="n">impact</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calc_size</span><span class="p">(</span><span class="n">dependency</span><span class="p">,</span> <span class="nb">set</span><span class="p">(</span><span class="n">order</span><span class="p">)</span> <span class="o">|</span> <span class="nb">set</span><span class="p">([</span><span class="n">v</span><span class="p">]),</span> <span class="nb">set</span><span class="p">(</span><span class="n">remain</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">([</span><span class="n">v</span><span class="p">]))</span> <span class="o">-</span> <span class="n">size0</span>
|
|
|
|
<span class="n">candidate</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">impact</span><span class="o">.</span><span class="n">get</span><span class="p">)</span>
|
|
<span class="n">order</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">candidate</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="n">remain</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">candidate</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
|
|
<span class="k">return</span> <span class="n">order</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.DerivativeExpansionStage" class="doc doc-heading">
|
|
<code>DerivativeExpansionStage</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Compiler pipeline Stage 2: Expands differential operators and fluctuation terms.</p>
|
|
<p>Finds derivative expressions (e.g., ddx, d2dy) and fluctuation identifiers (u'),
|
|
instantiates DerivedField and FluctuationField objects, registers them in
|
|
the variable registry, and builds initial DAG dependencies.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2367</span>
|
|
<span class="normal">2368</span>
|
|
<span class="normal">2369</span>
|
|
<span class="normal">2370</span>
|
|
<span class="normal">2371</span>
|
|
<span class="normal">2372</span>
|
|
<span class="normal">2373</span>
|
|
<span class="normal">2374</span>
|
|
<span class="normal">2375</span>
|
|
<span class="normal">2376</span>
|
|
<span class="normal">2377</span>
|
|
<span class="normal">2378</span>
|
|
<span class="normal">2379</span>
|
|
<span class="normal">2380</span>
|
|
<span class="normal">2381</span>
|
|
<span class="normal">2382</span>
|
|
<span class="normal">2383</span>
|
|
<span class="normal">2384</span>
|
|
<span class="normal">2385</span>
|
|
<span class="normal">2386</span>
|
|
<span class="normal">2387</span>
|
|
<span class="normal">2388</span>
|
|
<span class="normal">2389</span>
|
|
<span class="normal">2390</span>
|
|
<span class="normal">2391</span>
|
|
<span class="normal">2392</span>
|
|
<span class="normal">2393</span>
|
|
<span class="normal">2394</span>
|
|
<span class="normal">2395</span>
|
|
<span class="normal">2396</span>
|
|
<span class="normal">2397</span>
|
|
<span class="normal">2398</span>
|
|
<span class="normal">2399</span>
|
|
<span class="normal">2400</span>
|
|
<span class="normal">2401</span>
|
|
<span class="normal">2402</span>
|
|
<span class="normal">2403</span>
|
|
<span class="normal">2404</span>
|
|
<span class="normal">2405</span>
|
|
<span class="normal">2406</span>
|
|
<span class="normal">2407</span>
|
|
<span class="normal">2408</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">DerivativeExpansionStage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Compiler pipeline Stage 2: Expands differential operators and fluctuation terms.</span>
|
|
|
|
<span class="sd"> Finds derivative expressions (e.g., ddx, d2dy) and fluctuation identifiers (u'),</span>
|
|
<span class="sd"> instantiates DerivedField and FluctuationField objects, registers them in</span>
|
|
<span class="sd"> the variable registry, and builds initial DAG dependencies.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes Stage 2 derivative and fluctuation expansion.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># 1. 계산식 내에 존재하는 고차 차분 미분항(ddx, d2dy 등)을 찾아 중간 DerivedField로 등록</span>
|
|
<span class="n">dset</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="n">dset</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">derivs</span><span class="p">)</span>
|
|
|
|
<span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">dset</span><span class="p">:</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">DerivedField</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span>
|
|
|
|
<span class="c1"># 2. 통계 물리량 평균화 대상 변수들을 AveragedField 구조체로 구성하고, </span>
|
|
<span class="c1"># 변동량 계산이 필요한 경우 FluctuationField로 등록</span>
|
|
<span class="n">averaged_raw</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">w</span><span class="p">,</span> <span class="n">tgts</span> <span class="ow">in</span> <span class="n">averaged_raw</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tgts</span><span class="p">:</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">AveragedField</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span>
|
|
<span class="c1"># 평균 편차가 동반된 항들에 대해 FluctuationField 생성</span>
|
|
<span class="k">for</span> <span class="n">ff</span> <span class="ow">in</span> <span class="n">a</span><span class="o">.</span><span class="n">fset</span><span class="p">:</span>
|
|
<span class="n">b</span> <span class="o">=</span> <span class="n">FluctuationField</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">ff</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">fset</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">b</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">b</span>
|
|
|
|
<span class="c1"># 3. 프로그램 내 모든 필드 간의 1차 의존 관계 그래프(Dependency Graph) 추출</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">dep</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</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">items</span><span class="p">():</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">dep</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DerivativeExpansionStage.execute" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">execute</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Executes Stage 2 derivative and fluctuation expansion.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Active compilation context.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2375</span>
|
|
<span class="normal">2376</span>
|
|
<span class="normal">2377</span>
|
|
<span class="normal">2378</span>
|
|
<span class="normal">2379</span>
|
|
<span class="normal">2380</span>
|
|
<span class="normal">2381</span>
|
|
<span class="normal">2382</span>
|
|
<span class="normal">2383</span>
|
|
<span class="normal">2384</span>
|
|
<span class="normal">2385</span>
|
|
<span class="normal">2386</span>
|
|
<span class="normal">2387</span>
|
|
<span class="normal">2388</span>
|
|
<span class="normal">2389</span>
|
|
<span class="normal">2390</span>
|
|
<span class="normal">2391</span>
|
|
<span class="normal">2392</span>
|
|
<span class="normal">2393</span>
|
|
<span class="normal">2394</span>
|
|
<span class="normal">2395</span>
|
|
<span class="normal">2396</span>
|
|
<span class="normal">2397</span>
|
|
<span class="normal">2398</span>
|
|
<span class="normal">2399</span>
|
|
<span class="normal">2400</span>
|
|
<span class="normal">2401</span>
|
|
<span class="normal">2402</span>
|
|
<span class="normal">2403</span>
|
|
<span class="normal">2404</span>
|
|
<span class="normal">2405</span>
|
|
<span class="normal">2406</span>
|
|
<span class="normal">2407</span>
|
|
<span class="normal">2408</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes Stage 2 derivative and fluctuation expansion.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># 1. 계산식 내에 존재하는 고차 차분 미분항(ddx, d2dy 등)을 찾아 중간 DerivedField로 등록</span>
|
|
<span class="n">dset</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="n">dset</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">derivs</span><span class="p">)</span>
|
|
|
|
<span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">dset</span><span class="p">:</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">DerivedField</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span>
|
|
|
|
<span class="c1"># 2. 통계 물리량 평균화 대상 변수들을 AveragedField 구조체로 구성하고, </span>
|
|
<span class="c1"># 변동량 계산이 필요한 경우 FluctuationField로 등록</span>
|
|
<span class="n">averaged_raw</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">w</span><span class="p">,</span> <span class="n">tgts</span> <span class="ow">in</span> <span class="n">averaged_raw</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tgts</span><span class="p">:</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">AveragedField</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span>
|
|
<span class="c1"># 평균 편차가 동반된 항들에 대해 FluctuationField 생성</span>
|
|
<span class="k">for</span> <span class="n">ff</span> <span class="ow">in</span> <span class="n">a</span><span class="o">.</span><span class="n">fset</span><span class="p">:</span>
|
|
<span class="n">b</span> <span class="o">=</span> <span class="n">FluctuationField</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">ff</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">fset</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">b</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">b</span>
|
|
|
|
<span class="c1"># 3. 프로그램 내 모든 필드 간의 1차 의존 관계 그래프(Dependency Graph) 추출</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">dep</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</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">items</span><span class="p">():</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">dep</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.DerivedField" class="doc doc-heading">
|
|
<code>DerivedField</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code></p>
|
|
|
|
|
|
<p>수치 공간 미분(ddx, d2dy 등)을 수행하여 계산되는 유도 필드 클래스입니다.
|
|
Fortran 수치 차분 패키지 서브루틴(Compact.f90 에 구현된 dfnonp, dfp 등)의
|
|
동적 호출 코드를 출력합니다.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2125</span>
|
|
<span class="normal">2126</span>
|
|
<span class="normal">2127</span>
|
|
<span class="normal">2128</span>
|
|
<span class="normal">2129</span>
|
|
<span class="normal">2130</span>
|
|
<span class="normal">2131</span>
|
|
<span class="normal">2132</span>
|
|
<span class="normal">2133</span>
|
|
<span class="normal">2134</span>
|
|
<span class="normal">2135</span>
|
|
<span class="normal">2136</span>
|
|
<span class="normal">2137</span>
|
|
<span class="normal">2138</span>
|
|
<span class="normal">2139</span>
|
|
<span class="normal">2140</span>
|
|
<span class="normal">2141</span>
|
|
<span class="normal">2142</span>
|
|
<span class="normal">2143</span>
|
|
<span class="normal">2144</span>
|
|
<span class="normal">2145</span>
|
|
<span class="normal">2146</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">DerivedField</span><span class="p">(</span><span class="n">FieldBase</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""수치 공간 미분(ddx, d2dy 등)을 수행하여 계산되는 유도 필드 클래스입니다.</span>
|
|
<span class="sd"> Fortran 수치 차분 패키지 서브루틴(Compact.f90 에 구현된 dfnonp, dfp 등)의 </span>
|
|
<span class="sd"> 동적 호출 코드를 출력합니다.</span>
|
|
<span class="sd"> """</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">op</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes DerivedField derivative node.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> op (str): Differential operator name (e.g. 'ddx').</span>
|
|
<span class="sd"> v (str): Variable being differentiated (e.g. 'u').</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">DerivedField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">op</span> <span class="o">=</span> <span class="n">op</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">v</span> <span class="o">=</span> <span class="n">v</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">v</span><span class="p">])</span>
|
|
|
|
<span class="n">partial</span> <span class="o">=</span> <span class="n">differential_operator_registry</span><span class="o">.</span><span class="n">get_latex_symbol</span><span class="p">(</span><span class="n">op</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="n">partial</span> <span class="o">+</span> <span class="s2">"("</span> <span class="o">+</span> <span class="n">fdict</span><span class="p">[</span><span class="n">v</span><span class="p">]</span><span class="o">.</span><span class="n">latex</span> <span class="o">+</span> <span class="s2">")"</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DerivedField.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes DerivedField derivative node.</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>op</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Differential operator name (e.g. 'ddx').</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>v</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable being differentiated (e.g. 'u').</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Global variable registry dictionary.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2131</span>
|
|
<span class="normal">2132</span>
|
|
<span class="normal">2133</span>
|
|
<span class="normal">2134</span>
|
|
<span class="normal">2135</span>
|
|
<span class="normal">2136</span>
|
|
<span class="normal">2137</span>
|
|
<span class="normal">2138</span>
|
|
<span class="normal">2139</span>
|
|
<span class="normal">2140</span>
|
|
<span class="normal">2141</span>
|
|
<span class="normal">2142</span>
|
|
<span class="normal">2143</span>
|
|
<span class="normal">2144</span>
|
|
<span class="normal">2145</span>
|
|
<span class="normal">2146</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">op</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes DerivedField derivative node.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> op (str): Differential operator name (e.g. 'ddx').</span>
|
|
<span class="sd"> v (str): Variable being differentiated (e.g. 'u').</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">DerivedField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">op</span> <span class="o">=</span> <span class="n">op</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">v</span> <span class="o">=</span> <span class="n">v</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">v</span><span class="p">])</span>
|
|
|
|
<span class="n">partial</span> <span class="o">=</span> <span class="n">differential_operator_registry</span><span class="o">.</span><span class="n">get_latex_symbol</span><span class="p">(</span><span class="n">op</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="n">partial</span> <span class="o">+</span> <span class="s2">"("</span> <span class="o">+</span> <span class="n">fdict</span><span class="p">[</span><span class="n">v</span><span class="p">]</span><span class="o">.</span><span class="n">latex</span> <span class="o">+</span> <span class="s2">")"</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.DifferentialOperatorRegistry" class="doc doc-heading">
|
|
<code>DifferentialOperatorRegistry</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Registry for spatial differential operators mapping operators to LaTeX representations.</p>
|
|
<p>Handles default and custom differential operators (e.g., ddx, d2dy) used during derivation expansion.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">112</span>
|
|
<span class="normal">113</span>
|
|
<span class="normal">114</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>
|
|
<span class="normal">135</span>
|
|
<span class="normal">136</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></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">DifferentialOperatorRegistry</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Registry for spatial differential operators mapping operators to LaTeX representations.</span>
|
|
|
|
<span class="sd"> Handles default and custom differential operators (e.g., ddx, d2dy) used during derivation expansion.</span>
|
|
<span class="sd"> """</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="w"> </span><span class="sd">"""Initializes DifferentialOperatorRegistry with empty operator mappings."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_operators</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op_name</span><span class="p">,</span> <span class="n">latex_symbol</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Registers a custom LaTeX representation for a given operator.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> op_name (str): The differential operator name (e.g., 'ddx').</span>
|
|
<span class="sd"> latex_symbol (str): The corresponding LaTeX math symbol.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_operators</span><span class="p">[</span><span class="n">op_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">latex_symbol</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_latex_symbol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op_name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Retrieves the LaTeX representation of a differential operator.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> op_name (str): The name of the operator.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: The LaTeX code for the differential operator (e.g. '\\partial_{x}').</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">op_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_operators</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_operators</span><span class="p">[</span><span class="n">op_name</span><span class="p">]</span>
|
|
<span class="c1"># Fallback to dynamic parsing matching original code</span>
|
|
<span class="n">fmt</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\partial_{{</span><span class="si">{}</span><span class="s2">}}"</span>
|
|
<span class="n">coord</span> <span class="o">=</span> <span class="n">op_name</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">op_name</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="k">return</span> <span class="n">fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">coord</span> <span class="o">+</span> <span class="n">coord</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">op_name</span><span class="p">)</span> <span class="o">></span> <span class="mi">3</span> <span class="k">else</span> <span class="n">coord</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="post.DifferentialOperatorRegistry.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes DifferentialOperatorRegistry with empty operator mappings.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">118</span>
|
|
<span class="normal">119</span>
|
|
<span class="normal">120</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="w"> </span><span class="sd">"""Initializes DifferentialOperatorRegistry with empty operator mappings."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_operators</span> <span class="o">=</span> <span class="p">{}</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DifferentialOperatorRegistry.get_latex_symbol" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">get_latex_symbol</span><span class="p">(</span><span class="n">op_name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Retrieves the LaTeX representation of a differential operator.</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>op_name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The name of the operator.</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 LaTeX code for the differential operator (e.g. '\partial_{x}').</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">131</span>
|
|
<span class="normal">132</span>
|
|
<span class="normal">133</span>
|
|
<span class="normal">134</span>
|
|
<span class="normal">135</span>
|
|
<span class="normal">136</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></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">get_latex_symbol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op_name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Retrieves the LaTeX representation of a differential operator.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> op_name (str): The name of the operator.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: The LaTeX code for the differential operator (e.g. '\\partial_{x}').</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">op_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_operators</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_operators</span><span class="p">[</span><span class="n">op_name</span><span class="p">]</span>
|
|
<span class="c1"># Fallback to dynamic parsing matching original code</span>
|
|
<span class="n">fmt</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\partial_{{</span><span class="si">{}</span><span class="s2">}}"</span>
|
|
<span class="n">coord</span> <span class="o">=</span> <span class="n">op_name</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">op_name</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="k">return</span> <span class="n">fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">coord</span> <span class="o">+</span> <span class="n">coord</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">op_name</span><span class="p">)</span> <span class="o">></span> <span class="mi">3</span> <span class="k">else</span> <span class="n">coord</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.DifferentialOperatorRegistry.register" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">register</span><span class="p">(</span><span class="n">op_name</span><span class="p">,</span> <span class="n">latex_symbol</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Registers a custom LaTeX representation for a given operator.</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>op_name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The differential operator name (e.g., 'ddx').</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>latex_symbol</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The corresponding LaTeX math symbol.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></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></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op_name</span><span class="p">,</span> <span class="n">latex_symbol</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Registers a custom LaTeX representation for a given operator.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> op_name (str): The differential operator name (e.g., 'ddx').</span>
|
|
<span class="sd"> latex_symbol (str): The corresponding LaTeX math symbol.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_operators</span><span class="p">[</span><span class="n">op_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">latex_symbol</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.ExpInspector" class="doc doc-heading">
|
|
<code>ExpInspector</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><span title="lark.Visitor">Visitor</span></code></p>
|
|
|
|
|
|
<p>Visitor to inspect mathematical AST nodes to extract dependencies and attributes.</p>
|
|
<p>Finds the list of dependent variables, checks if the expression references
|
|
turbulence fluctuation variables (primed variables), and extracts derivative operators
|
|
such as spatial first and second order derivatives (e.g. ddx, d2dy).</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1329</span>
|
|
<span class="normal">1330</span>
|
|
<span class="normal">1331</span>
|
|
<span class="normal">1332</span>
|
|
<span class="normal">1333</span>
|
|
<span class="normal">1334</span>
|
|
<span class="normal">1335</span>
|
|
<span class="normal">1336</span>
|
|
<span class="normal">1337</span>
|
|
<span class="normal">1338</span>
|
|
<span class="normal">1339</span>
|
|
<span class="normal">1340</span>
|
|
<span class="normal">1341</span>
|
|
<span class="normal">1342</span>
|
|
<span class="normal">1343</span>
|
|
<span class="normal">1344</span>
|
|
<span class="normal">1345</span>
|
|
<span class="normal">1346</span>
|
|
<span class="normal">1347</span>
|
|
<span class="normal">1348</span>
|
|
<span class="normal">1349</span>
|
|
<span class="normal">1350</span>
|
|
<span class="normal">1351</span>
|
|
<span class="normal">1352</span>
|
|
<span class="normal">1353</span>
|
|
<span class="normal">1354</span>
|
|
<span class="normal">1355</span>
|
|
<span class="normal">1356</span>
|
|
<span class="normal">1357</span>
|
|
<span class="normal">1358</span>
|
|
<span class="normal">1359</span>
|
|
<span class="normal">1360</span>
|
|
<span class="normal">1361</span>
|
|
<span class="normal">1362</span>
|
|
<span class="normal">1363</span>
|
|
<span class="normal">1364</span>
|
|
<span class="normal">1365</span>
|
|
<span class="normal">1366</span>
|
|
<span class="normal">1367</span>
|
|
<span class="normal">1368</span>
|
|
<span class="normal">1369</span>
|
|
<span class="normal">1370</span>
|
|
<span class="normal">1371</span>
|
|
<span class="normal">1372</span>
|
|
<span class="normal">1373</span>
|
|
<span class="normal">1374</span>
|
|
<span class="normal">1375</span>
|
|
<span class="normal">1376</span>
|
|
<span class="normal">1377</span>
|
|
<span class="normal">1378</span>
|
|
<span class="normal">1379</span>
|
|
<span class="normal">1380</span>
|
|
<span class="normal">1381</span>
|
|
<span class="normal">1382</span>
|
|
<span class="normal">1383</span>
|
|
<span class="normal">1384</span>
|
|
<span class="normal">1385</span>
|
|
<span class="normal">1386</span>
|
|
<span class="normal">1387</span>
|
|
<span class="normal">1388</span>
|
|
<span class="normal">1389</span>
|
|
<span class="normal">1390</span>
|
|
<span class="normal">1391</span>
|
|
<span class="normal">1392</span>
|
|
<span class="normal">1393</span>
|
|
<span class="normal">1394</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">ExpInspector</span><span class="p">(</span><span class="n">Visitor</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Visitor to inspect mathematical AST nodes to extract dependencies and attributes.</span>
|
|
|
|
<span class="sd"> Finds the list of dependent variables, checks if the expression references</span>
|
|
<span class="sd"> turbulence fluctuation variables (primed variables), and extracts derivative operators</span>
|
|
<span class="sd"> such as spatial first and second order derivatives (e.g. ddx, d2dy).</span>
|
|
<span class="sd"> """</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="w"> </span><span class="sd">"""Initializes ExpInspector state."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fluctuation</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">inspect</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Inspects the given AST tree and returns extracted attributes.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST subtree.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (has_fluctuation, dependencies_set, derivatives_set).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes the inspection traversal.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST subtree.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (has_fluctuation, dependencies_set, derivatives_set).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">visit</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fluctuation</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deriv</span>
|
|
|
|
<span class="k">def</span> <span class="nf">fluc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Processes a fluctuation node.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Fluctuation AST node.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fluctuation</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Processes a variable reference node.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Variable reference AST node.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">dnx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Processes a spatial derivative node, registering intermediate fields.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Derivative operation AST node.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">op</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span>
|
|
<span class="n">deriv</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">op</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">deriv</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">deriv</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">op</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">v</span><span class="o">.</span><span class="n">value</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="post.ExpInspector.__call__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__call__</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Executes the inspection traversal.</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>tree</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Lark AST subtree.</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>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>(has_fluctuation, dependencies_set, derivatives_set).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1356</span>
|
|
<span class="normal">1357</span>
|
|
<span class="normal">1358</span>
|
|
<span class="normal">1359</span>
|
|
<span class="normal">1360</span>
|
|
<span class="normal">1361</span>
|
|
<span class="normal">1362</span>
|
|
<span class="normal">1363</span>
|
|
<span class="normal">1364</span>
|
|
<span class="normal">1365</span>
|
|
<span class="normal">1366</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes the inspection traversal.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST subtree.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (has_fluctuation, dependencies_set, derivatives_set).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">visit</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fluctuation</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deriv</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpInspector.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes ExpInspector state.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1337</span>
|
|
<span class="normal">1338</span>
|
|
<span class="normal">1339</span>
|
|
<span class="normal">1340</span>
|
|
<span class="normal">1341</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="w"> </span><span class="sd">"""Initializes ExpInspector state."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fluctuation</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpInspector.dnx" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">dnx</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Processes a spatial derivative node, registering intermediate fields.</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>tree</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Derivative operation AST node.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1385</span>
|
|
<span class="normal">1386</span>
|
|
<span class="normal">1387</span>
|
|
<span class="normal">1388</span>
|
|
<span class="normal">1389</span>
|
|
<span class="normal">1390</span>
|
|
<span class="normal">1391</span>
|
|
<span class="normal">1392</span>
|
|
<span class="normal">1393</span>
|
|
<span class="normal">1394</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">dnx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Processes a spatial derivative node, registering intermediate fields.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Derivative operation AST node.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">op</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">children</span>
|
|
<span class="n">deriv</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">op</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">deriv</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">deriv</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">op</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">v</span><span class="o">.</span><span class="n">value</span><span class="p">))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpInspector.fluc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">fluc</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Processes a fluctuation node.</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>tree</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Fluctuation AST node.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1368</span>
|
|
<span class="normal">1369</span>
|
|
<span class="normal">1370</span>
|
|
<span class="normal">1371</span>
|
|
<span class="normal">1372</span>
|
|
<span class="normal">1373</span>
|
|
<span class="normal">1374</span>
|
|
<span class="normal">1375</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">fluc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Processes a fluctuation node.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Fluctuation AST node.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fluctuation</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpInspector.inspect" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">inspect</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span></code>
|
|
|
|
<span class="doc doc-labels">
|
|
<small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
|
|
</span>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Inspects the given AST tree and returns extracted attributes.</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>tree</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Lark AST subtree.</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>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>(has_fluctuation, dependencies_set, derivatives_set).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1343</span>
|
|
<span class="normal">1344</span>
|
|
<span class="normal">1345</span>
|
|
<span class="normal">1346</span>
|
|
<span class="normal">1347</span>
|
|
<span class="normal">1348</span>
|
|
<span class="normal">1349</span>
|
|
<span class="normal">1350</span>
|
|
<span class="normal">1351</span>
|
|
<span class="normal">1352</span>
|
|
<span class="normal">1353</span>
|
|
<span class="normal">1354</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">inspect</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Inspects the given AST tree and returns extracted attributes.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Lark AST subtree.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (has_fluctuation, dependencies_set, derivatives_set).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpInspector.var" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">var</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Processes a variable reference node.</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>tree</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable reference AST node.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1377</span>
|
|
<span class="normal">1378</span>
|
|
<span class="normal">1379</span>
|
|
<span class="normal">1380</span>
|
|
<span class="normal">1381</span>
|
|
<span class="normal">1382</span>
|
|
<span class="normal">1383</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Processes a variable reference node.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> tree (Tree): Variable reference AST node.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">tree</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.ExpToCode" class="doc doc-heading">
|
|
<code>ExpToCode</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><span title="lark.Transformer">Transformer</span></code></p>
|
|
|
|
|
|
<p>Transformer to compile the DSL mathematical AST directly into Fortran array expressions.</p>
|
|
<p>Formats variable accesses with spatial index wrappers (e.g., <code>(i,j,k)</code> or <code>(i)</code>) and
|
|
converts inline functions or standard math calls.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1635</span>
|
|
<span class="normal">1636</span>
|
|
<span class="normal">1637</span>
|
|
<span class="normal">1638</span>
|
|
<span class="normal">1639</span>
|
|
<span class="normal">1640</span>
|
|
<span class="normal">1641</span>
|
|
<span class="normal">1642</span>
|
|
<span class="normal">1643</span>
|
|
<span class="normal">1644</span>
|
|
<span class="normal">1645</span>
|
|
<span class="normal">1646</span>
|
|
<span class="normal">1647</span>
|
|
<span class="normal">1648</span>
|
|
<span class="normal">1649</span>
|
|
<span class="normal">1650</span>
|
|
<span class="normal">1651</span>
|
|
<span class="normal">1652</span>
|
|
<span class="normal">1653</span>
|
|
<span class="normal">1654</span>
|
|
<span class="normal">1655</span>
|
|
<span class="normal">1656</span>
|
|
<span class="normal">1657</span>
|
|
<span class="normal">1658</span>
|
|
<span class="normal">1659</span>
|
|
<span class="normal">1660</span>
|
|
<span class="normal">1661</span>
|
|
<span class="normal">1662</span>
|
|
<span class="normal">1663</span>
|
|
<span class="normal">1664</span>
|
|
<span class="normal">1665</span>
|
|
<span class="normal">1666</span>
|
|
<span class="normal">1667</span>
|
|
<span class="normal">1668</span>
|
|
<span class="normal">1669</span>
|
|
<span class="normal">1670</span>
|
|
<span class="normal">1671</span>
|
|
<span class="normal">1672</span>
|
|
<span class="normal">1673</span>
|
|
<span class="normal">1674</span>
|
|
<span class="normal">1675</span>
|
|
<span class="normal">1676</span>
|
|
<span class="normal">1677</span>
|
|
<span class="normal">1678</span>
|
|
<span class="normal">1679</span>
|
|
<span class="normal">1680</span>
|
|
<span class="normal">1681</span>
|
|
<span class="normal">1682</span>
|
|
<span class="normal">1683</span>
|
|
<span class="normal">1684</span>
|
|
<span class="normal">1685</span>
|
|
<span class="normal">1686</span>
|
|
<span class="normal">1687</span>
|
|
<span class="normal">1688</span>
|
|
<span class="normal">1689</span>
|
|
<span class="normal">1690</span>
|
|
<span class="normal">1691</span>
|
|
<span class="normal">1692</span>
|
|
<span class="normal">1693</span>
|
|
<span class="normal">1694</span>
|
|
<span class="normal">1695</span>
|
|
<span class="normal">1696</span>
|
|
<span class="normal">1697</span>
|
|
<span class="normal">1698</span>
|
|
<span class="normal">1699</span>
|
|
<span class="normal">1700</span>
|
|
<span class="normal">1701</span>
|
|
<span class="normal">1702</span>
|
|
<span class="normal">1703</span>
|
|
<span class="normal">1704</span>
|
|
<span class="normal">1705</span>
|
|
<span class="normal">1706</span>
|
|
<span class="normal">1707</span>
|
|
<span class="normal">1708</span>
|
|
<span class="normal">1709</span>
|
|
<span class="normal">1710</span>
|
|
<span class="normal">1711</span>
|
|
<span class="normal">1712</span>
|
|
<span class="normal">1713</span>
|
|
<span class="normal">1714</span>
|
|
<span class="normal">1715</span>
|
|
<span class="normal">1716</span>
|
|
<span class="normal">1717</span>
|
|
<span class="normal">1718</span>
|
|
<span class="normal">1719</span>
|
|
<span class="normal">1720</span>
|
|
<span class="normal">1721</span>
|
|
<span class="normal">1722</span>
|
|
<span class="normal">1723</span>
|
|
<span class="normal">1724</span>
|
|
<span class="normal">1725</span>
|
|
<span class="normal">1726</span>
|
|
<span class="normal">1727</span>
|
|
<span class="normal">1728</span>
|
|
<span class="normal">1729</span>
|
|
<span class="normal">1730</span>
|
|
<span class="normal">1731</span>
|
|
<span class="normal">1732</span>
|
|
<span class="normal">1733</span>
|
|
<span class="normal">1734</span>
|
|
<span class="normal">1735</span>
|
|
<span class="normal">1736</span>
|
|
<span class="normal">1737</span>
|
|
<span class="normal">1738</span>
|
|
<span class="normal">1739</span>
|
|
<span class="normal">1740</span>
|
|
<span class="normal">1741</span>
|
|
<span class="normal">1742</span>
|
|
<span class="normal">1743</span>
|
|
<span class="normal">1744</span>
|
|
<span class="normal">1745</span>
|
|
<span class="normal">1746</span>
|
|
<span class="normal">1747</span>
|
|
<span class="normal">1748</span>
|
|
<span class="normal">1749</span>
|
|
<span class="normal">1750</span>
|
|
<span class="normal">1751</span>
|
|
<span class="normal">1752</span>
|
|
<span class="normal">1753</span>
|
|
<span class="normal">1754</span>
|
|
<span class="normal">1755</span>
|
|
<span class="normal">1756</span>
|
|
<span class="normal">1757</span>
|
|
<span class="normal">1758</span>
|
|
<span class="normal">1759</span>
|
|
<span class="normal">1760</span>
|
|
<span class="normal">1761</span>
|
|
<span class="normal">1762</span>
|
|
<span class="normal">1763</span>
|
|
<span class="normal">1764</span>
|
|
<span class="normal">1765</span>
|
|
<span class="normal">1766</span>
|
|
<span class="normal">1767</span>
|
|
<span class="normal">1768</span>
|
|
<span class="normal">1769</span>
|
|
<span class="normal">1770</span>
|
|
<span class="normal">1771</span>
|
|
<span class="normal">1772</span>
|
|
<span class="normal">1773</span>
|
|
<span class="normal">1774</span>
|
|
<span class="normal">1775</span>
|
|
<span class="normal">1776</span>
|
|
<span class="normal">1777</span>
|
|
<span class="normal">1778</span>
|
|
<span class="normal">1779</span>
|
|
<span class="normal">1780</span>
|
|
<span class="normal">1781</span>
|
|
<span class="normal">1782</span>
|
|
<span class="normal">1783</span>
|
|
<span class="normal">1784</span>
|
|
<span class="normal">1785</span>
|
|
<span class="normal">1786</span>
|
|
<span class="normal">1787</span>
|
|
<span class="normal">1788</span>
|
|
<span class="normal">1789</span>
|
|
<span class="normal">1790</span>
|
|
<span class="normal">1791</span>
|
|
<span class="normal">1792</span>
|
|
<span class="normal">1793</span>
|
|
<span class="normal">1794</span>
|
|
<span class="normal">1795</span>
|
|
<span class="normal">1796</span>
|
|
<span class="normal">1797</span>
|
|
<span class="normal">1798</span>
|
|
<span class="normal">1799</span>
|
|
<span class="normal">1800</span>
|
|
<span class="normal">1801</span>
|
|
<span class="normal">1802</span>
|
|
<span class="normal">1803</span>
|
|
<span class="normal">1804</span>
|
|
<span class="normal">1805</span>
|
|
<span class="normal">1806</span>
|
|
<span class="normal">1807</span>
|
|
<span class="normal">1808</span>
|
|
<span class="normal">1809</span>
|
|
<span class="normal">1810</span>
|
|
<span class="normal">1811</span>
|
|
<span class="normal">1812</span>
|
|
<span class="normal">1813</span>
|
|
<span class="normal">1814</span>
|
|
<span class="normal">1815</span>
|
|
<span class="normal">1816</span>
|
|
<span class="normal">1817</span>
|
|
<span class="normal">1818</span>
|
|
<span class="normal">1819</span>
|
|
<span class="normal">1820</span>
|
|
<span class="normal">1821</span>
|
|
<span class="normal">1822</span>
|
|
<span class="normal">1823</span>
|
|
<span class="normal">1824</span>
|
|
<span class="normal">1825</span>
|
|
<span class="normal">1826</span>
|
|
<span class="normal">1827</span>
|
|
<span class="normal">1828</span>
|
|
<span class="normal">1829</span>
|
|
<span class="normal">1830</span>
|
|
<span class="normal">1831</span>
|
|
<span class="normal">1832</span>
|
|
<span class="normal">1833</span>
|
|
<span class="normal">1834</span>
|
|
<span class="normal">1835</span>
|
|
<span class="normal">1836</span>
|
|
<span class="normal">1837</span>
|
|
<span class="normal">1838</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@v_args</span><span class="p">(</span><span class="n">inline</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">class</span> <span class="nc">ExpToCode</span><span class="p">(</span><span class="n">Transformer</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Transformer to compile the DSL mathematical AST directly into Fortran array expressions.</span>
|
|
|
|
<span class="sd"> Formats variable accesses with spatial index wrappers (e.g., `(i,j,k)` or `(i)`) and</span>
|
|
<span class="sd"> converts inline functions or standard math calls.</span>
|
|
<span class="sd"> """</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes ExpToCode transformer.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Dictionary mapping variable names to FieldBase objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
|
|
<span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numeral</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts float literal numbers.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> numeral (Token): Number token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Floating point string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">numeral</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span> <span class="nf">env</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts environment variables.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Environment variable name token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Variable name.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="k">def</span> <span class="nf">paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Wraps in parentheses.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Inner expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Parenthesized string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats a variable access with spatial grid index (i,j,k).</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran array access.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">]</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="k">return</span> <span class="n">arrname</span> <span class="o">+</span> <span class="s2">"(i,j,k)"</span>
|
|
|
|
<span class="k">def</span> <span class="nf">fluc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats a fluctuation prime variable access.</span>
|
|
|
|
<span class="sd"> Saves index reference for inline replacement of averages.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Fluctuation variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran inline fluctuation subtraction formula.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">]</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="n">fmt</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">(i,j,k) - {{0}}avg_</span><span class="si">{1}</span><span class="s2">(i))"</span>
|
|
<span class="k">return</span> <span class="n">fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">arrname</span><span class="p">,</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">dnx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats spatial derivatives as array accesses.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> partial (Token): Derivative operator.</span>
|
|
<span class="sd"> b (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran array access for derivative.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">signature</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">signature</span><span class="p">]</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="n">signature</span>
|
|
|
|
<span class="k">return</span> <span class="n">arrname</span> <span class="o">+</span> <span class="s2">"(i,j,k)"</span>
|
|
|
|
<span class="k">def</span> <span class="nf">icall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats inline functions (sqr, pow3) to Fortran multiplication.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (Token): Inline function operator.</span>
|
|
<span class="sd"> b (str): Argument code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran math expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">a</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"sqr"</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"((</span><span class="si">{0}</span><span class="s2">)*(</span><span class="si">{0}</span><span class="s2">))"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">a</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"pow3"</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"((</span><span class="si">{0}</span><span class="s2">)*(</span><span class="si">{0}</span><span class="s2">)*(</span><span class="si">{0}</span><span class="s2">))"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">fcall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats standard math function calls.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> *args: Variable length argument list. First argument is the function token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran function call string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">b</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> ( </span><span class="si">{}</span><span class="s2"> ) )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">neg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats negation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> b (str): Code string to negate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Negated code string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( - </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats addition.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand code.</span>
|
|
<span class="sd"> b (str): Right operand code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran addition code.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> + </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats subtraction.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand code.</span>
|
|
<span class="sd"> b (str): Right operand code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran subtraction code.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> - </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">mul</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats multiplication.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand code.</span>
|
|
<span class="sd"> b (str): Right operand code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran multiplication code.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> * </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">div</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats division.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand code.</span>
|
|
<span class="sd"> b (str): Right operand code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran division code.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> / </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="n">log</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"log"</span>
|
|
<span class="n">exp</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"exp"</span>
|
|
<span class="n">sqrt</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"sqrt"</span>
|
|
<span class="nb">abs</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"abs"</span>
|
|
<span class="n">rxn_rate</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"rxn_rate"</span>
|
|
<span class="n">udf</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">:</span> <span class="n">a</span><span class="o">.</span><span class="n">value</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes ExpToCode transformer.</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>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Dictionary mapping variable names to FieldBase objects.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1643</span>
|
|
<span class="normal">1644</span>
|
|
<span class="normal">1645</span>
|
|
<span class="normal">1646</span>
|
|
<span class="normal">1647</span>
|
|
<span class="normal">1648</span>
|
|
<span class="normal">1649</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes ExpToCode transformer.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Dictionary mapping variable names to FieldBase objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.add" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats addition.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left operand code.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right operand code.</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>Fortran addition code.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1781</span>
|
|
<span class="normal">1782</span>
|
|
<span class="normal">1783</span>
|
|
<span class="normal">1784</span>
|
|
<span class="normal">1785</span>
|
|
<span class="normal">1786</span>
|
|
<span class="normal">1787</span>
|
|
<span class="normal">1788</span>
|
|
<span class="normal">1789</span>
|
|
<span class="normal">1790</span>
|
|
<span class="normal">1791</span>
|
|
<span class="normal">1792</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats addition.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand code.</span>
|
|
<span class="sd"> b (str): Right operand code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran addition code.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> + </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.div" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">div</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats division.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left operand code.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right operand code.</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>Fortran division code.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1820</span>
|
|
<span class="normal">1821</span>
|
|
<span class="normal">1822</span>
|
|
<span class="normal">1823</span>
|
|
<span class="normal">1824</span>
|
|
<span class="normal">1825</span>
|
|
<span class="normal">1826</span>
|
|
<span class="normal">1827</span>
|
|
<span class="normal">1828</span>
|
|
<span class="normal">1829</span>
|
|
<span class="normal">1830</span>
|
|
<span class="normal">1831</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">div</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats division.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand code.</span>
|
|
<span class="sd"> b (str): Right operand code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran division code.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> / </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.dnx" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">dnx</span><span class="p">(</span><span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats spatial derivatives as array accesses.</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>partial</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Derivative operator.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable token.</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>Fortran array access for derivative.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1719</span>
|
|
<span class="normal">1720</span>
|
|
<span class="normal">1721</span>
|
|
<span class="normal">1722</span>
|
|
<span class="normal">1723</span>
|
|
<span class="normal">1724</span>
|
|
<span class="normal">1725</span>
|
|
<span class="normal">1726</span>
|
|
<span class="normal">1727</span>
|
|
<span class="normal">1728</span>
|
|
<span class="normal">1729</span>
|
|
<span class="normal">1730</span>
|
|
<span class="normal">1731</span>
|
|
<span class="normal">1732</span>
|
|
<span class="normal">1733</span>
|
|
<span class="normal">1734</span>
|
|
<span class="normal">1735</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">dnx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats spatial derivatives as array accesses.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> partial (Token): Derivative operator.</span>
|
|
<span class="sd"> b (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran array access for derivative.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">signature</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">signature</span><span class="p">]</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="n">signature</span>
|
|
|
|
<span class="k">return</span> <span class="n">arrname</span> <span class="o">+</span> <span class="s2">"(i,j,k)"</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.env" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">env</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts environment variables.</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Environment variable name token.</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>Variable name.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1662</span>
|
|
<span class="normal">1663</span>
|
|
<span class="normal">1664</span>
|
|
<span class="normal">1665</span>
|
|
<span class="normal">1666</span>
|
|
<span class="normal">1667</span>
|
|
<span class="normal">1668</span>
|
|
<span class="normal">1669</span>
|
|
<span class="normal">1670</span>
|
|
<span class="normal">1671</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">env</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts environment variables.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Environment variable name token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Variable name.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.fcall" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">fcall</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats standard math function calls.</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>*args</code></td>
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable length argument list. First argument is the function token.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>()</code>
|
|
</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>Fortran function call string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1755</span>
|
|
<span class="normal">1756</span>
|
|
<span class="normal">1757</span>
|
|
<span class="normal">1758</span>
|
|
<span class="normal">1759</span>
|
|
<span class="normal">1760</span>
|
|
<span class="normal">1761</span>
|
|
<span class="normal">1762</span>
|
|
<span class="normal">1763</span>
|
|
<span class="normal">1764</span>
|
|
<span class="normal">1765</span>
|
|
<span class="normal">1766</span>
|
|
<span class="normal">1767</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">fcall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats standard math function calls.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> *args: Variable length argument list. First argument is the function token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran function call string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">b</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> ( </span><span class="si">{}</span><span class="s2"> ) )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.fluc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">fluc</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats a fluctuation prime variable access.</p>
|
|
<p>Saves index reference for inline replacement of averages.</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Fluctuation variable token.</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>Fortran inline fluctuation subtraction formula.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1700</span>
|
|
<span class="normal">1701</span>
|
|
<span class="normal">1702</span>
|
|
<span class="normal">1703</span>
|
|
<span class="normal">1704</span>
|
|
<span class="normal">1705</span>
|
|
<span class="normal">1706</span>
|
|
<span class="normal">1707</span>
|
|
<span class="normal">1708</span>
|
|
<span class="normal">1709</span>
|
|
<span class="normal">1710</span>
|
|
<span class="normal">1711</span>
|
|
<span class="normal">1712</span>
|
|
<span class="normal">1713</span>
|
|
<span class="normal">1714</span>
|
|
<span class="normal">1715</span>
|
|
<span class="normal">1716</span>
|
|
<span class="normal">1717</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">fluc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats a fluctuation prime variable access.</span>
|
|
|
|
<span class="sd"> Saves index reference for inline replacement of averages.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Fluctuation variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran inline fluctuation subtraction formula.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">]</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="n">fmt</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">(i,j,k) - {{0}}avg_</span><span class="si">{1}</span><span class="s2">(i))"</span>
|
|
<span class="k">return</span> <span class="n">fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">arrname</span><span class="p">,</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.icall" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">icall</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats inline functions (sqr, pow3) to Fortran multiplication.</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>a</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Inline function operator.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Argument code.</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>Fortran math expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1737</span>
|
|
<span class="normal">1738</span>
|
|
<span class="normal">1739</span>
|
|
<span class="normal">1740</span>
|
|
<span class="normal">1741</span>
|
|
<span class="normal">1742</span>
|
|
<span class="normal">1743</span>
|
|
<span class="normal">1744</span>
|
|
<span class="normal">1745</span>
|
|
<span class="normal">1746</span>
|
|
<span class="normal">1747</span>
|
|
<span class="normal">1748</span>
|
|
<span class="normal">1749</span>
|
|
<span class="normal">1750</span>
|
|
<span class="normal">1751</span>
|
|
<span class="normal">1752</span>
|
|
<span class="normal">1753</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">icall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats inline functions (sqr, pow3) to Fortran multiplication.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (Token): Inline function operator.</span>
|
|
<span class="sd"> b (str): Argument code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran math expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">a</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"sqr"</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"((</span><span class="si">{0}</span><span class="s2">)*(</span><span class="si">{0}</span><span class="s2">))"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">a</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"pow3"</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"((</span><span class="si">{0}</span><span class="s2">)*(</span><span class="si">{0}</span><span class="s2">)*(</span><span class="si">{0}</span><span class="s2">))"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.mul" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats multiplication.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left operand code.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right operand code.</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>Fortran multiplication code.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1807</span>
|
|
<span class="normal">1808</span>
|
|
<span class="normal">1809</span>
|
|
<span class="normal">1810</span>
|
|
<span class="normal">1811</span>
|
|
<span class="normal">1812</span>
|
|
<span class="normal">1813</span>
|
|
<span class="normal">1814</span>
|
|
<span class="normal">1815</span>
|
|
<span class="normal">1816</span>
|
|
<span class="normal">1817</span>
|
|
<span class="normal">1818</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">mul</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats multiplication.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand code.</span>
|
|
<span class="sd"> b (str): Right operand code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran multiplication code.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> * </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.neg" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">neg</span><span class="p">(</span><span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats negation.</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>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Code string to negate.</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>Negated code string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1769</span>
|
|
<span class="normal">1770</span>
|
|
<span class="normal">1771</span>
|
|
<span class="normal">1772</span>
|
|
<span class="normal">1773</span>
|
|
<span class="normal">1774</span>
|
|
<span class="normal">1775</span>
|
|
<span class="normal">1776</span>
|
|
<span class="normal">1777</span>
|
|
<span class="normal">1778</span>
|
|
<span class="normal">1779</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">neg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats negation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> b (str): Code string to negate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Negated code string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( - </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.number" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">number</span><span class="p">(</span><span class="n">numeral</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts float literal numbers.</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>numeral</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Number token.</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>Floating point string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1651</span>
|
|
<span class="normal">1652</span>
|
|
<span class="normal">1653</span>
|
|
<span class="normal">1654</span>
|
|
<span class="normal">1655</span>
|
|
<span class="normal">1656</span>
|
|
<span class="normal">1657</span>
|
|
<span class="normal">1658</span>
|
|
<span class="normal">1659</span>
|
|
<span class="normal">1660</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numeral</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts float literal numbers.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> numeral (Token): Number token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Floating point string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">numeral</span><span class="p">))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.paren" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">paren</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Wraps in parentheses.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Inner expression.</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>Parenthesized string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1673</span>
|
|
<span class="normal">1674</span>
|
|
<span class="normal">1675</span>
|
|
<span class="normal">1676</span>
|
|
<span class="normal">1677</span>
|
|
<span class="normal">1678</span>
|
|
<span class="normal">1679</span>
|
|
<span class="normal">1680</span>
|
|
<span class="normal">1681</span>
|
|
<span class="normal">1682</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Wraps in parentheses.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Inner expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Parenthesized string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.sub" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">sub</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats subtraction.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left operand code.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right operand code.</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>Fortran subtraction code.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1794</span>
|
|
<span class="normal">1795</span>
|
|
<span class="normal">1796</span>
|
|
<span class="normal">1797</span>
|
|
<span class="normal">1798</span>
|
|
<span class="normal">1799</span>
|
|
<span class="normal">1800</span>
|
|
<span class="normal">1801</span>
|
|
<span class="normal">1802</span>
|
|
<span class="normal">1803</span>
|
|
<span class="normal">1804</span>
|
|
<span class="normal">1805</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats subtraction.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand code.</span>
|
|
<span class="sd"> b (str): Right operand code.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran subtraction code.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"( </span><span class="si">{}</span><span class="s2"> - </span><span class="si">{}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToCode.var" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">var</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats a variable access with spatial grid index (i,j,k).</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable token.</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>Fortran array access.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1684</span>
|
|
<span class="normal">1685</span>
|
|
<span class="normal">1686</span>
|
|
<span class="normal">1687</span>
|
|
<span class="normal">1688</span>
|
|
<span class="normal">1689</span>
|
|
<span class="normal">1690</span>
|
|
<span class="normal">1691</span>
|
|
<span class="normal">1692</span>
|
|
<span class="normal">1693</span>
|
|
<span class="normal">1694</span>
|
|
<span class="normal">1695</span>
|
|
<span class="normal">1696</span>
|
|
<span class="normal">1697</span>
|
|
<span class="normal">1698</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats a variable access with spatial grid index (i,j,k).</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran array access.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">]</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="k">return</span> <span class="n">arrname</span> <span class="o">+</span> <span class="s2">"(i,j,k)"</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.ExpToLatex" class="doc doc-heading">
|
|
<code>ExpToLatex</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><span title="lark.Transformer">Transformer</span></code></p>
|
|
|
|
|
|
<p>Transformer to compile the DSL mathematical AST into a LaTeX math string.</p>
|
|
<p>Converts operations, variables, derivatives, and functions into LaTeX syntax
|
|
(e.g., partial derivative notation, fraction blocks, and bracket sizing)
|
|
to generate mathematical report files.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1397</span>
|
|
<span class="normal">1398</span>
|
|
<span class="normal">1399</span>
|
|
<span class="normal">1400</span>
|
|
<span class="normal">1401</span>
|
|
<span class="normal">1402</span>
|
|
<span class="normal">1403</span>
|
|
<span class="normal">1404</span>
|
|
<span class="normal">1405</span>
|
|
<span class="normal">1406</span>
|
|
<span class="normal">1407</span>
|
|
<span class="normal">1408</span>
|
|
<span class="normal">1409</span>
|
|
<span class="normal">1410</span>
|
|
<span class="normal">1411</span>
|
|
<span class="normal">1412</span>
|
|
<span class="normal">1413</span>
|
|
<span class="normal">1414</span>
|
|
<span class="normal">1415</span>
|
|
<span class="normal">1416</span>
|
|
<span class="normal">1417</span>
|
|
<span class="normal">1418</span>
|
|
<span class="normal">1419</span>
|
|
<span class="normal">1420</span>
|
|
<span class="normal">1421</span>
|
|
<span class="normal">1422</span>
|
|
<span class="normal">1423</span>
|
|
<span class="normal">1424</span>
|
|
<span class="normal">1425</span>
|
|
<span class="normal">1426</span>
|
|
<span class="normal">1427</span>
|
|
<span class="normal">1428</span>
|
|
<span class="normal">1429</span>
|
|
<span class="normal">1430</span>
|
|
<span class="normal">1431</span>
|
|
<span class="normal">1432</span>
|
|
<span class="normal">1433</span>
|
|
<span class="normal">1434</span>
|
|
<span class="normal">1435</span>
|
|
<span class="normal">1436</span>
|
|
<span class="normal">1437</span>
|
|
<span class="normal">1438</span>
|
|
<span class="normal">1439</span>
|
|
<span class="normal">1440</span>
|
|
<span class="normal">1441</span>
|
|
<span class="normal">1442</span>
|
|
<span class="normal">1443</span>
|
|
<span class="normal">1444</span>
|
|
<span class="normal">1445</span>
|
|
<span class="normal">1446</span>
|
|
<span class="normal">1447</span>
|
|
<span class="normal">1448</span>
|
|
<span class="normal">1449</span>
|
|
<span class="normal">1450</span>
|
|
<span class="normal">1451</span>
|
|
<span class="normal">1452</span>
|
|
<span class="normal">1453</span>
|
|
<span class="normal">1454</span>
|
|
<span class="normal">1455</span>
|
|
<span class="normal">1456</span>
|
|
<span class="normal">1457</span>
|
|
<span class="normal">1458</span>
|
|
<span class="normal">1459</span>
|
|
<span class="normal">1460</span>
|
|
<span class="normal">1461</span>
|
|
<span class="normal">1462</span>
|
|
<span class="normal">1463</span>
|
|
<span class="normal">1464</span>
|
|
<span class="normal">1465</span>
|
|
<span class="normal">1466</span>
|
|
<span class="normal">1467</span>
|
|
<span class="normal">1468</span>
|
|
<span class="normal">1469</span>
|
|
<span class="normal">1470</span>
|
|
<span class="normal">1471</span>
|
|
<span class="normal">1472</span>
|
|
<span class="normal">1473</span>
|
|
<span class="normal">1474</span>
|
|
<span class="normal">1475</span>
|
|
<span class="normal">1476</span>
|
|
<span class="normal">1477</span>
|
|
<span class="normal">1478</span>
|
|
<span class="normal">1479</span>
|
|
<span class="normal">1480</span>
|
|
<span class="normal">1481</span>
|
|
<span class="normal">1482</span>
|
|
<span class="normal">1483</span>
|
|
<span class="normal">1484</span>
|
|
<span class="normal">1485</span>
|
|
<span class="normal">1486</span>
|
|
<span class="normal">1487</span>
|
|
<span class="normal">1488</span>
|
|
<span class="normal">1489</span>
|
|
<span class="normal">1490</span>
|
|
<span class="normal">1491</span>
|
|
<span class="normal">1492</span>
|
|
<span class="normal">1493</span>
|
|
<span class="normal">1494</span>
|
|
<span class="normal">1495</span>
|
|
<span class="normal">1496</span>
|
|
<span class="normal">1497</span>
|
|
<span class="normal">1498</span>
|
|
<span class="normal">1499</span>
|
|
<span class="normal">1500</span>
|
|
<span class="normal">1501</span>
|
|
<span class="normal">1502</span>
|
|
<span class="normal">1503</span>
|
|
<span class="normal">1504</span>
|
|
<span class="normal">1505</span>
|
|
<span class="normal">1506</span>
|
|
<span class="normal">1507</span>
|
|
<span class="normal">1508</span>
|
|
<span class="normal">1509</span>
|
|
<span class="normal">1510</span>
|
|
<span class="normal">1511</span>
|
|
<span class="normal">1512</span>
|
|
<span class="normal">1513</span>
|
|
<span class="normal">1514</span>
|
|
<span class="normal">1515</span>
|
|
<span class="normal">1516</span>
|
|
<span class="normal">1517</span>
|
|
<span class="normal">1518</span>
|
|
<span class="normal">1519</span>
|
|
<span class="normal">1520</span>
|
|
<span class="normal">1521</span>
|
|
<span class="normal">1522</span>
|
|
<span class="normal">1523</span>
|
|
<span class="normal">1524</span>
|
|
<span class="normal">1525</span>
|
|
<span class="normal">1526</span>
|
|
<span class="normal">1527</span>
|
|
<span class="normal">1528</span>
|
|
<span class="normal">1529</span>
|
|
<span class="normal">1530</span>
|
|
<span class="normal">1531</span>
|
|
<span class="normal">1532</span>
|
|
<span class="normal">1533</span>
|
|
<span class="normal">1534</span>
|
|
<span class="normal">1535</span>
|
|
<span class="normal">1536</span>
|
|
<span class="normal">1537</span>
|
|
<span class="normal">1538</span>
|
|
<span class="normal">1539</span>
|
|
<span class="normal">1540</span>
|
|
<span class="normal">1541</span>
|
|
<span class="normal">1542</span>
|
|
<span class="normal">1543</span>
|
|
<span class="normal">1544</span>
|
|
<span class="normal">1545</span>
|
|
<span class="normal">1546</span>
|
|
<span class="normal">1547</span>
|
|
<span class="normal">1548</span>
|
|
<span class="normal">1549</span>
|
|
<span class="normal">1550</span>
|
|
<span class="normal">1551</span>
|
|
<span class="normal">1552</span>
|
|
<span class="normal">1553</span>
|
|
<span class="normal">1554</span>
|
|
<span class="normal">1555</span>
|
|
<span class="normal">1556</span>
|
|
<span class="normal">1557</span>
|
|
<span class="normal">1558</span>
|
|
<span class="normal">1559</span>
|
|
<span class="normal">1560</span>
|
|
<span class="normal">1561</span>
|
|
<span class="normal">1562</span>
|
|
<span class="normal">1563</span>
|
|
<span class="normal">1564</span>
|
|
<span class="normal">1565</span>
|
|
<span class="normal">1566</span>
|
|
<span class="normal">1567</span>
|
|
<span class="normal">1568</span>
|
|
<span class="normal">1569</span>
|
|
<span class="normal">1570</span>
|
|
<span class="normal">1571</span>
|
|
<span class="normal">1572</span>
|
|
<span class="normal">1573</span>
|
|
<span class="normal">1574</span>
|
|
<span class="normal">1575</span>
|
|
<span class="normal">1576</span>
|
|
<span class="normal">1577</span>
|
|
<span class="normal">1578</span>
|
|
<span class="normal">1579</span>
|
|
<span class="normal">1580</span>
|
|
<span class="normal">1581</span>
|
|
<span class="normal">1582</span>
|
|
<span class="normal">1583</span>
|
|
<span class="normal">1584</span>
|
|
<span class="normal">1585</span>
|
|
<span class="normal">1586</span>
|
|
<span class="normal">1587</span>
|
|
<span class="normal">1588</span>
|
|
<span class="normal">1589</span>
|
|
<span class="normal">1590</span>
|
|
<span class="normal">1591</span>
|
|
<span class="normal">1592</span>
|
|
<span class="normal">1593</span>
|
|
<span class="normal">1594</span>
|
|
<span class="normal">1595</span>
|
|
<span class="normal">1596</span>
|
|
<span class="normal">1597</span>
|
|
<span class="normal">1598</span>
|
|
<span class="normal">1599</span>
|
|
<span class="normal">1600</span>
|
|
<span class="normal">1601</span>
|
|
<span class="normal">1602</span>
|
|
<span class="normal">1603</span>
|
|
<span class="normal">1604</span>
|
|
<span class="normal">1605</span>
|
|
<span class="normal">1606</span>
|
|
<span class="normal">1607</span>
|
|
<span class="normal">1608</span>
|
|
<span class="normal">1609</span>
|
|
<span class="normal">1610</span>
|
|
<span class="normal">1611</span>
|
|
<span class="normal">1612</span>
|
|
<span class="normal">1613</span>
|
|
<span class="normal">1614</span>
|
|
<span class="normal">1615</span>
|
|
<span class="normal">1616</span>
|
|
<span class="normal">1617</span>
|
|
<span class="normal">1618</span>
|
|
<span class="normal">1619</span>
|
|
<span class="normal">1620</span>
|
|
<span class="normal">1621</span>
|
|
<span class="normal">1622</span>
|
|
<span class="normal">1623</span>
|
|
<span class="normal">1624</span>
|
|
<span class="normal">1625</span>
|
|
<span class="normal">1626</span>
|
|
<span class="normal">1627</span>
|
|
<span class="normal">1628</span>
|
|
<span class="normal">1629</span>
|
|
<span class="normal">1630</span>
|
|
<span class="normal">1631</span>
|
|
<span class="normal">1632</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@v_args</span><span class="p">(</span><span class="n">inline</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">class</span> <span class="nc">ExpToLatex</span><span class="p">(</span><span class="n">Transformer</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Transformer to compile the DSL mathematical AST into a LaTeX math string.</span>
|
|
|
|
<span class="sd"> Converts operations, variables, derivatives, and functions into LaTeX syntax</span>
|
|
<span class="sd"> (e.g., partial derivative notation, fraction blocks, and bracket sizing)</span>
|
|
<span class="sd"> to generate mathematical report files.</span>
|
|
<span class="sd"> """</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes ExpToLatex transformer.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Dictionary mapping variable names to FieldBase objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
|
|
<span class="k">def</span> <span class="nf">arithmatic_rooted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if a variable's root operation is arithmetic.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if arithmetic-rooted.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">exproot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">exp</span><span class="o">.</span><span class="n">data</span>
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
<span class="n">exproot</span> <span class="o">=</span> <span class="s2">"something_11fasq2afa3rfzsaerqw23"</span>
|
|
|
|
<span class="k">return</span> <span class="p">((</span><span class="n">exproot</span> <span class="o">==</span> <span class="s2">"add"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">exproot</span> <span class="o">==</span> <span class="s2">"sub"</span><span class="p">)</span> <span class="ow">or</span>
|
|
<span class="p">(</span><span class="n">exproot</span> <span class="o">==</span> <span class="s2">"mul"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">exproot</span> <span class="o">==</span> <span class="s2">"div"</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span> <span class="nf">parenthise</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats a variable name, wrapping it in parentheses if it has lower priority operators.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Parenthesized LaTeX equation representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">latex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">latex</span>
|
|
<span class="n">latex_given</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">latex_given</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">" is not found"</span><span class="p">)</span>
|
|
<span class="n">latex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\mathrm{{</span><span class="si">{}</span><span class="s2">}}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="n">latex_given</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">arithmatic_rooted</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">latex_given</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">):</span>
|
|
<span class="n">latex</span> <span class="o">=</span> <span class="s2">"("</span> <span class="o">+</span> <span class="n">latex</span> <span class="o">+</span> <span class="s2">")"</span>
|
|
|
|
<span class="k">return</span> <span class="n">latex</span>
|
|
|
|
<span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numeral</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Returns LaTeX literal for numbers.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> numeral (Token): Number token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">numeral</span>
|
|
|
|
<span class="k">def</span> <span class="nf">env</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Returns LaTeX literal for environment variables.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Environment variable name token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="sa">r</span><span class="s2">"\mathrm{{</span><span class="si">{}</span><span class="s2">}}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats parentheses.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Inner LaTeX content.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Parenthesized string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats variables in LaTeX.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX variable representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parenthise</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">fluc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats fluctuation prime (u'') variables in LaTeX.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX prime variable string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parenthise</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"''"</span>
|
|
|
|
<span class="k">def</span> <span class="nf">dnx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats spatial derivatives in LaTeX (e.g. \\partial_x(u)).</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> partial (Token): Derivative operator token.</span>
|
|
<span class="sd"> b (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX partial derivative expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fmt</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\partial_{{</span><span class="si">{}</span><span class="s2">}}"</span>
|
|
<span class="n">coord</span> <span class="o">=</span> <span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="n">op</span> <span class="o">=</span> <span class="n">fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">coord</span> <span class="o">+</span> <span class="n">coord</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="p">)</span> <span class="o">></span> <span class="mi">3</span> <span class="k">else</span> <span class="n">coord</span><span class="p">)</span>
|
|
|
|
<span class="n">signature</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">eq</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">signature</span><span class="p">]</span><span class="o">.</span><span class="n">latex</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">eq</span> <span class="o">=</span> <span class="n">op</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">parenthise</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">signature</span> <span class="o">+</span> <span class="s2">" is not found: "</span> <span class="o">+</span> <span class="n">eq</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">eq</span>
|
|
|
|
<span class="k">def</span> <span class="nf">icall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats inline functions (sqr, pow3) in LaTeX.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (Token): Inline function operator.</span>
|
|
<span class="sd"> b (str): LaTeX representation of argument.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">a</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"sqr"</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">)^2"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">a</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"pow3"</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">)^3"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">fcall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats function calls in LaTeX.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> *args: Variable length arguments. The first argument is function name token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX function representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">func_name</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s1">'value'</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">function_registry</span><span class="o">.</span><span class="n">to_latex</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
|
|
<span class="k">def</span> <span class="nf">neg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats negation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> b (str): Inner LaTeX expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX negated expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(-</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats addition.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand.</span>
|
|
<span class="sd"> b (str): Right operand.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX addition expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> + </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats subtraction.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand.</span>
|
|
<span class="sd"> b (str): Right operand.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX subtraction expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> - </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">mul</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats multiplication.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand.</span>
|
|
<span class="sd"> b (str): Right operand.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX multiplication expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="k">def</span> <span class="nf">div</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats division.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand.</span>
|
|
<span class="sd"> b (str): Right operand.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX division expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> / </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
|
|
<span class="n">log</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"\log"</span>
|
|
<span class="n">exp</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"\exp"</span>
|
|
<span class="n">sqrt</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"sqrt"</span>
|
|
<span class="nb">abs</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"abs"</span>
|
|
<span class="n">rxn_rate</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"\omega"</span>
|
|
<span class="n">udf</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">:</span> <span class="n">a</span><span class="o">.</span><span class="n">value</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes ExpToLatex transformer.</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>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Dictionary mapping variable names to FieldBase objects.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1406</span>
|
|
<span class="normal">1407</span>
|
|
<span class="normal">1408</span>
|
|
<span class="normal">1409</span>
|
|
<span class="normal">1410</span>
|
|
<span class="normal">1411</span>
|
|
<span class="normal">1412</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes ExpToLatex transformer.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Dictionary mapping variable names to FieldBase objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.add" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats addition.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left operand.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right operand.</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>LaTeX addition expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1575</span>
|
|
<span class="normal">1576</span>
|
|
<span class="normal">1577</span>
|
|
<span class="normal">1578</span>
|
|
<span class="normal">1579</span>
|
|
<span class="normal">1580</span>
|
|
<span class="normal">1581</span>
|
|
<span class="normal">1582</span>
|
|
<span class="normal">1583</span>
|
|
<span class="normal">1584</span>
|
|
<span class="normal">1585</span>
|
|
<span class="normal">1586</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats addition.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand.</span>
|
|
<span class="sd"> b (str): Right operand.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX addition expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> + </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.arithmatic_rooted" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">arithmatic_rooted</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if a variable's root operation is arithmetic.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable name.</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>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if arithmetic-rooted.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1414</span>
|
|
<span class="normal">1415</span>
|
|
<span class="normal">1416</span>
|
|
<span class="normal">1417</span>
|
|
<span class="normal">1418</span>
|
|
<span class="normal">1419</span>
|
|
<span class="normal">1420</span>
|
|
<span class="normal">1421</span>
|
|
<span class="normal">1422</span>
|
|
<span class="normal">1423</span>
|
|
<span class="normal">1424</span>
|
|
<span class="normal">1425</span>
|
|
<span class="normal">1426</span>
|
|
<span class="normal">1427</span>
|
|
<span class="normal">1428</span>
|
|
<span class="normal">1429</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">arithmatic_rooted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if a variable's root operation is arithmetic.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if arithmetic-rooted.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">exproot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">exp</span><span class="o">.</span><span class="n">data</span>
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
<span class="n">exproot</span> <span class="o">=</span> <span class="s2">"something_11fasq2afa3rfzsaerqw23"</span>
|
|
|
|
<span class="k">return</span> <span class="p">((</span><span class="n">exproot</span> <span class="o">==</span> <span class="s2">"add"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">exproot</span> <span class="o">==</span> <span class="s2">"sub"</span><span class="p">)</span> <span class="ow">or</span>
|
|
<span class="p">(</span><span class="n">exproot</span> <span class="o">==</span> <span class="s2">"mul"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">exproot</span> <span class="o">==</span> <span class="s2">"div"</span><span class="p">))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.div" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">div</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats division.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left operand.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right operand.</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>LaTeX division expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1614</span>
|
|
<span class="normal">1615</span>
|
|
<span class="normal">1616</span>
|
|
<span class="normal">1617</span>
|
|
<span class="normal">1618</span>
|
|
<span class="normal">1619</span>
|
|
<span class="normal">1620</span>
|
|
<span class="normal">1621</span>
|
|
<span class="normal">1622</span>
|
|
<span class="normal">1623</span>
|
|
<span class="normal">1624</span>
|
|
<span class="normal">1625</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">div</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats division.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand.</span>
|
|
<span class="sd"> b (str): Right operand.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX division expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> / </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.dnx" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">dnx</span><span class="p">(</span><span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats spatial derivatives in LaTeX (e.g. \partial_x(u)).</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>partial</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Derivative operator token.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable token.</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>LaTeX partial derivative expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1508</span>
|
|
<span class="normal">1509</span>
|
|
<span class="normal">1510</span>
|
|
<span class="normal">1511</span>
|
|
<span class="normal">1512</span>
|
|
<span class="normal">1513</span>
|
|
<span class="normal">1514</span>
|
|
<span class="normal">1515</span>
|
|
<span class="normal">1516</span>
|
|
<span class="normal">1517</span>
|
|
<span class="normal">1518</span>
|
|
<span class="normal">1519</span>
|
|
<span class="normal">1520</span>
|
|
<span class="normal">1521</span>
|
|
<span class="normal">1522</span>
|
|
<span class="normal">1523</span>
|
|
<span class="normal">1524</span>
|
|
<span class="normal">1525</span>
|
|
<span class="normal">1526</span>
|
|
<span class="normal">1527</span>
|
|
<span class="normal">1528</span>
|
|
<span class="normal">1529</span>
|
|
<span class="normal">1530</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">dnx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats spatial derivatives in LaTeX (e.g. \\partial_x(u)).</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> partial (Token): Derivative operator token.</span>
|
|
<span class="sd"> b (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX partial derivative expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fmt</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\partial_{{</span><span class="si">{}</span><span class="s2">}}"</span>
|
|
<span class="n">coord</span> <span class="o">=</span> <span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="n">op</span> <span class="o">=</span> <span class="n">fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">coord</span> <span class="o">+</span> <span class="n">coord</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="p">)</span> <span class="o">></span> <span class="mi">3</span> <span class="k">else</span> <span class="n">coord</span><span class="p">)</span>
|
|
|
|
<span class="n">signature</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">eq</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">signature</span><span class="p">]</span><span class="o">.</span><span class="n">latex</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">eq</span> <span class="o">=</span> <span class="n">op</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">parenthise</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">signature</span> <span class="o">+</span> <span class="s2">" is not found: "</span> <span class="o">+</span> <span class="n">eq</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">eq</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.env" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">env</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Returns LaTeX literal for environment variables.</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Environment variable name token.</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>LaTeX representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1464</span>
|
|
<span class="normal">1465</span>
|
|
<span class="normal">1466</span>
|
|
<span class="normal">1467</span>
|
|
<span class="normal">1468</span>
|
|
<span class="normal">1469</span>
|
|
<span class="normal">1470</span>
|
|
<span class="normal">1471</span>
|
|
<span class="normal">1472</span>
|
|
<span class="normal">1473</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">env</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Returns LaTeX literal for environment variables.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Environment variable name token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="sa">r</span><span class="s2">"\mathrm{{</span><span class="si">{}</span><span class="s2">}}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.fcall" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">fcall</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats function calls in LaTeX.</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>*args</code></td>
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable length arguments. The first argument is function name token.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>()</code>
|
|
</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>LaTeX function representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1550</span>
|
|
<span class="normal">1551</span>
|
|
<span class="normal">1552</span>
|
|
<span class="normal">1553</span>
|
|
<span class="normal">1554</span>
|
|
<span class="normal">1555</span>
|
|
<span class="normal">1556</span>
|
|
<span class="normal">1557</span>
|
|
<span class="normal">1558</span>
|
|
<span class="normal">1559</span>
|
|
<span class="normal">1560</span>
|
|
<span class="normal">1561</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">fcall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats function calls in LaTeX.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> *args: Variable length arguments. The first argument is function name token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX function representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">func_name</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s1">'value'</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">function_registry</span><span class="o">.</span><span class="n">to_latex</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.fluc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">fluc</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats fluctuation prime (u'') variables in LaTeX.</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable token.</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>LaTeX prime variable string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1497</span>
|
|
<span class="normal">1498</span>
|
|
<span class="normal">1499</span>
|
|
<span class="normal">1500</span>
|
|
<span class="normal">1501</span>
|
|
<span class="normal">1502</span>
|
|
<span class="normal">1503</span>
|
|
<span class="normal">1504</span>
|
|
<span class="normal">1505</span>
|
|
<span class="normal">1506</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">fluc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats fluctuation prime (u'') variables in LaTeX.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX prime variable string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parenthise</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"''"</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.icall" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">icall</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats inline functions (sqr, pow3) in LaTeX.</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>a</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Inline function operator.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>LaTeX representation of argument.</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>LaTeX representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1532</span>
|
|
<span class="normal">1533</span>
|
|
<span class="normal">1534</span>
|
|
<span class="normal">1535</span>
|
|
<span class="normal">1536</span>
|
|
<span class="normal">1537</span>
|
|
<span class="normal">1538</span>
|
|
<span class="normal">1539</span>
|
|
<span class="normal">1540</span>
|
|
<span class="normal">1541</span>
|
|
<span class="normal">1542</span>
|
|
<span class="normal">1543</span>
|
|
<span class="normal">1544</span>
|
|
<span class="normal">1545</span>
|
|
<span class="normal">1546</span>
|
|
<span class="normal">1547</span>
|
|
<span class="normal">1548</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">icall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats inline functions (sqr, pow3) in LaTeX.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (Token): Inline function operator.</span>
|
|
<span class="sd"> b (str): LaTeX representation of argument.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">a</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"sqr"</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">)^2"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">a</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"pow3"</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">)^3"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(</span><span class="si">{0}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.mul" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats multiplication.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left operand.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right operand.</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>LaTeX multiplication expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1601</span>
|
|
<span class="normal">1602</span>
|
|
<span class="normal">1603</span>
|
|
<span class="normal">1604</span>
|
|
<span class="normal">1605</span>
|
|
<span class="normal">1606</span>
|
|
<span class="normal">1607</span>
|
|
<span class="normal">1608</span>
|
|
<span class="normal">1609</span>
|
|
<span class="normal">1610</span>
|
|
<span class="normal">1611</span>
|
|
<span class="normal">1612</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">mul</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats multiplication.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand.</span>
|
|
<span class="sd"> b (str): Right operand.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX multiplication expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.neg" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">neg</span><span class="p">(</span><span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats negation.</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>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Inner LaTeX expression.</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>LaTeX negated expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1563</span>
|
|
<span class="normal">1564</span>
|
|
<span class="normal">1565</span>
|
|
<span class="normal">1566</span>
|
|
<span class="normal">1567</span>
|
|
<span class="normal">1568</span>
|
|
<span class="normal">1569</span>
|
|
<span class="normal">1570</span>
|
|
<span class="normal">1571</span>
|
|
<span class="normal">1572</span>
|
|
<span class="normal">1573</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">neg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats negation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> b (str): Inner LaTeX expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX negated expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"(-</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.number" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">number</span><span class="p">(</span><span class="n">numeral</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Returns LaTeX literal for numbers.</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>numeral</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Number token.</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>LaTeX representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1453</span>
|
|
<span class="normal">1454</span>
|
|
<span class="normal">1455</span>
|
|
<span class="normal">1456</span>
|
|
<span class="normal">1457</span>
|
|
<span class="normal">1458</span>
|
|
<span class="normal">1459</span>
|
|
<span class="normal">1460</span>
|
|
<span class="normal">1461</span>
|
|
<span class="normal">1462</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numeral</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Returns LaTeX literal for numbers.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> numeral (Token): Number token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">numeral</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.paren" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">paren</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats parentheses.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Inner LaTeX content.</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>Parenthesized string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1475</span>
|
|
<span class="normal">1476</span>
|
|
<span class="normal">1477</span>
|
|
<span class="normal">1478</span>
|
|
<span class="normal">1479</span>
|
|
<span class="normal">1480</span>
|
|
<span class="normal">1481</span>
|
|
<span class="normal">1482</span>
|
|
<span class="normal">1483</span>
|
|
<span class="normal">1484</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats parentheses.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Inner LaTeX content.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Parenthesized string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.parenthise" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">parenthise</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats a variable name, wrapping it in parentheses if it has lower priority operators.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable name.</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>Parenthesized LaTeX equation representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1431</span>
|
|
<span class="normal">1432</span>
|
|
<span class="normal">1433</span>
|
|
<span class="normal">1434</span>
|
|
<span class="normal">1435</span>
|
|
<span class="normal">1436</span>
|
|
<span class="normal">1437</span>
|
|
<span class="normal">1438</span>
|
|
<span class="normal">1439</span>
|
|
<span class="normal">1440</span>
|
|
<span class="normal">1441</span>
|
|
<span class="normal">1442</span>
|
|
<span class="normal">1443</span>
|
|
<span class="normal">1444</span>
|
|
<span class="normal">1445</span>
|
|
<span class="normal">1446</span>
|
|
<span class="normal">1447</span>
|
|
<span class="normal">1448</span>
|
|
<span class="normal">1449</span>
|
|
<span class="normal">1450</span>
|
|
<span class="normal">1451</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">parenthise</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats a variable name, wrapping it in parentheses if it has lower priority operators.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Parenthesized LaTeX equation representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">latex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">latex</span>
|
|
<span class="n">latex_given</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">latex_given</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">" is not found"</span><span class="p">)</span>
|
|
<span class="n">latex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\mathrm{{</span><span class="si">{}</span><span class="s2">}}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="n">latex_given</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">arithmatic_rooted</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">latex_given</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">):</span>
|
|
<span class="n">latex</span> <span class="o">=</span> <span class="s2">"("</span> <span class="o">+</span> <span class="n">latex</span> <span class="o">+</span> <span class="s2">")"</span>
|
|
|
|
<span class="k">return</span> <span class="n">latex</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.sub" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">sub</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats subtraction.</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>a</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left operand.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right operand.</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>LaTeX subtraction expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1588</span>
|
|
<span class="normal">1589</span>
|
|
<span class="normal">1590</span>
|
|
<span class="normal">1591</span>
|
|
<span class="normal">1592</span>
|
|
<span class="normal">1593</span>
|
|
<span class="normal">1594</span>
|
|
<span class="normal">1595</span>
|
|
<span class="normal">1596</span>
|
|
<span class="normal">1597</span>
|
|
<span class="normal">1598</span>
|
|
<span class="normal">1599</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats subtraction.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (str): Left operand.</span>
|
|
<span class="sd"> b (str): Right operand.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX subtraction expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fcode</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> - </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">fcode</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ExpToLatex.var" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">var</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Formats variables in LaTeX.</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable token.</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>LaTeX variable representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1486</span>
|
|
<span class="normal">1487</span>
|
|
<span class="normal">1488</span>
|
|
<span class="normal">1489</span>
|
|
<span class="normal">1490</span>
|
|
<span class="normal">1491</span>
|
|
<span class="normal">1492</span>
|
|
<span class="normal">1493</span>
|
|
<span class="normal">1494</span>
|
|
<span class="normal">1495</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Formats variables in LaTeX.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: LaTeX variable representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parenthise</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.Field" class="doc doc-heading">
|
|
<code>Field</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code></p>
|
|
|
|
|
|
<p>일반 대입 계산 변수를 관리하며, 3차원 격자점 루프 코드 생성을 담당하는 핵심 클래스입니다.
|
|
SymPy 최적화 및 CSE 적용 코드를 루프 본문에 결합합니다.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2012</span>
|
|
<span class="normal">2013</span>
|
|
<span class="normal">2014</span>
|
|
<span class="normal">2015</span>
|
|
<span class="normal">2016</span>
|
|
<span class="normal">2017</span>
|
|
<span class="normal">2018</span>
|
|
<span class="normal">2019</span>
|
|
<span class="normal">2020</span>
|
|
<span class="normal">2021</span>
|
|
<span class="normal">2022</span>
|
|
<span class="normal">2023</span>
|
|
<span class="normal">2024</span>
|
|
<span class="normal">2025</span>
|
|
<span class="normal">2026</span>
|
|
<span class="normal">2027</span>
|
|
<span class="normal">2028</span>
|
|
<span class="normal">2029</span>
|
|
<span class="normal">2030</span>
|
|
<span class="normal">2031</span>
|
|
<span class="normal">2032</span>
|
|
<span class="normal">2033</span>
|
|
<span class="normal">2034</span>
|
|
<span class="normal">2035</span>
|
|
<span class="normal">2036</span>
|
|
<span class="normal">2037</span>
|
|
<span class="normal">2038</span>
|
|
<span class="normal">2039</span>
|
|
<span class="normal">2040</span>
|
|
<span class="normal">2041</span>
|
|
<span class="normal">2042</span>
|
|
<span class="normal">2043</span>
|
|
<span class="normal">2044</span>
|
|
<span class="normal">2045</span>
|
|
<span class="normal">2046</span>
|
|
<span class="normal">2047</span>
|
|
<span class="normal">2048</span>
|
|
<span class="normal">2049</span>
|
|
<span class="normal">2050</span>
|
|
<span class="normal">2051</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">Field</span><span class="p">(</span><span class="n">FieldBase</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""일반 대입 계산 변수를 관리하며, 3차원 격자점 루프 코드 생성을 담당하는 핵심 클래스입니다.</span>
|
|
<span class="sd"> SymPy 최적화 및 CSE 적용 코드를 루프 본문에 결합합니다.</span>
|
|
<span class="sd"> """</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">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes Field properties and inspects expression details.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Calculated variable name.</span>
|
|
<span class="sd"> attr (dict): Attribute configuration tags.</span>
|
|
<span class="sd"> exp (Tree): Mathematical equation AST subtree.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">Field</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">attr</span> <span class="o">=</span> <span class="n">attr</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fluc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">derivs</span> <span class="o">=</span> <span class="n">ExpInspector</span><span class="o">.</span><span class="n">inspect</span><span class="p">(</span><span class="n">exp</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">" = "</span> <span class="o">+</span> <span class="n">ExpToCode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex_given</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"latex"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex_given</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="n">ExpToLatex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex_given</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exporter</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span><span class="p">[</span><span class="s2">"export"</span><span class="p">]:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exporter</span> <span class="o">=</span> <span class="n">FieldExporter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span> <span class="nf">export_on</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if file exporting is enabled.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if an exporter is configured.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">exporter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.Field.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes Field properties and inspects expression details.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Calculated variable name.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>attr</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Attribute configuration tags.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>exp</code></td>
|
|
<td>
|
|
<code>Tree</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Mathematical equation AST subtree.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Global variable registry dictionary.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2017</span>
|
|
<span class="normal">2018</span>
|
|
<span class="normal">2019</span>
|
|
<span class="normal">2020</span>
|
|
<span class="normal">2021</span>
|
|
<span class="normal">2022</span>
|
|
<span class="normal">2023</span>
|
|
<span class="normal">2024</span>
|
|
<span class="normal">2025</span>
|
|
<span class="normal">2026</span>
|
|
<span class="normal">2027</span>
|
|
<span class="normal">2028</span>
|
|
<span class="normal">2029</span>
|
|
<span class="normal">2030</span>
|
|
<span class="normal">2031</span>
|
|
<span class="normal">2032</span>
|
|
<span class="normal">2033</span>
|
|
<span class="normal">2034</span>
|
|
<span class="normal">2035</span>
|
|
<span class="normal">2036</span>
|
|
<span class="normal">2037</span>
|
|
<span class="normal">2038</span>
|
|
<span class="normal">2039</span>
|
|
<span class="normal">2040</span>
|
|
<span class="normal">2041</span>
|
|
<span class="normal">2042</span>
|
|
<span class="normal">2043</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">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes Field properties and inspects expression details.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Calculated variable name.</span>
|
|
<span class="sd"> attr (dict): Attribute configuration tags.</span>
|
|
<span class="sd"> exp (Tree): Mathematical equation AST subtree.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">Field</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">attr</span> <span class="o">=</span> <span class="n">attr</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fluc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">derivs</span> <span class="o">=</span> <span class="n">ExpInspector</span><span class="o">.</span><span class="n">inspect</span><span class="p">(</span><span class="n">exp</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">" = "</span> <span class="o">+</span> <span class="n">ExpToCode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex_given</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"latex"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex_given</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="n">ExpToLatex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex_given</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exporter</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span><span class="p">[</span><span class="s2">"export"</span><span class="p">]:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exporter</span> <span class="o">=</span> <span class="n">FieldExporter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.Field.export_on" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">export_on</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if file exporting is enabled.</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>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if an exporter is configured.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2045</span>
|
|
<span class="normal">2046</span>
|
|
<span class="normal">2047</span>
|
|
<span class="normal">2048</span>
|
|
<span class="normal">2049</span>
|
|
<span class="normal">2050</span>
|
|
<span class="normal">2051</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">export_on</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if file exporting is enabled.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if an exporter is configured.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">exporter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.FieldBase" class="doc doc-heading">
|
|
<code>FieldBase</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><a class="autorefs autorefs-internal" title="post.DependencyNode" href="#post.DependencyNode">DependencyNode</a></code></p>
|
|
|
|
|
|
<p>모든 물리 필드 객체의 최상위 기본 클래스로서 공통 데이터 구조를 정의합니다.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1926</span>
|
|
<span class="normal">1927</span>
|
|
<span class="normal">1928</span>
|
|
<span class="normal">1929</span>
|
|
<span class="normal">1930</span>
|
|
<span class="normal">1931</span>
|
|
<span class="normal">1932</span>
|
|
<span class="normal">1933</span>
|
|
<span class="normal">1934</span>
|
|
<span class="normal">1935</span>
|
|
<span class="normal">1936</span>
|
|
<span class="normal">1937</span>
|
|
<span class="normal">1938</span>
|
|
<span class="normal">1939</span>
|
|
<span class="normal">1940</span>
|
|
<span class="normal">1941</span>
|
|
<span class="normal">1942</span>
|
|
<span class="normal">1943</span>
|
|
<span class="normal">1944</span>
|
|
<span class="normal">1945</span>
|
|
<span class="normal">1946</span>
|
|
<span class="normal">1947</span>
|
|
<span class="normal">1948</span>
|
|
<span class="normal">1949</span>
|
|
<span class="normal">1950</span>
|
|
<span class="normal">1951</span>
|
|
<span class="normal">1952</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">FieldBase</span><span class="p">(</span><span class="n">DependencyNode</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""모든 물리 필드 객체의 최상위 기본 클래스로서 공통 데이터 구조를 정의합니다."""</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">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes FieldBase properties.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">FieldBase</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">prime</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shape</span> <span class="o">=</span> <span class="s2">"nxp,nyp,nzp"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dim</span> <span class="o">=</span> <span class="s2">":,:,:"</span>
|
|
|
|
<span class="k">def</span> <span class="nf">export_on</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if disk exporting is enabled for this field.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: Always False for the base field class.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""String representation of the field (returns variable name)."""</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FieldBase.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes FieldBase properties.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable name.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Global variable registry dictionary.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1929</span>
|
|
<span class="normal">1930</span>
|
|
<span class="normal">1931</span>
|
|
<span class="normal">1932</span>
|
|
<span class="normal">1933</span>
|
|
<span class="normal">1934</span>
|
|
<span class="normal">1935</span>
|
|
<span class="normal">1936</span>
|
|
<span class="normal">1937</span>
|
|
<span class="normal">1938</span>
|
|
<span class="normal">1939</span>
|
|
<span class="normal">1940</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">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes FieldBase properties.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">FieldBase</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">prime</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shape</span> <span class="o">=</span> <span class="s2">"nxp,nyp,nzp"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dim</span> <span class="o">=</span> <span class="s2">":,:,:"</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FieldBase.__repr__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>String representation of the field (returns variable name).</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1950</span>
|
|
<span class="normal">1951</span>
|
|
<span class="normal">1952</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""String representation of the field (returns variable name)."""</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FieldBase.export_on" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">export_on</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if disk exporting is enabled for this field.</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>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Always False for the base field class.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1942</span>
|
|
<span class="normal">1943</span>
|
|
<span class="normal">1944</span>
|
|
<span class="normal">1945</span>
|
|
<span class="normal">1946</span>
|
|
<span class="normal">1947</span>
|
|
<span class="normal">1948</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">export_on</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if disk exporting is enabled for this field.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: Always False for the base field class.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.FieldExporter" class="doc doc-heading">
|
|
<code>FieldExporter</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>물리 필드 데이터를 병렬 분산 디스크 시스템으로 직접 추출(Export)하는 고성능 MPI-IO 서브루틴 블록을
|
|
정의하는 도메인 데이터 클래스입니다.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1955</span>
|
|
<span class="normal">1956</span>
|
|
<span class="normal">1957</span>
|
|
<span class="normal">1958</span>
|
|
<span class="normal">1959</span>
|
|
<span class="normal">1960</span>
|
|
<span class="normal">1961</span>
|
|
<span class="normal">1962</span>
|
|
<span class="normal">1963</span>
|
|
<span class="normal">1964</span>
|
|
<span class="normal">1965</span>
|
|
<span class="normal">1966</span>
|
|
<span class="normal">1967</span>
|
|
<span class="normal">1968</span>
|
|
<span class="normal">1969</span>
|
|
<span class="normal">1970</span>
|
|
<span class="normal">1971</span>
|
|
<span class="normal">1972</span>
|
|
<span class="normal">1973</span>
|
|
<span class="normal">1974</span>
|
|
<span class="normal">1975</span>
|
|
<span class="normal">1976</span>
|
|
<span class="normal">1977</span>
|
|
<span class="normal">1978</span>
|
|
<span class="normal">1979</span>
|
|
<span class="normal">1980</span>
|
|
<span class="normal">1981</span>
|
|
<span class="normal">1982</span>
|
|
<span class="normal">1983</span>
|
|
<span class="normal">1984</span>
|
|
<span class="normal">1985</span>
|
|
<span class="normal">1986</span>
|
|
<span class="normal">1987</span>
|
|
<span class="normal">1988</span>
|
|
<span class="normal">1989</span>
|
|
<span class="normal">1990</span>
|
|
<span class="normal">1991</span>
|
|
<span class="normal">1992</span>
|
|
<span class="normal">1993</span>
|
|
<span class="normal">1994</span>
|
|
<span class="normal">1995</span>
|
|
<span class="normal">1996</span>
|
|
<span class="normal">1997</span>
|
|
<span class="normal">1998</span>
|
|
<span class="normal">1999</span>
|
|
<span class="normal">2000</span>
|
|
<span class="normal">2001</span>
|
|
<span class="normal">2002</span>
|
|
<span class="normal">2003</span>
|
|
<span class="normal">2004</span>
|
|
<span class="normal">2005</span>
|
|
<span class="normal">2006</span>
|
|
<span class="normal">2007</span>
|
|
<span class="normal">2008</span>
|
|
<span class="normal">2009</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">FieldExporter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""물리 필드 데이터를 병렬 분산 디스크 시스템으로 직접 추출(Export)하는 고성능 MPI-IO 서브루틴 블록을 </span>
|
|
<span class="sd"> 정의하는 도메인 데이터 클래스입니다.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">mpi_io_decl</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! field exporter common</span>
|
|
<span class="s2">integer(kind=MPI_OFFSET_KIND) :: offset</span>
|
|
<span class="s2">"""</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">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">parent</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes FieldExporter with MPI configurations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Field exporter name.</span>
|
|
<span class="sd"> attr (dict): Attributes dictionary containing slice coordinates (e.g. xs, xe).</span>
|
|
<span class="sd"> parent (Field): Parent field object owning this exporter.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">attr</span> <span class="o">=</span> <span class="n">attr</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"xs"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"xe"</span><span class="p">,</span> <span class="s2">"nxp"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"ys"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"ye"</span><span class="p">,</span> <span class="s2">"nyp"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"zs"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"ze"</span><span class="p">,</span> <span class="s2">"nzp"</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"field_name"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"len_xpts"</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'xe'</span><span class="p">]</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'xs'</span><span class="p">]</span><span class="si">}</span><span class="s2"> + 1)"</span><span class="p">)</span>
|
|
|
|
<span class="n">fmt_xpts_init</span> <span class="o">=</span> <span class="s1">'''</span>
|
|
<span class="s1">do i = {{ xs }}, {{ xe }}</span>
|
|
<span class="s1">{{ field_name }}_xpts(i-{{ xs }}+1) = i</span>
|
|
<span class="s1">end do</span>
|
|
<span class="s1">'''</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"xpts_init"</span><span class="p">,</span> <span class="n">Template</span><span class="p">(</span><span class="n">fmt_xpts_init</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">))</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="c1"># Sampling at listed x coordinates</span>
|
|
<span class="n">fmt_xpts_init_list</span> <span class="o">=</span> <span class="s2">"{{ field_name }}_xpts = (/ {{ list_xpts }} /)"</span>
|
|
|
|
<span class="n">raw_xpts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"xpts"</span><span class="p">]</span>
|
|
<span class="n">int_xpts</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">raw_xpts</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
|
|
<span class="n">len_xpts</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">int_xpts</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"len_xpts"</span><span class="p">]</span> <span class="o">=</span> <span class="n">len_xpts</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"list_xpts"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">int_xpts</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"xpts_init"</span><span class="p">]</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">fmt_xpts_init_list</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">use_subarray</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"xpts"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</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="post.FieldExporter.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">parent</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes FieldExporter with MPI configurations.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Field exporter name.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>attr</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Attributes dictionary containing slice coordinates (e.g. xs, xe).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>parent</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.Field" href="#post.Field">Field</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Parent field object owning this exporter.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1964</span>
|
|
<span class="normal">1965</span>
|
|
<span class="normal">1966</span>
|
|
<span class="normal">1967</span>
|
|
<span class="normal">1968</span>
|
|
<span class="normal">1969</span>
|
|
<span class="normal">1970</span>
|
|
<span class="normal">1971</span>
|
|
<span class="normal">1972</span>
|
|
<span class="normal">1973</span>
|
|
<span class="normal">1974</span>
|
|
<span class="normal">1975</span>
|
|
<span class="normal">1976</span>
|
|
<span class="normal">1977</span>
|
|
<span class="normal">1978</span>
|
|
<span class="normal">1979</span>
|
|
<span class="normal">1980</span>
|
|
<span class="normal">1981</span>
|
|
<span class="normal">1982</span>
|
|
<span class="normal">1983</span>
|
|
<span class="normal">1984</span>
|
|
<span class="normal">1985</span>
|
|
<span class="normal">1986</span>
|
|
<span class="normal">1987</span>
|
|
<span class="normal">1988</span>
|
|
<span class="normal">1989</span>
|
|
<span class="normal">1990</span>
|
|
<span class="normal">1991</span>
|
|
<span class="normal">1992</span>
|
|
<span class="normal">1993</span>
|
|
<span class="normal">1994</span>
|
|
<span class="normal">1995</span>
|
|
<span class="normal">1996</span>
|
|
<span class="normal">1997</span>
|
|
<span class="normal">1998</span>
|
|
<span class="normal">1999</span>
|
|
<span class="normal">2000</span>
|
|
<span class="normal">2001</span>
|
|
<span class="normal">2002</span>
|
|
<span class="normal">2003</span>
|
|
<span class="normal">2004</span>
|
|
<span class="normal">2005</span>
|
|
<span class="normal">2006</span>
|
|
<span class="normal">2007</span>
|
|
<span class="normal">2008</span>
|
|
<span class="normal">2009</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">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">parent</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes FieldExporter with MPI configurations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Field exporter name.</span>
|
|
<span class="sd"> attr (dict): Attributes dictionary containing slice coordinates (e.g. xs, xe).</span>
|
|
<span class="sd"> parent (Field): Parent field object owning this exporter.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">attr</span> <span class="o">=</span> <span class="n">attr</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"xs"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"xe"</span><span class="p">,</span> <span class="s2">"nxp"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"ys"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"ye"</span><span class="p">,</span> <span class="s2">"nyp"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"zs"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"ze"</span><span class="p">,</span> <span class="s2">"nzp"</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"field_name"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"len_xpts"</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'xe'</span><span class="p">]</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s1">'xs'</span><span class="p">]</span><span class="si">}</span><span class="s2"> + 1)"</span><span class="p">)</span>
|
|
|
|
<span class="n">fmt_xpts_init</span> <span class="o">=</span> <span class="s1">'''</span>
|
|
<span class="s1">do i = {{ xs }}, {{ xe }}</span>
|
|
<span class="s1">{{ field_name }}_xpts(i-{{ xs }}+1) = i</span>
|
|
<span class="s1">end do</span>
|
|
<span class="s1">'''</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s2">"xpts_init"</span><span class="p">,</span> <span class="n">Template</span><span class="p">(</span><span class="n">fmt_xpts_init</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">))</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="c1"># Sampling at listed x coordinates</span>
|
|
<span class="n">fmt_xpts_init_list</span> <span class="o">=</span> <span class="s2">"{{ field_name }}_xpts = (/ {{ list_xpts }} /)"</span>
|
|
|
|
<span class="n">raw_xpts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"xpts"</span><span class="p">]</span>
|
|
<span class="n">int_xpts</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">raw_xpts</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
|
|
<span class="n">len_xpts</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">int_xpts</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"len_xpts"</span><span class="p">]</span> <span class="o">=</span> <span class="n">len_xpts</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"list_xpts"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">int_xpts</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"xpts_init"</span><span class="p">]</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">fmt_xpts_init_list</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">use_subarray</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"xpts"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.FluctuationField" class="doc doc-heading">
|
|
<code>FluctuationField</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code></p>
|
|
|
|
|
|
<p>물리 필드의 난류 변동 성분(Fluctuation, u' = u - <u_w>)을 계산하기 위한 변수 클래스입니다.
|
|
수식 내의 u' 기호를 평균량과의 차이 수식으로 팽창하여 할당합니다.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2054</span>
|
|
<span class="normal">2055</span>
|
|
<span class="normal">2056</span>
|
|
<span class="normal">2057</span>
|
|
<span class="normal">2058</span>
|
|
<span class="normal">2059</span>
|
|
<span class="normal">2060</span>
|
|
<span class="normal">2061</span>
|
|
<span class="normal">2062</span>
|
|
<span class="normal">2063</span>
|
|
<span class="normal">2064</span>
|
|
<span class="normal">2065</span>
|
|
<span class="normal">2066</span>
|
|
<span class="normal">2067</span>
|
|
<span class="normal">2068</span>
|
|
<span class="normal">2069</span>
|
|
<span class="normal">2070</span>
|
|
<span class="normal">2071</span>
|
|
<span class="normal">2072</span>
|
|
<span class="normal">2073</span>
|
|
<span class="normal">2074</span>
|
|
<span class="normal">2075</span>
|
|
<span class="normal">2076</span>
|
|
<span class="normal">2077</span>
|
|
<span class="normal">2078</span>
|
|
<span class="normal">2079</span>
|
|
<span class="normal">2080</span>
|
|
<span class="normal">2081</span>
|
|
<span class="normal">2082</span>
|
|
<span class="normal">2083</span>
|
|
<span class="normal">2084</span>
|
|
<span class="normal">2085</span>
|
|
<span class="normal">2086</span>
|
|
<span class="normal">2087</span>
|
|
<span class="normal">2088</span>
|
|
<span class="normal">2089</span>
|
|
<span class="normal">2090</span>
|
|
<span class="normal">2091</span>
|
|
<span class="normal">2092</span>
|
|
<span class="normal">2093</span>
|
|
<span class="normal">2094</span>
|
|
<span class="normal">2095</span>
|
|
<span class="normal">2096</span>
|
|
<span class="normal">2097</span>
|
|
<span class="normal">2098</span>
|
|
<span class="normal">2099</span>
|
|
<span class="normal">2100</span>
|
|
<span class="normal">2101</span>
|
|
<span class="normal">2102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">FluctuationField</span><span class="p">(</span><span class="n">FieldBase</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""물리 필드의 난류 변동 성분(Fluctuation, u' = u - <u_w>)을 계산하기 위한 변수 클래스입니다.</span>
|
|
<span class="sd"> 수식 내의 u' 기호를 평균량과의 차이 수식으로 팽창하여 할당합니다.</span>
|
|
<span class="sd"> """</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">w</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">fset</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes FluctuationField.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> w (str/None): Weight variable name or average identifier.</span>
|
|
<span class="sd"> field (str): Base variable name (e.g. 'u').</span>
|
|
<span class="sd"> fset (set): Active fluctuation dependency names.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">FluctuationField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">field</span><span class="p">),</span> <span class="n">fdict</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">w</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">w</span> <span class="o">=</span> <span class="n">w</span> <span class="o">+</span> <span class="s2">"_"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">w</span> <span class="o">=</span> <span class="s2">""</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">field</span> <span class="o">=</span> <span class="n">fdict</span><span class="p">[</span><span class="n">field</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">dep</span> <span class="o">-</span> <span class="n">fset</span>
|
|
<span class="k">for</span> <span class="n">df</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">dep</span> <span class="o">&</span> <span class="n">fset</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">df</span><span class="p">))</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="n">ExpToCode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">is_fluctuation</span><span class="p">():</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">w</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">" = "</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates dynamic fluctuation field naming key.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> w (str/None): Average weight suffix.</span>
|
|
<span class="sd"> field (str): Base field name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Generated composite fluctuation variable name.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">w</span><span class="p">:</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">____</span><span class="si">{}</span><span class="s2">_avg"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">w</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">____avg"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">name</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FluctuationField.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">fset</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes FluctuationField.</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>w</code></td>
|
|
<td>
|
|
<code>str / None</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Weight variable name or average identifier.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>field</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Base variable name (e.g. 'u').</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fset</code></td>
|
|
<td>
|
|
<code>set</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Active fluctuation dependency names.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Global variable registry.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2059</span>
|
|
<span class="normal">2060</span>
|
|
<span class="normal">2061</span>
|
|
<span class="normal">2062</span>
|
|
<span class="normal">2063</span>
|
|
<span class="normal">2064</span>
|
|
<span class="normal">2065</span>
|
|
<span class="normal">2066</span>
|
|
<span class="normal">2067</span>
|
|
<span class="normal">2068</span>
|
|
<span class="normal">2069</span>
|
|
<span class="normal">2070</span>
|
|
<span class="normal">2071</span>
|
|
<span class="normal">2072</span>
|
|
<span class="normal">2073</span>
|
|
<span class="normal">2074</span>
|
|
<span class="normal">2075</span>
|
|
<span class="normal">2076</span>
|
|
<span class="normal">2077</span>
|
|
<span class="normal">2078</span>
|
|
<span class="normal">2079</span>
|
|
<span class="normal">2080</span>
|
|
<span class="normal">2081</span>
|
|
<span class="normal">2082</span>
|
|
<span class="normal">2083</span>
|
|
<span class="normal">2084</span>
|
|
<span class="normal">2085</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">w</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">fset</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes FluctuationField.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> w (str/None): Weight variable name or average identifier.</span>
|
|
<span class="sd"> field (str): Base variable name (e.g. 'u').</span>
|
|
<span class="sd"> fset (set): Active fluctuation dependency names.</span>
|
|
<span class="sd"> fdict (dict): Global variable registry.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">FluctuationField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">field</span><span class="p">),</span> <span class="n">fdict</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">w</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">w</span> <span class="o">=</span> <span class="n">w</span> <span class="o">+</span> <span class="s2">"_"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">w</span> <span class="o">=</span> <span class="s2">""</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">field</span> <span class="o">=</span> <span class="n">fdict</span><span class="p">[</span><span class="n">field</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">dep</span> <span class="o">-</span> <span class="n">fset</span>
|
|
<span class="k">for</span> <span class="n">df</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">dep</span> <span class="o">&</span> <span class="n">fset</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dep</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">df</span><span class="p">))</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="n">ExpToCode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">is_fluctuation</span><span class="p">():</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">w</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">" = "</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FluctuationField.id" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="nb">id</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span></code>
|
|
|
|
<span class="doc doc-labels">
|
|
<small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
|
|
</span>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates dynamic fluctuation field naming key.</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>w</code></td>
|
|
<td>
|
|
<code>str / None</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Average weight suffix.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>field</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Base field name.</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>Generated composite fluctuation variable name.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2087</span>
|
|
<span class="normal">2088</span>
|
|
<span class="normal">2089</span>
|
|
<span class="normal">2090</span>
|
|
<span class="normal">2091</span>
|
|
<span class="normal">2092</span>
|
|
<span class="normal">2093</span>
|
|
<span class="normal">2094</span>
|
|
<span class="normal">2095</span>
|
|
<span class="normal">2096</span>
|
|
<span class="normal">2097</span>
|
|
<span class="normal">2098</span>
|
|
<span class="normal">2099</span>
|
|
<span class="normal">2100</span>
|
|
<span class="normal">2101</span>
|
|
<span class="normal">2102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates dynamic fluctuation field naming key.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> w (str/None): Average weight suffix.</span>
|
|
<span class="sd"> field (str): Base field name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Generated composite fluctuation variable name.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">w</span><span class="p">:</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">____</span><span class="si">{}</span><span class="s2">_avg"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">w</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">____avg"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">name</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.FortranCodeGenerator" class="doc doc-heading">
|
|
<code>FortranCodeGenerator</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Visitor implementation that decouples code generation from domain AST node details.</p>
|
|
<p>Implements a classic visitor dispatch pattern that matches class names of the Field objects
|
|
to their code generation routines (e.g. generate_code, generate_decl, generate_alloc, generate_free).</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">335</span>
|
|
<span class="normal">336</span>
|
|
<span class="normal">337</span>
|
|
<span class="normal">338</span>
|
|
<span class="normal">339</span>
|
|
<span class="normal">340</span>
|
|
<span class="normal">341</span>
|
|
<span class="normal">342</span>
|
|
<span class="normal">343</span>
|
|
<span class="normal">344</span>
|
|
<span class="normal">345</span>
|
|
<span class="normal">346</span>
|
|
<span class="normal">347</span>
|
|
<span class="normal">348</span>
|
|
<span class="normal">349</span>
|
|
<span class="normal">350</span>
|
|
<span class="normal">351</span>
|
|
<span class="normal">352</span>
|
|
<span class="normal">353</span>
|
|
<span class="normal">354</span>
|
|
<span class="normal">355</span>
|
|
<span class="normal">356</span>
|
|
<span class="normal">357</span>
|
|
<span class="normal">358</span>
|
|
<span class="normal">359</span>
|
|
<span class="normal">360</span>
|
|
<span class="normal">361</span>
|
|
<span class="normal">362</span>
|
|
<span class="normal">363</span>
|
|
<span class="normal">364</span>
|
|
<span class="normal">365</span>
|
|
<span class="normal">366</span>
|
|
<span class="normal">367</span>
|
|
<span class="normal">368</span>
|
|
<span class="normal">369</span>
|
|
<span class="normal">370</span>
|
|
<span class="normal">371</span>
|
|
<span class="normal">372</span>
|
|
<span class="normal">373</span>
|
|
<span class="normal">374</span>
|
|
<span class="normal">375</span>
|
|
<span class="normal">376</span>
|
|
<span class="normal">377</span>
|
|
<span class="normal">378</span>
|
|
<span class="normal">379</span>
|
|
<span class="normal">380</span>
|
|
<span class="normal">381</span>
|
|
<span class="normal">382</span>
|
|
<span class="normal">383</span>
|
|
<span class="normal">384</span>
|
|
<span class="normal">385</span>
|
|
<span class="normal">386</span>
|
|
<span class="normal">387</span>
|
|
<span class="normal">388</span>
|
|
<span class="normal">389</span>
|
|
<span class="normal">390</span>
|
|
<span class="normal">391</span>
|
|
<span class="normal">392</span>
|
|
<span class="normal">393</span>
|
|
<span class="normal">394</span>
|
|
<span class="normal">395</span>
|
|
<span class="normal">396</span>
|
|
<span class="normal">397</span>
|
|
<span class="normal">398</span>
|
|
<span class="normal">399</span>
|
|
<span class="normal">400</span>
|
|
<span class="normal">401</span>
|
|
<span class="normal">402</span>
|
|
<span class="normal">403</span>
|
|
<span class="normal">404</span>
|
|
<span class="normal">405</span>
|
|
<span class="normal">406</span>
|
|
<span class="normal">407</span>
|
|
<span class="normal">408</span>
|
|
<span class="normal">409</span>
|
|
<span class="normal">410</span>
|
|
<span class="normal">411</span>
|
|
<span class="normal">412</span>
|
|
<span class="normal">413</span>
|
|
<span class="normal">414</span>
|
|
<span class="normal">415</span>
|
|
<span class="normal">416</span>
|
|
<span class="normal">417</span>
|
|
<span class="normal">418</span>
|
|
<span class="normal">419</span>
|
|
<span class="normal">420</span>
|
|
<span class="normal">421</span>
|
|
<span class="normal">422</span>
|
|
<span class="normal">423</span>
|
|
<span class="normal">424</span>
|
|
<span class="normal">425</span>
|
|
<span class="normal">426</span>
|
|
<span class="normal">427</span>
|
|
<span class="normal">428</span>
|
|
<span class="normal">429</span>
|
|
<span class="normal">430</span>
|
|
<span class="normal">431</span>
|
|
<span class="normal">432</span>
|
|
<span class="normal">433</span>
|
|
<span class="normal">434</span>
|
|
<span class="normal">435</span>
|
|
<span class="normal">436</span>
|
|
<span class="normal">437</span>
|
|
<span class="normal">438</span>
|
|
<span class="normal">439</span>
|
|
<span class="normal">440</span>
|
|
<span class="normal">441</span>
|
|
<span class="normal">442</span>
|
|
<span class="normal">443</span>
|
|
<span class="normal">444</span>
|
|
<span class="normal">445</span>
|
|
<span class="normal">446</span>
|
|
<span class="normal">447</span>
|
|
<span class="normal">448</span>
|
|
<span class="normal">449</span>
|
|
<span class="normal">450</span>
|
|
<span class="normal">451</span>
|
|
<span class="normal">452</span>
|
|
<span class="normal">453</span>
|
|
<span class="normal">454</span>
|
|
<span class="normal">455</span>
|
|
<span class="normal">456</span>
|
|
<span class="normal">457</span>
|
|
<span class="normal">458</span>
|
|
<span class="normal">459</span>
|
|
<span class="normal">460</span>
|
|
<span class="normal">461</span>
|
|
<span class="normal">462</span>
|
|
<span class="normal">463</span>
|
|
<span class="normal">464</span>
|
|
<span class="normal">465</span>
|
|
<span class="normal">466</span>
|
|
<span class="normal">467</span>
|
|
<span class="normal">468</span>
|
|
<span class="normal">469</span>
|
|
<span class="normal">470</span>
|
|
<span class="normal">471</span>
|
|
<span class="normal">472</span>
|
|
<span class="normal">473</span>
|
|
<span class="normal">474</span>
|
|
<span class="normal">475</span>
|
|
<span class="normal">476</span>
|
|
<span class="normal">477</span>
|
|
<span class="normal">478</span>
|
|
<span class="normal">479</span>
|
|
<span class="normal">480</span>
|
|
<span class="normal">481</span>
|
|
<span class="normal">482</span>
|
|
<span class="normal">483</span>
|
|
<span class="normal">484</span>
|
|
<span class="normal">485</span>
|
|
<span class="normal">486</span>
|
|
<span class="normal">487</span>
|
|
<span class="normal">488</span>
|
|
<span class="normal">489</span>
|
|
<span class="normal">490</span>
|
|
<span class="normal">491</span>
|
|
<span class="normal">492</span>
|
|
<span class="normal">493</span>
|
|
<span class="normal">494</span>
|
|
<span class="normal">495</span>
|
|
<span class="normal">496</span>
|
|
<span class="normal">497</span>
|
|
<span class="normal">498</span>
|
|
<span class="normal">499</span>
|
|
<span class="normal">500</span>
|
|
<span class="normal">501</span>
|
|
<span class="normal">502</span>
|
|
<span class="normal">503</span>
|
|
<span class="normal">504</span>
|
|
<span class="normal">505</span>
|
|
<span class="normal">506</span>
|
|
<span class="normal">507</span>
|
|
<span class="normal">508</span>
|
|
<span class="normal">509</span>
|
|
<span class="normal">510</span>
|
|
<span class="normal">511</span>
|
|
<span class="normal">512</span>
|
|
<span class="normal">513</span>
|
|
<span class="normal">514</span>
|
|
<span class="normal">515</span>
|
|
<span class="normal">516</span>
|
|
<span class="normal">517</span>
|
|
<span class="normal">518</span>
|
|
<span class="normal">519</span>
|
|
<span class="normal">520</span>
|
|
<span class="normal">521</span>
|
|
<span class="normal">522</span>
|
|
<span class="normal">523</span>
|
|
<span class="normal">524</span>
|
|
<span class="normal">525</span>
|
|
<span class="normal">526</span>
|
|
<span class="normal">527</span>
|
|
<span class="normal">528</span>
|
|
<span class="normal">529</span>
|
|
<span class="normal">530</span>
|
|
<span class="normal">531</span>
|
|
<span class="normal">532</span>
|
|
<span class="normal">533</span>
|
|
<span class="normal">534</span>
|
|
<span class="normal">535</span>
|
|
<span class="normal">536</span>
|
|
<span class="normal">537</span>
|
|
<span class="normal">538</span>
|
|
<span class="normal">539</span>
|
|
<span class="normal">540</span>
|
|
<span class="normal">541</span>
|
|
<span class="normal">542</span>
|
|
<span class="normal">543</span>
|
|
<span class="normal">544</span>
|
|
<span class="normal">545</span>
|
|
<span class="normal">546</span>
|
|
<span class="normal">547</span>
|
|
<span class="normal">548</span>
|
|
<span class="normal">549</span>
|
|
<span class="normal">550</span>
|
|
<span class="normal">551</span>
|
|
<span class="normal">552</span>
|
|
<span class="normal">553</span>
|
|
<span class="normal">554</span>
|
|
<span class="normal">555</span>
|
|
<span class="normal">556</span>
|
|
<span class="normal">557</span>
|
|
<span class="normal">558</span>
|
|
<span class="normal">559</span>
|
|
<span class="normal">560</span>
|
|
<span class="normal">561</span>
|
|
<span class="normal">562</span>
|
|
<span class="normal">563</span>
|
|
<span class="normal">564</span>
|
|
<span class="normal">565</span>
|
|
<span class="normal">566</span>
|
|
<span class="normal">567</span>
|
|
<span class="normal">568</span>
|
|
<span class="normal">569</span>
|
|
<span class="normal">570</span>
|
|
<span class="normal">571</span>
|
|
<span class="normal">572</span>
|
|
<span class="normal">573</span>
|
|
<span class="normal">574</span>
|
|
<span class="normal">575</span>
|
|
<span class="normal">576</span>
|
|
<span class="normal">577</span>
|
|
<span class="normal">578</span>
|
|
<span class="normal">579</span>
|
|
<span class="normal">580</span>
|
|
<span class="normal">581</span>
|
|
<span class="normal">582</span>
|
|
<span class="normal">583</span>
|
|
<span class="normal">584</span>
|
|
<span class="normal">585</span>
|
|
<span class="normal">586</span>
|
|
<span class="normal">587</span>
|
|
<span class="normal">588</span>
|
|
<span class="normal">589</span>
|
|
<span class="normal">590</span>
|
|
<span class="normal">591</span>
|
|
<span class="normal">592</span>
|
|
<span class="normal">593</span>
|
|
<span class="normal">594</span>
|
|
<span class="normal">595</span>
|
|
<span class="normal">596</span>
|
|
<span class="normal">597</span>
|
|
<span class="normal">598</span>
|
|
<span class="normal">599</span>
|
|
<span class="normal">600</span>
|
|
<span class="normal">601</span>
|
|
<span class="normal">602</span>
|
|
<span class="normal">603</span>
|
|
<span class="normal">604</span>
|
|
<span class="normal">605</span>
|
|
<span class="normal">606</span>
|
|
<span class="normal">607</span>
|
|
<span class="normal">608</span>
|
|
<span class="normal">609</span>
|
|
<span class="normal">610</span>
|
|
<span class="normal">611</span>
|
|
<span class="normal">612</span>
|
|
<span class="normal">613</span>
|
|
<span class="normal">614</span>
|
|
<span class="normal">615</span>
|
|
<span class="normal">616</span>
|
|
<span class="normal">617</span>
|
|
<span class="normal">618</span>
|
|
<span class="normal">619</span>
|
|
<span class="normal">620</span>
|
|
<span class="normal">621</span>
|
|
<span class="normal">622</span>
|
|
<span class="normal">623</span>
|
|
<span class="normal">624</span>
|
|
<span class="normal">625</span>
|
|
<span class="normal">626</span>
|
|
<span class="normal">627</span>
|
|
<span class="normal">628</span>
|
|
<span class="normal">629</span>
|
|
<span class="normal">630</span>
|
|
<span class="normal">631</span>
|
|
<span class="normal">632</span>
|
|
<span class="normal">633</span>
|
|
<span class="normal">634</span>
|
|
<span class="normal">635</span>
|
|
<span class="normal">636</span>
|
|
<span class="normal">637</span>
|
|
<span class="normal">638</span>
|
|
<span class="normal">639</span>
|
|
<span class="normal">640</span>
|
|
<span class="normal">641</span>
|
|
<span class="normal">642</span>
|
|
<span class="normal">643</span>
|
|
<span class="normal">644</span>
|
|
<span class="normal">645</span>
|
|
<span class="normal">646</span>
|
|
<span class="normal">647</span>
|
|
<span class="normal">648</span>
|
|
<span class="normal">649</span>
|
|
<span class="normal">650</span>
|
|
<span class="normal">651</span>
|
|
<span class="normal">652</span>
|
|
<span class="normal">653</span>
|
|
<span class="normal">654</span>
|
|
<span class="normal">655</span>
|
|
<span class="normal">656</span>
|
|
<span class="normal">657</span>
|
|
<span class="normal">658</span>
|
|
<span class="normal">659</span>
|
|
<span class="normal">660</span>
|
|
<span class="normal">661</span>
|
|
<span class="normal">662</span>
|
|
<span class="normal">663</span>
|
|
<span class="normal">664</span>
|
|
<span class="normal">665</span>
|
|
<span class="normal">666</span>
|
|
<span class="normal">667</span>
|
|
<span class="normal">668</span>
|
|
<span class="normal">669</span>
|
|
<span class="normal">670</span>
|
|
<span class="normal">671</span>
|
|
<span class="normal">672</span>
|
|
<span class="normal">673</span>
|
|
<span class="normal">674</span>
|
|
<span class="normal">675</span>
|
|
<span class="normal">676</span>
|
|
<span class="normal">677</span>
|
|
<span class="normal">678</span>
|
|
<span class="normal">679</span>
|
|
<span class="normal">680</span>
|
|
<span class="normal">681</span>
|
|
<span class="normal">682</span>
|
|
<span class="normal">683</span>
|
|
<span class="normal">684</span>
|
|
<span class="normal">685</span>
|
|
<span class="normal">686</span>
|
|
<span class="normal">687</span>
|
|
<span class="normal">688</span>
|
|
<span class="normal">689</span>
|
|
<span class="normal">690</span>
|
|
<span class="normal">691</span>
|
|
<span class="normal">692</span>
|
|
<span class="normal">693</span>
|
|
<span class="normal">694</span>
|
|
<span class="normal">695</span>
|
|
<span class="normal">696</span>
|
|
<span class="normal">697</span>
|
|
<span class="normal">698</span>
|
|
<span class="normal">699</span>
|
|
<span class="normal">700</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">FortranCodeGenerator</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Visitor implementation that decouples code generation from domain AST node details.</span>
|
|
|
|
<span class="sd"> Implements a classic visitor dispatch pattern that matches class names of the Field objects</span>
|
|
<span class="sd"> to their code generation routines (e.g. generate_code, generate_decl, generate_alloc, generate_free).</span>
|
|
<span class="sd"> """</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes FortranCodeGenerator with the variable registry dictionary.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Dictionary mapping variable names to their corresponding FieldBase objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generate_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate actual calculation code for the field.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node to generate code for.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map for array pooling. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Generated Fortran statement(s) inside loop blocks.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_code'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_code</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generate_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate variable type declarations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node to generate declaration for.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran variable declaration statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_decl'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_decl</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generate_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate dynamic memory allocation statements.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node to allocate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran allocate and initialization statements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_alloc'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_alloc</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generate_free</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate deallocation statements.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node to deallocate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran deallocate statements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_free'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_free</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generate_avg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate average accumulators.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The averaged field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran summation and normalization statements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_avg'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_avg</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
|
|
<span class="c1"># --- Generic Fallbacks ---</span>
|
|
<span class="k">def</span> <span class="nf">generic_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for code generation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Empty string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">""</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generic_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for declaration code generation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Standard allocatable real 3D/1D array declaration.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">real_array_decl</span> <span class="o">=</span> <span class="s2">"real(real64), allocatable, dimension(</span><span class="si">{1}</span><span class="s2">) :: </span><span class="si">{0}</span><span class="s2">"</span>
|
|
<span class="k">return</span> <span class="n">real_array_decl</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">dim</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generic_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for dynamic allocation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran allocate statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">make_allocate</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generic_free</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for deallocation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran deallocate statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">real_array_free</span> <span class="o">=</span> <span class="s2">"deallocate(</span><span class="si">{}</span><span class="s2">)"</span>
|
|
<span class="k">return</span> <span class="n">real_array_free</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generic_avg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for average code generation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Empty string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">""</span>
|
|
|
|
<span class="c1"># --- Visit Methods ---</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_FieldExporter_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exporter</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates Fortran code for exporting fields using parallel MPI-IO.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> exporter (FieldExporter): Exporter metadata.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: MPI writing code block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"work_array"</span><span class="p">]</span> <span class="o">=</span> <span class="n">exporter</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">if</span> <span class="n">exporter</span><span class="o">.</span><span class="n">use_subarray</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_CALC_SUBARRAY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_CALC_LEGACY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_FieldExporter_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exporter</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates declarations for MPI-IO handles.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> exporter (FieldExporter): Exporter metadata.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Declarations block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">exporter</span><span class="o">.</span><span class="n">use_subarray</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_DECL_SUBARRAY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_DECL_LEGACY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_FieldExporter_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exporter</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates initialization code for MPI-IO types and file opens.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> exporter (FieldExporter): Exporter metadata.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Initialization block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">exporter</span><span class="o">.</span><span class="n">use_subarray</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_INIT_SUBARRAY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_INIT_LEGACY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_FieldExporter_free</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exporter</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates finalization code for MPI-IO types and file closes.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> exporter (FieldExporter): Exporter metadata.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: MPI-IO finalization statements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">exporter</span><span class="o">.</span><span class="n">use_subarray</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_FINAL_SUBARRAY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_FINAL_LEGACY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_Field_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates calculation code for normal derived fields with SymPy CSE optimization.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (Field): The calculated field.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Renders optimized 3D loop including CSE declarations.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">field</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="k">if</span> <span class="n">alloc</span> <span class="k">else</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span>
|
|
|
|
<span class="n">opt</span> <span class="o">=</span> <span class="n">SympyOptimizer</span><span class="o">.</span><span class="n">get_instance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span>
|
|
<span class="n">rhs</span><span class="p">,</span> <span class="n">cse_decls</span><span class="p">,</span> <span class="n">cse_assigns</span> <span class="o">=</span> <span class="n">opt</span><span class="o">.</span><span class="n">optimize_field</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">alloc</span><span class="p">)</span>
|
|
|
|
<span class="n">decls_str</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cse_decls</span><span class="p">)</span> <span class="k">if</span> <span class="n">cse_decls</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="n">assigns_str</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cse_assigns</span><span class="p">)</span> <span class="k">if</span> <span class="n">cse_assigns</span> <span class="k">else</span> <span class="s2">""</span>
|
|
|
|
<span class="n">calculation_code</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">REAL_ARRAY_LOOP</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span>
|
|
<span class="n">comment</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">comment</span><span class="p">,</span>
|
|
<span class="n">decls_str</span><span class="o">=</span><span class="n">decls_str</span><span class="p">,</span>
|
|
<span class="n">assigns_str</span><span class="o">=</span><span class="n">assigns_str</span><span class="p">,</span>
|
|
<span class="n">array</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">array</span><span class="p">,</span>
|
|
<span class="n">rhs</span><span class="o">=</span><span class="n">rhs</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">export_code</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">generate_code</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">exporter</span><span class="p">)</span> <span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">export_on</span><span class="p">()</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="k">return</span> <span class="n">calculation_code</span> <span class="o">+</span> <span class="n">export_code</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_FluctuationField_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates calculation code for turbulence fluctuations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FluctuationField): The fluctuation field.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Renders 3D loop for calculating u' = u - <u_w>.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">field</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="k">if</span> <span class="n">alloc</span> <span class="k">else</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="n">rhs</span> <span class="o">=</span> <span class="n">ExpToCode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">is_fluctuation</span><span class="p">():</span>
|
|
<span class="n">rhs</span> <span class="o">=</span> <span class="n">rhs</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">w</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FLUCTUATION_ARRAY_LOOP</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span>
|
|
<span class="n">comment</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">comment</span><span class="p">,</span>
|
|
<span class="n">array</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">array</span><span class="p">,</span>
|
|
<span class="n">rhs</span><span class="o">=</span><span class="n">rhs</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_PrimaryField_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""No code generation needed for primary inputs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (PrimaryField): The primary input.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Comment statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"! </span><span class="si">{}</span><span class="s2"> is read from file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_PrimaryField_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""No declaration needed for primary inputs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (PrimaryField): The primary input.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Comment statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"! </span><span class="si">{}</span><span class="s2"> is read from file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_PrimaryField_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""No allocation needed for primary inputs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (PrimaryField): The primary input.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Comment statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"! </span><span class="si">{}</span><span class="s2"> is read from file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_PrimaryField_free</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""No deallocation needed for primary inputs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (PrimaryField): The primary input.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Comment statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"! </span><span class="si">{}</span><span class="s2"> is read from file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_DerivedField_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates derivative calculation statements, calling Compact solver subroutines.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (DerivedField): The derivative field.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran subroutine call string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">field</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="k">if</span> <span class="n">alloc</span> <span class="k">else</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="n">varray</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">v</span><span class="p">]</span> <span class="k">if</span> <span class="n">alloc</span> <span class="k">else</span> <span class="n">field</span><span class="o">.</span><span class="n">v</span>
|
|
<span class="k">return</span> <span class="s2">"call </span><span class="si">{0}</span><span class="s2"> ( </span><span class="si">{2}</span><span class="s2">, </span><span class="si">{1}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">varray</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_AveragedField_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates local accumulation summation loop for spatial averaging.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (AveragedField): The averaged variable field.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Renders local sum code block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">tgt</span><span class="p">]</span><span class="o">.</span><span class="n">array</span> <span class="o">+</span> <span class="s2">"(i,j,k)"</span>
|
|
<span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">weighted</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="n">arrname</span> <span class="o">+</span> <span class="s2">" * "</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="n">w</span><span class="o">.</span><span class="n">array</span> <span class="o">+</span> <span class="s2">"(i,j,k)"</span>
|
|
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">AVG_ARRAY_SUM</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">arrname</span><span class="o">=</span><span class="n">arrname</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">visit_AveragedField_avg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates normalization and parallel reduction via MPI_ALLREDUCE.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (AveragedField): The averaged variable field.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Renders global reduce and normalize statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">dWeight</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">"/ avg_</span><span class="si">{</span><span class="n">field</span><span class="o">.</span><span class="n">weighted</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">weighted</span> <span class="k">else</span> <span class="s2">""</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">AVG_ARRAY_DIVIDE</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">dWeight</span><span class="o">=</span><span class="n">dWeight</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">generate_write_avg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">avglist</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates final module output writers for 1D spatial averages.</span>
|
|
|
|
<span class="sd"> Also generates first and second derivatives of the averaged data using</span>
|
|
<span class="sd"> ddx1d and d2dx1d subroutines.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> avglist (list): List of averaged field names.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Code block to write values to output files.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">avgarr</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">(i)"</span>
|
|
<span class="n">deriv1_avgarr</span> <span class="o">=</span> <span class="s2">"""call ddx1d ( xbuffer, </span><span class="si">{}</span><span class="s2"> ) ; write (200,*) xbuffer"""</span>
|
|
<span class="n">deriv2_avgarr</span> <span class="o">=</span> <span class="s2">"""call d2dx1d ( xbuffer, </span><span class="si">{}</span><span class="s2"> ) ; write (200,*) xbuffer"""</span>
|
|
|
|
<span class="n">num_args</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">avglist</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">formatted_avglist</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">avgarr</span><span class="o">.</span><span class="n">format</span><span class="p">,</span> <span class="n">avglist</span><span class="p">))</span>
|
|
<span class="n">deriv1_lines</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">deriv1_avgarr</span><span class="o">.</span><span class="n">format</span><span class="p">,</span> <span class="n">avglist</span><span class="p">))</span>
|
|
<span class="n">deriv2_lines</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">deriv2_avgarr</span><span class="o">.</span><span class="n">format</span><span class="p">,</span> <span class="n">avglist</span><span class="p">))</span>
|
|
|
|
<span class="n">write_avg</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">AVG_ARRAY_WRITE</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span>
|
|
<span class="n">num_args</span><span class="o">=</span><span class="n">num_args</span><span class="p">,</span>
|
|
<span class="n">formatted_avglist</span><span class="o">=</span><span class="n">formatted_avglist</span><span class="p">,</span>
|
|
<span class="n">deriv1_lines</span><span class="o">=</span><span class="n">deriv1_lines</span><span class="p">,</span>
|
|
<span class="n">deriv2_lines</span><span class="o">=</span><span class="n">deriv2_lines</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">write_avg</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes FortranCodeGenerator with the variable registry dictionary.</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>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Dictionary mapping variable names to their corresponding FieldBase objects.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">342</span>
|
|
<span class="normal">343</span>
|
|
<span class="normal">344</span>
|
|
<span class="normal">345</span>
|
|
<span class="normal">346</span>
|
|
<span class="normal">347</span>
|
|
<span class="normal">348</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes FortranCodeGenerator with the variable registry dictionary.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Dictionary mapping variable names to their corresponding FieldBase objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generate_alloc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generate_alloc</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Dispatches visitor to generate dynamic memory allocation statements.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node to allocate.</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>Fortran allocate and initialization statements.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">377</span>
|
|
<span class="normal">378</span>
|
|
<span class="normal">379</span>
|
|
<span class="normal">380</span>
|
|
<span class="normal">381</span>
|
|
<span class="normal">382</span>
|
|
<span class="normal">383</span>
|
|
<span class="normal">384</span>
|
|
<span class="normal">385</span>
|
|
<span class="normal">386</span>
|
|
<span class="normal">387</span>
|
|
<span class="normal">388</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generate_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate dynamic memory allocation statements.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node to allocate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran allocate and initialization statements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_alloc'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_alloc</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generate_avg" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generate_avg</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Dispatches visitor to generate average accumulators.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The averaged field node.</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>Fortran summation and normalization statements.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">403</span>
|
|
<span class="normal">404</span>
|
|
<span class="normal">405</span>
|
|
<span class="normal">406</span>
|
|
<span class="normal">407</span>
|
|
<span class="normal">408</span>
|
|
<span class="normal">409</span>
|
|
<span class="normal">410</span>
|
|
<span class="normal">411</span>
|
|
<span class="normal">412</span>
|
|
<span class="normal">413</span>
|
|
<span class="normal">414</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generate_avg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate average accumulators.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The averaged field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran summation and normalization statements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_avg'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_avg</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generate_code" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generate_code</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Dispatches visitor to generate actual calculation code for the field.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node to generate code for.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation map for array pooling. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>Generated Fortran statement(s) inside loop blocks.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">350</span>
|
|
<span class="normal">351</span>
|
|
<span class="normal">352</span>
|
|
<span class="normal">353</span>
|
|
<span class="normal">354</span>
|
|
<span class="normal">355</span>
|
|
<span class="normal">356</span>
|
|
<span class="normal">357</span>
|
|
<span class="normal">358</span>
|
|
<span class="normal">359</span>
|
|
<span class="normal">360</span>
|
|
<span class="normal">361</span>
|
|
<span class="normal">362</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generate_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate actual calculation code for the field.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node to generate code for.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map for array pooling. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Generated Fortran statement(s) inside loop blocks.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_code'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_code</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generate_decl" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generate_decl</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Dispatches visitor to generate variable type declarations.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node to generate declaration for.</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>Fortran variable declaration statement.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">364</span>
|
|
<span class="normal">365</span>
|
|
<span class="normal">366</span>
|
|
<span class="normal">367</span>
|
|
<span class="normal">368</span>
|
|
<span class="normal">369</span>
|
|
<span class="normal">370</span>
|
|
<span class="normal">371</span>
|
|
<span class="normal">372</span>
|
|
<span class="normal">373</span>
|
|
<span class="normal">374</span>
|
|
<span class="normal">375</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generate_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate variable type declarations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node to generate declaration for.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran variable declaration statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_decl'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_decl</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generate_free" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generate_free</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Dispatches visitor to generate deallocation statements.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node to deallocate.</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>Fortran deallocate statements.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">390</span>
|
|
<span class="normal">391</span>
|
|
<span class="normal">392</span>
|
|
<span class="normal">393</span>
|
|
<span class="normal">394</span>
|
|
<span class="normal">395</span>
|
|
<span class="normal">396</span>
|
|
<span class="normal">397</span>
|
|
<span class="normal">398</span>
|
|
<span class="normal">399</span>
|
|
<span class="normal">400</span>
|
|
<span class="normal">401</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generate_free</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Dispatches visitor to generate deallocation statements.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node to deallocate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran deallocate statements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'visit_'</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">'_free'</span>
|
|
<span class="n">visitor</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">generic_free</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">visitor</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generate_write_avg" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generate_write_avg</span><span class="p">(</span><span class="n">avglist</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates final module output writers for 1D spatial averages.</p>
|
|
<p>Also generates first and second derivatives of the averaged data using
|
|
ddx1d and d2dx1d subroutines.</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>avglist</code></td>
|
|
<td>
|
|
<code>list</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>List of averaged field names.</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>Code block to write values to output files.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">673</span>
|
|
<span class="normal">674</span>
|
|
<span class="normal">675</span>
|
|
<span class="normal">676</span>
|
|
<span class="normal">677</span>
|
|
<span class="normal">678</span>
|
|
<span class="normal">679</span>
|
|
<span class="normal">680</span>
|
|
<span class="normal">681</span>
|
|
<span class="normal">682</span>
|
|
<span class="normal">683</span>
|
|
<span class="normal">684</span>
|
|
<span class="normal">685</span>
|
|
<span class="normal">686</span>
|
|
<span class="normal">687</span>
|
|
<span class="normal">688</span>
|
|
<span class="normal">689</span>
|
|
<span class="normal">690</span>
|
|
<span class="normal">691</span>
|
|
<span class="normal">692</span>
|
|
<span class="normal">693</span>
|
|
<span class="normal">694</span>
|
|
<span class="normal">695</span>
|
|
<span class="normal">696</span>
|
|
<span class="normal">697</span>
|
|
<span class="normal">698</span>
|
|
<span class="normal">699</span>
|
|
<span class="normal">700</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generate_write_avg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">avglist</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates final module output writers for 1D spatial averages.</span>
|
|
|
|
<span class="sd"> Also generates first and second derivatives of the averaged data using</span>
|
|
<span class="sd"> ddx1d and d2dx1d subroutines.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> avglist (list): List of averaged field names.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Code block to write values to output files.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">avgarr</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">(i)"</span>
|
|
<span class="n">deriv1_avgarr</span> <span class="o">=</span> <span class="s2">"""call ddx1d ( xbuffer, </span><span class="si">{}</span><span class="s2"> ) ; write (200,*) xbuffer"""</span>
|
|
<span class="n">deriv2_avgarr</span> <span class="o">=</span> <span class="s2">"""call d2dx1d ( xbuffer, </span><span class="si">{}</span><span class="s2"> ) ; write (200,*) xbuffer"""</span>
|
|
|
|
<span class="n">num_args</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">avglist</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">formatted_avglist</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">avgarr</span><span class="o">.</span><span class="n">format</span><span class="p">,</span> <span class="n">avglist</span><span class="p">))</span>
|
|
<span class="n">deriv1_lines</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">deriv1_avgarr</span><span class="o">.</span><span class="n">format</span><span class="p">,</span> <span class="n">avglist</span><span class="p">))</span>
|
|
<span class="n">deriv2_lines</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">deriv2_avgarr</span><span class="o">.</span><span class="n">format</span><span class="p">,</span> <span class="n">avglist</span><span class="p">))</span>
|
|
|
|
<span class="n">write_avg</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">AVG_ARRAY_WRITE</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span>
|
|
<span class="n">num_args</span><span class="o">=</span><span class="n">num_args</span><span class="p">,</span>
|
|
<span class="n">formatted_avglist</span><span class="o">=</span><span class="n">formatted_avglist</span><span class="p">,</span>
|
|
<span class="n">deriv1_lines</span><span class="o">=</span><span class="n">deriv1_lines</span><span class="p">,</span>
|
|
<span class="n">deriv2_lines</span><span class="o">=</span><span class="n">deriv2_lines</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">write_avg</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generic_alloc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generic_alloc</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generic fallback for dynamic allocation.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node.</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>Fortran allocate statement.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">441</span>
|
|
<span class="normal">442</span>
|
|
<span class="normal">443</span>
|
|
<span class="normal">444</span>
|
|
<span class="normal">445</span>
|
|
<span class="normal">446</span>
|
|
<span class="normal">447</span>
|
|
<span class="normal">448</span>
|
|
<span class="normal">449</span>
|
|
<span class="normal">450</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generic_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for dynamic allocation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran allocate statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">make_allocate</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generic_avg" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generic_avg</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generic fallback for average code generation.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node.</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>Empty string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">464</span>
|
|
<span class="normal">465</span>
|
|
<span class="normal">466</span>
|
|
<span class="normal">467</span>
|
|
<span class="normal">468</span>
|
|
<span class="normal">469</span>
|
|
<span class="normal">470</span>
|
|
<span class="normal">471</span>
|
|
<span class="normal">472</span>
|
|
<span class="normal">473</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generic_avg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for average code generation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Empty string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">""</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generic_code" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generic_code</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generic fallback for code generation.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation map. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>Empty string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">417</span>
|
|
<span class="normal">418</span>
|
|
<span class="normal">419</span>
|
|
<span class="normal">420</span>
|
|
<span class="normal">421</span>
|
|
<span class="normal">422</span>
|
|
<span class="normal">423</span>
|
|
<span class="normal">424</span>
|
|
<span class="normal">425</span>
|
|
<span class="normal">426</span>
|
|
<span class="normal">427</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generic_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for code generation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Empty string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">""</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generic_decl" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generic_decl</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generic fallback for declaration code generation.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node.</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>Standard allocatable real 3D/1D array declaration.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">429</span>
|
|
<span class="normal">430</span>
|
|
<span class="normal">431</span>
|
|
<span class="normal">432</span>
|
|
<span class="normal">433</span>
|
|
<span class="normal">434</span>
|
|
<span class="normal">435</span>
|
|
<span class="normal">436</span>
|
|
<span class="normal">437</span>
|
|
<span class="normal">438</span>
|
|
<span class="normal">439</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generic_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for declaration code generation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Standard allocatable real 3D/1D array declaration.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">real_array_decl</span> <span class="o">=</span> <span class="s2">"real(real64), allocatable, dimension(</span><span class="si">{1}</span><span class="s2">) :: </span><span class="si">{0}</span><span class="s2">"</span>
|
|
<span class="k">return</span> <span class="n">real_array_decl</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">dim</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.generic_free" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">generic_free</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generic fallback for deallocation.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The field node.</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>Fortran deallocate statement.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">452</span>
|
|
<span class="normal">453</span>
|
|
<span class="normal">454</span>
|
|
<span class="normal">455</span>
|
|
<span class="normal">456</span>
|
|
<span class="normal">457</span>
|
|
<span class="normal">458</span>
|
|
<span class="normal">459</span>
|
|
<span class="normal">460</span>
|
|
<span class="normal">461</span>
|
|
<span class="normal">462</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generic_free</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generic fallback for deallocation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FieldBase): The field node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran deallocate statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">real_array_free</span> <span class="o">=</span> <span class="s2">"deallocate(</span><span class="si">{}</span><span class="s2">)"</span>
|
|
<span class="k">return</span> <span class="n">real_array_free</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_AveragedField_avg" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_AveragedField_avg</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates normalization and parallel reduction via MPI_ALLREDUCE.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.AveragedField" href="#post.AveragedField">AveragedField</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The averaged variable field.</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>Renders global reduce and normalize statement.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">661</span>
|
|
<span class="normal">662</span>
|
|
<span class="normal">663</span>
|
|
<span class="normal">664</span>
|
|
<span class="normal">665</span>
|
|
<span class="normal">666</span>
|
|
<span class="normal">667</span>
|
|
<span class="normal">668</span>
|
|
<span class="normal">669</span>
|
|
<span class="normal">670</span>
|
|
<span class="normal">671</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_AveragedField_avg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates normalization and parallel reduction via MPI_ALLREDUCE.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (AveragedField): The averaged variable field.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Renders global reduce and normalize statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">dWeight</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">"/ avg_</span><span class="si">{</span><span class="n">field</span><span class="o">.</span><span class="n">weighted</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">weighted</span> <span class="k">else</span> <span class="s2">""</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">AVG_ARRAY_DIVIDE</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">dWeight</span><span class="o">=</span><span class="n">dWeight</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_AveragedField_code" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_AveragedField_code</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates local accumulation summation loop for spatial averaging.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.AveragedField" href="#post.AveragedField">AveragedField</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The averaged variable field.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation map. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>Renders local sum code block.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">645</span>
|
|
<span class="normal">646</span>
|
|
<span class="normal">647</span>
|
|
<span class="normal">648</span>
|
|
<span class="normal">649</span>
|
|
<span class="normal">650</span>
|
|
<span class="normal">651</span>
|
|
<span class="normal">652</span>
|
|
<span class="normal">653</span>
|
|
<span class="normal">654</span>
|
|
<span class="normal">655</span>
|
|
<span class="normal">656</span>
|
|
<span class="normal">657</span>
|
|
<span class="normal">658</span>
|
|
<span class="normal">659</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_AveragedField_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates local accumulation summation loop for spatial averaging.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (AveragedField): The averaged variable field.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Renders local sum code block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">tgt</span><span class="p">]</span><span class="o">.</span><span class="n">array</span> <span class="o">+</span> <span class="s2">"(i,j,k)"</span>
|
|
<span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">weighted</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">arrname</span> <span class="o">=</span> <span class="n">arrname</span> <span class="o">+</span> <span class="s2">" * "</span> <span class="o">+</span> <span class="n">field</span><span class="o">.</span><span class="n">w</span><span class="o">.</span><span class="n">array</span> <span class="o">+</span> <span class="s2">"(i,j,k)"</span>
|
|
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">AVG_ARRAY_SUM</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">arrname</span><span class="o">=</span><span class="n">arrname</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_DerivedField_code" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_DerivedField_code</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates derivative calculation statements, calling Compact solver subroutines.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.DerivedField" href="#post.DerivedField">DerivedField</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The derivative field.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation map. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>Fortran subroutine call string.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">631</span>
|
|
<span class="normal">632</span>
|
|
<span class="normal">633</span>
|
|
<span class="normal">634</span>
|
|
<span class="normal">635</span>
|
|
<span class="normal">636</span>
|
|
<span class="normal">637</span>
|
|
<span class="normal">638</span>
|
|
<span class="normal">639</span>
|
|
<span class="normal">640</span>
|
|
<span class="normal">641</span>
|
|
<span class="normal">642</span>
|
|
<span class="normal">643</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_DerivedField_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates derivative calculation statements, calling Compact solver subroutines.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (DerivedField): The derivative field.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran subroutine call string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">field</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="k">if</span> <span class="n">alloc</span> <span class="k">else</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="n">varray</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">v</span><span class="p">]</span> <span class="k">if</span> <span class="n">alloc</span> <span class="k">else</span> <span class="n">field</span><span class="o">.</span><span class="n">v</span>
|
|
<span class="k">return</span> <span class="s2">"call </span><span class="si">{0}</span><span class="s2"> ( </span><span class="si">{2}</span><span class="s2">, </span><span class="si">{1}</span><span class="s2"> )"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">varray</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">array</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_FieldExporter_alloc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_FieldExporter_alloc</span><span class="p">(</span><span class="n">exporter</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates initialization code for MPI-IO types and file opens.</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>exporter</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldExporter" href="#post.FieldExporter">FieldExporter</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Exporter metadata.</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>Initialization block.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">507</span>
|
|
<span class="normal">508</span>
|
|
<span class="normal">509</span>
|
|
<span class="normal">510</span>
|
|
<span class="normal">511</span>
|
|
<span class="normal">512</span>
|
|
<span class="normal">513</span>
|
|
<span class="normal">514</span>
|
|
<span class="normal">515</span>
|
|
<span class="normal">516</span>
|
|
<span class="normal">517</span>
|
|
<span class="normal">518</span>
|
|
<span class="normal">519</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_FieldExporter_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exporter</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates initialization code for MPI-IO types and file opens.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> exporter (FieldExporter): Exporter metadata.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Initialization block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">exporter</span><span class="o">.</span><span class="n">use_subarray</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_INIT_SUBARRAY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_INIT_LEGACY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_FieldExporter_code" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_FieldExporter_code</span><span class="p">(</span><span class="n">exporter</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates Fortran code for exporting fields using parallel MPI-IO.</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>exporter</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldExporter" href="#post.FieldExporter">FieldExporter</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Exporter metadata.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation map. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>MPI writing code block.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">477</span>
|
|
<span class="normal">478</span>
|
|
<span class="normal">479</span>
|
|
<span class="normal">480</span>
|
|
<span class="normal">481</span>
|
|
<span class="normal">482</span>
|
|
<span class="normal">483</span>
|
|
<span class="normal">484</span>
|
|
<span class="normal">485</span>
|
|
<span class="normal">486</span>
|
|
<span class="normal">487</span>
|
|
<span class="normal">488</span>
|
|
<span class="normal">489</span>
|
|
<span class="normal">490</span>
|
|
<span class="normal">491</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_FieldExporter_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exporter</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates Fortran code for exporting fields using parallel MPI-IO.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> exporter (FieldExporter): Exporter metadata.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: MPI writing code block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="s2">"work_array"</span><span class="p">]</span> <span class="o">=</span> <span class="n">exporter</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">if</span> <span class="n">exporter</span><span class="o">.</span><span class="n">use_subarray</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_CALC_SUBARRAY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_CALC_LEGACY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_FieldExporter_decl" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_FieldExporter_decl</span><span class="p">(</span><span class="n">exporter</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates declarations for MPI-IO handles.</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>exporter</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldExporter" href="#post.FieldExporter">FieldExporter</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Exporter metadata.</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>Declarations block.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">493</span>
|
|
<span class="normal">494</span>
|
|
<span class="normal">495</span>
|
|
<span class="normal">496</span>
|
|
<span class="normal">497</span>
|
|
<span class="normal">498</span>
|
|
<span class="normal">499</span>
|
|
<span class="normal">500</span>
|
|
<span class="normal">501</span>
|
|
<span class="normal">502</span>
|
|
<span class="normal">503</span>
|
|
<span class="normal">504</span>
|
|
<span class="normal">505</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_FieldExporter_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exporter</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates declarations for MPI-IO handles.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> exporter (FieldExporter): Exporter metadata.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Declarations block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">exporter</span><span class="o">.</span><span class="n">use_subarray</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_DECL_SUBARRAY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_DECL_LEGACY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_FieldExporter_free" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_FieldExporter_free</span><span class="p">(</span><span class="n">exporter</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates finalization code for MPI-IO types and file closes.</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>exporter</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FieldExporter" href="#post.FieldExporter">FieldExporter</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Exporter metadata.</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>MPI-IO finalization statements.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">521</span>
|
|
<span class="normal">522</span>
|
|
<span class="normal">523</span>
|
|
<span class="normal">524</span>
|
|
<span class="normal">525</span>
|
|
<span class="normal">526</span>
|
|
<span class="normal">527</span>
|
|
<span class="normal">528</span>
|
|
<span class="normal">529</span>
|
|
<span class="normal">530</span>
|
|
<span class="normal">531</span>
|
|
<span class="normal">532</span>
|
|
<span class="normal">533</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_FieldExporter_free</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exporter</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates finalization code for MPI-IO types and file closes.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> exporter (FieldExporter): Exporter metadata.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: MPI-IO finalization statements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">exporter</span><span class="o">.</span><span class="n">use_subarray</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_FINAL_SUBARRAY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FMT_FINAL_LEGACY</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">exporter</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_Field_code" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_Field_code</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates calculation code for normal derived fields with SymPy CSE optimization.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.Field" href="#post.Field">Field</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The calculated field.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation map. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>Renders optimized 3D loop including CSE declarations.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">535</span>
|
|
<span class="normal">536</span>
|
|
<span class="normal">537</span>
|
|
<span class="normal">538</span>
|
|
<span class="normal">539</span>
|
|
<span class="normal">540</span>
|
|
<span class="normal">541</span>
|
|
<span class="normal">542</span>
|
|
<span class="normal">543</span>
|
|
<span class="normal">544</span>
|
|
<span class="normal">545</span>
|
|
<span class="normal">546</span>
|
|
<span class="normal">547</span>
|
|
<span class="normal">548</span>
|
|
<span class="normal">549</span>
|
|
<span class="normal">550</span>
|
|
<span class="normal">551</span>
|
|
<span class="normal">552</span>
|
|
<span class="normal">553</span>
|
|
<span class="normal">554</span>
|
|
<span class="normal">555</span>
|
|
<span class="normal">556</span>
|
|
<span class="normal">557</span>
|
|
<span class="normal">558</span>
|
|
<span class="normal">559</span>
|
|
<span class="normal">560</span>
|
|
<span class="normal">561</span>
|
|
<span class="normal">562</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_Field_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates calculation code for normal derived fields with SymPy CSE optimization.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (Field): The calculated field.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Renders optimized 3D loop including CSE declarations.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">field</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="k">if</span> <span class="n">alloc</span> <span class="k">else</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span>
|
|
|
|
<span class="n">opt</span> <span class="o">=</span> <span class="n">SympyOptimizer</span><span class="o">.</span><span class="n">get_instance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span>
|
|
<span class="n">rhs</span><span class="p">,</span> <span class="n">cse_decls</span><span class="p">,</span> <span class="n">cse_assigns</span> <span class="o">=</span> <span class="n">opt</span><span class="o">.</span><span class="n">optimize_field</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">alloc</span><span class="p">)</span>
|
|
|
|
<span class="n">decls_str</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cse_decls</span><span class="p">)</span> <span class="k">if</span> <span class="n">cse_decls</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="n">assigns_str</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cse_assigns</span><span class="p">)</span> <span class="k">if</span> <span class="n">cse_assigns</span> <span class="k">else</span> <span class="s2">""</span>
|
|
|
|
<span class="n">calculation_code</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">REAL_ARRAY_LOOP</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span>
|
|
<span class="n">comment</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">comment</span><span class="p">,</span>
|
|
<span class="n">decls_str</span><span class="o">=</span><span class="n">decls_str</span><span class="p">,</span>
|
|
<span class="n">assigns_str</span><span class="o">=</span><span class="n">assigns_str</span><span class="p">,</span>
|
|
<span class="n">array</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">array</span><span class="p">,</span>
|
|
<span class="n">rhs</span><span class="o">=</span><span class="n">rhs</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">export_code</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">generate_code</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">exporter</span><span class="p">)</span> <span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">export_on</span><span class="p">()</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="k">return</span> <span class="n">calculation_code</span> <span class="o">+</span> <span class="n">export_code</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_FluctuationField_code" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_FluctuationField_code</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates calculation code for turbulence fluctuations.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.FluctuationField" href="#post.FluctuationField">FluctuationField</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The fluctuation field.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation map. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>Renders 3D loop for calculating u' = u - <u_w>.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">564</span>
|
|
<span class="normal">565</span>
|
|
<span class="normal">566</span>
|
|
<span class="normal">567</span>
|
|
<span class="normal">568</span>
|
|
<span class="normal">569</span>
|
|
<span class="normal">570</span>
|
|
<span class="normal">571</span>
|
|
<span class="normal">572</span>
|
|
<span class="normal">573</span>
|
|
<span class="normal">574</span>
|
|
<span class="normal">575</span>
|
|
<span class="normal">576</span>
|
|
<span class="normal">577</span>
|
|
<span class="normal">578</span>
|
|
<span class="normal">579</span>
|
|
<span class="normal">580</span>
|
|
<span class="normal">581</span>
|
|
<span class="normal">582</span>
|
|
<span class="normal">583</span>
|
|
<span class="normal">584</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_FluctuationField_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates calculation code for turbulence fluctuations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (FluctuationField): The fluctuation field.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Renders 3D loop for calculating u' = u - <u_w>.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">field</span><span class="o">.</span><span class="n">array</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="k">if</span> <span class="n">alloc</span> <span class="k">else</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="n">rhs</span> <span class="o">=</span> <span class="n">ExpToCode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">field</span><span class="o">.</span><span class="n">field</span><span class="o">.</span><span class="n">is_fluctuation</span><span class="p">():</span>
|
|
<span class="n">rhs</span> <span class="o">=</span> <span class="n">rhs</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">w</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">Template</span><span class="p">(</span><span class="n">FortranTemplateStore</span><span class="o">.</span><span class="n">FLUCTUATION_ARRAY_LOOP</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span>
|
|
<span class="n">comment</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">comment</span><span class="p">,</span>
|
|
<span class="n">array</span><span class="o">=</span><span class="n">field</span><span class="o">.</span><span class="n">array</span><span class="p">,</span>
|
|
<span class="n">rhs</span><span class="o">=</span><span class="n">rhs</span>
|
|
<span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_PrimaryField_alloc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_PrimaryField_alloc</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>No allocation needed for primary inputs.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.PrimaryField" href="#post.PrimaryField">PrimaryField</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The primary input.</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>Comment statement.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">609</span>
|
|
<span class="normal">610</span>
|
|
<span class="normal">611</span>
|
|
<span class="normal">612</span>
|
|
<span class="normal">613</span>
|
|
<span class="normal">614</span>
|
|
<span class="normal">615</span>
|
|
<span class="normal">616</span>
|
|
<span class="normal">617</span>
|
|
<span class="normal">618</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_PrimaryField_alloc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""No allocation needed for primary inputs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (PrimaryField): The primary input.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Comment statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"! </span><span class="si">{}</span><span class="s2"> is read from file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_PrimaryField_code" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_PrimaryField_code</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>No code generation needed for primary inputs.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.PrimaryField" href="#post.PrimaryField">PrimaryField</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The primary input.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation map. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>Comment statement.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">586</span>
|
|
<span class="normal">587</span>
|
|
<span class="normal">588</span>
|
|
<span class="normal">589</span>
|
|
<span class="normal">590</span>
|
|
<span class="normal">591</span>
|
|
<span class="normal">592</span>
|
|
<span class="normal">593</span>
|
|
<span class="normal">594</span>
|
|
<span class="normal">595</span>
|
|
<span class="normal">596</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_PrimaryField_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""No code generation needed for primary inputs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (PrimaryField): The primary input.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation map. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Comment statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"! </span><span class="si">{}</span><span class="s2"> is read from file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_PrimaryField_decl" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_PrimaryField_decl</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>No declaration needed for primary inputs.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.PrimaryField" href="#post.PrimaryField">PrimaryField</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The primary input.</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>Comment statement.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">598</span>
|
|
<span class="normal">599</span>
|
|
<span class="normal">600</span>
|
|
<span class="normal">601</span>
|
|
<span class="normal">602</span>
|
|
<span class="normal">603</span>
|
|
<span class="normal">604</span>
|
|
<span class="normal">605</span>
|
|
<span class="normal">606</span>
|
|
<span class="normal">607</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_PrimaryField_decl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""No declaration needed for primary inputs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (PrimaryField): The primary input.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Comment statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"! </span><span class="si">{}</span><span class="s2"> is read from file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranCodeGenerator.visit_PrimaryField_free" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">visit_PrimaryField_free</span><span class="p">(</span><span class="n">field</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>No deallocation needed for primary inputs.</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>field</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.PrimaryField" href="#post.PrimaryField">PrimaryField</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The primary input.</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>Comment statement.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">620</span>
|
|
<span class="normal">621</span>
|
|
<span class="normal">622</span>
|
|
<span class="normal">623</span>
|
|
<span class="normal">624</span>
|
|
<span class="normal">625</span>
|
|
<span class="normal">626</span>
|
|
<span class="normal">627</span>
|
|
<span class="normal">628</span>
|
|
<span class="normal">629</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">visit_PrimaryField_free</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""No deallocation needed for primary inputs.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> field (PrimaryField): The primary input.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Comment statement.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="s2">"! </span><span class="si">{}</span><span class="s2"> is read from file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.FortranProgramWriter" class="doc doc-heading">
|
|
<code>FortranProgramWriter</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Renders the final, compiled Fortran 95 post-processing modules.</p>
|
|
<p>Uses Jinja2 templates to combine calculations, averages, declarations,
|
|
reductions, subarray parallel IO writers, and pooled dynamic array buffers.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2614</span>
|
|
<span class="normal">2615</span>
|
|
<span class="normal">2616</span>
|
|
<span class="normal">2617</span>
|
|
<span class="normal">2618</span>
|
|
<span class="normal">2619</span>
|
|
<span class="normal">2620</span>
|
|
<span class="normal">2621</span>
|
|
<span class="normal">2622</span>
|
|
<span class="normal">2623</span>
|
|
<span class="normal">2624</span>
|
|
<span class="normal">2625</span>
|
|
<span class="normal">2626</span>
|
|
<span class="normal">2627</span>
|
|
<span class="normal">2628</span>
|
|
<span class="normal">2629</span>
|
|
<span class="normal">2630</span>
|
|
<span class="normal">2631</span>
|
|
<span class="normal">2632</span>
|
|
<span class="normal">2633</span>
|
|
<span class="normal">2634</span>
|
|
<span class="normal">2635</span>
|
|
<span class="normal">2636</span>
|
|
<span class="normal">2637</span>
|
|
<span class="normal">2638</span>
|
|
<span class="normal">2639</span>
|
|
<span class="normal">2640</span>
|
|
<span class="normal">2641</span>
|
|
<span class="normal">2642</span>
|
|
<span class="normal">2643</span>
|
|
<span class="normal">2644</span>
|
|
<span class="normal">2645</span>
|
|
<span class="normal">2646</span>
|
|
<span class="normal">2647</span>
|
|
<span class="normal">2648</span>
|
|
<span class="normal">2649</span>
|
|
<span class="normal">2650</span>
|
|
<span class="normal">2651</span>
|
|
<span class="normal">2652</span>
|
|
<span class="normal">2653</span>
|
|
<span class="normal">2654</span>
|
|
<span class="normal">2655</span>
|
|
<span class="normal">2656</span>
|
|
<span class="normal">2657</span>
|
|
<span class="normal">2658</span>
|
|
<span class="normal">2659</span>
|
|
<span class="normal">2660</span>
|
|
<span class="normal">2661</span>
|
|
<span class="normal">2662</span>
|
|
<span class="normal">2663</span>
|
|
<span class="normal">2664</span>
|
|
<span class="normal">2665</span>
|
|
<span class="normal">2666</span>
|
|
<span class="normal">2667</span>
|
|
<span class="normal">2668</span>
|
|
<span class="normal">2669</span>
|
|
<span class="normal">2670</span>
|
|
<span class="normal">2671</span>
|
|
<span class="normal">2672</span>
|
|
<span class="normal">2673</span>
|
|
<span class="normal">2674</span>
|
|
<span class="normal">2675</span>
|
|
<span class="normal">2676</span>
|
|
<span class="normal">2677</span>
|
|
<span class="normal">2678</span>
|
|
<span class="normal">2679</span>
|
|
<span class="normal">2680</span>
|
|
<span class="normal">2681</span>
|
|
<span class="normal">2682</span>
|
|
<span class="normal">2683</span>
|
|
<span class="normal">2684</span>
|
|
<span class="normal">2685</span>
|
|
<span class="normal">2686</span>
|
|
<span class="normal">2687</span>
|
|
<span class="normal">2688</span>
|
|
<span class="normal">2689</span>
|
|
<span class="normal">2690</span>
|
|
<span class="normal">2691</span>
|
|
<span class="normal">2692</span>
|
|
<span class="normal">2693</span>
|
|
<span class="normal">2694</span>
|
|
<span class="normal">2695</span>
|
|
<span class="normal">2696</span>
|
|
<span class="normal">2697</span>
|
|
<span class="normal">2698</span>
|
|
<span class="normal">2699</span>
|
|
<span class="normal">2700</span>
|
|
<span class="normal">2701</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">FortranProgramWriter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Renders the final, compiled Fortran 95 post-processing modules.</span>
|
|
|
|
<span class="sd"> Uses Jinja2 templates to combine calculations, averages, declarations,</span>
|
|
<span class="sd"> reductions, subarray parallel IO writers, and pooled dynamic array buffers.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates the code module and prints it directly to standard output.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): The compiled context containing sorted equations and pooling allocations.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">from</span> <span class="nn">resources.m_template</span> <span class="kn">import</span> <span class="n">mod_form</span>
|
|
|
|
<span class="n">allvar</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">allvar</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">)</span>
|
|
|
|
<span class="n">generator</span> <span class="o">=</span> <span class="n">FortranCodeGenerator</span><span class="p">(</span><span class="n">allvar</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 평균 변수들을 순서대로 분배</span>
|
|
<span class="n">set1</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">a</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="n">AveragedField</span><span class="o">.</span><span class="n">pass1</span><span class="p">,</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">set2</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">a</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="n">AveragedField</span><span class="o">.</span><span class="n">pass2</span><span class="p">,</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="c1"># 외부 디스크 파일 익스포트 활성화 여부 확인</span>
|
|
<span class="n">set_export_on</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">export_on</span><span class="p">(),</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
|
|
|
<span class="n">ffmt</span> <span class="o">=</span> <span class="s1">'logical, parameter :: pass2_required=</span><span class="si">{}</span><span class="s1">'</span>
|
|
<span class="n">declf</span> <span class="o">=</span> <span class="n">ffmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s1">'.true.'</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">set2</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span> <span class="k">else</span> <span class="s1">'.false.'</span><span class="p">)</span>
|
|
|
|
<span class="n">hfmt</span> <span class="o">=</span> <span class="s1">'character (len = *), parameter :: output_header="</span><span class="si">{}</span><span class="s1">"'</span>
|
|
<span class="n">declh</span> <span class="o">=</span> <span class="n">hfmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"x"</span><span class="p">]</span> <span class="o">+</span> <span class="n">set1</span> <span class="o">+</span> <span class="n">set2</span><span class="p">))</span>
|
|
|
|
<span class="c1"># 공용 Pooling 3D 버퍼 배열의 선언/할당 코드 생성</span>
|
|
<span class="n">declarr</span><span class="p">,</span> <span class="n">allocarr</span><span class="p">,</span> <span class="n">freearr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">work_array_codes</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">narr</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 1차원 평균 물리량 배열들의 선언/할당 코드 생성</span>
|
|
<span class="n">declavg</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_decl</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">))</span>
|
|
<span class="n">allocavg</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_alloc</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">))</span>
|
|
<span class="n">freeavg</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_free</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">))</span>
|
|
|
|
<span class="c1"># 병렬 파일 쓰기(MPI Subarray)를 위한 MPI 리소스 선언/할당 코드 생성</span>
|
|
<span class="n">decl_export</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_decl</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">exporter</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set_export_on</span><span class="p">)</span>
|
|
<span class="n">alloc_export</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_alloc</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">exporter</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set_export_on</span><span class="p">)</span>
|
|
<span class="n">free_export</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_free</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">exporter</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set_export_on</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Pass 1과 Pass 2 루프 내부 본문 연산 코드들을 생성 (각자 버퍼 맵 alloc1, alloc2 적용)</span>
|
|
<span class="n">sub_calc1</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_code</span><span class="p">(</span><span class="n">allvar</span><span class="p">[</span><span class="n">v</span><span class="p">],</span> <span class="n">ctx</span><span class="o">.</span><span class="n">alloc1</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pass1</span> <span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span> <span class="ow">or</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">alloc1</span><span class="p">)</span>
|
|
<span class="n">sub_calc2</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_code</span><span class="p">(</span><span class="n">allvar</span><span class="p">[</span><span class="n">v</span><span class="p">],</span> <span class="n">ctx</span><span class="o">.</span><span class="n">alloc2</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pass2</span> <span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span> <span class="ow">or</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">alloc2</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 평균 누적 연산 코드 생성</span>
|
|
<span class="n">sub_avg1</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_avg</span><span class="p">(</span><span class="n">allvar</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set1</span><span class="p">)</span>
|
|
<span class="n">sub_avg2</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_avg</span><span class="p">(</span><span class="n">allvar</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set2</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 파일 쓰기 루틴 코드 생성</span>
|
|
<span class="n">sub_write_avg</span> <span class="o">=</span> <span class="n">generator</span><span class="o">.</span><span class="n">generate_write_avg</span><span class="p">(</span><span class="n">set1</span><span class="o">+</span><span class="n">set2</span><span class="p">)</span>
|
|
|
|
<span class="n">md</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_name"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"terms"</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_data"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">declf</span><span class="p">,</span> <span class="n">declh</span><span class="p">,</span> <span class="n">declavg</span><span class="p">,</span> <span class="n">FieldExporter</span><span class="o">.</span><span class="n">mpi_io_decl</span><span class="p">,</span> <span class="n">decl_export</span><span class="p">,</span> <span class="n">declarr</span><span class="p">))</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_init"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">allocavg</span><span class="p">,</span> <span class="n">alloc_export</span><span class="p">,</span> <span class="n">allocarr</span><span class="p">))</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_finalize"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">freeavg</span><span class="p">,</span> <span class="n">free_export</span><span class="p">,</span> <span class="n">freearr</span><span class="p">))</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_pass1"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_calc1</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_pass1_avg"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_avg1</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_pass2"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_calc2</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_pass2_avg"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_avg2</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_write_result"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_write_avg</span>
|
|
|
|
<span class="nb">print</span><span class="p">(</span><span class="n">Template</span><span class="p">(</span><span class="n">mod_form</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">md</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span> <span class="nf">work_array_codes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">narr</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates dynamic memory helper statements for shared xyzbuffer buffers.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> narr (int): Number of buffers needed.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (declarations_string, allocations_string, deallocations_string).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">array_name</span> <span class="o">=</span> <span class="s2">"xyzbuffer</span><span class="si">{}</span><span class="s2">"</span>
|
|
<span class="n">array_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">array_name</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">narr</span><span class="p">)]</span>
|
|
|
|
<span class="n">real_array_decl</span> <span class="o">=</span> <span class="s2">"real(real64), allocatable, dimension(:,:,:) :: </span><span class="si">{0}</span><span class="s2">"</span>
|
|
<span class="n">decl</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">real_array_decl</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">array_names</span><span class="p">])</span>
|
|
<span class="n">alloc</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">make_allocate</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">"nxp,nyp,nzp"</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">array_names</span><span class="p">])</span>
|
|
<span class="n">free</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"deallocate(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">array_names</span><span class="p">])</span>
|
|
|
|
<span class="k">return</span> <span class="n">decl</span><span class="p">,</span> <span class="n">alloc</span><span class="p">,</span> <span class="n">free</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranProgramWriter.work_array_codes" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">work_array_codes</span><span class="p">(</span><span class="n">narr</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates dynamic memory helper statements for shared xyzbuffer buffers.</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>narr</code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Number of buffers needed.</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>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>(declarations_string, allocations_string, deallocations_string).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2684</span>
|
|
<span class="normal">2685</span>
|
|
<span class="normal">2686</span>
|
|
<span class="normal">2687</span>
|
|
<span class="normal">2688</span>
|
|
<span class="normal">2689</span>
|
|
<span class="normal">2690</span>
|
|
<span class="normal">2691</span>
|
|
<span class="normal">2692</span>
|
|
<span class="normal">2693</span>
|
|
<span class="normal">2694</span>
|
|
<span class="normal">2695</span>
|
|
<span class="normal">2696</span>
|
|
<span class="normal">2697</span>
|
|
<span class="normal">2698</span>
|
|
<span class="normal">2699</span>
|
|
<span class="normal">2700</span>
|
|
<span class="normal">2701</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">work_array_codes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">narr</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates dynamic memory helper statements for shared xyzbuffer buffers.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> narr (int): Number of buffers needed.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (declarations_string, allocations_string, deallocations_string).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">array_name</span> <span class="o">=</span> <span class="s2">"xyzbuffer</span><span class="si">{}</span><span class="s2">"</span>
|
|
<span class="n">array_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">array_name</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">narr</span><span class="p">)]</span>
|
|
|
|
<span class="n">real_array_decl</span> <span class="o">=</span> <span class="s2">"real(real64), allocatable, dimension(:,:,:) :: </span><span class="si">{0}</span><span class="s2">"</span>
|
|
<span class="n">decl</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">real_array_decl</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">array_names</span><span class="p">])</span>
|
|
<span class="n">alloc</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">make_allocate</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">"nxp,nyp,nzp"</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">array_names</span><span class="p">])</span>
|
|
<span class="n">free</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"deallocate(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">array_names</span><span class="p">])</span>
|
|
|
|
<span class="k">return</span> <span class="n">decl</span><span class="p">,</span> <span class="n">alloc</span><span class="p">,</span> <span class="n">free</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FortranProgramWriter.write" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">write</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Generates the code module and prints it directly to standard output.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The compiled context containing sorted equations and pooling allocations.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2621</span>
|
|
<span class="normal">2622</span>
|
|
<span class="normal">2623</span>
|
|
<span class="normal">2624</span>
|
|
<span class="normal">2625</span>
|
|
<span class="normal">2626</span>
|
|
<span class="normal">2627</span>
|
|
<span class="normal">2628</span>
|
|
<span class="normal">2629</span>
|
|
<span class="normal">2630</span>
|
|
<span class="normal">2631</span>
|
|
<span class="normal">2632</span>
|
|
<span class="normal">2633</span>
|
|
<span class="normal">2634</span>
|
|
<span class="normal">2635</span>
|
|
<span class="normal">2636</span>
|
|
<span class="normal">2637</span>
|
|
<span class="normal">2638</span>
|
|
<span class="normal">2639</span>
|
|
<span class="normal">2640</span>
|
|
<span class="normal">2641</span>
|
|
<span class="normal">2642</span>
|
|
<span class="normal">2643</span>
|
|
<span class="normal">2644</span>
|
|
<span class="normal">2645</span>
|
|
<span class="normal">2646</span>
|
|
<span class="normal">2647</span>
|
|
<span class="normal">2648</span>
|
|
<span class="normal">2649</span>
|
|
<span class="normal">2650</span>
|
|
<span class="normal">2651</span>
|
|
<span class="normal">2652</span>
|
|
<span class="normal">2653</span>
|
|
<span class="normal">2654</span>
|
|
<span class="normal">2655</span>
|
|
<span class="normal">2656</span>
|
|
<span class="normal">2657</span>
|
|
<span class="normal">2658</span>
|
|
<span class="normal">2659</span>
|
|
<span class="normal">2660</span>
|
|
<span class="normal">2661</span>
|
|
<span class="normal">2662</span>
|
|
<span class="normal">2663</span>
|
|
<span class="normal">2664</span>
|
|
<span class="normal">2665</span>
|
|
<span class="normal">2666</span>
|
|
<span class="normal">2667</span>
|
|
<span class="normal">2668</span>
|
|
<span class="normal">2669</span>
|
|
<span class="normal">2670</span>
|
|
<span class="normal">2671</span>
|
|
<span class="normal">2672</span>
|
|
<span class="normal">2673</span>
|
|
<span class="normal">2674</span>
|
|
<span class="normal">2675</span>
|
|
<span class="normal">2676</span>
|
|
<span class="normal">2677</span>
|
|
<span class="normal">2678</span>
|
|
<span class="normal">2679</span>
|
|
<span class="normal">2680</span>
|
|
<span class="normal">2681</span>
|
|
<span class="normal">2682</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Generates the code module and prints it directly to standard output.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): The compiled context containing sorted equations and pooling allocations.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">from</span> <span class="nn">resources.m_template</span> <span class="kn">import</span> <span class="n">mod_form</span>
|
|
|
|
<span class="n">allvar</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">allvar</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">)</span>
|
|
|
|
<span class="n">generator</span> <span class="o">=</span> <span class="n">FortranCodeGenerator</span><span class="p">(</span><span class="n">allvar</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 평균 변수들을 순서대로 분배</span>
|
|
<span class="n">set1</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">a</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="n">AveragedField</span><span class="o">.</span><span class="n">pass1</span><span class="p">,</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">set2</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">a</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="n">AveragedField</span><span class="o">.</span><span class="n">pass2</span><span class="p">,</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="c1"># 외부 디스크 파일 익스포트 활성화 여부 확인</span>
|
|
<span class="n">set_export_on</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">export_on</span><span class="p">(),</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
|
|
|
<span class="n">ffmt</span> <span class="o">=</span> <span class="s1">'logical, parameter :: pass2_required=</span><span class="si">{}</span><span class="s1">'</span>
|
|
<span class="n">declf</span> <span class="o">=</span> <span class="n">ffmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s1">'.true.'</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">set2</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span> <span class="k">else</span> <span class="s1">'.false.'</span><span class="p">)</span>
|
|
|
|
<span class="n">hfmt</span> <span class="o">=</span> <span class="s1">'character (len = *), parameter :: output_header="</span><span class="si">{}</span><span class="s1">"'</span>
|
|
<span class="n">declh</span> <span class="o">=</span> <span class="n">hfmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"x"</span><span class="p">]</span> <span class="o">+</span> <span class="n">set1</span> <span class="o">+</span> <span class="n">set2</span><span class="p">))</span>
|
|
|
|
<span class="c1"># 공용 Pooling 3D 버퍼 배열의 선언/할당 코드 생성</span>
|
|
<span class="n">declarr</span><span class="p">,</span> <span class="n">allocarr</span><span class="p">,</span> <span class="n">freearr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">work_array_codes</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">narr</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 1차원 평균 물리량 배열들의 선언/할당 코드 생성</span>
|
|
<span class="n">declavg</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_decl</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">))</span>
|
|
<span class="n">allocavg</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_alloc</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">))</span>
|
|
<span class="n">freeavg</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_free</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">))</span>
|
|
|
|
<span class="c1"># 병렬 파일 쓰기(MPI Subarray)를 위한 MPI 리소스 선언/할당 코드 생성</span>
|
|
<span class="n">decl_export</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_decl</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">exporter</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set_export_on</span><span class="p">)</span>
|
|
<span class="n">alloc_export</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_alloc</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">exporter</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set_export_on</span><span class="p">)</span>
|
|
<span class="n">free_export</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_free</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">exporter</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set_export_on</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Pass 1과 Pass 2 루프 내부 본문 연산 코드들을 생성 (각자 버퍼 맵 alloc1, alloc2 적용)</span>
|
|
<span class="n">sub_calc1</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_code</span><span class="p">(</span><span class="n">allvar</span><span class="p">[</span><span class="n">v</span><span class="p">],</span> <span class="n">ctx</span><span class="o">.</span><span class="n">alloc1</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pass1</span> <span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span> <span class="ow">or</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">alloc1</span><span class="p">)</span>
|
|
<span class="n">sub_calc2</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_code</span><span class="p">(</span><span class="n">allvar</span><span class="p">[</span><span class="n">v</span><span class="p">],</span> <span class="n">ctx</span><span class="o">.</span><span class="n">alloc2</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pass2</span> <span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span> <span class="ow">or</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">alloc2</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 평균 누적 연산 코드 생성</span>
|
|
<span class="n">sub_avg1</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_avg</span><span class="p">(</span><span class="n">allvar</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set1</span><span class="p">)</span>
|
|
<span class="n">sub_avg2</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">generate_avg</span><span class="p">(</span><span class="n">allvar</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">set2</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 파일 쓰기 루틴 코드 생성</span>
|
|
<span class="n">sub_write_avg</span> <span class="o">=</span> <span class="n">generator</span><span class="o">.</span><span class="n">generate_write_avg</span><span class="p">(</span><span class="n">set1</span><span class="o">+</span><span class="n">set2</span><span class="p">)</span>
|
|
|
|
<span class="n">md</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_name"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"terms"</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_data"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">declf</span><span class="p">,</span> <span class="n">declh</span><span class="p">,</span> <span class="n">declavg</span><span class="p">,</span> <span class="n">FieldExporter</span><span class="o">.</span><span class="n">mpi_io_decl</span><span class="p">,</span> <span class="n">decl_export</span><span class="p">,</span> <span class="n">declarr</span><span class="p">))</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_init"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">allocavg</span><span class="p">,</span> <span class="n">alloc_export</span><span class="p">,</span> <span class="n">allocarr</span><span class="p">))</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_finalize"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">freeavg</span><span class="p">,</span> <span class="n">free_export</span><span class="p">,</span> <span class="n">freearr</span><span class="p">))</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_pass1"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_calc1</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_pass1_avg"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_avg1</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_pass2"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_calc2</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_pass2_avg"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_avg2</span>
|
|
<span class="n">md</span><span class="p">[</span><span class="s2">"module_write_result"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sub_write_avg</span>
|
|
|
|
<span class="nb">print</span><span class="p">(</span><span class="n">Template</span><span class="p">(</span><span class="n">mod_form</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">md</span><span class="p">))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.FortranTemplateStore" class="doc doc-heading">
|
|
<code>FortranTemplateStore</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Static store containing Jinja2 code templates for generating Fortran source blocks.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.REAL_ARRAY_LOOP">REAL_ARRAY_LOOP</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Standard 3D loop for calculating derived variables, integrating SymPy CSE blocks.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FLUCTUATION_ARRAY_LOOP">FLUCTUATION_ARRAY_LOOP</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Loop for calculating fluctuation fields (with averages subtracted).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.AVG_ARRAY_SUM">AVG_ARRAY_SUM</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Accumulator loop to sum grid values for spatial averaging.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.AVG_ARRAY_DIVIDE">AVG_ARRAY_DIVIDE</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Global MPI MPI_ALLREDUCE and divide step to finalize statistics.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FMT_DECL_SUBARRAY">FMT_DECL_SUBARRAY</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>MPI subarray-based I/O file handle and type variable declarations.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FMT_INIT_SUBARRAY">FMT_INIT_SUBARRAY</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Initialization block for creating MPI file handles and commit subarray types.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FMT_FINAL_SUBARRAY">FMT_FINAL_SUBARRAY</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Cleanup code block to close and release MPI types and file handles.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FMT_CALC_SUBARRAY">FMT_CALC_SUBARRAY</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Actual high-performance parallel MPI file writing using subarray layout.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FMT_DECL_LEGACY">FMT_DECL_LEGACY</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Declarations for legacy, process-local buffer-based MPI exports.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FMT_INIT_LEGACY">FMT_INIT_LEGACY</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Allocation and initialization for legacy buffer arrays.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FMT_FINAL_LEGACY">FMT_FINAL_LEGACY</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Finalization and deallocation for legacy buffer arrays.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.FMT_CALC_LEGACY">FMT_CALC_LEGACY</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Data slicing and local buffer writing for legacy export routines.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="post.FortranTemplateStore.AVG_ARRAY_WRITE">AVG_ARRAY_WRITE</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Serial file writing structure for exporting 1D averaged data and derivatives.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></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>
|
|
<span class="normal">184</span>
|
|
<span class="normal">185</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>
|
|
<span class="normal">194</span>
|
|
<span class="normal">195</span>
|
|
<span class="normal">196</span>
|
|
<span class="normal">197</span>
|
|
<span class="normal">198</span>
|
|
<span class="normal">199</span>
|
|
<span class="normal">200</span>
|
|
<span class="normal">201</span>
|
|
<span class="normal">202</span>
|
|
<span class="normal">203</span>
|
|
<span class="normal">204</span>
|
|
<span class="normal">205</span>
|
|
<span class="normal">206</span>
|
|
<span class="normal">207</span>
|
|
<span class="normal">208</span>
|
|
<span class="normal">209</span>
|
|
<span class="normal">210</span>
|
|
<span class="normal">211</span>
|
|
<span class="normal">212</span>
|
|
<span class="normal">213</span>
|
|
<span class="normal">214</span>
|
|
<span class="normal">215</span>
|
|
<span class="normal">216</span>
|
|
<span class="normal">217</span>
|
|
<span class="normal">218</span>
|
|
<span class="normal">219</span>
|
|
<span class="normal">220</span>
|
|
<span class="normal">221</span>
|
|
<span class="normal">222</span>
|
|
<span class="normal">223</span>
|
|
<span class="normal">224</span>
|
|
<span class="normal">225</span>
|
|
<span class="normal">226</span>
|
|
<span class="normal">227</span>
|
|
<span class="normal">228</span>
|
|
<span class="normal">229</span>
|
|
<span class="normal">230</span>
|
|
<span class="normal">231</span>
|
|
<span class="normal">232</span>
|
|
<span class="normal">233</span>
|
|
<span class="normal">234</span>
|
|
<span class="normal">235</span>
|
|
<span class="normal">236</span>
|
|
<span class="normal">237</span>
|
|
<span class="normal">238</span>
|
|
<span class="normal">239</span>
|
|
<span class="normal">240</span>
|
|
<span class="normal">241</span>
|
|
<span class="normal">242</span>
|
|
<span class="normal">243</span>
|
|
<span class="normal">244</span>
|
|
<span class="normal">245</span>
|
|
<span class="normal">246</span>
|
|
<span class="normal">247</span>
|
|
<span class="normal">248</span>
|
|
<span class="normal">249</span>
|
|
<span class="normal">250</span>
|
|
<span class="normal">251</span>
|
|
<span class="normal">252</span>
|
|
<span class="normal">253</span>
|
|
<span class="normal">254</span>
|
|
<span class="normal">255</span>
|
|
<span class="normal">256</span>
|
|
<span class="normal">257</span>
|
|
<span class="normal">258</span>
|
|
<span class="normal">259</span>
|
|
<span class="normal">260</span>
|
|
<span class="normal">261</span>
|
|
<span class="normal">262</span>
|
|
<span class="normal">263</span>
|
|
<span class="normal">264</span>
|
|
<span class="normal">265</span>
|
|
<span class="normal">266</span>
|
|
<span class="normal">267</span>
|
|
<span class="normal">268</span>
|
|
<span class="normal">269</span>
|
|
<span class="normal">270</span>
|
|
<span class="normal">271</span>
|
|
<span class="normal">272</span>
|
|
<span class="normal">273</span>
|
|
<span class="normal">274</span>
|
|
<span class="normal">275</span>
|
|
<span class="normal">276</span>
|
|
<span class="normal">277</span>
|
|
<span class="normal">278</span>
|
|
<span class="normal">279</span>
|
|
<span class="normal">280</span>
|
|
<span class="normal">281</span>
|
|
<span class="normal">282</span>
|
|
<span class="normal">283</span>
|
|
<span class="normal">284</span>
|
|
<span class="normal">285</span>
|
|
<span class="normal">286</span>
|
|
<span class="normal">287</span>
|
|
<span class="normal">288</span>
|
|
<span class="normal">289</span>
|
|
<span class="normal">290</span>
|
|
<span class="normal">291</span>
|
|
<span class="normal">292</span>
|
|
<span class="normal">293</span>
|
|
<span class="normal">294</span>
|
|
<span class="normal">295</span>
|
|
<span class="normal">296</span>
|
|
<span class="normal">297</span>
|
|
<span class="normal">298</span>
|
|
<span class="normal">299</span>
|
|
<span class="normal">300</span>
|
|
<span class="normal">301</span>
|
|
<span class="normal">302</span>
|
|
<span class="normal">303</span>
|
|
<span class="normal">304</span>
|
|
<span class="normal">305</span>
|
|
<span class="normal">306</span>
|
|
<span class="normal">307</span>
|
|
<span class="normal">308</span>
|
|
<span class="normal">309</span>
|
|
<span class="normal">310</span>
|
|
<span class="normal">311</span>
|
|
<span class="normal">312</span>
|
|
<span class="normal">313</span>
|
|
<span class="normal">314</span>
|
|
<span class="normal">315</span>
|
|
<span class="normal">316</span>
|
|
<span class="normal">317</span>
|
|
<span class="normal">318</span>
|
|
<span class="normal">319</span>
|
|
<span class="normal">320</span>
|
|
<span class="normal">321</span>
|
|
<span class="normal">322</span>
|
|
<span class="normal">323</span>
|
|
<span class="normal">324</span>
|
|
<span class="normal">325</span>
|
|
<span class="normal">326</span>
|
|
<span class="normal">327</span>
|
|
<span class="normal">328</span>
|
|
<span class="normal">329</span>
|
|
<span class="normal">330</span>
|
|
<span class="normal">331</span>
|
|
<span class="normal">332</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">FortranTemplateStore</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Static store containing Jinja2 code templates for generating Fortran source blocks.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> REAL_ARRAY_LOOP (str): Standard 3D loop for calculating derived variables, integrating SymPy CSE blocks.</span>
|
|
<span class="sd"> FLUCTUATION_ARRAY_LOOP (str): Loop for calculating fluctuation fields (with averages subtracted).</span>
|
|
<span class="sd"> AVG_ARRAY_SUM (str): Accumulator loop to sum grid values for spatial averaging.</span>
|
|
<span class="sd"> AVG_ARRAY_DIVIDE (str): Global MPI MPI_ALLREDUCE and divide step to finalize statistics.</span>
|
|
<span class="sd"> FMT_DECL_SUBARRAY (str): MPI subarray-based I/O file handle and type variable declarations.</span>
|
|
<span class="sd"> FMT_INIT_SUBARRAY (str): Initialization block for creating MPI file handles and commit subarray types.</span>
|
|
<span class="sd"> FMT_FINAL_SUBARRAY (str): Cleanup code block to close and release MPI types and file handles.</span>
|
|
<span class="sd"> FMT_CALC_SUBARRAY (str): Actual high-performance parallel MPI file writing using subarray layout.</span>
|
|
<span class="sd"> FMT_DECL_LEGACY (str): Declarations for legacy, process-local buffer-based MPI exports.</span>
|
|
<span class="sd"> FMT_INIT_LEGACY (str): Allocation and initialization for legacy buffer arrays.</span>
|
|
<span class="sd"> FMT_FINAL_LEGACY (str): Finalization and deallocation for legacy buffer arrays.</span>
|
|
<span class="sd"> FMT_CALC_LEGACY (str): Data slicing and local buffer writing for legacy export routines.</span>
|
|
<span class="sd"> AVG_ARRAY_WRITE (str): Serial file writing structure for exporting 1D averaged data and derivatives.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">REAL_ARRAY_LOOP</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! {{ comment }}</span>
|
|
<span class="s2">{</span><span class="si">% i</span><span class="s2">f decls_str -%}</span>
|
|
<span class="s2">block</span>
|
|
<span class="s2">{{ decls_str | indent(4, True) }}</span>
|
|
<span class="s2">{</span><span class="si">%- e</span><span class="s2">ndif %}</span>
|
|
<span class="s2">do k = 1, nzp</span>
|
|
<span class="s2">do j = 1, nyp</span>
|
|
<span class="s2">do i = 1, nxp</span>
|
|
<span class="s2">{</span><span class="si">% i</span><span class="s2">f assigns_str -%}</span>
|
|
<span class="s2">{{ assigns_str | indent(4, True) }}</span>
|
|
<span class="s2"> {{ array }}(i,j,k) = {{ rhs }}</span>
|
|
<span class="s2">{</span><span class="si">%- e</span><span class="s2">lse -%}</span>
|
|
<span class="s2"> {{ array }}(i,j,k) = {{ rhs }}</span>
|
|
<span class="s2">{</span><span class="si">%- e</span><span class="s2">ndif %}</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">{</span><span class="si">% i</span><span class="s2">f decls_str -%}</span>
|
|
<span class="s2">end block</span>
|
|
<span class="s2">{</span><span class="si">%- e</span><span class="s2">ndif %}</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FLUCTUATION_ARRAY_LOOP</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! {{ comment }}</span>
|
|
<span class="s2">do k = 1, nzp</span>
|
|
<span class="s2">do j = 1, nyp</span>
|
|
<span class="s2">do i = 1, nxp</span>
|
|
<span class="s2">{{ array }}(i,j,k) = {{ rhs }}</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">AVG_ARRAY_SUM</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">do k = 1, nzp</span>
|
|
<span class="s2">do j = 1, nyp</span>
|
|
<span class="s2">do i = 1, nxp</span>
|
|
<span class="s2">{{ name }}(i) = {{ name }}(i) + {{ arrname }}</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">AVG_ARRAY_DIVIDE</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">call MPI_ALLREDUCE(MPI_IN_PLACE, {{ name }}, nxp, MPI_REAL8, MPI_SUM, MPI_COMM_TASK, mpi_err)</span>
|
|
|
|
<span class="s2">{{ name }} = {{ name }} {{ dWeight }} / denum</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FMT_DECL_SUBARRAY</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! - file_handles and mpi_infos</span>
|
|
<span class="s2">integer(kind=MPI_INTEGER_KIND) :: {{ field_name }}_fh</span>
|
|
<span class="s2">integer(kind=MPI_INTEGER_KIND) :: {{ field_name }}_info</span>
|
|
<span class="s2">integer(kind=MPI_INTEGER_KIND) :: {{ field_name }}_filetype</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FMT_INIT_SUBARRAY</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! init subarray datatype for {{ field_name }}</span>
|
|
<span class="s2">block</span>
|
|
<span class="s2"> integer(4) :: sizes(3), subsizes(3), starts(3)</span>
|
|
<span class="s2"> call MPI_INFO_CREATE({{ field_name }}_info, mpi_err)</span>
|
|
<span class="s2"> call MPI_FILE_OPEN(MPI_COMM_TASK,'export-{{ field_name }}.dat',MPI_MODE_WRONLY+MPI_MODE_CREATE,{{ field_name }}_info,{{ field_name }}_fh,mpi_err)</span>
|
|
<span class="s2"> sizes = (/ nxp, nyp, nzp /)</span>
|
|
<span class="s2"> subsizes = (/ {{ len_xpts }}, {{ ye }} - {{ ys }} + 1, {{ ze }} - {{ zs }} + 1 /)</span>
|
|
<span class="s2"> starts = (/ {{ xs }} - 1, {{ ys }} - 1, {{ zs }} - 1 /)</span>
|
|
<span class="s2"> call MPI_TYPE_CREATE_SUBARRAY(3, sizes, subsizes, starts, MPI_ORDER_FORTRAN, MPI_REAL8, {{ field_name }}_filetype, mpi_err)</span>
|
|
<span class="s2"> call MPI_TYPE_COMMIT({{ field_name }}_filetype, mpi_err)</span>
|
|
<span class="s2">end block</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FMT_FINAL_SUBARRAY</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! finalize</span>
|
|
<span class="s2">call MPI_FILE_CLOSE({{ field_name }}_fh, mpi_err)</span>
|
|
<span class="s2">call MPI_INFO_FREE({{ field_name }}_info, mpi_err)</span>
|
|
<span class="s2">call MPI_TYPE_FREE({{ field_name }}_filetype, mpi_err)</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FMT_CALC_SUBARRAY</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! write to file via MPI Subarray</span>
|
|
<span class="s2">count = ({{ len_xpts }}) * ({{ ye }} - {{ ys }} + 1) * ({{ ze }} - {{ zs }} + 1)</span>
|
|
<span class="s2">offset = export_offset(fidx) * count * 8</span>
|
|
<span class="s2">call MPI_FILE_WRITE_AT({{ field_name }}_fh, offset, {{ work_array }}, 1, {{ field_name }}_filetype, mpi_status, mpi_err)</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FMT_DECL_LEGACY</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! - file_handles and mpi_infos</span>
|
|
<span class="s2">integer(kind=MPI_INTEGER_KIND) :: {{ field_name }}_fh</span>
|
|
<span class="s2">integer(kind=MPI_INTEGER_KIND) :: {{ field_name }}_info</span>
|
|
|
|
<span class="s2">! - buffer</span>
|
|
<span class="s2">real(real64), allocatable, dimension(:,:,:) :: {{ field_name }}_export_array</span>
|
|
<span class="s2">integer, allocatable, dimension(:) :: {{ field_name }}_xpts</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FMT_INIT_LEGACY</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! init</span>
|
|
<span class="s2">call MPI_INFO_CREATE({{ field_name }}_info, mpi_err)</span>
|
|
<span class="s2">call MPI_FILE_OPEN(MPI_COMM_TASK,'export-{{ field_name }}.dat',MPI_MODE_WRONLY+MPI_MODE_CREATE,{{ field_name }}_info,{{ field_name }}_fh,mpi_err)</span>
|
|
<span class="s2">allocate({{ field_name }}_export_array(1:{{ len_xpts }},{{ ys }}:{{ ye }},{{ zs }}:{{ ze }}), stat=ierr)</span>
|
|
<span class="s2">if (ierr /= 0) then</span>
|
|
<span class="s2"> write(0,*) 'Error: allocation of {{ field_name }}_export_array failed on process', myid</span>
|
|
<span class="s2"> call MPI_ABORT(MPI_COMM_TASK, 1, mpi_err)</span>
|
|
<span class="s2">end if</span>
|
|
<span class="s2">{{ field_name }}_export_array = 0.</span>
|
|
<span class="s2">allocate({{ field_name }}_xpts(1:{{ len_xpts }}), stat=ierr)</span>
|
|
<span class="s2">if (ierr /= 0) then</span>
|
|
<span class="s2"> write(0,*) 'Error: allocation of {{ field_name }}_xpts failed on process', myid</span>
|
|
<span class="s2"> call MPI_ABORT(MPI_COMM_TASK, 1, mpi_err)</span>
|
|
<span class="s2">end if</span>
|
|
<span class="s2">{{ xpts_init }}</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FMT_FINAL_LEGACY</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! finalize</span>
|
|
<span class="s2">call MPI_FILE_CLOSE({{ field_name }}_fh, mpi_err)</span>
|
|
<span class="s2">call MPI_INFO_FREE({{ field_name }}_info, mpi_err)</span>
|
|
<span class="s2">deallocate({{ field_name }}_export_array)</span>
|
|
<span class="s2">deallocate({{ field_name }}_xpts)</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">FMT_CALC_LEGACY</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">! copy to array for export</span>
|
|
<span class="s2">do k = {{ zs }}, {{ ze }}</span>
|
|
<span class="s2">do j = {{ ys }}, {{ ye }}</span>
|
|
<span class="s2">do i = 1, {{ len_xpts }}</span>
|
|
<span class="s2">{{ field_name }}_export_array(i,j,k) = {{ work_array }}({{ field_name }}_xpts(i),j,k)</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">end do</span>
|
|
|
|
<span class="s2">! write to file</span>
|
|
<span class="s2">count = ({{ len_xpts }}) * ({{ ye }} - {{ ys }} + 1) * ({{ ze }} - {{ zs }} + 1)</span>
|
|
<span class="s2">offset = export_offset(fidx) * count * 8</span>
|
|
<span class="s2">call MPI_FILE_WRITE_AT({{ field_name }}_fh, offset, {{ field_name }}_export_array, count, MPI_REAL8, mpi_status, mpi_err)</span>
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="n">AVG_ARRAY_WRITE</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">real(real64), dimension(nxp) :: xbuffer</span>
|
|
<span class="s2">integer :: i</span>
|
|
|
|
<span class="s2">open (200, file="qEdge_X.dat")</span>
|
|
<span class="s2">write (200,*) output_header</span>
|
|
<span class="s2">do i=1,nxp</span>
|
|
<span class="s2"> write (200,'({{ num_args }}e20.10)') real(i)*hxp, {{ formatted_avglist }}</span>
|
|
<span class="s2">end do</span>
|
|
<span class="s2">close (200)</span>
|
|
|
|
<span class="s2">open (200, file="d1.dat")</span>
|
|
<span class="s2">{{ deriv1_lines }}</span>
|
|
<span class="s2">close (200)</span>
|
|
|
|
<span class="s2">open (200, file="d2.dat")</span>
|
|
<span class="s2">{{ deriv2_lines }}</span>
|
|
<span class="s2">close (200)</span>
|
|
<span class="s2">"""</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.FunctionRegistry" class="doc doc-heading">
|
|
<code>FunctionRegistry</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Registry to map mathematical DSL functions to SymPy constructors and LaTeX representations.</p>
|
|
<p>This class enables SOLID Open-Closed Principle (OCP) compliance by decoupling core parsing
|
|
logic from mathematical functions, allowing new functions to be added without modifying the parser.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></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>
|
|
<span class="normal">75</span>
|
|
<span class="normal">76</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></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">FunctionRegistry</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Registry to map mathematical DSL functions to SymPy constructors and LaTeX representations.</span>
|
|
|
|
<span class="sd"> This class enables SOLID Open-Closed Principle (OCP) compliance by decoupling core parsing</span>
|
|
<span class="sd"> logic from mathematical functions, allowing new functions to be added without modifying the parser.</span>
|
|
<span class="sd"> """</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="w"> </span><span class="sd">"""Initializes FunctionRegistry with empty SymPy and LaTeX mappings."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_sympy_registry</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_latex_registry</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="k">def</span> <span class="nf">register_sympy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sympy_builder</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Registers a handler to convert a DSL function to a SymPy representation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the DSL function.</span>
|
|
<span class="sd"> sympy_builder (callable): A callable mapping function arguments to a SymPy object.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_sympy_registry</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">sympy_builder</span>
|
|
|
|
<span class="k">def</span> <span class="nf">register_latex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">latex_builder</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Registers a handler to convert a DSL function to a LaTeX math representation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the DSL function.</span>
|
|
<span class="sd"> latex_builder (callable): A callable mapping arguments to a LaTeX string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_latex_registry</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">latex_builder</span>
|
|
|
|
<span class="k">def</span> <span class="nf">to_sympy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts a function call to its corresponding SymPy expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the function.</span>
|
|
<span class="sd"> *args: Arguments to pass to the sympy builder.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy node representation of the function call.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sympy_registry</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sympy_registry</span><span class="p">[</span><span class="n">name</span><span class="p">](</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">to_latex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts a function call to its corresponding LaTeX representation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the function.</span>
|
|
<span class="sd"> *args (str): Already-formatted LaTeX strings of the arguments.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: The LaTeX math representation of the function call.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_latex_registry</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_latex_registry</span><span class="p">[</span><span class="n">name</span><span class="p">](</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="n">b</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="sa">r</span><span class="s2">"</span><span class="si">{}</span><span class="s2">{{(</span><span class="si">{}</span><span class="s2">)}}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="sa">r</span><span class="s2">"\mathrm{{</span><span class="si">{}</span><span class="s2">}}(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">b</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="post.FunctionRegistry.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes FunctionRegistry with empty SymPy and LaTeX mappings.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">41</span>
|
|
<span class="normal">42</span>
|
|
<span class="normal">43</span>
|
|
<span class="normal">44</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="w"> </span><span class="sd">"""Initializes FunctionRegistry with empty SymPy and LaTeX mappings."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_sympy_registry</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_latex_registry</span> <span class="o">=</span> <span class="p">{}</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FunctionRegistry.register_latex" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">register_latex</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">latex_builder</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Registers a handler to convert a DSL function to a LaTeX math representation.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The name of the DSL function.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>latex_builder</code></td>
|
|
<td>
|
|
<code>callable</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>A callable mapping arguments to a LaTeX string.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></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></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">register_latex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">latex_builder</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Registers a handler to convert a DSL function to a LaTeX math representation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the DSL function.</span>
|
|
<span class="sd"> latex_builder (callable): A callable mapping arguments to a LaTeX string.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_latex_registry</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">latex_builder</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FunctionRegistry.register_sympy" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">register_sympy</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">sympy_builder</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Registers a handler to convert a DSL function to a SymPy representation.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The name of the DSL function.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>sympy_builder</code></td>
|
|
<td>
|
|
<code>callable</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>A callable mapping function arguments to a SymPy object.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></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></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">register_sympy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">sympy_builder</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Registers a handler to convert a DSL function to a SymPy representation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the DSL function.</span>
|
|
<span class="sd"> sympy_builder (callable): A callable mapping function arguments to a SymPy object.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_sympy_registry</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">sympy_builder</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FunctionRegistry.to_latex" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">to_latex</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts a function call to its corresponding LaTeX representation.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The name of the function.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>*args</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Already-formatted LaTeX strings of the arguments.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>()</code>
|
|
</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 LaTeX math representation of the function call.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></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></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">to_latex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts a function call to its corresponding LaTeX representation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the function.</span>
|
|
<span class="sd"> *args (str): Already-formatted LaTeX strings of the arguments.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: The LaTeX math representation of the function call.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_latex_registry</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_latex_registry</span><span class="p">[</span><span class="n">name</span><span class="p">](</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="n">b</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="sa">r</span><span class="s2">"</span><span class="si">{}</span><span class="s2">{{(</span><span class="si">{}</span><span class="s2">)}}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="sa">r</span><span class="s2">"\mathrm{{</span><span class="si">{}</span><span class="s2">}}(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.FunctionRegistry.to_sympy" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">to_sympy</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts a function call to its corresponding SymPy expression.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The name of the function.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>*args</code></td>
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Arguments to pass to the sympy builder.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>()</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: SymPy node representation of the function call.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></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>
|
|
<span class="normal">75</span>
|
|
<span class="normal">76</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">to_sympy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts a function call to its corresponding SymPy expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the function.</span>
|
|
<span class="sd"> *args: Arguments to pass to the sympy builder.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy node representation of the function call.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sympy_registry</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sympy_registry</span><span class="p">[</span><span class="n">name</span><span class="p">](</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.LarkToSympy" class="doc doc-heading">
|
|
<code>LarkToSympy</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><span title="lark.Transformer">Transformer</span></code></p>
|
|
|
|
|
|
<p>Transformer to convert Lark AST math nodes to SymPy symbolic expressions.</p>
|
|
<p>Maps DSL expression trees into SymPy expressions to allow down-pipeline algebraic
|
|
simplification, common subexpression elimination (CSE), and memory optimization.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">703</span>
|
|
<span class="normal">704</span>
|
|
<span class="normal">705</span>
|
|
<span class="normal">706</span>
|
|
<span class="normal">707</span>
|
|
<span class="normal">708</span>
|
|
<span class="normal">709</span>
|
|
<span class="normal">710</span>
|
|
<span class="normal">711</span>
|
|
<span class="normal">712</span>
|
|
<span class="normal">713</span>
|
|
<span class="normal">714</span>
|
|
<span class="normal">715</span>
|
|
<span class="normal">716</span>
|
|
<span class="normal">717</span>
|
|
<span class="normal">718</span>
|
|
<span class="normal">719</span>
|
|
<span class="normal">720</span>
|
|
<span class="normal">721</span>
|
|
<span class="normal">722</span>
|
|
<span class="normal">723</span>
|
|
<span class="normal">724</span>
|
|
<span class="normal">725</span>
|
|
<span class="normal">726</span>
|
|
<span class="normal">727</span>
|
|
<span class="normal">728</span>
|
|
<span class="normal">729</span>
|
|
<span class="normal">730</span>
|
|
<span class="normal">731</span>
|
|
<span class="normal">732</span>
|
|
<span class="normal">733</span>
|
|
<span class="normal">734</span>
|
|
<span class="normal">735</span>
|
|
<span class="normal">736</span>
|
|
<span class="normal">737</span>
|
|
<span class="normal">738</span>
|
|
<span class="normal">739</span>
|
|
<span class="normal">740</span>
|
|
<span class="normal">741</span>
|
|
<span class="normal">742</span>
|
|
<span class="normal">743</span>
|
|
<span class="normal">744</span>
|
|
<span class="normal">745</span>
|
|
<span class="normal">746</span>
|
|
<span class="normal">747</span>
|
|
<span class="normal">748</span>
|
|
<span class="normal">749</span>
|
|
<span class="normal">750</span>
|
|
<span class="normal">751</span>
|
|
<span class="normal">752</span>
|
|
<span class="normal">753</span>
|
|
<span class="normal">754</span>
|
|
<span class="normal">755</span>
|
|
<span class="normal">756</span>
|
|
<span class="normal">757</span>
|
|
<span class="normal">758</span>
|
|
<span class="normal">759</span>
|
|
<span class="normal">760</span>
|
|
<span class="normal">761</span>
|
|
<span class="normal">762</span>
|
|
<span class="normal">763</span>
|
|
<span class="normal">764</span>
|
|
<span class="normal">765</span>
|
|
<span class="normal">766</span>
|
|
<span class="normal">767</span>
|
|
<span class="normal">768</span>
|
|
<span class="normal">769</span>
|
|
<span class="normal">770</span>
|
|
<span class="normal">771</span>
|
|
<span class="normal">772</span>
|
|
<span class="normal">773</span>
|
|
<span class="normal">774</span>
|
|
<span class="normal">775</span>
|
|
<span class="normal">776</span>
|
|
<span class="normal">777</span>
|
|
<span class="normal">778</span>
|
|
<span class="normal">779</span>
|
|
<span class="normal">780</span>
|
|
<span class="normal">781</span>
|
|
<span class="normal">782</span>
|
|
<span class="normal">783</span>
|
|
<span class="normal">784</span>
|
|
<span class="normal">785</span>
|
|
<span class="normal">786</span>
|
|
<span class="normal">787</span>
|
|
<span class="normal">788</span>
|
|
<span class="normal">789</span>
|
|
<span class="normal">790</span>
|
|
<span class="normal">791</span>
|
|
<span class="normal">792</span>
|
|
<span class="normal">793</span>
|
|
<span class="normal">794</span>
|
|
<span class="normal">795</span>
|
|
<span class="normal">796</span>
|
|
<span class="normal">797</span>
|
|
<span class="normal">798</span>
|
|
<span class="normal">799</span>
|
|
<span class="normal">800</span>
|
|
<span class="normal">801</span>
|
|
<span class="normal">802</span>
|
|
<span class="normal">803</span>
|
|
<span class="normal">804</span>
|
|
<span class="normal">805</span>
|
|
<span class="normal">806</span>
|
|
<span class="normal">807</span>
|
|
<span class="normal">808</span>
|
|
<span class="normal">809</span>
|
|
<span class="normal">810</span>
|
|
<span class="normal">811</span>
|
|
<span class="normal">812</span>
|
|
<span class="normal">813</span>
|
|
<span class="normal">814</span>
|
|
<span class="normal">815</span>
|
|
<span class="normal">816</span>
|
|
<span class="normal">817</span>
|
|
<span class="normal">818</span>
|
|
<span class="normal">819</span>
|
|
<span class="normal">820</span>
|
|
<span class="normal">821</span>
|
|
<span class="normal">822</span>
|
|
<span class="normal">823</span>
|
|
<span class="normal">824</span>
|
|
<span class="normal">825</span>
|
|
<span class="normal">826</span>
|
|
<span class="normal">827</span>
|
|
<span class="normal">828</span>
|
|
<span class="normal">829</span>
|
|
<span class="normal">830</span>
|
|
<span class="normal">831</span>
|
|
<span class="normal">832</span>
|
|
<span class="normal">833</span>
|
|
<span class="normal">834</span>
|
|
<span class="normal">835</span>
|
|
<span class="normal">836</span>
|
|
<span class="normal">837</span>
|
|
<span class="normal">838</span>
|
|
<span class="normal">839</span>
|
|
<span class="normal">840</span>
|
|
<span class="normal">841</span>
|
|
<span class="normal">842</span>
|
|
<span class="normal">843</span>
|
|
<span class="normal">844</span>
|
|
<span class="normal">845</span>
|
|
<span class="normal">846</span>
|
|
<span class="normal">847</span>
|
|
<span class="normal">848</span>
|
|
<span class="normal">849</span>
|
|
<span class="normal">850</span>
|
|
<span class="normal">851</span>
|
|
<span class="normal">852</span>
|
|
<span class="normal">853</span>
|
|
<span class="normal">854</span>
|
|
<span class="normal">855</span>
|
|
<span class="normal">856</span>
|
|
<span class="normal">857</span>
|
|
<span class="normal">858</span>
|
|
<span class="normal">859</span>
|
|
<span class="normal">860</span>
|
|
<span class="normal">861</span>
|
|
<span class="normal">862</span>
|
|
<span class="normal">863</span>
|
|
<span class="normal">864</span>
|
|
<span class="normal">865</span>
|
|
<span class="normal">866</span>
|
|
<span class="normal">867</span>
|
|
<span class="normal">868</span>
|
|
<span class="normal">869</span>
|
|
<span class="normal">870</span>
|
|
<span class="normal">871</span>
|
|
<span class="normal">872</span>
|
|
<span class="normal">873</span>
|
|
<span class="normal">874</span>
|
|
<span class="normal">875</span>
|
|
<span class="normal">876</span>
|
|
<span class="normal">877</span>
|
|
<span class="normal">878</span>
|
|
<span class="normal">879</span>
|
|
<span class="normal">880</span>
|
|
<span class="normal">881</span>
|
|
<span class="normal">882</span>
|
|
<span class="normal">883</span>
|
|
<span class="normal">884</span>
|
|
<span class="normal">885</span>
|
|
<span class="normal">886</span>
|
|
<span class="normal">887</span>
|
|
<span class="normal">888</span>
|
|
<span class="normal">889</span>
|
|
<span class="normal">890</span>
|
|
<span class="normal">891</span>
|
|
<span class="normal">892</span>
|
|
<span class="normal">893</span>
|
|
<span class="normal">894</span>
|
|
<span class="normal">895</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@v_args</span><span class="p">(</span><span class="n">inline</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">class</span> <span class="nc">LarkToSympy</span><span class="p">(</span><span class="n">Transformer</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Transformer to convert Lark AST math nodes to SymPy symbolic expressions.</span>
|
|
|
|
<span class="sd"> Maps DSL expression trees into SymPy expressions to allow down-pipeline algebraic</span>
|
|
<span class="sd"> simplification, common subexpression elimination (CSE), and memory optimization.</span>
|
|
<span class="sd"> """</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes LarkToSympy transformer.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Dictionary mapping variable names to FieldBase objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
|
|
<span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numeral</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts number strings into SymPy Float objects.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> numeral (Token/str): Numeric string from the AST.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Float: SymPy floating point object.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Float</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">numeral</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span> <span class="nf">env</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts environment variable tokens to SymPy Symbol objects.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Environment variable name token (prefixed with $).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Symbol: SymPy symbol representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Preserves precedence inside parentheses and returns the child expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> val (sympy.Expr): Expression inside parentheses.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: The inner expression unchanged.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">val</span>
|
|
|
|
<span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps variable name tokens to SymPy Symbol objects.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable name token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Symbol: SymPy symbol representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">fluc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps turbulence fluctuation variables (e.g., u') to a SymPy Symbol with '__prime' suffix.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable name token representing fluctuation.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Symbol: SymPy symbol with prime suffix identifier.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="s2">"__prime"</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">dnx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps spatial derivative operations (e.g., ddx(u)) to a single composite SymPy Symbol.</span>
|
|
|
|
<span class="sd"> This treats the derivative term (e.g., ddx_u) as an independent symbol.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> partial (Token): Derivative operator token.</span>
|
|
<span class="sd"> b (Token): Variable name token being differentiated.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Symbol: Composite derivative symbol representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">signature</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">signature</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">icall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts inline functions (e.g., sqr, pow3) to direct SymPy exponent expressions.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> op (Token): Inline function operator token.</span>
|
|
<span class="sd"> val (sympy.Expr): The function argument expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy power expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">op</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"sqr"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">val</span><span class="o">**</span><span class="mi">2</span>
|
|
<span class="k">elif</span> <span class="n">op</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"pow3"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">val</span><span class="o">**</span><span class="mi">3</span>
|
|
<span class="k">return</span> <span class="n">val</span>
|
|
|
|
<span class="k">def</span> <span class="nf">fcall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps standard built-in functions or UDFs to their SymPy representations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> *args: Variable length argument list. The first argument is the function name Token,</span>
|
|
<span class="sd"> and the subsequent arguments are the function parameter expressions.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy function node or registered mathematical expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">func_name</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s1">'value'</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">func_name</span> <span class="o">==</span> <span class="s2">"udf"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s1">'value'</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">))(</span><span class="o">*</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
<span class="k">return</span> <span class="n">function_registry</span><span class="o">.</span><span class="n">to_sympy</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
|
|
<span class="k">def</span> <span class="nf">neg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts negation to SymPy unary negation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> val (sympy.Expr): The expression to negate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: Negated SymPy expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="o">-</span><span class="n">val</span>
|
|
|
|
<span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts addition to SymPy sum expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (sympy.Expr): Left expression.</span>
|
|
<span class="sd"> b (sympy.Expr): Right expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy addition expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
|
|
|
|
<span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts subtraction to SymPy difference expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (sympy.Expr): Left expression.</span>
|
|
<span class="sd"> b (sympy.Expr): Right expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy subtraction expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="o">-</span> <span class="n">b</span>
|
|
|
|
<span class="k">def</span> <span class="nf">mul</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts multiplication to SymPy product expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (sympy.Expr): Left expression.</span>
|
|
<span class="sd"> b (sympy.Expr): Right expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy product expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="o">*</span> <span class="n">b</span>
|
|
|
|
<span class="k">def</span> <span class="nf">div</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts division to SymPy division expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (sympy.Expr): Left expression.</span>
|
|
<span class="sd"> b (sympy.Expr): Right expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy division expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="o">/</span> <span class="n">b</span>
|
|
|
|
<span class="k">def</span> <span class="nf">udf</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps user defined function names to string representations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (Token): Function token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Name of the user defined function.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span><span class="o">.</span><span class="n">value</span>
|
|
|
|
<span class="n">log</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"log"</span>
|
|
<span class="n">exp</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"exp"</span>
|
|
<span class="n">sqrt</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"sqrt"</span>
|
|
<span class="nb">abs</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"abs"</span>
|
|
<span class="n">rxn_rate</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="s2">"rxn_rate"</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes LarkToSympy transformer.</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>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Dictionary mapping variable names to FieldBase objects.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">711</span>
|
|
<span class="normal">712</span>
|
|
<span class="normal">713</span>
|
|
<span class="normal">714</span>
|
|
<span class="normal">715</span>
|
|
<span class="normal">716</span>
|
|
<span class="normal">717</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes LarkToSympy transformer.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Dictionary mapping variable names to FieldBase objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.add" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts addition to SymPy sum expression.</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>a</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: SymPy addition expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">832</span>
|
|
<span class="normal">833</span>
|
|
<span class="normal">834</span>
|
|
<span class="normal">835</span>
|
|
<span class="normal">836</span>
|
|
<span class="normal">837</span>
|
|
<span class="normal">838</span>
|
|
<span class="normal">839</span>
|
|
<span class="normal">840</span>
|
|
<span class="normal">841</span>
|
|
<span class="normal">842</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts addition to SymPy sum expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (sympy.Expr): Left expression.</span>
|
|
<span class="sd"> b (sympy.Expr): Right expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy addition expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.div" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">div</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts division to SymPy division expression.</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>a</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: SymPy division expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">868</span>
|
|
<span class="normal">869</span>
|
|
<span class="normal">870</span>
|
|
<span class="normal">871</span>
|
|
<span class="normal">872</span>
|
|
<span class="normal">873</span>
|
|
<span class="normal">874</span>
|
|
<span class="normal">875</span>
|
|
<span class="normal">876</span>
|
|
<span class="normal">877</span>
|
|
<span class="normal">878</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">div</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts division to SymPy division expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (sympy.Expr): Left expression.</span>
|
|
<span class="sd"> b (sympy.Expr): Right expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy division expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="o">/</span> <span class="n">b</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.dnx" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">dnx</span><span class="p">(</span><span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Maps spatial derivative operations (e.g., ddx(u)) to a single composite SymPy Symbol.</p>
|
|
<p>This treats the derivative term (e.g., ddx_u) as an independent symbol.</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>partial</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Derivative operator token.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable name token being differentiated.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Symbol: Composite derivative symbol representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">774</span>
|
|
<span class="normal">775</span>
|
|
<span class="normal">776</span>
|
|
<span class="normal">777</span>
|
|
<span class="normal">778</span>
|
|
<span class="normal">779</span>
|
|
<span class="normal">780</span>
|
|
<span class="normal">781</span>
|
|
<span class="normal">782</span>
|
|
<span class="normal">783</span>
|
|
<span class="normal">784</span>
|
|
<span class="normal">785</span>
|
|
<span class="normal">786</span>
|
|
<span class="normal">787</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">dnx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partial</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps spatial derivative operations (e.g., ddx(u)) to a single composite SymPy Symbol.</span>
|
|
|
|
<span class="sd"> This treats the derivative term (e.g., ddx_u) as an independent symbol.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> partial (Token): Derivative operator token.</span>
|
|
<span class="sd"> b (Token): Variable name token being differentiated.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Symbol: Composite derivative symbol representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">signature</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">partial</span><span class="o">.</span><span class="n">data</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">signature</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.env" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">env</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts environment variable tokens to SymPy Symbol objects.</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Environment variable name token (prefixed with $).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Symbol: SymPy symbol representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">730</span>
|
|
<span class="normal">731</span>
|
|
<span class="normal">732</span>
|
|
<span class="normal">733</span>
|
|
<span class="normal">734</span>
|
|
<span class="normal">735</span>
|
|
<span class="normal">736</span>
|
|
<span class="normal">737</span>
|
|
<span class="normal">738</span>
|
|
<span class="normal">739</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">env</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts environment variable tokens to SymPy Symbol objects.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Environment variable name token (prefixed with $).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Symbol: SymPy symbol representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.fcall" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">fcall</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Maps standard built-in functions or UDFs to their SymPy representations.</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>*args</code></td>
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable length argument list. The first argument is the function name Token,
|
|
and the subsequent arguments are the function parameter expressions.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>()</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: SymPy function node or registered mathematical expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">805</span>
|
|
<span class="normal">806</span>
|
|
<span class="normal">807</span>
|
|
<span class="normal">808</span>
|
|
<span class="normal">809</span>
|
|
<span class="normal">810</span>
|
|
<span class="normal">811</span>
|
|
<span class="normal">812</span>
|
|
<span class="normal">813</span>
|
|
<span class="normal">814</span>
|
|
<span class="normal">815</span>
|
|
<span class="normal">816</span>
|
|
<span class="normal">817</span>
|
|
<span class="normal">818</span>
|
|
<span class="normal">819</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">fcall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps standard built-in functions or UDFs to their SymPy representations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> *args: Variable length argument list. The first argument is the function name Token,</span>
|
|
<span class="sd"> and the subsequent arguments are the function parameter expressions.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy function node or registered mathematical expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">func_name</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s1">'value'</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">func_name</span> <span class="o">==</span> <span class="s2">"udf"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s1">'value'</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">))(</span><span class="o">*</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
<span class="k">return</span> <span class="n">function_registry</span><span class="o">.</span><span class="n">to_sympy</span><span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.fluc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">fluc</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Maps turbulence fluctuation variables (e.g., u') to a SymPy Symbol with '__prime' suffix.</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable name token representing fluctuation.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Symbol: SymPy symbol with prime suffix identifier.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">763</span>
|
|
<span class="normal">764</span>
|
|
<span class="normal">765</span>
|
|
<span class="normal">766</span>
|
|
<span class="normal">767</span>
|
|
<span class="normal">768</span>
|
|
<span class="normal">769</span>
|
|
<span class="normal">770</span>
|
|
<span class="normal">771</span>
|
|
<span class="normal">772</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">fluc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps turbulence fluctuation variables (e.g., u') to a SymPy Symbol with '__prime' suffix.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable name token representing fluctuation.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Symbol: SymPy symbol with prime suffix identifier.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="s2">"__prime"</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.icall" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">icall</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts inline functions (e.g., sqr, pow3) to direct SymPy exponent expressions.</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>op</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Inline function operator token.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>val</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The function argument expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: SymPy power expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">789</span>
|
|
<span class="normal">790</span>
|
|
<span class="normal">791</span>
|
|
<span class="normal">792</span>
|
|
<span class="normal">793</span>
|
|
<span class="normal">794</span>
|
|
<span class="normal">795</span>
|
|
<span class="normal">796</span>
|
|
<span class="normal">797</span>
|
|
<span class="normal">798</span>
|
|
<span class="normal">799</span>
|
|
<span class="normal">800</span>
|
|
<span class="normal">801</span>
|
|
<span class="normal">802</span>
|
|
<span class="normal">803</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">icall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts inline functions (e.g., sqr, pow3) to direct SymPy exponent expressions.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> op (Token): Inline function operator token.</span>
|
|
<span class="sd"> val (sympy.Expr): The function argument expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy power expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">op</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"sqr"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">val</span><span class="o">**</span><span class="mi">2</span>
|
|
<span class="k">elif</span> <span class="n">op</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="s2">"pow3"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">val</span><span class="o">**</span><span class="mi">3</span>
|
|
<span class="k">return</span> <span class="n">val</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.mul" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts multiplication to SymPy product expression.</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>a</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: SymPy product expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">856</span>
|
|
<span class="normal">857</span>
|
|
<span class="normal">858</span>
|
|
<span class="normal">859</span>
|
|
<span class="normal">860</span>
|
|
<span class="normal">861</span>
|
|
<span class="normal">862</span>
|
|
<span class="normal">863</span>
|
|
<span class="normal">864</span>
|
|
<span class="normal">865</span>
|
|
<span class="normal">866</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">mul</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts multiplication to SymPy product expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (sympy.Expr): Left expression.</span>
|
|
<span class="sd"> b (sympy.Expr): Right expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy product expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="o">*</span> <span class="n">b</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.neg" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">neg</span><span class="p">(</span><span class="n">val</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts negation to SymPy unary negation.</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>val</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The expression to negate.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: Negated SymPy expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">821</span>
|
|
<span class="normal">822</span>
|
|
<span class="normal">823</span>
|
|
<span class="normal">824</span>
|
|
<span class="normal">825</span>
|
|
<span class="normal">826</span>
|
|
<span class="normal">827</span>
|
|
<span class="normal">828</span>
|
|
<span class="normal">829</span>
|
|
<span class="normal">830</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">neg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts negation to SymPy unary negation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> val (sympy.Expr): The expression to negate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: Negated SymPy expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="o">-</span><span class="n">val</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.number" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">number</span><span class="p">(</span><span class="n">numeral</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts number strings into SymPy Float objects.</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>numeral</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span> / str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Numeric string from the AST.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Float: SymPy floating point object.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">719</span>
|
|
<span class="normal">720</span>
|
|
<span class="normal">721</span>
|
|
<span class="normal">722</span>
|
|
<span class="normal">723</span>
|
|
<span class="normal">724</span>
|
|
<span class="normal">725</span>
|
|
<span class="normal">726</span>
|
|
<span class="normal">727</span>
|
|
<span class="normal">728</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numeral</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts number strings into SymPy Float objects.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> numeral (Token/str): Numeric string from the AST.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Float: SymPy floating point object.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Float</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">numeral</span><span class="p">))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.paren" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">paren</span><span class="p">(</span><span class="n">val</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Preserves precedence inside parentheses and returns the child expression.</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>val</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Expression inside parentheses.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: The inner expression unchanged.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">741</span>
|
|
<span class="normal">742</span>
|
|
<span class="normal">743</span>
|
|
<span class="normal">744</span>
|
|
<span class="normal">745</span>
|
|
<span class="normal">746</span>
|
|
<span class="normal">747</span>
|
|
<span class="normal">748</span>
|
|
<span class="normal">749</span>
|
|
<span class="normal">750</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Preserves precedence inside parentheses and returns the child expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> val (sympy.Expr): Expression inside parentheses.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: The inner expression unchanged.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">val</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.sub" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">sub</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Converts subtraction to SymPy difference expression.</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>a</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Left expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>b</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Right expression.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: SymPy subtraction expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">844</span>
|
|
<span class="normal">845</span>
|
|
<span class="normal">846</span>
|
|
<span class="normal">847</span>
|
|
<span class="normal">848</span>
|
|
<span class="normal">849</span>
|
|
<span class="normal">850</span>
|
|
<span class="normal">851</span>
|
|
<span class="normal">852</span>
|
|
<span class="normal">853</span>
|
|
<span class="normal">854</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Converts subtraction to SymPy difference expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (sympy.Expr): Left expression.</span>
|
|
<span class="sd"> b (sympy.Expr): Right expression.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy subtraction expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span> <span class="o">-</span> <span class="n">b</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.udf" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">udf</span><span class="p">(</span><span class="n">a</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Maps user defined function names to string representations.</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>a</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Function token.</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>Name of the user defined function.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">880</span>
|
|
<span class="normal">881</span>
|
|
<span class="normal">882</span>
|
|
<span class="normal">883</span>
|
|
<span class="normal">884</span>
|
|
<span class="normal">885</span>
|
|
<span class="normal">886</span>
|
|
<span class="normal">887</span>
|
|
<span class="normal">888</span>
|
|
<span class="normal">889</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">udf</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps user defined function names to string representations.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> a (Token): Function token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Name of the user defined function.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">a</span><span class="o">.</span><span class="n">value</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LarkToSympy.var" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">var</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Maps variable name tokens to SymPy Symbol objects.</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>name</code></td>
|
|
<td>
|
|
<code><span title="lark.Token">Token</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable name token.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Symbol: SymPy symbol representation.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">752</span>
|
|
<span class="normal">753</span>
|
|
<span class="normal">754</span>
|
|
<span class="normal">755</span>
|
|
<span class="normal">756</span>
|
|
<span class="normal">757</span>
|
|
<span class="normal">758</span>
|
|
<span class="normal">759</span>
|
|
<span class="normal">760</span>
|
|
<span class="normal">761</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Maps variable name tokens to SymPy Symbol objects.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (Token): Variable name token.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Symbol: SymPy symbol representation.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.LatexWriter" class="doc doc-heading">
|
|
<code>LatexWriter</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Outputs the compiled average physical quantities LaTeX equations as a Python dictionary.</p>
|
|
<p>Prints the mapped string representation of the dictionary directly to stdout.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2728</span>
|
|
<span class="normal">2729</span>
|
|
<span class="normal">2730</span>
|
|
<span class="normal">2731</span>
|
|
<span class="normal">2732</span>
|
|
<span class="normal">2733</span>
|
|
<span class="normal">2734</span>
|
|
<span class="normal">2735</span>
|
|
<span class="normal">2736</span>
|
|
<span class="normal">2737</span>
|
|
<span class="normal">2738</span>
|
|
<span class="normal">2739</span>
|
|
<span class="normal">2740</span>
|
|
<span class="normal">2741</span>
|
|
<span class="normal">2742</span>
|
|
<span class="normal">2743</span>
|
|
<span class="normal">2744</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">LatexWriter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Outputs the compiled average physical quantities LaTeX equations as a Python dictionary.</span>
|
|
|
|
<span class="sd"> Prints the mapped string representation of the dictionary directly to stdout.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Writes the LaTeX equation definitions dictionary to standard output.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): The compiled context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">latex_lines</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"{"</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">' "</span><span class="si">{}</span><span class="s1">" : r"$</span><span class="si">{}</span><span class="s1">$",'</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">"}"</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</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 class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.LatexWriter.write" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">write</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Writes the LaTeX equation definitions dictionary to standard output.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The compiled context.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2734</span>
|
|
<span class="normal">2735</span>
|
|
<span class="normal">2736</span>
|
|
<span class="normal">2737</span>
|
|
<span class="normal">2738</span>
|
|
<span class="normal">2739</span>
|
|
<span class="normal">2740</span>
|
|
<span class="normal">2741</span>
|
|
<span class="normal">2742</span>
|
|
<span class="normal">2743</span>
|
|
<span class="normal">2744</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Writes the LaTeX equation definitions dictionary to standard output.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): The compiled context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">latex_lines</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"{"</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">' "</span><span class="si">{}</span><span class="s1">" : r"$</span><span class="si">{}</span><span class="s1">$",'</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">"}"</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</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>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.ParserStage" class="doc doc-heading">
|
|
<code>ParserStage</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Compiler pipeline Stage 1: Parses DSL specifications and extracts initial definitions.</p>
|
|
<p>Reads raw DSL specifications and uses Lark parser to build the AST.
|
|
Populates primary inputs, derived variables, and averaged variable lists.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2339</span>
|
|
<span class="normal">2340</span>
|
|
<span class="normal">2341</span>
|
|
<span class="normal">2342</span>
|
|
<span class="normal">2343</span>
|
|
<span class="normal">2344</span>
|
|
<span class="normal">2345</span>
|
|
<span class="normal">2346</span>
|
|
<span class="normal">2347</span>
|
|
<span class="normal">2348</span>
|
|
<span class="normal">2349</span>
|
|
<span class="normal">2350</span>
|
|
<span class="normal">2351</span>
|
|
<span class="normal">2352</span>
|
|
<span class="normal">2353</span>
|
|
<span class="normal">2354</span>
|
|
<span class="normal">2355</span>
|
|
<span class="normal">2356</span>
|
|
<span class="normal">2357</span>
|
|
<span class="normal">2358</span>
|
|
<span class="normal">2359</span>
|
|
<span class="normal">2360</span>
|
|
<span class="normal">2361</span>
|
|
<span class="normal">2362</span>
|
|
<span class="normal">2363</span>
|
|
<span class="normal">2364</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">ParserStage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Compiler pipeline Stage 1: Parses DSL specifications and extracts initial definitions.</span>
|
|
|
|
<span class="sd"> Reads raw DSL specifications and uses Lark parser to build the AST.</span>
|
|
<span class="sd"> Populates primary inputs, derived variables, and averaged variable lists.</span>
|
|
<span class="sd"> """</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="w"> </span><span class="sd">"""Initializes ParserStage with calc_grammar."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">parser</span> <span class="o">=</span> <span class="n">Lark</span><span class="p">(</span><span class="n">calc_grammar</span><span class="p">,</span>
|
|
<span class="n">parser</span><span class="o">=</span><span class="s1">'lalr'</span><span class="p">,</span>
|
|
<span class="n">lexer_callbacks</span><span class="o">=</span><span class="p">{</span>
|
|
<span class="s1">'ESCAPED_STRING'</span><span class="p">:</span> <span class="n">tok_to_str</span><span class="p">,</span>
|
|
<span class="s1">'INT'</span><span class="p">:</span> <span class="n">tok_to_int</span><span class="p">,</span>
|
|
<span class="s1">'BOOL'</span><span class="p">:</span> <span class="n">tok_to_bool</span>
|
|
<span class="p">})</span>
|
|
|
|
<span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</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="w"> </span><span class="sd">"""Executes Stage 1 parser.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> terms_raw (str): Raw DSL term specification string.</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">tree</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span>
|
|
<span class="n">CollectDefinitions</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">primary</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">)</span><span class="o">.</span><span class="n">visit</span><span class="p">(</span><span class="n">tree</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="post.ParserStage.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes ParserStage with calc_grammar.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2346</span>
|
|
<span class="normal">2347</span>
|
|
<span class="normal">2348</span>
|
|
<span class="normal">2349</span>
|
|
<span class="normal">2350</span>
|
|
<span class="normal">2351</span>
|
|
<span class="normal">2352</span>
|
|
<span class="normal">2353</span>
|
|
<span class="normal">2354</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="w"> </span><span class="sd">"""Initializes ParserStage with calc_grammar."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">parser</span> <span class="o">=</span> <span class="n">Lark</span><span class="p">(</span><span class="n">calc_grammar</span><span class="p">,</span>
|
|
<span class="n">parser</span><span class="o">=</span><span class="s1">'lalr'</span><span class="p">,</span>
|
|
<span class="n">lexer_callbacks</span><span class="o">=</span><span class="p">{</span>
|
|
<span class="s1">'ESCAPED_STRING'</span><span class="p">:</span> <span class="n">tok_to_str</span><span class="p">,</span>
|
|
<span class="s1">'INT'</span><span class="p">:</span> <span class="n">tok_to_int</span><span class="p">,</span>
|
|
<span class="s1">'BOOL'</span><span class="p">:</span> <span class="n">tok_to_bool</span>
|
|
<span class="p">})</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.ParserStage.execute" class="doc doc-heading">
|
|
<code class="highlight language-python"><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></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Executes Stage 1 parser.</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>Raw DSL term specification string.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>ctx</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="post.CompilationContext" href="#post.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Active compilation context.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2356</span>
|
|
<span class="normal">2357</span>
|
|
<span class="normal">2358</span>
|
|
<span class="normal">2359</span>
|
|
<span class="normal">2360</span>
|
|
<span class="normal">2361</span>
|
|
<span class="normal">2362</span>
|
|
<span class="normal">2363</span>
|
|
<span class="normal">2364</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</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="w"> </span><span class="sd">"""Executes Stage 1 parser.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> terms_raw (str): Raw DSL term specification string.</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">tree</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">terms_raw</span><span class="p">)</span>
|
|
<span class="n">CollectDefinitions</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">primary</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">)</span><span class="o">.</span><span class="n">visit</span><span class="p">(</span><span class="n">tree</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.PrimaryField" class="doc doc-heading">
|
|
<code>PrimaryField</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><a class="autorefs autorefs-internal" title="post.FieldBase" href="#post.FieldBase">FieldBase</a></code></p>
|
|
|
|
|
|
<p>격자 정보나 외부 물리계 수치 데이터(u, v, w, T 등) 파일에서 사전에 로드하여
|
|
메모리에 상주하는 기본 원본 입력 필드 클래스입니다.
|
|
자체 계산 루프나 동적 할당 코드를 직접 생성하지 않습니다.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2105</span>
|
|
<span class="normal">2106</span>
|
|
<span class="normal">2107</span>
|
|
<span class="normal">2108</span>
|
|
<span class="normal">2109</span>
|
|
<span class="normal">2110</span>
|
|
<span class="normal">2111</span>
|
|
<span class="normal">2112</span>
|
|
<span class="normal">2113</span>
|
|
<span class="normal">2114</span>
|
|
<span class="normal">2115</span>
|
|
<span class="normal">2116</span>
|
|
<span class="normal">2117</span>
|
|
<span class="normal">2118</span>
|
|
<span class="normal">2119</span>
|
|
<span class="normal">2120</span>
|
|
<span class="normal">2121</span>
|
|
<span class="normal">2122</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">PrimaryField</span><span class="p">(</span><span class="n">FieldBase</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""격자 정보나 외부 물리계 수치 데이터(u, v, w, T 등) 파일에서 사전에 로드하여 </span>
|
|
<span class="sd"> 메모리에 상주하는 기본 원본 입력 필드 클래스입니다. </span>
|
|
<span class="sd"> 자체 계산 루프나 동적 할당 코드를 직접 생성하지 않습니다.</span>
|
|
<span class="sd"> """</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">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes PrimaryField.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Input field name.</span>
|
|
<span class="sd"> fdict (dict): Variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">PrimaryField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derivs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">prime</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="n">name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex_given</span> <span class="o">=</span> <span class="kc">None</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.PrimaryField.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes PrimaryField.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Input field name.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable registry dictionary.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2111</span>
|
|
<span class="normal">2112</span>
|
|
<span class="normal">2113</span>
|
|
<span class="normal">2114</span>
|
|
<span class="normal">2115</span>
|
|
<span class="normal">2116</span>
|
|
<span class="normal">2117</span>
|
|
<span class="normal">2118</span>
|
|
<span class="normal">2119</span>
|
|
<span class="normal">2120</span>
|
|
<span class="normal">2121</span>
|
|
<span class="normal">2122</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">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes PrimaryField.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Input field name.</span>
|
|
<span class="sd"> fdict (dict): Variable registry dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="nb">super</span><span class="p">(</span><span class="n">PrimaryField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">fdict</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">derivs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">prime</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="n">name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">latex_given</span> <span class="o">=</span> <span class="kc">None</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.ReportWriter" class="doc doc-heading">
|
|
<code>ReportWriter</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Outputs a compilation analysis summary in JSON format.</p>
|
|
<p>Creates <code>ir2.py</code> containing topological sort order and graph relationships
|
|
to verify pipeline execution properties.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2704</span>
|
|
<span class="normal">2705</span>
|
|
<span class="normal">2706</span>
|
|
<span class="normal">2707</span>
|
|
<span class="normal">2708</span>
|
|
<span class="normal">2709</span>
|
|
<span class="normal">2710</span>
|
|
<span class="normal">2711</span>
|
|
<span class="normal">2712</span>
|
|
<span class="normal">2713</span>
|
|
<span class="normal">2714</span>
|
|
<span class="normal">2715</span>
|
|
<span class="normal">2716</span>
|
|
<span class="normal">2717</span>
|
|
<span class="normal">2718</span>
|
|
<span class="normal">2719</span>
|
|
<span class="normal">2720</span>
|
|
<span class="normal">2721</span>
|
|
<span class="normal">2722</span>
|
|
<span class="normal">2723</span>
|
|
<span class="normal">2724</span>
|
|
<span class="normal">2725</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">ReportWriter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Outputs a compilation analysis summary in JSON format.</span>
|
|
|
|
<span class="sd"> Creates `ir2.py` containing topological sort order and graph relationships</span>
|
|
<span class="sd"> to verify pipeline execution properties.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Writes the IR details to `ir2.py`.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): The compiled context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">import</span> <span class="nn">json</span>
|
|
<span class="n">dg</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span><span class="nb">list</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
|
|
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"ir2.py"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">irf</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"g = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">dg</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"l1 = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">pass1</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"l2 = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">pass2</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"avg1 = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">repr</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg1</span><span class="p">)),</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"avg2 = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">repr</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg2</span><span class="p">)),</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</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="post.ReportWriter.write" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">write</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Writes the IR details to <code>ir2.py</code>.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The compiled context.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2711</span>
|
|
<span class="normal">2712</span>
|
|
<span class="normal">2713</span>
|
|
<span class="normal">2714</span>
|
|
<span class="normal">2715</span>
|
|
<span class="normal">2716</span>
|
|
<span class="normal">2717</span>
|
|
<span class="normal">2718</span>
|
|
<span class="normal">2719</span>
|
|
<span class="normal">2720</span>
|
|
<span class="normal">2721</span>
|
|
<span class="normal">2722</span>
|
|
<span class="normal">2723</span>
|
|
<span class="normal">2724</span>
|
|
<span class="normal">2725</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Writes the IR details to `ir2.py`.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): The compiled context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">import</span> <span class="nn">json</span>
|
|
<span class="n">dg</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span><span class="nb">list</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
|
|
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"ir2.py"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">irf</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"g = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">dg</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"l1 = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">pass1</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"l2 = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">pass2</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"avg1 = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">repr</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg1</span><span class="p">)),</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"avg2 = "</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">repr</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">avg2</span><span class="p">)),</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">),</span> <span class="n">file</span><span class="o">=</span><span class="n">irf</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.SympyOptimizationStage" class="doc doc-heading">
|
|
<code>SympyOptimizationStage</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Compiler pipeline Stage 5: Performs liveness analysis and memory buffer sharing.</p>
|
|
<p>This stage runs liveness window analysis to map multiple non-overlapping temporary
|
|
variables to a limited set of shared XYZ buffers (array pooling) to prevent RAM exhaustion.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2533</span>
|
|
<span class="normal">2534</span>
|
|
<span class="normal">2535</span>
|
|
<span class="normal">2536</span>
|
|
<span class="normal">2537</span>
|
|
<span class="normal">2538</span>
|
|
<span class="normal">2539</span>
|
|
<span class="normal">2540</span>
|
|
<span class="normal">2541</span>
|
|
<span class="normal">2542</span>
|
|
<span class="normal">2543</span>
|
|
<span class="normal">2544</span>
|
|
<span class="normal">2545</span>
|
|
<span class="normal">2546</span>
|
|
<span class="normal">2547</span>
|
|
<span class="normal">2548</span>
|
|
<span class="normal">2549</span>
|
|
<span class="normal">2550</span>
|
|
<span class="normal">2551</span>
|
|
<span class="normal">2552</span>
|
|
<span class="normal">2553</span>
|
|
<span class="normal">2554</span>
|
|
<span class="normal">2555</span>
|
|
<span class="normal">2556</span>
|
|
<span class="normal">2557</span>
|
|
<span class="normal">2558</span>
|
|
<span class="normal">2559</span>
|
|
<span class="normal">2560</span>
|
|
<span class="normal">2561</span>
|
|
<span class="normal">2562</span>
|
|
<span class="normal">2563</span>
|
|
<span class="normal">2564</span>
|
|
<span class="normal">2565</span>
|
|
<span class="normal">2566</span>
|
|
<span class="normal">2567</span>
|
|
<span class="normal">2568</span>
|
|
<span class="normal">2569</span>
|
|
<span class="normal">2570</span>
|
|
<span class="normal">2571</span>
|
|
<span class="normal">2572</span>
|
|
<span class="normal">2573</span>
|
|
<span class="normal">2574</span>
|
|
<span class="normal">2575</span>
|
|
<span class="normal">2576</span>
|
|
<span class="normal">2577</span>
|
|
<span class="normal">2578</span>
|
|
<span class="normal">2579</span>
|
|
<span class="normal">2580</span>
|
|
<span class="normal">2581</span>
|
|
<span class="normal">2582</span>
|
|
<span class="normal">2583</span>
|
|
<span class="normal">2584</span>
|
|
<span class="normal">2585</span>
|
|
<span class="normal">2586</span>
|
|
<span class="normal">2587</span>
|
|
<span class="normal">2588</span>
|
|
<span class="normal">2589</span>
|
|
<span class="normal">2590</span>
|
|
<span class="normal">2591</span>
|
|
<span class="normal">2592</span>
|
|
<span class="normal">2593</span>
|
|
<span class="normal">2594</span>
|
|
<span class="normal">2595</span>
|
|
<span class="normal">2596</span>
|
|
<span class="normal">2597</span>
|
|
<span class="normal">2598</span>
|
|
<span class="normal">2599</span>
|
|
<span class="normal">2600</span>
|
|
<span class="normal">2601</span>
|
|
<span class="normal">2602</span>
|
|
<span class="normal">2603</span>
|
|
<span class="normal">2604</span>
|
|
<span class="normal">2605</span>
|
|
<span class="normal">2606</span>
|
|
<span class="normal">2607</span>
|
|
<span class="normal">2608</span>
|
|
<span class="normal">2609</span>
|
|
<span class="normal">2610</span>
|
|
<span class="normal">2611</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">SympyOptimizationStage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Compiler pipeline Stage 5: Performs liveness analysis and memory buffer sharing.</span>
|
|
|
|
<span class="sd"> This stage runs liveness window analysis to map multiple non-overlapping temporary</span>
|
|
<span class="sd"> variables to a limited set of shared XYZ buffers (array pooling) to prevent RAM exhaustion.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes Stage 5 array buffer sharing based on topologically sorted lists.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">array_name</span> <span class="o">=</span> <span class="s2">"xyzbuffer</span><span class="si">{}</span><span class="s2">"</span>
|
|
|
|
<span class="c1"># 1. Pass 1 및 Pass 2 연산 순서 배열들에 대해 각각 버퍼 공유 매핑(Pooling) 수행</span>
|
|
<span class="n">narr1</span><span class="p">,</span> <span class="n">alloc1</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">allocate_arr</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pass1</span><span class="p">))</span>
|
|
<span class="n">narr2</span><span class="p">,</span> <span class="n">alloc2</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">allocate_arr</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pass2</span><span class="p">))</span>
|
|
|
|
<span class="c1"># 전체 프로그램에서 필요한 동적 공유 3D 버퍼 배열의 최대 크기 설정</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">narr</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">narr1</span><span class="p">,</span> <span class="n">narr2</span><span class="p">)</span>
|
|
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">alloc1</span> <span class="o">=</span> <span class="n">alloc1</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">alloc2</span> <span class="o">=</span> <span class="n">alloc2</span>
|
|
|
|
<span class="k">def</span> <span class="nf">liveness</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">,</span> <span class="n">l1</span><span class="p">,</span> <span class="n">g</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Analyzes variable lifetimes to identify overlap intervals.</span>
|
|
|
|
<span class="sd"> Constructs a liveness matrix where matrix[i, j] is True if variable i</span>
|
|
<span class="sd"> is still live (in memory) at step j.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> l1 (list): Topologically sorted variable names.</span>
|
|
<span class="sd"> g (dict): Graph mapping variable names to dependency sets.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> np.ndarray: Boolean liveness matrix of shape (len(l1), len(l1)).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
|
<span class="n">img</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">l1</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">l1</span><span class="p">)))</span>
|
|
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">l1</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">l1</span><span class="p">)):</span>
|
|
<span class="n">img</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">i</span><span class="p">:</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">img</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">i</span><span class="p">:</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="p">(</span><span class="mi">1</span> <span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">g</span><span class="p">[</span><span class="n">l1</span><span class="p">[</span><span class="n">j</span><span class="p">]]</span> <span class="k">else</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">img</span> <span class="o">></span> <span class="mi">0</span>
|
|
|
|
<span class="k">def</span> <span class="nf">allocate_arr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">,</span> <span class="n">l</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Performs liveness-based memory buffer pooling.</span>
|
|
|
|
<span class="sd"> Assigns variables with disjoint active lifetimes to share the same</span>
|
|
<span class="sd"> allocated `xyzbufferN` 3D arrays.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> l (list): Topologically sorted list of variable names.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (max_buffers_needed, var_to_buffer_mapping) where:</span>
|
|
<span class="sd"> max_buffers_needed (int): Maximum buffers required concurrently.</span>
|
|
<span class="sd"> var_to_buffer_mapping (dict): Map of variable names to their pooled buffer arrays.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
|
<span class="n">dg</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span>
|
|
<span class="n">mask</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">liveness</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">dg</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">narr</span> <span class="o">=</span> <span class="n">mask</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="n">narr</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="n">array_pool</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">array_name</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">narr</span><span class="p">)])</span>
|
|
<span class="n">livesets</span> <span class="o">=</span> <span class="p">[</span><span class="nb">set</span><span class="p">([])]</span> <span class="o">+</span> <span class="p">[</span><span class="nb">set</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">l</span><span class="p">)[</span><span class="n">row</span><span class="p">])</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">mask</span><span class="o">.</span><span class="n">T</span><span class="p">]</span>
|
|
<span class="n">var2arr</span> <span class="o">=</span> <span class="p">{</span> <span class="n">p</span> <span class="p">:</span> <span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">primary</span> <span class="p">}</span>
|
|
|
|
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">s0</span><span class="p">,</span> <span class="n">s1</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">livesets</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">livesets</span><span class="p">[</span><span class="mi">1</span><span class="p">:])):</span>
|
|
<span class="n">array_pool</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">var2arr</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="n">s0</span> <span class="o">-</span> <span class="n">s1</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">new</span> <span class="ow">in</span> <span class="n">s1</span> <span class="o">-</span> <span class="n">s0</span><span class="p">:</span>
|
|
<span class="n">var2arr</span><span class="p">[</span><span class="n">new</span><span class="p">]</span> <span class="o">=</span> <span class="n">array_pool</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
|
|
|
<span class="k">return</span> <span class="n">narr</span><span class="p">,</span> <span class="n">var2arr</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizationStage.allocate_arr" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">allocate_arr</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">l</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Performs liveness-based memory buffer pooling.</p>
|
|
<p>Assigns variables with disjoint active lifetimes to share the same
|
|
allocated <code>xyzbufferN</code> 3D arrays.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Active compilation context.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>l</code></td>
|
|
<td>
|
|
<code>list</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Topologically sorted list of variable names.</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>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>(max_buffers_needed, var_to_buffer_mapping) where:
|
|
max_buffers_needed (int): Maximum buffers required concurrently.
|
|
var_to_buffer_mapping (dict): Map of variable names to their pooled buffer arrays.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2579</span>
|
|
<span class="normal">2580</span>
|
|
<span class="normal">2581</span>
|
|
<span class="normal">2582</span>
|
|
<span class="normal">2583</span>
|
|
<span class="normal">2584</span>
|
|
<span class="normal">2585</span>
|
|
<span class="normal">2586</span>
|
|
<span class="normal">2587</span>
|
|
<span class="normal">2588</span>
|
|
<span class="normal">2589</span>
|
|
<span class="normal">2590</span>
|
|
<span class="normal">2591</span>
|
|
<span class="normal">2592</span>
|
|
<span class="normal">2593</span>
|
|
<span class="normal">2594</span>
|
|
<span class="normal">2595</span>
|
|
<span class="normal">2596</span>
|
|
<span class="normal">2597</span>
|
|
<span class="normal">2598</span>
|
|
<span class="normal">2599</span>
|
|
<span class="normal">2600</span>
|
|
<span class="normal">2601</span>
|
|
<span class="normal">2602</span>
|
|
<span class="normal">2603</span>
|
|
<span class="normal">2604</span>
|
|
<span class="normal">2605</span>
|
|
<span class="normal">2606</span>
|
|
<span class="normal">2607</span>
|
|
<span class="normal">2608</span>
|
|
<span class="normal">2609</span>
|
|
<span class="normal">2610</span>
|
|
<span class="normal">2611</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">allocate_arr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">,</span> <span class="n">l</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Performs liveness-based memory buffer pooling.</span>
|
|
|
|
<span class="sd"> Assigns variables with disjoint active lifetimes to share the same</span>
|
|
<span class="sd"> allocated `xyzbufferN` 3D arrays.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> l (list): Topologically sorted list of variable names.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (max_buffers_needed, var_to_buffer_mapping) where:</span>
|
|
<span class="sd"> max_buffers_needed (int): Maximum buffers required concurrently.</span>
|
|
<span class="sd"> var_to_buffer_mapping (dict): Map of variable names to their pooled buffer arrays.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
|
<span class="n">dg</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span>
|
|
<span class="n">mask</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">liveness</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">dg</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">narr</span> <span class="o">=</span> <span class="n">mask</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="n">narr</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="n">array_pool</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">array_name</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">narr</span><span class="p">)])</span>
|
|
<span class="n">livesets</span> <span class="o">=</span> <span class="p">[</span><span class="nb">set</span><span class="p">([])]</span> <span class="o">+</span> <span class="p">[</span><span class="nb">set</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">l</span><span class="p">)[</span><span class="n">row</span><span class="p">])</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">mask</span><span class="o">.</span><span class="n">T</span><span class="p">]</span>
|
|
<span class="n">var2arr</span> <span class="o">=</span> <span class="p">{</span> <span class="n">p</span> <span class="p">:</span> <span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">primary</span> <span class="p">}</span>
|
|
|
|
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">s0</span><span class="p">,</span> <span class="n">s1</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">livesets</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">livesets</span><span class="p">[</span><span class="mi">1</span><span class="p">:])):</span>
|
|
<span class="n">array_pool</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">var2arr</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="n">s0</span> <span class="o">-</span> <span class="n">s1</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">new</span> <span class="ow">in</span> <span class="n">s1</span> <span class="o">-</span> <span class="n">s0</span><span class="p">:</span>
|
|
<span class="n">var2arr</span><span class="p">[</span><span class="n">new</span><span class="p">]</span> <span class="o">=</span> <span class="n">array_pool</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
|
|
|
<span class="k">return</span> <span class="n">narr</span><span class="p">,</span> <span class="n">var2arr</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizationStage.execute" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">execute</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Executes Stage 5 array buffer sharing based on topologically sorted lists.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Active compilation context.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2540</span>
|
|
<span class="normal">2541</span>
|
|
<span class="normal">2542</span>
|
|
<span class="normal">2543</span>
|
|
<span class="normal">2544</span>
|
|
<span class="normal">2545</span>
|
|
<span class="normal">2546</span>
|
|
<span class="normal">2547</span>
|
|
<span class="normal">2548</span>
|
|
<span class="normal">2549</span>
|
|
<span class="normal">2550</span>
|
|
<span class="normal">2551</span>
|
|
<span class="normal">2552</span>
|
|
<span class="normal">2553</span>
|
|
<span class="normal">2554</span>
|
|
<span class="normal">2555</span>
|
|
<span class="normal">2556</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes Stage 5 array buffer sharing based on topologically sorted lists.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">array_name</span> <span class="o">=</span> <span class="s2">"xyzbuffer</span><span class="si">{}</span><span class="s2">"</span>
|
|
|
|
<span class="c1"># 1. Pass 1 및 Pass 2 연산 순서 배열들에 대해 각각 버퍼 공유 매핑(Pooling) 수행</span>
|
|
<span class="n">narr1</span><span class="p">,</span> <span class="n">alloc1</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">allocate_arr</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pass1</span><span class="p">))</span>
|
|
<span class="n">narr2</span><span class="p">,</span> <span class="n">alloc2</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">allocate_arr</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">ctx</span><span class="o">.</span><span class="n">pass2</span><span class="p">))</span>
|
|
|
|
<span class="c1"># 전체 프로그램에서 필요한 동적 공유 3D 버퍼 배열의 최대 크기 설정</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">narr</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">narr1</span><span class="p">,</span> <span class="n">narr2</span><span class="p">)</span>
|
|
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">alloc1</span> <span class="o">=</span> <span class="n">alloc1</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">alloc2</span> <span class="o">=</span> <span class="n">alloc2</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizationStage.liveness" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">liveness</span><span class="p">(</span><span class="n">ctx</span><span class="p">,</span> <span class="n">l1</span><span class="p">,</span> <span class="n">g</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Analyzes variable lifetimes to identify overlap intervals.</p>
|
|
<p>Constructs a liveness matrix where matrix[i, j] is True if variable i
|
|
is still live (in memory) at step j.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Active compilation context.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>l1</code></td>
|
|
<td>
|
|
<code>list</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Topologically sorted variable names.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>g</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Graph mapping variable names to dependency sets.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>np.ndarray: Boolean liveness matrix of shape (len(l1), len(l1)).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2558</span>
|
|
<span class="normal">2559</span>
|
|
<span class="normal">2560</span>
|
|
<span class="normal">2561</span>
|
|
<span class="normal">2562</span>
|
|
<span class="normal">2563</span>
|
|
<span class="normal">2564</span>
|
|
<span class="normal">2565</span>
|
|
<span class="normal">2566</span>
|
|
<span class="normal">2567</span>
|
|
<span class="normal">2568</span>
|
|
<span class="normal">2569</span>
|
|
<span class="normal">2570</span>
|
|
<span class="normal">2571</span>
|
|
<span class="normal">2572</span>
|
|
<span class="normal">2573</span>
|
|
<span class="normal">2574</span>
|
|
<span class="normal">2575</span>
|
|
<span class="normal">2576</span>
|
|
<span class="normal">2577</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">liveness</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">,</span> <span class="n">l1</span><span class="p">,</span> <span class="n">g</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Analyzes variable lifetimes to identify overlap intervals.</span>
|
|
|
|
<span class="sd"> Constructs a liveness matrix where matrix[i, j] is True if variable i</span>
|
|
<span class="sd"> is still live (in memory) at step j.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context.</span>
|
|
<span class="sd"> l1 (list): Topologically sorted variable names.</span>
|
|
<span class="sd"> g (dict): Graph mapping variable names to dependency sets.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> np.ndarray: Boolean liveness matrix of shape (len(l1), len(l1)).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
|
<span class="n">img</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">l1</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">l1</span><span class="p">)))</span>
|
|
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">l1</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">l1</span><span class="p">)):</span>
|
|
<span class="n">img</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">i</span><span class="p">:</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">img</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">i</span><span class="p">:</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="p">(</span><span class="mi">1</span> <span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">g</span><span class="p">[</span><span class="n">l1</span><span class="p">[</span><span class="n">j</span><span class="p">]]</span> <span class="k">else</span> <span class="mi">0</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">img</span> <span class="o">></span> <span class="mi">0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.SympyOptimizer" class="doc doc-heading">
|
|
<code>SympyOptimizer</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Manages algebra optimization and Common Subexpression Elimination (CSE) via SymPy.</p>
|
|
<p>This optimization engine:
|
|
1. Expands intermediate temporary variables recursively.
|
|
2. Simplifies arithmetic terms (fraction cancellation, trigonometric expansions).
|
|
3. Runs CSE to pull duplicate sub-operations out into loop local scalar variables,
|
|
significantly reducing FLOPS and memory bandwidth requirements.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 983</span>
|
|
<span class="normal"> 984</span>
|
|
<span class="normal"> 985</span>
|
|
<span class="normal"> 986</span>
|
|
<span class="normal"> 987</span>
|
|
<span class="normal"> 988</span>
|
|
<span class="normal"> 989</span>
|
|
<span class="normal"> 990</span>
|
|
<span class="normal"> 991</span>
|
|
<span class="normal"> 992</span>
|
|
<span class="normal"> 993</span>
|
|
<span class="normal"> 994</span>
|
|
<span class="normal"> 995</span>
|
|
<span class="normal"> 996</span>
|
|
<span class="normal"> 997</span>
|
|
<span class="normal"> 998</span>
|
|
<span class="normal"> 999</span>
|
|
<span class="normal">1000</span>
|
|
<span class="normal">1001</span>
|
|
<span class="normal">1002</span>
|
|
<span class="normal">1003</span>
|
|
<span class="normal">1004</span>
|
|
<span class="normal">1005</span>
|
|
<span class="normal">1006</span>
|
|
<span class="normal">1007</span>
|
|
<span class="normal">1008</span>
|
|
<span class="normal">1009</span>
|
|
<span class="normal">1010</span>
|
|
<span class="normal">1011</span>
|
|
<span class="normal">1012</span>
|
|
<span class="normal">1013</span>
|
|
<span class="normal">1014</span>
|
|
<span class="normal">1015</span>
|
|
<span class="normal">1016</span>
|
|
<span class="normal">1017</span>
|
|
<span class="normal">1018</span>
|
|
<span class="normal">1019</span>
|
|
<span class="normal">1020</span>
|
|
<span class="normal">1021</span>
|
|
<span class="normal">1022</span>
|
|
<span class="normal">1023</span>
|
|
<span class="normal">1024</span>
|
|
<span class="normal">1025</span>
|
|
<span class="normal">1026</span>
|
|
<span class="normal">1027</span>
|
|
<span class="normal">1028</span>
|
|
<span class="normal">1029</span>
|
|
<span class="normal">1030</span>
|
|
<span class="normal">1031</span>
|
|
<span class="normal">1032</span>
|
|
<span class="normal">1033</span>
|
|
<span class="normal">1034</span>
|
|
<span class="normal">1035</span>
|
|
<span class="normal">1036</span>
|
|
<span class="normal">1037</span>
|
|
<span class="normal">1038</span>
|
|
<span class="normal">1039</span>
|
|
<span class="normal">1040</span>
|
|
<span class="normal">1041</span>
|
|
<span class="normal">1042</span>
|
|
<span class="normal">1043</span>
|
|
<span class="normal">1044</span>
|
|
<span class="normal">1045</span>
|
|
<span class="normal">1046</span>
|
|
<span class="normal">1047</span>
|
|
<span class="normal">1048</span>
|
|
<span class="normal">1049</span>
|
|
<span class="normal">1050</span>
|
|
<span class="normal">1051</span>
|
|
<span class="normal">1052</span>
|
|
<span class="normal">1053</span>
|
|
<span class="normal">1054</span>
|
|
<span class="normal">1055</span>
|
|
<span class="normal">1056</span>
|
|
<span class="normal">1057</span>
|
|
<span class="normal">1058</span>
|
|
<span class="normal">1059</span>
|
|
<span class="normal">1060</span>
|
|
<span class="normal">1061</span>
|
|
<span class="normal">1062</span>
|
|
<span class="normal">1063</span>
|
|
<span class="normal">1064</span>
|
|
<span class="normal">1065</span>
|
|
<span class="normal">1066</span>
|
|
<span class="normal">1067</span>
|
|
<span class="normal">1068</span>
|
|
<span class="normal">1069</span>
|
|
<span class="normal">1070</span>
|
|
<span class="normal">1071</span>
|
|
<span class="normal">1072</span>
|
|
<span class="normal">1073</span>
|
|
<span class="normal">1074</span>
|
|
<span class="normal">1075</span>
|
|
<span class="normal">1076</span>
|
|
<span class="normal">1077</span>
|
|
<span class="normal">1078</span>
|
|
<span class="normal">1079</span>
|
|
<span class="normal">1080</span>
|
|
<span class="normal">1081</span>
|
|
<span class="normal">1082</span>
|
|
<span class="normal">1083</span>
|
|
<span class="normal">1084</span>
|
|
<span class="normal">1085</span>
|
|
<span class="normal">1086</span>
|
|
<span class="normal">1087</span>
|
|
<span class="normal">1088</span>
|
|
<span class="normal">1089</span>
|
|
<span class="normal">1090</span>
|
|
<span class="normal">1091</span>
|
|
<span class="normal">1092</span>
|
|
<span class="normal">1093</span>
|
|
<span class="normal">1094</span>
|
|
<span class="normal">1095</span>
|
|
<span class="normal">1096</span>
|
|
<span class="normal">1097</span>
|
|
<span class="normal">1098</span>
|
|
<span class="normal">1099</span>
|
|
<span class="normal">1100</span>
|
|
<span class="normal">1101</span>
|
|
<span class="normal">1102</span>
|
|
<span class="normal">1103</span>
|
|
<span class="normal">1104</span>
|
|
<span class="normal">1105</span>
|
|
<span class="normal">1106</span>
|
|
<span class="normal">1107</span>
|
|
<span class="normal">1108</span>
|
|
<span class="normal">1109</span>
|
|
<span class="normal">1110</span>
|
|
<span class="normal">1111</span>
|
|
<span class="normal">1112</span>
|
|
<span class="normal">1113</span>
|
|
<span class="normal">1114</span>
|
|
<span class="normal">1115</span>
|
|
<span class="normal">1116</span>
|
|
<span class="normal">1117</span>
|
|
<span class="normal">1118</span>
|
|
<span class="normal">1119</span>
|
|
<span class="normal">1120</span>
|
|
<span class="normal">1121</span>
|
|
<span class="normal">1122</span>
|
|
<span class="normal">1123</span>
|
|
<span class="normal">1124</span>
|
|
<span class="normal">1125</span>
|
|
<span class="normal">1126</span>
|
|
<span class="normal">1127</span>
|
|
<span class="normal">1128</span>
|
|
<span class="normal">1129</span>
|
|
<span class="normal">1130</span>
|
|
<span class="normal">1131</span>
|
|
<span class="normal">1132</span>
|
|
<span class="normal">1133</span>
|
|
<span class="normal">1134</span>
|
|
<span class="normal">1135</span>
|
|
<span class="normal">1136</span>
|
|
<span class="normal">1137</span>
|
|
<span class="normal">1138</span>
|
|
<span class="normal">1139</span>
|
|
<span class="normal">1140</span>
|
|
<span class="normal">1141</span>
|
|
<span class="normal">1142</span>
|
|
<span class="normal">1143</span>
|
|
<span class="normal">1144</span>
|
|
<span class="normal">1145</span>
|
|
<span class="normal">1146</span>
|
|
<span class="normal">1147</span>
|
|
<span class="normal">1148</span>
|
|
<span class="normal">1149</span>
|
|
<span class="normal">1150</span>
|
|
<span class="normal">1151</span>
|
|
<span class="normal">1152</span>
|
|
<span class="normal">1153</span>
|
|
<span class="normal">1154</span>
|
|
<span class="normal">1155</span>
|
|
<span class="normal">1156</span>
|
|
<span class="normal">1157</span>
|
|
<span class="normal">1158</span>
|
|
<span class="normal">1159</span>
|
|
<span class="normal">1160</span>
|
|
<span class="normal">1161</span>
|
|
<span class="normal">1162</span>
|
|
<span class="normal">1163</span>
|
|
<span class="normal">1164</span>
|
|
<span class="normal">1165</span>
|
|
<span class="normal">1166</span>
|
|
<span class="normal">1167</span>
|
|
<span class="normal">1168</span>
|
|
<span class="normal">1169</span>
|
|
<span class="normal">1170</span>
|
|
<span class="normal">1171</span>
|
|
<span class="normal">1172</span>
|
|
<span class="normal">1173</span>
|
|
<span class="normal">1174</span>
|
|
<span class="normal">1175</span>
|
|
<span class="normal">1176</span>
|
|
<span class="normal">1177</span>
|
|
<span class="normal">1178</span>
|
|
<span class="normal">1179</span>
|
|
<span class="normal">1180</span>
|
|
<span class="normal">1181</span>
|
|
<span class="normal">1182</span>
|
|
<span class="normal">1183</span>
|
|
<span class="normal">1184</span>
|
|
<span class="normal">1185</span>
|
|
<span class="normal">1186</span>
|
|
<span class="normal">1187</span>
|
|
<span class="normal">1188</span>
|
|
<span class="normal">1189</span>
|
|
<span class="normal">1190</span>
|
|
<span class="normal">1191</span>
|
|
<span class="normal">1192</span>
|
|
<span class="normal">1193</span>
|
|
<span class="normal">1194</span>
|
|
<span class="normal">1195</span>
|
|
<span class="normal">1196</span>
|
|
<span class="normal">1197</span>
|
|
<span class="normal">1198</span>
|
|
<span class="normal">1199</span>
|
|
<span class="normal">1200</span>
|
|
<span class="normal">1201</span>
|
|
<span class="normal">1202</span>
|
|
<span class="normal">1203</span>
|
|
<span class="normal">1204</span>
|
|
<span class="normal">1205</span>
|
|
<span class="normal">1206</span>
|
|
<span class="normal">1207</span>
|
|
<span class="normal">1208</span>
|
|
<span class="normal">1209</span>
|
|
<span class="normal">1210</span>
|
|
<span class="normal">1211</span>
|
|
<span class="normal">1212</span>
|
|
<span class="normal">1213</span>
|
|
<span class="normal">1214</span>
|
|
<span class="normal">1215</span>
|
|
<span class="normal">1216</span>
|
|
<span class="normal">1217</span>
|
|
<span class="normal">1218</span>
|
|
<span class="normal">1219</span>
|
|
<span class="normal">1220</span>
|
|
<span class="normal">1221</span>
|
|
<span class="normal">1222</span>
|
|
<span class="normal">1223</span>
|
|
<span class="normal">1224</span>
|
|
<span class="normal">1225</span>
|
|
<span class="normal">1226</span>
|
|
<span class="normal">1227</span>
|
|
<span class="normal">1228</span>
|
|
<span class="normal">1229</span>
|
|
<span class="normal">1230</span>
|
|
<span class="normal">1231</span>
|
|
<span class="normal">1232</span>
|
|
<span class="normal">1233</span>
|
|
<span class="normal">1234</span>
|
|
<span class="normal">1235</span>
|
|
<span class="normal">1236</span>
|
|
<span class="normal">1237</span>
|
|
<span class="normal">1238</span>
|
|
<span class="normal">1239</span>
|
|
<span class="normal">1240</span>
|
|
<span class="normal">1241</span>
|
|
<span class="normal">1242</span>
|
|
<span class="normal">1243</span>
|
|
<span class="normal">1244</span>
|
|
<span class="normal">1245</span>
|
|
<span class="normal">1246</span>
|
|
<span class="normal">1247</span>
|
|
<span class="normal">1248</span>
|
|
<span class="normal">1249</span>
|
|
<span class="normal">1250</span>
|
|
<span class="normal">1251</span>
|
|
<span class="normal">1252</span>
|
|
<span class="normal">1253</span>
|
|
<span class="normal">1254</span>
|
|
<span class="normal">1255</span>
|
|
<span class="normal">1256</span>
|
|
<span class="normal">1257</span>
|
|
<span class="normal">1258</span>
|
|
<span class="normal">1259</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">SympyOptimizer</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Manages algebra optimization and Common Subexpression Elimination (CSE) via SymPy.</span>
|
|
|
|
<span class="sd"> This optimization engine:</span>
|
|
<span class="sd"> 1. Expands intermediate temporary variables recursively.</span>
|
|
<span class="sd"> 2. Simplifies arithmetic terms (fraction cancellation, trigonometric expansions).</span>
|
|
<span class="sd"> 3. Runs CSE to pull duplicate sub-operations out into loop local scalar variables,</span>
|
|
<span class="sd"> significantly reducing FLOPS and memory bandwidth requirements.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">_instance</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">get_instance</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Retrieves or instantiates the singleton optimizer.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Current variable field registry mapping name -> FieldBase object.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> SympyOptimizer: The active singleton instance.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span><span class="o">.</span><span class="n">fdict</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">fdict</span><span class="p">:</span>
|
|
<span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span><span class="n">fdict</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes SympyOptimizer registry caches.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Variable field registry.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exported_fields</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
|
|
<span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fdict</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'attr'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">f</span><span class="o">.</span><span class="n">attr</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'export'</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged_targets</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">set_averaged</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">averaged_dict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Sets the targets and names of averaged variables.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> averaged_dict (dict): Dictionary mapping average variable names to AveragedField objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged_targets</span> <span class="o">=</span> <span class="p">{</span><span class="n">a</span><span class="o">.</span><span class="n">target</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">averaged_dict</span><span class="o">.</span><span class="n">values</span><span class="p">()}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">averaged_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_sympy_expr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Recursively builds and caches a fully substituted SymPy Expression for a variable.</span>
|
|
|
|
<span class="sd"> Avoids expanding boundary fields (PrimaryField, DerivedField representing spatial derivatives,</span>
|
|
<span class="sd"> AveragedField, and FluctuationField) to preserve the grid boundaries. Expands other temporary variables.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy node representing the fully-expanded mathematical expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
|
|
|
|
<span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'prime'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">field</span><span class="o">.</span><span class="n">prime</span><span class="p">:</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="k">return</span> <span class="n">expr</span>
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'op'</span><span class="p">):</span> <span class="c1"># DerivedField (ddx, etc.)</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="k">return</span> <span class="n">expr</span>
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'weighted'</span><span class="p">):</span> <span class="c1"># AveragedField</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="k">return</span> <span class="n">expr</span>
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'field'</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">):</span> <span class="c1"># FluctuationField</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="k">return</span> <span class="n">expr</span>
|
|
|
|
<span class="n">transformer</span> <span class="o">=</span> <span class="n">LarkToSympy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">transformer</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Recursively substitute intermediate variables</span>
|
|
<span class="n">expanded_expr</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="n">changed</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">while</span> <span class="n">changed</span><span class="p">:</span>
|
|
<span class="n">changed</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">free_syms</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">expanded_expr</span><span class="o">.</span><span class="n">free_symbols</span><span class="p">)</span>
|
|
<span class="n">sub_dict</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">sym</span> <span class="ow">in</span> <span class="n">free_syms</span><span class="p">:</span>
|
|
<span class="n">sym_name</span> <span class="o">=</span> <span class="n">sym</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="k">if</span> <span class="n">sym_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">:</span>
|
|
<span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">sym_name</span><span class="p">]</span>
|
|
<span class="n">is_derived_field</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'op'</span><span class="p">)</span>
|
|
<span class="n">is_averaged_field</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'weighted'</span><span class="p">)</span>
|
|
<span class="n">is_primary_field</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'prime'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">f</span><span class="o">.</span><span class="n">prime</span>
|
|
<span class="n">is_exported</span> <span class="o">=</span> <span class="n">sym_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">exported_fields</span>
|
|
<span class="n">is_averaged_target</span> <span class="o">=</span> <span class="n">sym_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">averaged_targets</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">is_derived_field</span> <span class="ow">or</span> <span class="n">is_averaged_field</span> <span class="ow">or</span> <span class="n">is_primary_field</span> <span class="ow">or</span> <span class="n">is_exported</span> <span class="ow">or</span> <span class="n">is_averaged_target</span><span class="p">):</span>
|
|
<span class="n">sub_dict</span><span class="p">[</span><span class="n">sym</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sympy_expr</span><span class="p">(</span><span class="n">sym_name</span><span class="p">)</span>
|
|
<span class="n">changed</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="k">if</span> <span class="n">sub_dict</span><span class="p">:</span>
|
|
<span class="n">expanded_expr</span> <span class="o">=</span> <span class="n">expanded_expr</span><span class="o">.</span><span class="n">subs</span><span class="p">(</span><span class="n">sub_dict</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expanded_expr</span>
|
|
<span class="k">return</span> <span class="n">expanded_expr</span>
|
|
|
|
<span class="k">def</span> <span class="nf">calculate_flops_and_heavy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Measures computational cost (FLOPS and heavy operators) for a SymPy expression.</span>
|
|
|
|
<span class="sd"> Useful for logging optimization statistics.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> expr (sympy.Expr): The expression to evaluate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (flops_count, heavy_operators_count).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">flops</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">heavy</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">sympy</span><span class="o">.</span><span class="n">preorder_traversal</span><span class="p">(</span><span class="n">expr</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Add</span><span class="p">):</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Mul</span><span class="p">):</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Pow</span><span class="p">):</span>
|
|
<span class="n">base</span><span class="p">,</span> <span class="n">exp</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="k">if</span> <span class="n">exp</span> <span class="o">==</span> <span class="mf">0.5</span> <span class="ow">or</span> <span class="n">exp</span> <span class="o">==</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span> <span class="c1"># Square root/inv square root weight</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="n">exp</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">4</span> <span class="c1"># Division weight</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">exp</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Integer</span><span class="p">):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">exp</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">val</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="n">sympy</span><span class="o">.</span><span class="n">Derivative</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Function</span><span class="p">)):</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">func</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s1">'sqrt'</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'exp'</span><span class="p">,</span> <span class="s1">'log'</span><span class="p">,</span> <span class="s1">'sin'</span><span class="p">,</span> <span class="s1">'cos'</span><span class="p">,</span> <span class="s1">'tan'</span><span class="p">,</span> <span class="s1">'rxn_rate'</span><span class="p">):</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="n">name</span> <span class="o">==</span> <span class="s1">'Abs'</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">flops</span><span class="p">,</span> <span class="n">heavy</span>
|
|
|
|
<span class="k">def</span> <span class="nf">count_3d_loads</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Counts the total 3D array memory read accesses in the expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> expr (sympy.Expr): The expression to analyze.</span>
|
|
<span class="sd"> three_d_arrays (set): Names of active 3D arrays.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> int: The memory load count.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">sympy</span><span class="o">.</span><span class="n">preorder_traversal</span><span class="p">(</span><span class="n">expr</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">)</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">three_d_arrays</span><span class="p">:</span>
|
|
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">count</span>
|
|
|
|
<span class="k">def</span> <span class="nf">optimize_field</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Optimizes a physical field expression and extracts Common Subexpressions.</span>
|
|
|
|
<span class="sd"> Applies SymPy simplification and CSE, printing optimization reports to stderr.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the field to optimize.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation mapping. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (rhs_code, cse_declarations, cse_assignments) where:</span>
|
|
<span class="sd"> rhs_code (str): The final right hand side Fortran expression.</span>
|
|
<span class="sd"> cse_declarations (list of str): Code strings to declare local CSE scalars.</span>
|
|
<span class="sd"> cse_assignments (list of str): Code strings to calculate CSE values.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sympy_expr</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="n">three_d_arrays</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s1">'dim'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">v</span><span class="o">.</span><span class="n">dim</span> <span class="o">==</span> <span class="s1">':,:,:'</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="c1"># Optimization metrics before</span>
|
|
<span class="n">before_flops</span><span class="p">,</span> <span class="n">before_heavy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calculate_flops_and_heavy</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span>
|
|
<span class="n">before_loads</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count_3d_loads</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Simplify expression</span>
|
|
<span class="n">simplified_expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">simplify</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span>
|
|
<span class="n">simplified_expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">cancel</span><span class="p">(</span><span class="n">simplified_expr</span><span class="p">)</span>
|
|
|
|
<span class="n">array_symbols</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s1">'array'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">v</span><span class="o">.</span><span class="n">array</span><span class="p">:</span>
|
|
<span class="n">array_symbols</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">elif</span> <span class="n">alloc</span> <span class="ow">and</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">alloc</span><span class="p">:</span>
|
|
<span class="n">array_symbols</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">array_symbols</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">k</span>
|
|
|
|
<span class="n">avg_symbols</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'avg_names'</span><span class="p">,</span> <span class="p">[])}</span>
|
|
<span class="n">printer</span> <span class="o">=</span> <span class="n">ArrayFCodePrinter</span><span class="p">(</span><span class="n">array_symbols</span><span class="o">=</span><span class="n">array_symbols</span><span class="p">,</span> <span class="n">avg_symbols</span><span class="o">=</span><span class="n">avg_symbols</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Perform Common Subexpression Elimination</span>
|
|
<span class="n">replacements</span><span class="p">,</span> <span class="n">reduced_exprs</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">cse</span><span class="p">(</span><span class="n">simplified_expr</span><span class="p">)</span>
|
|
<span class="n">reduced_expr</span> <span class="o">=</span> <span class="n">reduced_exprs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Optimization metrics after</span>
|
|
<span class="n">after_flops</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">after_heavy</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">after_loads</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="k">for</span> <span class="n">temp_var</span><span class="p">,</span> <span class="n">temp_expr</span> <span class="ow">in</span> <span class="n">replacements</span><span class="p">:</span>
|
|
<span class="n">f_val</span><span class="p">,</span> <span class="n">h_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calculate_flops_and_heavy</span><span class="p">(</span><span class="n">temp_expr</span><span class="p">)</span>
|
|
<span class="n">after_flops</span> <span class="o">+=</span> <span class="n">f_val</span>
|
|
<span class="n">after_heavy</span> <span class="o">+=</span> <span class="n">h_val</span>
|
|
<span class="n">after_loads</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count_3d_loads</span><span class="p">(</span><span class="n">temp_expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">)</span>
|
|
|
|
<span class="n">f_val</span><span class="p">,</span> <span class="n">h_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calculate_flops_and_heavy</span><span class="p">(</span><span class="n">reduced_expr</span><span class="p">)</span>
|
|
<span class="n">after_flops</span> <span class="o">+=</span> <span class="n">f_val</span>
|
|
<span class="n">after_heavy</span> <span class="o">+=</span> <span class="n">h_val</span>
|
|
<span class="n">after_loads</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count_3d_loads</span><span class="p">(</span><span class="n">reduced_expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">pct_str</span><span class="p">(</span><span class="n">before</span><span class="p">,</span> <span class="n">after</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">before</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"0.0%"</span> <span class="k">if</span> <span class="n">after</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="s2">"+inf%"</span>
|
|
<span class="n">diff</span> <span class="o">=</span> <span class="n">after</span> <span class="o">-</span> <span class="n">before</span>
|
|
<span class="n">pct</span> <span class="o">=</span> <span class="p">(</span><span class="n">diff</span> <span class="o">/</span> <span class="n">before</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span>
|
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">pct</span><span class="si">:</span><span class="s2">+.1f</span><span class="si">}</span><span class="s2">%"</span>
|
|
|
|
<span class="n">flops_pct</span> <span class="o">=</span> <span class="n">pct_str</span><span class="p">(</span><span class="n">before_flops</span><span class="p">,</span> <span class="n">after_flops</span><span class="p">)</span>
|
|
<span class="n">heavy_pct</span> <span class="o">=</span> <span class="n">pct_str</span><span class="p">(</span><span class="n">before_heavy</span><span class="p">,</span> <span class="n">after_heavy</span><span class="p">)</span>
|
|
<span class="n">loads_pct</span> <span class="o">=</span> <span class="n">pct_str</span><span class="p">(</span><span class="n">before_loads</span><span class="p">,</span> <span class="n">after_loads</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">after_flops</span> <span class="o"><</span> <span class="n">before_flops</span> <span class="o">*</span> <span class="mf">0.5</span> <span class="ow">or</span> <span class="n">after_loads</span> <span class="o"><</span> <span class="n">before_loads</span> <span class="o">*</span> <span class="mf">0.5</span><span class="p">:</span>
|
|
<span class="n">est_speedup</span> <span class="o">=</span> <span class="s2">"Highly significant"</span>
|
|
<span class="k">elif</span> <span class="n">after_flops</span> <span class="o"><</span> <span class="n">before_flops</span> <span class="ow">or</span> <span class="n">after_loads</span> <span class="o"><</span> <span class="n">before_loads</span><span class="p">:</span>
|
|
<span class="n">est_speedup</span> <span class="o">=</span> <span class="s2">"Moderate"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">est_speedup</span> <span class="o">=</span> <span class="s2">"Minimal / Already optimal"</span>
|
|
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="se">\n</span><span class="s2">[SymPy Optimizer Report: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">]</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"- Floating Point Ops : </span><span class="si">{</span><span class="n">before_flops</span><span class="si">}</span><span class="s2"> -> </span><span class="si">{</span><span class="n">after_flops</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">flops_pct</span><span class="si">}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"- Heavy Ops (Div/Sqrt): </span><span class="si">{</span><span class="n">before_heavy</span><span class="si">}</span><span class="s2"> -> </span><span class="si">{</span><span class="n">after_heavy</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">heavy_pct</span><span class="si">}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"- 3D Array Mem Reads : </span><span class="si">{</span><span class="n">before_loads</span><span class="si">}</span><span class="s2"> -> </span><span class="si">{</span><span class="n">after_loads</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">loads_pct</span><span class="si">}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"=> Estimated Speedup in loop: </span><span class="si">{</span><span class="n">est_speedup</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">"</span><span class="p">)</span>
|
|
|
|
<span class="n">cse_decls</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">cse_assigns</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="k">if</span> <span class="n">replacements</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">temp_var</span><span class="p">,</span> <span class="n">temp_expr</span> <span class="ow">in</span> <span class="n">replacements</span><span class="p">:</span>
|
|
<span class="n">cse_decls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">"real(real64) :: </span><span class="si">{</span><span class="n">temp_var</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">cse_assigns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">temp_var</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="n">printer</span><span class="o">.</span><span class="n">doprint</span><span class="p">(</span><span class="n">temp_expr</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
|
|
<span class="n">rhs</span> <span class="o">=</span> <span class="n">printer</span><span class="o">.</span><span class="n">doprint</span><span class="p">(</span><span class="n">reduced_expr</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">rhs</span><span class="p">,</span> <span class="n">cse_decls</span><span class="p">,</span> <span class="n">cse_assigns</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizer.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes SympyOptimizer registry caches.</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>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable field registry.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1008</span>
|
|
<span class="normal">1009</span>
|
|
<span class="normal">1010</span>
|
|
<span class="normal">1011</span>
|
|
<span class="normal">1012</span>
|
|
<span class="normal">1013</span>
|
|
<span class="normal">1014</span>
|
|
<span class="normal">1015</span>
|
|
<span class="normal">1016</span>
|
|
<span class="normal">1017</span>
|
|
<span class="normal">1018</span>
|
|
<span class="normal">1019</span>
|
|
<span class="normal">1020</span>
|
|
<span class="normal">1021</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">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes SympyOptimizer registry caches.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Variable field registry.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fdict</span> <span class="o">=</span> <span class="n">fdict</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">exported_fields</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
|
|
<span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">fdict</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'attr'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">f</span><span class="o">.</span><span class="n">attr</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'export'</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged_targets</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizer.calculate_flops_and_heavy" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">calculate_flops_and_heavy</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Measures computational cost (FLOPS and heavy operators) for a SymPy expression.</p>
|
|
<p>Useful for logging optimization statistics.</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>expr</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The expression to evaluate.</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>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>(flops_count, heavy_operators_count).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1099</span>
|
|
<span class="normal">1100</span>
|
|
<span class="normal">1101</span>
|
|
<span class="normal">1102</span>
|
|
<span class="normal">1103</span>
|
|
<span class="normal">1104</span>
|
|
<span class="normal">1105</span>
|
|
<span class="normal">1106</span>
|
|
<span class="normal">1107</span>
|
|
<span class="normal">1108</span>
|
|
<span class="normal">1109</span>
|
|
<span class="normal">1110</span>
|
|
<span class="normal">1111</span>
|
|
<span class="normal">1112</span>
|
|
<span class="normal">1113</span>
|
|
<span class="normal">1114</span>
|
|
<span class="normal">1115</span>
|
|
<span class="normal">1116</span>
|
|
<span class="normal">1117</span>
|
|
<span class="normal">1118</span>
|
|
<span class="normal">1119</span>
|
|
<span class="normal">1120</span>
|
|
<span class="normal">1121</span>
|
|
<span class="normal">1122</span>
|
|
<span class="normal">1123</span>
|
|
<span class="normal">1124</span>
|
|
<span class="normal">1125</span>
|
|
<span class="normal">1126</span>
|
|
<span class="normal">1127</span>
|
|
<span class="normal">1128</span>
|
|
<span class="normal">1129</span>
|
|
<span class="normal">1130</span>
|
|
<span class="normal">1131</span>
|
|
<span class="normal">1132</span>
|
|
<span class="normal">1133</span>
|
|
<span class="normal">1134</span>
|
|
<span class="normal">1135</span>
|
|
<span class="normal">1136</span>
|
|
<span class="normal">1137</span>
|
|
<span class="normal">1138</span>
|
|
<span class="normal">1139</span>
|
|
<span class="normal">1140</span>
|
|
<span class="normal">1141</span>
|
|
<span class="normal">1142</span>
|
|
<span class="normal">1143</span>
|
|
<span class="normal">1144</span>
|
|
<span class="normal">1145</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">calculate_flops_and_heavy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Measures computational cost (FLOPS and heavy operators) for a SymPy expression.</span>
|
|
|
|
<span class="sd"> Useful for logging optimization statistics.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> expr (sympy.Expr): The expression to evaluate.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (flops_count, heavy_operators_count).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">flops</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">heavy</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">sympy</span><span class="o">.</span><span class="n">preorder_traversal</span><span class="p">(</span><span class="n">expr</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Add</span><span class="p">):</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Mul</span><span class="p">):</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Pow</span><span class="p">):</span>
|
|
<span class="n">base</span><span class="p">,</span> <span class="n">exp</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="k">if</span> <span class="n">exp</span> <span class="o">==</span> <span class="mf">0.5</span> <span class="ow">or</span> <span class="n">exp</span> <span class="o">==</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span> <span class="c1"># Square root/inv square root weight</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="n">exp</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">4</span> <span class="c1"># Division weight</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">exp</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Integer</span><span class="p">):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">exp</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">val</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="n">sympy</span><span class="o">.</span><span class="n">Derivative</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Function</span><span class="p">)):</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">func</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s1">'sqrt'</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'exp'</span><span class="p">,</span> <span class="s1">'log'</span><span class="p">,</span> <span class="s1">'sin'</span><span class="p">,</span> <span class="s1">'cos'</span><span class="p">,</span> <span class="s1">'tan'</span><span class="p">,</span> <span class="s1">'rxn_rate'</span><span class="p">):</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="n">name</span> <span class="o">==</span> <span class="s1">'Abs'</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">flops</span> <span class="o">+=</span> <span class="mi">10</span>
|
|
<span class="n">heavy</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">flops</span><span class="p">,</span> <span class="n">heavy</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizer.count_3d_loads" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">count_3d_loads</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Counts the total 3D array memory read accesses in the expression.</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>expr</code></td>
|
|
<td>
|
|
<code><span title="sympy.Expr">Expr</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The expression to analyze.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>three_d_arrays</code></td>
|
|
<td>
|
|
<code>set</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Names of active 3D arrays.</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>int</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The memory load count.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1147</span>
|
|
<span class="normal">1148</span>
|
|
<span class="normal">1149</span>
|
|
<span class="normal">1150</span>
|
|
<span class="normal">1151</span>
|
|
<span class="normal">1152</span>
|
|
<span class="normal">1153</span>
|
|
<span class="normal">1154</span>
|
|
<span class="normal">1155</span>
|
|
<span class="normal">1156</span>
|
|
<span class="normal">1157</span>
|
|
<span class="normal">1158</span>
|
|
<span class="normal">1159</span>
|
|
<span class="normal">1160</span>
|
|
<span class="normal">1161</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">count_3d_loads</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Counts the total 3D array memory read accesses in the expression.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> expr (sympy.Expr): The expression to analyze.</span>
|
|
<span class="sd"> three_d_arrays (set): Names of active 3D arrays.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> int: The memory load count.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">sympy</span><span class="o">.</span><span class="n">preorder_traversal</span><span class="p">(</span><span class="n">expr</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">)</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">three_d_arrays</span><span class="p">:</span>
|
|
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">count</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizer.get_instance" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">get_instance</span><span class="p">(</span><span class="n">fdict</span><span class="p">)</span></code>
|
|
|
|
<span class="doc doc-labels">
|
|
<small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small>
|
|
</span>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Retrieves or instantiates the singleton optimizer.</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>fdict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Current variable field registry mapping name -> FieldBase object.</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>SympyOptimizer</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The active singleton instance.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 994</span>
|
|
<span class="normal"> 995</span>
|
|
<span class="normal"> 996</span>
|
|
<span class="normal"> 997</span>
|
|
<span class="normal"> 998</span>
|
|
<span class="normal"> 999</span>
|
|
<span class="normal">1000</span>
|
|
<span class="normal">1001</span>
|
|
<span class="normal">1002</span>
|
|
<span class="normal">1003</span>
|
|
<span class="normal">1004</span>
|
|
<span class="normal">1005</span>
|
|
<span class="normal">1006</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">get_instance</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">fdict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Retrieves or instantiates the singleton optimizer.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> fdict (dict): Current variable field registry mapping name -> FieldBase object.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> SympyOptimizer: The active singleton instance.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span><span class="o">.</span><span class="n">fdict</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">fdict</span><span class="p">:</span>
|
|
<span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span><span class="n">fdict</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizer.get_sympy_expr" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">get_sympy_expr</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Recursively builds and caches a fully substituted SymPy Expression for a variable.</p>
|
|
<p>Avoids expanding boundary fields (PrimaryField, DerivedField representing spatial derivatives,
|
|
AveragedField, and FluctuationField) to preserve the grid boundaries. Expands other temporary variables.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Variable name.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>sympy.Expr: SymPy node representing the fully-expanded mathematical expression.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1032</span>
|
|
<span class="normal">1033</span>
|
|
<span class="normal">1034</span>
|
|
<span class="normal">1035</span>
|
|
<span class="normal">1036</span>
|
|
<span class="normal">1037</span>
|
|
<span class="normal">1038</span>
|
|
<span class="normal">1039</span>
|
|
<span class="normal">1040</span>
|
|
<span class="normal">1041</span>
|
|
<span class="normal">1042</span>
|
|
<span class="normal">1043</span>
|
|
<span class="normal">1044</span>
|
|
<span class="normal">1045</span>
|
|
<span class="normal">1046</span>
|
|
<span class="normal">1047</span>
|
|
<span class="normal">1048</span>
|
|
<span class="normal">1049</span>
|
|
<span class="normal">1050</span>
|
|
<span class="normal">1051</span>
|
|
<span class="normal">1052</span>
|
|
<span class="normal">1053</span>
|
|
<span class="normal">1054</span>
|
|
<span class="normal">1055</span>
|
|
<span class="normal">1056</span>
|
|
<span class="normal">1057</span>
|
|
<span class="normal">1058</span>
|
|
<span class="normal">1059</span>
|
|
<span class="normal">1060</span>
|
|
<span class="normal">1061</span>
|
|
<span class="normal">1062</span>
|
|
<span class="normal">1063</span>
|
|
<span class="normal">1064</span>
|
|
<span class="normal">1065</span>
|
|
<span class="normal">1066</span>
|
|
<span class="normal">1067</span>
|
|
<span class="normal">1068</span>
|
|
<span class="normal">1069</span>
|
|
<span class="normal">1070</span>
|
|
<span class="normal">1071</span>
|
|
<span class="normal">1072</span>
|
|
<span class="normal">1073</span>
|
|
<span class="normal">1074</span>
|
|
<span class="normal">1075</span>
|
|
<span class="normal">1076</span>
|
|
<span class="normal">1077</span>
|
|
<span class="normal">1078</span>
|
|
<span class="normal">1079</span>
|
|
<span class="normal">1080</span>
|
|
<span class="normal">1081</span>
|
|
<span class="normal">1082</span>
|
|
<span class="normal">1083</span>
|
|
<span class="normal">1084</span>
|
|
<span class="normal">1085</span>
|
|
<span class="normal">1086</span>
|
|
<span class="normal">1087</span>
|
|
<span class="normal">1088</span>
|
|
<span class="normal">1089</span>
|
|
<span class="normal">1090</span>
|
|
<span class="normal">1091</span>
|
|
<span class="normal">1092</span>
|
|
<span class="normal">1093</span>
|
|
<span class="normal">1094</span>
|
|
<span class="normal">1095</span>
|
|
<span class="normal">1096</span>
|
|
<span class="normal">1097</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">get_sympy_expr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Recursively builds and caches a fully substituted SymPy Expression for a variable.</span>
|
|
|
|
<span class="sd"> Avoids expanding boundary fields (PrimaryField, DerivedField representing spatial derivatives,</span>
|
|
<span class="sd"> AveragedField, and FluctuationField) to preserve the grid boundaries. Expands other temporary variables.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Variable name.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> sympy.Expr: SymPy node representing the fully-expanded mathematical expression.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
|
|
|
|
<span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'prime'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">field</span><span class="o">.</span><span class="n">prime</span><span class="p">:</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="k">return</span> <span class="n">expr</span>
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'op'</span><span class="p">):</span> <span class="c1"># DerivedField (ddx, etc.)</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="k">return</span> <span class="n">expr</span>
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'weighted'</span><span class="p">):</span> <span class="c1"># AveragedField</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="k">return</span> <span class="n">expr</span>
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'field'</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">):</span> <span class="c1"># FluctuationField</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">Symbol</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="k">return</span> <span class="n">expr</span>
|
|
|
|
<span class="n">transformer</span> <span class="o">=</span> <span class="n">LarkToSympy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">)</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">transformer</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">exp</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Recursively substitute intermediate variables</span>
|
|
<span class="n">expanded_expr</span> <span class="o">=</span> <span class="n">expr</span>
|
|
<span class="n">changed</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">while</span> <span class="n">changed</span><span class="p">:</span>
|
|
<span class="n">changed</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">free_syms</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">expanded_expr</span><span class="o">.</span><span class="n">free_symbols</span><span class="p">)</span>
|
|
<span class="n">sub_dict</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">sym</span> <span class="ow">in</span> <span class="n">free_syms</span><span class="p">:</span>
|
|
<span class="n">sym_name</span> <span class="o">=</span> <span class="n">sym</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="k">if</span> <span class="n">sym_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">:</span>
|
|
<span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="p">[</span><span class="n">sym_name</span><span class="p">]</span>
|
|
<span class="n">is_derived_field</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'op'</span><span class="p">)</span>
|
|
<span class="n">is_averaged_field</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'weighted'</span><span class="p">)</span>
|
|
<span class="n">is_primary_field</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s1">'prime'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">f</span><span class="o">.</span><span class="n">prime</span>
|
|
<span class="n">is_exported</span> <span class="o">=</span> <span class="n">sym_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">exported_fields</span>
|
|
<span class="n">is_averaged_target</span> <span class="o">=</span> <span class="n">sym_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">averaged_targets</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">is_derived_field</span> <span class="ow">or</span> <span class="n">is_averaged_field</span> <span class="ow">or</span> <span class="n">is_primary_field</span> <span class="ow">or</span> <span class="n">is_exported</span> <span class="ow">or</span> <span class="n">is_averaged_target</span><span class="p">):</span>
|
|
<span class="n">sub_dict</span><span class="p">[</span><span class="n">sym</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sympy_expr</span><span class="p">(</span><span class="n">sym_name</span><span class="p">)</span>
|
|
<span class="n">changed</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="k">if</span> <span class="n">sub_dict</span><span class="p">:</span>
|
|
<span class="n">expanded_expr</span> <span class="o">=</span> <span class="n">expanded_expr</span><span class="o">.</span><span class="n">subs</span><span class="p">(</span><span class="n">sub_dict</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sympy_cache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">expanded_expr</span>
|
|
<span class="k">return</span> <span class="n">expanded_expr</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizer.optimize_field" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">optimize_field</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Optimizes a physical field expression and extracts Common Subexpressions.</p>
|
|
<p>Applies SymPy simplification and CSE, printing optimization reports to stderr.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The name of the field to optimize.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>alloc</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Buffer allocation mapping. Defaults to None.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</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>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>(rhs_code, cse_declarations, cse_assignments) where:
|
|
rhs_code (str): The final right hand side Fortran expression.
|
|
cse_declarations (list of str): Code strings to declare local CSE scalars.
|
|
cse_assignments (list of str): Code strings to calculate CSE values.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1163</span>
|
|
<span class="normal">1164</span>
|
|
<span class="normal">1165</span>
|
|
<span class="normal">1166</span>
|
|
<span class="normal">1167</span>
|
|
<span class="normal">1168</span>
|
|
<span class="normal">1169</span>
|
|
<span class="normal">1170</span>
|
|
<span class="normal">1171</span>
|
|
<span class="normal">1172</span>
|
|
<span class="normal">1173</span>
|
|
<span class="normal">1174</span>
|
|
<span class="normal">1175</span>
|
|
<span class="normal">1176</span>
|
|
<span class="normal">1177</span>
|
|
<span class="normal">1178</span>
|
|
<span class="normal">1179</span>
|
|
<span class="normal">1180</span>
|
|
<span class="normal">1181</span>
|
|
<span class="normal">1182</span>
|
|
<span class="normal">1183</span>
|
|
<span class="normal">1184</span>
|
|
<span class="normal">1185</span>
|
|
<span class="normal">1186</span>
|
|
<span class="normal">1187</span>
|
|
<span class="normal">1188</span>
|
|
<span class="normal">1189</span>
|
|
<span class="normal">1190</span>
|
|
<span class="normal">1191</span>
|
|
<span class="normal">1192</span>
|
|
<span class="normal">1193</span>
|
|
<span class="normal">1194</span>
|
|
<span class="normal">1195</span>
|
|
<span class="normal">1196</span>
|
|
<span class="normal">1197</span>
|
|
<span class="normal">1198</span>
|
|
<span class="normal">1199</span>
|
|
<span class="normal">1200</span>
|
|
<span class="normal">1201</span>
|
|
<span class="normal">1202</span>
|
|
<span class="normal">1203</span>
|
|
<span class="normal">1204</span>
|
|
<span class="normal">1205</span>
|
|
<span class="normal">1206</span>
|
|
<span class="normal">1207</span>
|
|
<span class="normal">1208</span>
|
|
<span class="normal">1209</span>
|
|
<span class="normal">1210</span>
|
|
<span class="normal">1211</span>
|
|
<span class="normal">1212</span>
|
|
<span class="normal">1213</span>
|
|
<span class="normal">1214</span>
|
|
<span class="normal">1215</span>
|
|
<span class="normal">1216</span>
|
|
<span class="normal">1217</span>
|
|
<span class="normal">1218</span>
|
|
<span class="normal">1219</span>
|
|
<span class="normal">1220</span>
|
|
<span class="normal">1221</span>
|
|
<span class="normal">1222</span>
|
|
<span class="normal">1223</span>
|
|
<span class="normal">1224</span>
|
|
<span class="normal">1225</span>
|
|
<span class="normal">1226</span>
|
|
<span class="normal">1227</span>
|
|
<span class="normal">1228</span>
|
|
<span class="normal">1229</span>
|
|
<span class="normal">1230</span>
|
|
<span class="normal">1231</span>
|
|
<span class="normal">1232</span>
|
|
<span class="normal">1233</span>
|
|
<span class="normal">1234</span>
|
|
<span class="normal">1235</span>
|
|
<span class="normal">1236</span>
|
|
<span class="normal">1237</span>
|
|
<span class="normal">1238</span>
|
|
<span class="normal">1239</span>
|
|
<span class="normal">1240</span>
|
|
<span class="normal">1241</span>
|
|
<span class="normal">1242</span>
|
|
<span class="normal">1243</span>
|
|
<span class="normal">1244</span>
|
|
<span class="normal">1245</span>
|
|
<span class="normal">1246</span>
|
|
<span class="normal">1247</span>
|
|
<span class="normal">1248</span>
|
|
<span class="normal">1249</span>
|
|
<span class="normal">1250</span>
|
|
<span class="normal">1251</span>
|
|
<span class="normal">1252</span>
|
|
<span class="normal">1253</span>
|
|
<span class="normal">1254</span>
|
|
<span class="normal">1255</span>
|
|
<span class="normal">1256</span>
|
|
<span class="normal">1257</span>
|
|
<span class="normal">1258</span>
|
|
<span class="normal">1259</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">optimize_field</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">alloc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Optimizes a physical field expression and extracts Common Subexpressions.</span>
|
|
|
|
<span class="sd"> Applies SymPy simplification and CSE, printing optimization reports to stderr.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): The name of the field to optimize.</span>
|
|
<span class="sd"> alloc (dict, optional): Buffer allocation mapping. Defaults to None.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (rhs_code, cse_declarations, cse_assignments) where:</span>
|
|
<span class="sd"> rhs_code (str): The final right hand side Fortran expression.</span>
|
|
<span class="sd"> cse_declarations (list of str): Code strings to declare local CSE scalars.</span>
|
|
<span class="sd"> cse_assignments (list of str): Code strings to calculate CSE values.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sympy_expr</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
|
|
<span class="n">three_d_arrays</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s1">'dim'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">v</span><span class="o">.</span><span class="n">dim</span> <span class="o">==</span> <span class="s1">':,:,:'</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="c1"># Optimization metrics before</span>
|
|
<span class="n">before_flops</span><span class="p">,</span> <span class="n">before_heavy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calculate_flops_and_heavy</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span>
|
|
<span class="n">before_loads</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count_3d_loads</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Simplify expression</span>
|
|
<span class="n">simplified_expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">simplify</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span>
|
|
<span class="n">simplified_expr</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">cancel</span><span class="p">(</span><span class="n">simplified_expr</span><span class="p">)</span>
|
|
|
|
<span class="n">array_symbols</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s1">'array'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">v</span><span class="o">.</span><span class="n">array</span><span class="p">:</span>
|
|
<span class="n">array_symbols</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">array</span>
|
|
<span class="k">elif</span> <span class="n">alloc</span> <span class="ow">and</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">alloc</span><span class="p">:</span>
|
|
<span class="n">array_symbols</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">alloc</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">array_symbols</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">k</span>
|
|
|
|
<span class="n">avg_symbols</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'avg_names'</span><span class="p">,</span> <span class="p">[])}</span>
|
|
<span class="n">printer</span> <span class="o">=</span> <span class="n">ArrayFCodePrinter</span><span class="p">(</span><span class="n">array_symbols</span><span class="o">=</span><span class="n">array_symbols</span><span class="p">,</span> <span class="n">avg_symbols</span><span class="o">=</span><span class="n">avg_symbols</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Perform Common Subexpression Elimination</span>
|
|
<span class="n">replacements</span><span class="p">,</span> <span class="n">reduced_exprs</span> <span class="o">=</span> <span class="n">sympy</span><span class="o">.</span><span class="n">cse</span><span class="p">(</span><span class="n">simplified_expr</span><span class="p">)</span>
|
|
<span class="n">reduced_expr</span> <span class="o">=</span> <span class="n">reduced_exprs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Optimization metrics after</span>
|
|
<span class="n">after_flops</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">after_heavy</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">after_loads</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="k">for</span> <span class="n">temp_var</span><span class="p">,</span> <span class="n">temp_expr</span> <span class="ow">in</span> <span class="n">replacements</span><span class="p">:</span>
|
|
<span class="n">f_val</span><span class="p">,</span> <span class="n">h_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calculate_flops_and_heavy</span><span class="p">(</span><span class="n">temp_expr</span><span class="p">)</span>
|
|
<span class="n">after_flops</span> <span class="o">+=</span> <span class="n">f_val</span>
|
|
<span class="n">after_heavy</span> <span class="o">+=</span> <span class="n">h_val</span>
|
|
<span class="n">after_loads</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count_3d_loads</span><span class="p">(</span><span class="n">temp_expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">)</span>
|
|
|
|
<span class="n">f_val</span><span class="p">,</span> <span class="n">h_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calculate_flops_and_heavy</span><span class="p">(</span><span class="n">reduced_expr</span><span class="p">)</span>
|
|
<span class="n">after_flops</span> <span class="o">+=</span> <span class="n">f_val</span>
|
|
<span class="n">after_heavy</span> <span class="o">+=</span> <span class="n">h_val</span>
|
|
<span class="n">after_loads</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count_3d_loads</span><span class="p">(</span><span class="n">reduced_expr</span><span class="p">,</span> <span class="n">three_d_arrays</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">pct_str</span><span class="p">(</span><span class="n">before</span><span class="p">,</span> <span class="n">after</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">before</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"0.0%"</span> <span class="k">if</span> <span class="n">after</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="s2">"+inf%"</span>
|
|
<span class="n">diff</span> <span class="o">=</span> <span class="n">after</span> <span class="o">-</span> <span class="n">before</span>
|
|
<span class="n">pct</span> <span class="o">=</span> <span class="p">(</span><span class="n">diff</span> <span class="o">/</span> <span class="n">before</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span>
|
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">pct</span><span class="si">:</span><span class="s2">+.1f</span><span class="si">}</span><span class="s2">%"</span>
|
|
|
|
<span class="n">flops_pct</span> <span class="o">=</span> <span class="n">pct_str</span><span class="p">(</span><span class="n">before_flops</span><span class="p">,</span> <span class="n">after_flops</span><span class="p">)</span>
|
|
<span class="n">heavy_pct</span> <span class="o">=</span> <span class="n">pct_str</span><span class="p">(</span><span class="n">before_heavy</span><span class="p">,</span> <span class="n">after_heavy</span><span class="p">)</span>
|
|
<span class="n">loads_pct</span> <span class="o">=</span> <span class="n">pct_str</span><span class="p">(</span><span class="n">before_loads</span><span class="p">,</span> <span class="n">after_loads</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">after_flops</span> <span class="o"><</span> <span class="n">before_flops</span> <span class="o">*</span> <span class="mf">0.5</span> <span class="ow">or</span> <span class="n">after_loads</span> <span class="o"><</span> <span class="n">before_loads</span> <span class="o">*</span> <span class="mf">0.5</span><span class="p">:</span>
|
|
<span class="n">est_speedup</span> <span class="o">=</span> <span class="s2">"Highly significant"</span>
|
|
<span class="k">elif</span> <span class="n">after_flops</span> <span class="o"><</span> <span class="n">before_flops</span> <span class="ow">or</span> <span class="n">after_loads</span> <span class="o"><</span> <span class="n">before_loads</span><span class="p">:</span>
|
|
<span class="n">est_speedup</span> <span class="o">=</span> <span class="s2">"Moderate"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">est_speedup</span> <span class="o">=</span> <span class="s2">"Minimal / Already optimal"</span>
|
|
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="se">\n</span><span class="s2">[SymPy Optimizer Report: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">]</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"- Floating Point Ops : </span><span class="si">{</span><span class="n">before_flops</span><span class="si">}</span><span class="s2"> -> </span><span class="si">{</span><span class="n">after_flops</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">flops_pct</span><span class="si">}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"- Heavy Ops (Div/Sqrt): </span><span class="si">{</span><span class="n">before_heavy</span><span class="si">}</span><span class="s2"> -> </span><span class="si">{</span><span class="n">after_heavy</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">heavy_pct</span><span class="si">}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"- 3D Array Mem Reads : </span><span class="si">{</span><span class="n">before_loads</span><span class="si">}</span><span class="s2"> -> </span><span class="si">{</span><span class="n">after_loads</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">loads_pct</span><span class="si">}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">f</span><span class="s2">"=> Estimated Speedup in loop: </span><span class="si">{</span><span class="n">est_speedup</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">"</span><span class="p">)</span>
|
|
|
|
<span class="n">cse_decls</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">cse_assigns</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="k">if</span> <span class="n">replacements</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">temp_var</span><span class="p">,</span> <span class="n">temp_expr</span> <span class="ow">in</span> <span class="n">replacements</span><span class="p">:</span>
|
|
<span class="n">cse_decls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">"real(real64) :: </span><span class="si">{</span><span class="n">temp_var</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">cse_assigns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">temp_var</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="n">printer</span><span class="o">.</span><span class="n">doprint</span><span class="p">(</span><span class="n">temp_expr</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
|
|
<span class="n">rhs</span> <span class="o">=</span> <span class="n">printer</span><span class="o">.</span><span class="n">doprint</span><span class="p">(</span><span class="n">reduced_expr</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">rhs</span><span class="p">,</span> <span class="n">cse_decls</span><span class="p">,</span> <span class="n">cse_assigns</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympyOptimizer.set_averaged" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">set_averaged</span><span class="p">(</span><span class="n">averaged_dict</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Sets the targets and names of averaged variables.</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>averaged_dict</code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Dictionary mapping average variable names to AveragedField objects.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1023</span>
|
|
<span class="normal">1024</span>
|
|
<span class="normal">1025</span>
|
|
<span class="normal">1026</span>
|
|
<span class="normal">1027</span>
|
|
<span class="normal">1028</span>
|
|
<span class="normal">1029</span>
|
|
<span class="normal">1030</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">set_averaged</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">averaged_dict</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Sets the targets and names of averaged variables.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> averaged_dict (dict): Dictionary mapping average variable names to AveragedField objects.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">averaged_targets</span> <span class="o">=</span> <span class="p">{</span><span class="n">a</span><span class="o">.</span><span class="n">target</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">averaged_dict</span><span class="o">.</span><span class="n">values</span><span class="p">()}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">avg_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">averaged_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="post.SympySimplificationStage" class="doc doc-heading">
|
|
<code>SympySimplificationStage</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code>object</code></p>
|
|
|
|
|
|
<p>Compiler pipeline Stage 3: Expands, simplifies equations and prunes dependencies.</p>
|
|
<p>This stage:
|
|
1. Invokes the SympyOptimizer to substitute and simplify equations.
|
|
2. Updates variable dependencies in CompilationContext to reflect optimized equations.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2500</span>
|
|
<span class="normal">2501</span>
|
|
<span class="normal">2502</span>
|
|
<span class="normal">2503</span>
|
|
<span class="normal">2504</span>
|
|
<span class="normal">2505</span>
|
|
<span class="normal">2506</span>
|
|
<span class="normal">2507</span>
|
|
<span class="normal">2508</span>
|
|
<span class="normal">2509</span>
|
|
<span class="normal">2510</span>
|
|
<span class="normal">2511</span>
|
|
<span class="normal">2512</span>
|
|
<span class="normal">2513</span>
|
|
<span class="normal">2514</span>
|
|
<span class="normal">2515</span>
|
|
<span class="normal">2516</span>
|
|
<span class="normal">2517</span>
|
|
<span class="normal">2518</span>
|
|
<span class="normal">2519</span>
|
|
<span class="normal">2520</span>
|
|
<span class="normal">2521</span>
|
|
<span class="normal">2522</span>
|
|
<span class="normal">2523</span>
|
|
<span class="normal">2524</span>
|
|
<span class="normal">2525</span>
|
|
<span class="normal">2526</span>
|
|
<span class="normal">2527</span>
|
|
<span class="normal">2528</span>
|
|
<span class="normal">2529</span>
|
|
<span class="normal">2530</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">SympySimplificationStage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Compiler pipeline Stage 3: Expands, simplifies equations and prunes dependencies.</span>
|
|
|
|
<span class="sd"> This stage:</span>
|
|
<span class="sd"> 1. Invokes the SympyOptimizer to substitute and simplify equations.</span>
|
|
<span class="sd"> 2. Updates variable dependencies in CompilationContext to reflect optimized equations.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes Stage 3 mathematical expression expansion and dependency pruning.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context to update.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># 1. SymPy 수식 최적화 엔진 초기화</span>
|
|
<span class="n">opt</span> <span class="o">=</span> <span class="n">SympyOptimizer</span><span class="o">.</span><span class="n">get_instance</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">opt</span><span class="o">.</span><span class="n">set_averaged</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 2. SymPy가 대입식 치환(Substitution) 과정에서 제거한 불필요한 의존성 관계를 </span>
|
|
<span class="c1"># 의존성 그래프에 즉각 반영하여 실제 계산을 위한 의존성 체인을 슬림하게 정리합니다.</span>
|
|
<span class="n">updated_dependency</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">dep_set</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">name</span><span class="p">],</span> <span class="n">Field</span><span class="p">):</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">opt</span><span class="o">.</span><span class="n">get_sympy_expr</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="c1"># 실제 정리된 SymPy 식에 잔존하는 자유 기호 명칭들만 추출</span>
|
|
<span class="n">free_sym_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">sym</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">sym</span> <span class="ow">in</span> <span class="n">expr</span><span class="o">.</span><span class="n">free_symbols</span><span class="p">}</span>
|
|
<span class="n">valid_deps</span> <span class="o">=</span> <span class="p">{</span><span class="n">dep</span> <span class="k">for</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">free_sym_names</span> <span class="k">if</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span> <span class="ow">or</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">primary</span><span class="p">}</span>
|
|
<span class="n">updated_dependency</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">valid_deps</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">updated_dependency</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">dep_set</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span> <span class="o">=</span> <span class="n">updated_dependency</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="post.SympySimplificationStage.execute" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">execute</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Executes Stage 3 mathematical expression expansion and dependency pruning.</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.CompilationContext">CompilationContext</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Active compilation context to update.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2508</span>
|
|
<span class="normal">2509</span>
|
|
<span class="normal">2510</span>
|
|
<span class="normal">2511</span>
|
|
<span class="normal">2512</span>
|
|
<span class="normal">2513</span>
|
|
<span class="normal">2514</span>
|
|
<span class="normal">2515</span>
|
|
<span class="normal">2516</span>
|
|
<span class="normal">2517</span>
|
|
<span class="normal">2518</span>
|
|
<span class="normal">2519</span>
|
|
<span class="normal">2520</span>
|
|
<span class="normal">2521</span>
|
|
<span class="normal">2522</span>
|
|
<span class="normal">2523</span>
|
|
<span class="normal">2524</span>
|
|
<span class="normal">2525</span>
|
|
<span class="normal">2526</span>
|
|
<span class="normal">2527</span>
|
|
<span class="normal">2528</span>
|
|
<span class="normal">2529</span>
|
|
<span class="normal">2530</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Executes Stage 3 mathematical expression expansion and dependency pruning.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ctx (CompilationContext): Active compilation context to update.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># 1. SymPy 수식 최적화 엔진 초기화</span>
|
|
<span class="n">opt</span> <span class="o">=</span> <span class="n">SympyOptimizer</span><span class="o">.</span><span class="n">get_instance</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">)</span>
|
|
<span class="n">opt</span><span class="o">.</span><span class="n">set_averaged</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">averaged</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 2. SymPy가 대입식 치환(Substitution) 과정에서 제거한 불필요한 의존성 관계를 </span>
|
|
<span class="c1"># 의존성 그래프에 즉각 반영하여 실제 계산을 위한 의존성 체인을 슬림하게 정리합니다.</span>
|
|
<span class="n">updated_dependency</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">dep_set</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">derived</span><span class="p">[</span><span class="n">name</span><span class="p">],</span> <span class="n">Field</span><span class="p">):</span>
|
|
<span class="n">expr</span> <span class="o">=</span> <span class="n">opt</span><span class="o">.</span><span class="n">get_sympy_expr</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="c1"># 실제 정리된 SymPy 식에 잔존하는 자유 기호 명칭들만 추출</span>
|
|
<span class="n">free_sym_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">sym</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">sym</span> <span class="ow">in</span> <span class="n">expr</span><span class="o">.</span><span class="n">free_symbols</span><span class="p">}</span>
|
|
<span class="n">valid_deps</span> <span class="o">=</span> <span class="p">{</span><span class="n">dep</span> <span class="k">for</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">free_sym_names</span> <span class="k">if</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">derived</span> <span class="ow">or</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">ctx</span><span class="o">.</span><span class="n">primary</span><span class="p">}</span>
|
|
<span class="n">updated_dependency</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">valid_deps</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">updated_dependency</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">dep_set</span>
|
|
<span class="n">ctx</span><span class="o">.</span><span class="n">dependency</span> <span class="o">=</span> <span class="n">updated_dependency</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="post.make_allocate" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">make_allocate</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">shape</span><span class="p">,</span> <span class="n">init_zero</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></code>
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Fortran 배열을 동적 할당하고 예외 발생 시 프로세스를 안전하게 폭파시키는 할당 코드를 작성해 줍니다.</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>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>할당할 배열의 이름.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>shape</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>할당 크기 형태 (예: 'nxp,nyp,nzp').</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>init_zero</code></td>
|
|
<td>
|
|
<code>bool</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True인 경우 0.0d0으로 초기화 구문을 덧붙입니다. Defaults to True.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>True</code>
|
|
</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>Fortran dynamic allocation code block.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1841</span>
|
|
<span class="normal">1842</span>
|
|
<span class="normal">1843</span>
|
|
<span class="normal">1844</span>
|
|
<span class="normal">1845</span>
|
|
<span class="normal">1846</span>
|
|
<span class="normal">1847</span>
|
|
<span class="normal">1848</span>
|
|
<span class="normal">1849</span>
|
|
<span class="normal">1850</span>
|
|
<span class="normal">1851</span>
|
|
<span class="normal">1852</span>
|
|
<span class="normal">1853</span>
|
|
<span class="normal">1854</span>
|
|
<span class="normal">1855</span>
|
|
<span class="normal">1856</span>
|
|
<span class="normal">1857</span>
|
|
<span class="normal">1858</span>
|
|
<span class="normal">1859</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">make_allocate</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">shape</span><span class="p">,</span> <span class="n">init_zero</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Fortran 배열을 동적 할당하고 예외 발생 시 프로세스를 안전하게 폭파시키는 할당 코드를 작성해 줍니다.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): 할당할 배열의 이름.</span>
|
|
<span class="sd"> shape (str): 할당 크기 형태 (예: 'nxp,nyp,nzp').</span>
|
|
<span class="sd"> init_zero (bool, optional): True인 경우 0.0d0으로 초기화 구문을 덧붙입니다. Defaults to True.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: Fortran dynamic allocation code block.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">alloc_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"allocate(</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">shape</span><span class="si">}</span><span class="s2">), stat=ierr)</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="n">alloc_str</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">"if (ierr /= 0) then</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="n">alloc_str</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" write(0,*) 'Error: allocation of </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> failed on process', myid</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="n">alloc_str</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" call MPI_ABORT(MPI_COMM_TASK, 1, mpi_err)</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="n">alloc_str</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">"end if"</span>
|
|
<span class="k">if</span> <span class="n">init_zero</span><span class="p">:</span>
|
|
<span class="n">alloc_str</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">"</span><span class="se">\n</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> = 0."</span>
|
|
<span class="k">return</span> <span class="n">alloc_str</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="post.tok_to_bool" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">tok_to_bool</span><span class="p">(</span><span class="n">tok</span><span class="p">)</span></code>
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Convert the value of <code>tok</code> from string to bool, while maintaining line number & column.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2326</span>
|
|
<span class="normal">2327</span>
|
|
<span class="normal">2328</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">tok_to_bool</span><span class="p">(</span><span class="n">tok</span><span class="p">):</span>
|
|
<span class="s2">"Convert the value of `tok` from string to bool, while maintaining line number & column."</span>
|
|
<span class="k">return</span> <span class="n">Token</span><span class="o">.</span><span class="n">new_borrow_pos</span><span class="p">(</span><span class="n">tok</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">tok</span><span class="o">.</span><span class="n">value</span> <span class="o">==</span> <span class="s2">"true"</span><span class="p">,</span> <span class="n">tok</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="post.tok_to_int" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">tok_to_int</span><span class="p">(</span><span class="n">tok</span><span class="p">)</span></code>
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Convert the value of <code>tok</code> from string to int, while maintaining line number & column.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2330</span>
|
|
<span class="normal">2331</span>
|
|
<span class="normal">2332</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">tok_to_int</span><span class="p">(</span><span class="n">tok</span><span class="p">):</span>
|
|
<span class="s2">"Convert the value of `tok` from string to int, while maintaining line number & column."</span>
|
|
<span class="k">return</span> <span class="n">Token</span><span class="o">.</span><span class="n">new_borrow_pos</span><span class="p">(</span><span class="n">tok</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">tok</span><span class="p">),</span> <span class="n">tok</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="post.tok_to_str" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">tok_to_str</span><span class="p">(</span><span class="n">tok</span><span class="p">)</span></code>
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Convert the value of <code>tok</code> from string to string, while maintaining line number & column.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>code/code_gen/post.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">2334</span>
|
|
<span class="normal">2335</span>
|
|
<span class="normal">2336</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">tok_to_str</span><span class="p">(</span><span class="n">tok</span><span class="p">):</span>
|
|
<span class="s2">"Convert the value of `tok` from string to string, while maintaining line number & column."</span>
|
|
<span class="k">return</span> <span class="n">Token</span><span class="o">.</span><span class="n">new_borrow_pos</span><span class="p">(</span><span class="n">tok</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">tok</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">'"'</span><span class="p">),</span> <span class="n">tok</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> |