MEIDNet / site /reference /config.html
Babu09's picture
Deploy MEIDNet Studio
8ce7f7f verified
Raw History Blame Contribute Delete
56.5 kB
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Multimodal inverse design of crystalline materials — with your own data, rules and families.">
<link rel="canonical" href="https://babu09-meidnet.hf.space/docs/reference/config.html">
<link rel="prev" href="cli.html">
<link rel="next" href="families.html">
<link rel="icon" href="../assets/favicon-64.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
<title>Configuration - MEIDNet Prism</title>
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="stylesheet" href="../assets/extra.css">
<link rel="stylesheet" href="../assets/prism-docs.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="default" data-md-color-primary="custom" data-md-color-accent="custom">
<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="#configuration-reference" 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="../index.html" title="MEIDNet Prism" class="md-header__button md-logo" aria-label="MEIDNet Prism" data-md-component="logo">
<img src="../assets/prism-mark.png" alt="logo">
</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">
MEIDNet Prism
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Configuration
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 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-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"/></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>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</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>
<div class="md-header__source">
<a href="https://github.com/ABnano/MEIDNet" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
ABnano/MEIDNet
</div>
</a>
</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="../index.html" class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item">
<a href="../learn/index.html" class="md-tabs__link">
Learn
</a>
</li>
<li class="md-tabs__item">
<a href="../benchmarks/index.html" class="md-tabs__link">
Benchmark
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../develop.html" class="md-tabs__link">
Develop
</a>
</li>
<li class="md-tabs__item">
<a href="https://babu09-meidnet-matter.hf.space/" class="md-tabs__link">
Matter ↗
</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="../index.html" title="MEIDNet Prism" class="md-nav__button md-logo" aria-label="MEIDNet Prism" data-md-component="logo">
<img src="../assets/prism-mark.png" alt="logo">
</a>
MEIDNet Prism
</label>
<div class="md-nav__source">
<a href="https://github.com/ABnano/MEIDNet" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
ABnano/MEIDNet
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../index.html" class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Learn
</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="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Learn
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../learn/index.html" class="md-nav__link">
<span class="md-ellipsis">
Learn multimodality
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../learn/architectures.html" class="md-nav__link">
<span class="md-ellipsis">
Architectures
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../learn/recipes.html" class="md-nav__link">
<span class="md-ellipsis">
Recipes by problem
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../understand/how-it-works.html" class="md-nav__link">
<span class="md-ellipsis">
How MEIDNet works
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../understand/interpretability.html" class="md-nav__link">
<span class="md-ellipsis">
Interpreting a candidate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../understand/limits.html" class="md-nav__link">
<span class="md-ellipsis">
Scope and roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ecosystem.html" class="md-nav__link">
<span class="md-ellipsis">
The ecosystem
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../research/paper.html" class="md-nav__link">
<span class="md-ellipsis">
Paper and citation
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Benchmark
</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>
Benchmark
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../benchmarks/index.html" class="md-nav__link">
<span class="md-ellipsis">
MEIDNet Benchmarks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../benchmarks/compatibility.html" class="md-nav__link">
<span class="md-ellipsis">
Benchmark compatibility
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../benchmarks/perov5.html" class="md-nav__link">
<span class="md-ellipsis">
Perov-5
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../benchmarks/perov5-reproduction.html" class="md-nav__link">
<span class="md-ellipsis">
Perov-5: alignment across seeds
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../benchmarks/perov5-insights.html" class="md-nav__link">
<span class="md-ellipsis">
Perov-5: what the runs show
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../benchmarks/perov5-guide.html" class="md-nav__link">
<span class="md-ellipsis">
Perov-5: choose a model and generate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../benchmarks/mp20.html" class="md-nav__link">
<span class="md-ellipsis">
MP-20
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../benchmarks/carbon24.html" class="md-nav__link">
<span class="md-ellipsis">
Carbon-24
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../explore/datasets.html" class="md-nav__link">
<span class="md-ellipsis">
Datasets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../explore/databases.html" class="md-nav__link">
<span class="md-ellipsis">
Databases by application
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../community/contribute.html" class="md-nav__link">
<span class="md-ellipsis">
Contribute a result
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../community/index.html" class="md-nav__link">
<span class="md-ellipsis">
Community results
</span>
</a>
</li>
</ul>
</nav>
</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_4" checked>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
<span class="md-ellipsis">
Develop
</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="true">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Develop
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../develop.html" class="md-nav__link">
<span class="md-ellipsis">
Develop with MEIDNet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../start/quickstart.html" class="md-nav__link">
<span class="md-ellipsis">
5-minute quickstart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../start/what-data.html" class="md-nav__link">
<span class="md-ellipsis">
What data do I need?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../start/colab.html" class="md-nav__link">
<span class="md-ellipsis">
Run in Colab
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../use/studio.html" class="md-nav__link">
<span class="md-ellipsis">
MEIDNet Studio
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../use/your-data.html" class="md-nav__link">
<span class="md-ellipsis">
Bring your own dataset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../use/config.html" class="md-nav__link">
<span class="md-ellipsis">
The configuration file
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../use/explore-3d.html" class="md-nav__link">
<span class="md-ellipsis">
Explore in 3D
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../use/reports.html" class="md-nav__link">
<span class="md-ellipsis">
Reading the reports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../explore/capabilities.html" class="md-nav__link">
<span class="md-ellipsis">
Capabilities
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_11" >
<label class="md-nav__link" for="__nav_4_11" id="__nav_4_11_label" tabindex="">
<span class="md-ellipsis">
Recipes
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_11">
<span class="md-nav__icon md-icon"></span>
Recipes
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../recipes/change-targets.html" class="md-nav__link">
<span class="md-ellipsis">
Change the target properties
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../recipes/add-property.html" class="md-nav__link">
<span class="md-ellipsis">
Add a property
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../recipes/elements.html" class="md-nav__link">
<span class="md-ellipsis">
Exclude or restrict elements
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../recipes/change-family.html" class="md-nav__link">
<span class="md-ellipsis">
Change the material family
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../recipes/add-constraint.html" class="md-nav__link">
<span class="md-ellipsis">
Add a rule (constraint)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../recipes/screen.html" class="md-nav__link">
<span class="md-ellipsis">
Screen stability with MACE
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_12" >
<label class="md-nav__link" for="__nav_4_12" id="__nav_4_12_label" tabindex="">
<span class="md-ellipsis">
Examples
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_12">
<span class="md-nav__icon md-icon"></span>
Examples
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../examples/perov5.html" class="md-nav__link">
<span class="md-ellipsis">
Perov-5 (the paper)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../examples/double-perovskite.html" class="md-nav__link">
<span class="md-ellipsis">
Double perovskites
</span>
</a>
</li>
</ul>
</nav>
</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_4_13" checked>
<label class="md-nav__link" for="__nav_4_13" id="__nav_4_13_label" tabindex="">
<span class="md-ellipsis">
Reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_13_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_13">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="cli.html" class="md-nav__link">
<span class="md-ellipsis">
Command line
</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">
Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="config.html" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Configuration
</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="#top-level" class="md-nav__link">
<span class="md-ellipsis">
Top level
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#data" class="md-nav__link">
<span class="md-ellipsis">
data:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dataproperties" class="md-nav__link">
<span class="md-ellipsis">
data.properties[]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#model" class="md-nav__link">
<span class="md-ellipsis">
model:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#training" class="md-nav__link">
<span class="md-ellipsis">
training:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#trainingloss_weights" class="md-nav__link">
<span class="md-ellipsis">
training.loss_weights:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#generation" class="md-nav__link">
<span class="md-ellipsis">
generation:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#generationobjectives" class="md-nav__link">
<span class="md-ellipsis">
generation.objectives[]
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="families.html" class="md-nav__link">
<span class="md-ellipsis">
Family files
</span>
</a>
</li>
<li class="md-nav__item">
<a href="rules.html" class="md-nav__link">
<span class="md-ellipsis">
Rules and search terms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="api.html" class="md-nav__link">
<span class="md-ellipsis">
Python API
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../community/help.html" class="md-nav__link">
<span class="md-ellipsis">
Getting help
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="https://babu09-meidnet-matter.hf.space/" class="md-nav__link">
<span class="md-ellipsis">
Matter ↗
</span>
</a>
</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="#top-level" class="md-nav__link">
<span class="md-ellipsis">
Top level
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#data" class="md-nav__link">
<span class="md-ellipsis">
data:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dataproperties" class="md-nav__link">
<span class="md-ellipsis">
data.properties[]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#model" class="md-nav__link">
<span class="md-ellipsis">
model:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#training" class="md-nav__link">
<span class="md-ellipsis">
training:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#trainingloss_weights" class="md-nav__link">
<span class="md-ellipsis">
training.loss_weights:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#generation" class="md-nav__link">
<span class="md-ellipsis">
generation:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#generationobjectives" class="md-nav__link">
<span class="md-ellipsis">
generation.objectives[]
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="configuration-reference">Configuration reference<a class="headerlink" href="#configuration-reference" title="Permanent link">&para;</a></h1>
<p>Every setting of <code>meidnet.yaml</code>, generated from the code (<code>meidnet schema</code> gives the JSON Schema).
Unknown keys are rejected with a message naming the key, so typos cannot silently change a run.</p>
<h2 id="top-level">Top level<a class="headerlink" href="#top-level" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>setting</th>
<th>type</th>
<th>default</th>
<th>meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>string</td>
<td><code>meidnet_run</code></td>
<td>Name of this project; outputs go to output_dir.</td>
</tr>
<tr>
<td><code>description</code></td>
<td>string</td>
<td></td>
<td>Free text shown at the top of reports.</td>
</tr>
<tr>
<td><code>output_dir</code></td>
<td>string</td>
<td><code>runs/{name}</code></td>
<td>Where checkpoints, CIFs and reports are written.</td>
</tr>
<tr>
<td><code>family</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>Family used to align training structures (defaults to generation.family).</td>
</tr>
<tr>
<td><code>model_path</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>Existing checkpoint to generate from (skip training). Default: <output_dir>/model.pt</td>
</tr>
<tr>
<td><code>plugins</code></td>
<td>array</td>
<td></td>
<td>Python files that register your own constraints or search terms (see 'Add a constraint').</td>
</tr>
<tr>
<td><code>data</code></td>
<td>object/null</td>
<td><code>None</code></td>
<td></td>
</tr>
<tr>
<td><code>model</code></td>
<td>section</td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>training</code></td>
<td>section</td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>generation</code></td>
<td>object/null</td>
<td><code>None</code></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="data"><code>data:</code><a class="headerlink" href="#data" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>setting</th>
<th>type</th>
<th>default</th>
<th>meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>table</code></td>
<td>string</td>
<td><strong>required</strong></td>
<td>Path to a CSV/Excel/JSON table with one row per material.</td>
</tr>
<tr>
<td><code>id_column</code></td>
<td>string</td>
<td><code>material_id</code></td>
<td>Column with a unique identifier for each material.</td>
</tr>
<tr>
<td><code>cif_column</code></td>
<td>string/null</td>
<td><code>cif</code></td>
<td>Column that contains the CIF text of each structure. Set to null if you use structures_dir.</td>
</tr>
<tr>
<td><code>structures_dir</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>Folder with one CIF file per material, named <id>.cif (used when there is no cif_column).</td>
</tr>
<tr>
<td><code>properties</code></td>
<td>array</td>
<td><strong>required</strong></td>
<td>Numeric columns that form the property modality (any number, at least one).</td>
</tr>
<tr>
<td><code>val_table</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>Optional separate validation table with the same columns.</td>
</tr>
<tr>
<td><code>val_fraction</code></td>
<td>number</td>
<td><code>0.1</code></td>
<td>Fraction of rows held out for validation when no val_table is given (0 = no validation).</td>
</tr>
<tr>
<td><code>max_sites</code></td>
<td>integer</td>
<td><code>20</code></td>
<td>Largest number of atoms per cell. Bigger structures are skipped.</td>
</tr>
<tr>
<td><code>neighbor_cutoff</code></td>
<td>number</td>
<td><code>4.0</code></td>
<td>Distance (Å) below which two atoms count as neighbours.</td>
</tr>
<tr>
<td><code>align_to_prototype</code></td>
<td>boolean</td>
<td><code>True</code></td>
<td>Re-order the atoms of every structure so they match the family prototype's site order (needed for meaningful generation). The published Perov-5 model was trained without it.</td>
</tr>
<tr>
<td><code>prototype_tolerance</code></td>
<td>number</td>
<td><code>0.15</code></td>
<td>How far (fraction of a cell edge) an atom may sit from its prototype site and still count as that site. Raise it to accept distorted structures; lower it to keep only ideal ones.</td>
</tr>
</tbody>
</table>
<h2 id="dataproperties"><code>data.properties[]</code><a class="headerlink" href="#dataproperties" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>setting</th>
<th>type</th>
<th>default</th>
<th>meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>column</code></td>
<td>string</td>
<td><strong>required</strong></td>
<td>Name of the column in your table that holds this property.</td>
</tr>
<tr>
<td><code>label</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>Human-readable name used in reports (defaults to the column name).</td>
</tr>
<tr>
<td><code>unit</code></td>
<td>string</td>
<td></td>
<td>Unit shown in reports, e.g. 'eV' or 'eV/atom'.</td>
</tr>
<tr>
<td><code>normalize</code></td>
<td>boolean</td>
<td><code>True</code></td>
<td>Standardise the property to zero mean and unit spread before training. Keep this on when properties have very different scales.</td>
</tr>
</tbody>
</table>
<h2 id="model"><code>model:</code><a class="headerlink" href="#model" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>setting</th>
<th>type</th>
<th>default</th>
<th>meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>latent_dim</code></td>
<td>integer</td>
<td><code>128</code></td>
<td>Size of the shared latent space where structures and properties meet.</td>
</tr>
<tr>
<td><code>node_hidden_dim</code></td>
<td>integer</td>
<td><code>128</code></td>
<td>Width of the per-atom features inside the graph network.</td>
</tr>
<tr>
<td><code>edge_dim</code></td>
<td>integer</td>
<td><code>64</code></td>
<td>Width of the per-bond messages inside the graph network.</td>
</tr>
<tr>
<td><code>species_embedding_dim</code></td>
<td>integer</td>
<td><code>64</code></td>
<td>Size of the learned element embedding.</td>
</tr>
<tr>
<td><code>property_hidden_dim</code></td>
<td>integer</td>
<td><code>128</code></td>
<td>Width of the property encoder's hidden layer.</td>
</tr>
<tr>
<td><code>decoder_coordinate_input</code></td>
<td><code>data</code> / <code>zeros</code> / <code>prototype</code></td>
<td><code>data</code></td>
<td>What the crystal decoder receives as starting atom positions during training. 'data' (published model) uses the true positions; generation always starts from 'zeros' or the prototype. 'zeros'/'prototype' make training and generation consistent (experimental).</td>
</tr>
</tbody>
</table>
<h2 id="training"><code>training:</code><a class="headerlink" href="#training" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>setting</th>
<th>type</th>
<th>default</th>
<th>meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>epochs</code></td>
<td>integer</td>
<td><code>200</code></td>
<td>Number of passes over the training data.</td>
</tr>
<tr>
<td><code>batch_size</code></td>
<td>integer</td>
<td><code>16</code></td>
<td>Materials per training step (use 8 if memory is short).</td>
</tr>
<tr>
<td><code>learning_rate</code></td>
<td>number</td>
<td><code>0.001</code></td>
<td>Adam learning rate.</td>
</tr>
<tr>
<td><code>contrastive_weight</code></td>
<td>number</td>
<td><code>5.0</code></td>
<td>Strength of the alignment between structure and property latents.</td>
</tr>
<tr>
<td><code>temperature</code></td>
<td>number</td>
<td><code>0.01</code></td>
<td>Sharpness of the contrastive (InfoNCE) alignment.</td>
</tr>
<tr>
<td><code>contrastive_warmup_epochs</code></td>
<td>integer/null</td>
<td><code>None</code></td>
<td>Epochs over which the alignment strength ramps up from 0. Default: 60% of the epochs (the published model used 1200 of 2000).</td>
</tr>
<tr>
<td><code>loss_weights</code></td>
<td>section</td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>seed</code></td>
<td>integer</td>
<td><code>0</code></td>
<td>Random seed for weight initialisation and data shuffling.</td>
</tr>
<tr>
<td><code>device</code></td>
<td>string</td>
<td><code>auto</code></td>
<td>'auto', 'cpu' or 'cuda'.</td>
</tr>
<tr>
<td><code>save_every</code></td>
<td>integer</td>
<td><code>50</code></td>
<td>Write an intermediate checkpoint every N epochs.</td>
</tr>
</tbody>
</table>
<h2 id="trainingloss_weights"><code>training.loss_weights:</code><a class="headerlink" href="#trainingloss_weights" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>setting</th>
<th>type</th>
<th>default</th>
<th>meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>joint_reconstruction</code></td>
<td>number</td>
<td><code>1.0</code></td>
<td>Rebuild the crystal from the joint (structure+property) latent.</td>
</tr>
<tr>
<td><code>joint_property</code></td>
<td>number</td>
<td><code>1.0</code></td>
<td>Predict the properties from the joint latent.</td>
</tr>
<tr>
<td><code>property_reconstruction</code></td>
<td>number</td>
<td><code>0.5</code></td>
<td>Rebuild the crystal from the property latent alone - this is what makes inverse design possible.</td>
</tr>
<tr>
<td><code>property_property</code></td>
<td>number</td>
<td><code>0.5</code></td>
<td>Predict the properties back from the property latent.</td>
</tr>
</tbody>
</table>
<h2 id="generation"><code>generation:</code><a class="headerlink" href="#generation" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>setting</th>
<th>type</th>
<th>default</th>
<th>meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>family</code></td>
<td>string</td>
<td><code>perovskite_abx3</code></td>
<td>Built-in family name or path to your own family .yaml file.</td>
</tr>
<tr>
<td><code>variant</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>Sub-family, e.g. 'halide' or 'oxide' for perovskites.</td>
</tr>
<tr>
<td><code>objectives</code></td>
<td>array</td>
<td><strong>required</strong></td>
<td>Which properties to steer and how.</td>
</tr>
<tr>
<td><code>targets</code></td>
<td>array</td>
<td><strong>required</strong></td>
<td>One entry per design target, e.g. {dir_gap: 1.5, heat_all: -0.1}. Each runs its own search.</td>
</tr>
<tr>
<td><code>per_target</code></td>
<td>integer</td>
<td><code>4</code></td>
<td>Candidates to save for each target.</td>
</tr>
<tr>
<td><code>population</code></td>
<td>integer</td>
<td><code>48</code></td>
<td>Latent vectors optimised in parallel in each round.</td>
</tr>
<tr>
<td><code>rounds</code></td>
<td>integer</td>
<td><code>20</code></td>
<td>Maximum search rounds per target.</td>
</tr>
<tr>
<td><code>steps</code></td>
<td>integer</td>
<td><code>800</code></td>
<td>Gradient steps per round.</td>
</tr>
<tr>
<td><code>learning_rate</code></td>
<td>number</td>
<td><code>0.0012</code></td>
<td>Step size of the latent search.</td>
</tr>
<tr>
<td><code>anchor_weight</code></td>
<td>number</td>
<td><code>12.0</code></td>
<td>Keeps the search close to the latent that the target properties map to.</td>
</tr>
<tr>
<td><code>temperature_start</code></td>
<td>number</td>
<td><code>1.6</code></td>
<td>Softness of element choices at the start of a round.</td>
</tr>
<tr>
<td><code>temperature_end</code></td>
<td>number</td>
<td><code>0.9</code></td>
<td>Softness of element choices at the end of a round.</td>
</tr>
<tr>
<td><code>diversity_weight</code></td>
<td>number</td>
<td><code>0.9</code></td>
<td>Pushes the parallel searches apart from each other.</td>
</tr>
<tr>
<td><code>diversity_tau</code></td>
<td>number</td>
<td><code>0.25</code></td>
<td></td>
</tr>
<tr>
<td><code>history_weight</code></td>
<td>number</td>
<td><code>1.0</code></td>
<td>Pushes new searches away from latents that already produced a saved candidate.</td>
</tr>
<tr>
<td><code>history_tau</code></td>
<td>number</td>
<td><code>0.25</code></td>
<td></td>
</tr>
<tr>
<td><code>restart_patience</code></td>
<td>integer</td>
<td><code>250</code></td>
<td>Steps without improvement before a search is restarted with noise.</td>
</tr>
<tr>
<td><code>restart_noise</code></td>
<td>number</td>
<td><code>0.35</code></td>
<td></td>
</tr>
<tr>
<td><code>grad_clip</code></td>
<td>number</td>
<td><code>1.0</code></td>
<td></td>
</tr>
<tr>
<td><code>z_clip</code></td>
<td>number</td>
<td><code>5.0</code></td>
<td></td>
</tr>
<tr>
<td><code>init_sigma</code></td>
<td>number</td>
<td><code>0.35</code></td>
<td>Noise added to the starting latents.</td>
</tr>
<tr>
<td><code>init_anchor_mix</code></td>
<td>number</td>
<td><code>0.75</code></td>
<td>Share of the property-encoder latent in the starting point.</td>
</tr>
<tr>
<td><code>init_rff_mix</code></td>
<td>number</td>
<td><code>0.6</code></td>
<td>Share of the target-dependent random-feature direction in the starting point.</td>
</tr>
<tr>
<td><code>init_noise_mix</code></td>
<td>number</td>
<td><code>0.25</code></td>
<td>Share of random noise in the starting point.</td>
</tr>
<tr>
<td><code>rff_frequencies</code></td>
<td>integer</td>
<td><code>48</code></td>
<td></td>
</tr>
<tr>
<td><code>decode_temperature</code></td>
<td>number</td>
<td><code>1.25</code></td>
<td>Randomness when turning element scores into a choice.</td>
</tr>
<tr>
<td><code>decode_topk</code></td>
<td>integer</td>
<td><code>12</code></td>
<td>Only the k best-scoring elements of a group can be chosen.</td>
</tr>
<tr>
<td><code>decode_tries</code></td>
<td>integer</td>
<td><code>12</code></td>
<td>Attempts per latent to find a composition that passes all constraints.</td>
</tr>
<tr>
<td><code>anti_repeat_alpha</code></td>
<td>number</td>
<td><code>0.6</code></td>
<td>Down-weights elements that were already used in saved candidates.</td>
</tr>
<tr>
<td><code>anti_repeat_group</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>Group the anti-repeat applies to (default: first sampled group).</td>
</tr>
<tr>
<td><code>geometry_scale</code></td>
<td>number</td>
<td><code>1.0</code></td>
<td>Global strength of the family's search terms.</td>
</tr>
<tr>
<td><code>property_first</code></td>
<td>boolean</td>
<td><code>False</code></td>
<td>Ignore the family's search terms during the search (properties only).</td>
</tr>
<tr>
<td><code>dedup_formula</code></td>
<td>boolean</td>
<td><code>True</code></td>
<td>Save each composition at most once.</td>
</tr>
<tr>
<td><code>min_cosine_sep</code></td>
<td>number</td>
<td><code>0.985</code></td>
<td>Skip candidates whose latent is this similar (cosine) to an already saved one.</td>
</tr>
<tr>
<td><code>unique_decimals</code></td>
<td>integer</td>
<td><code>3</code></td>
<td></td>
</tr>
<tr>
<td><code>exclude_elements</code></td>
<td>array</td>
<td></td>
<td>Elements never to use, e.g. [Pb, Cd].</td>
</tr>
<tr>
<td><code>only_elements</code></td>
<td>object</td>
<td></td>
<td>Restrict groups to these elements, e.g. {B: [Ti, Zr, Hf]}.</td>
</tr>
<tr>
<td><code>overrides</code></td>
<td>object</td>
<td></td>
<td>Change parameters of the family's search terms or constraints, e.g. {tolerance_factor: {max: 1.0}}.</td>
</tr>
<tr>
<td><code>extra_constraints</code></td>
<td>array</td>
<td></td>
<td>Additional rules appended to the family's constraints, e.g. [{name: property_window, property: dir_gap, min: 1.0, max: 3.0}].</td>
</tr>
<tr>
<td><code>disabled_rules</code></td>
<td>array</td>
<td></td>
<td>Rules to switch off for this run, by name (or id when two rules share a name), e.g. [charge_neutrality]. The generation report lists them.</td>
</tr>
<tr>
<td><code>seed</code></td>
<td>integer</td>
<td><code>937</code></td>
<td>Random seed of the search.</td>
</tr>
<tr>
<td><code>amp</code></td>
<td>boolean</td>
<td><code>True</code></td>
<td>Use mixed precision on GPUs.</td>
</tr>
<tr>
<td><code>output_prefix</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>File-name prefix of saved CIFs (default: family variant).</td>
</tr>
</tbody>
</table>
<h2 id="generationobjectives"><code>generation.objectives[]</code><a class="headerlink" href="#generationobjectives" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>setting</th>
<th>type</th>
<th>default</th>
<th>meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>property</code></td>
<td>string</td>
<td><strong>required</strong></td>
<td>Property (column name) this objective refers to.</td>
</tr>
<tr>
<td><code>loss</code></td>
<td><code>l2</code> / <code>l1</code> / <code>at_most</code> / <code>at_least</code></td>
<td><code>l2</code></td>
<td>How a prediction is compared with the target: l2 = squared distance, l1 = absolute distance, at_most = only values above the target are penalised, at_least = only values below.</td>
</tr>
<tr>
<td><code>weight</code></td>
<td>number</td>
<td><code>10000.0</code></td>
<td>Importance of this objective during the latent search.</td>
</tr>
<tr>
<td><code>select_weight</code></td>
<td>number</td>
<td><code>1.0</code></td>
<td>Importance of this objective when ranking finished candidates.</td>
</tr>
<tr>
<td><code>select_loss</code></td>
<td>string/null</td>
<td><code>None</code></td>
<td>Comparison used for ranking (defaults to 'loss').</td>
</tr>
</tbody>
</table>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
MIT licence · Anand Babu
</div>
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.top", "content.code.copy", "content.tabs.link", "search.suggest"], "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>
<script src="../assets/vendor/mathjax-3.2.2/es5/tex-mml-chtml.js"></script>
<script src="../assets/vendor/tablesort-5.3.0/tablesort.min.js"></script>
<script src="../assets/vendor/tablesort-5.3.0/sorts/tablesort.number.min.js"></script>
<script src="../assets/tablesort.js"></script>
<script src="../assets/learn.js"></script>
<script src="../assets/links.js"></script>
<script src="../assets/prism3d.js"></script>
<script src="../assets/prism-tour.js"></script>
<script src="../assets/prism-docs.js"></script>
<script src="/ask-prism.js"></script>
</body>
</html>