File size: 14,181 Bytes
c176aea |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>main.py</title>
<link rel="stylesheet" href="pycco.css">
</head>
<body>
<div id='container'>
<div id="background"></div>
<div class='section'>
<div class='docs'><h1>main.py</h1></div>
</div>
<div class='clearall'>
<div class='section' id='section-0'>
<div class='docs'>
<div class='octowrap'>
<a class='octothorpe' href='#section-0'>#</a>
</div>
</div>
<div class='code'>
<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">streamlit</span> <span class="k">as</span> <span class="nn">st</span>
<span class="kn">from</span> <span class="nn">nets.envs</span> <span class="kn">import</span> <span class="n">SCI</span>
<span class="n">st</span><span class="o">.</span><span class="n">set_page_config</span><span class="p">(</span>
<span class="n">page_title</span><span class="o">=</span><span class="s2">"HET_sci"</span><span class="p">,</span>
<span class="n">menu_items</span><span class="o">=</span><span class="p">{</span>
<span class="s1">'About'</span><span class="p">:</span><span class="s1">'https://advpropsys.github.io'</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">'HETfit_scientific'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">markdown</span><span class="p">(</span><span class="s2">"#### Imagine a package which was engineered primarly for data driven plasma physics devices design, mainly hall effect thrusters, yup that's it"</span>
<span class="s2">"</span><span class="se">\n</span><span class="s2">### :orange[Don't be scared away though, it has much simpler interface than anything you ever used for such designs]"</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">markdown</span><span class="p">(</span><span class="s1">'### Main concepts:'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">markdown</span><span class="p">(</span> <span class="s2">"- Each observational/design session is called an **environment**, for now it can be either RCI or SCI (Real or scaled interface)"</span>
<span class="s2">"</span><span class="se">\n</span><span class="s2"> In this overview we will only touch SCI, since RCI is using PINNs which are different topic"</span>
<span class="s2">"</span><span class="se">\n</span><span class="s2">- You specify most of the run parameters on this object init, :orange[**including generation of new samples**] via GAN"</span>
<span class="s2">"</span><span class="se">\n</span><span class="s2">- You may want to generate new features, do it !"</span>
<span class="s2">"</span><span class="se">\n</span><span class="s2">- Want to select best features for more effctive work? Done!"</span>
<span class="s2">"</span><span class="se">\n</span><span class="s2">- Compile environment with your model of choice, can be ***any*** torch model or sklearn one"</span>
<span class="s2">"</span><span class="se">\n</span><span class="s2">- Train !"</span>
<span class="s2">"</span><span class="se">\n</span><span class="s2">- Plot, inference, save, export to jit/onnx, measure performance - **they all are one liners** "</span>
<span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">markdown</span><span class="p">(</span><span class="s1">'### tl;dr </span><span class="se">\n</span><span class="s1">- Create environment'</span>
<span class="s1">'</span><span class="se">\n</span><span class="s1">```run = SCI(*args,**kwargs)```'</span>
<span class="s1">'</span><span class="se">\n</span><span class="s1"> - Generate features ```run.feature_gen()``` '</span>
<span class="s1">'</span><span class="se">\n</span><span class="s1"> - Select features ```run.feature_importance()```'</span>
<span class="s1">'</span><span class="se">\n</span><span class="s1"> - Compile env ```run.compile()```'</span>
<span class="s1">'</span><span class="se">\n</span><span class="s1"> - Train model in env ```run.train()```'</span>
<span class="s1">'</span><span class="se">\n</span><span class="s1"> - Inference, plot, performance, ex. ```run.plot3d()```'</span>
<span class="s1">'</span><span class="se">\n</span><span class="s1"> #### And yes, it all will work even without any additional arguments from user besides column indexes'</span>
<span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'Comparison with *arXiv:2206.04440v3*'</span><span class="p">)</span>
<span class="n">col1</span><span class="p">,</span> <span class="n">col2</span> <span class="o">=</span> <span class="n">st</span><span class="o">.</span><span class="n">columns</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="n">col1</span><span class="o">.</span><span class="n">metric</span><span class="p">(</span><span class="s1">'Geometry accuracy on domain'</span><span class="p">,</span><span class="n">value</span><span class="o">=</span><span class="s1">'83%'</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="s1">'15%'</span><span class="p">)</span>
<span class="n">col2</span><span class="o">.</span><span class="n">metric</span><span class="p">(</span><span class="s1">'$d \mapsto h$ prediction'</span><span class="p">,</span><span class="n">value</span><span class="o">=</span><span class="s1">'98%'</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="s1">'14%'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">header</span><span class="p">(</span><span class="s1">'Example:'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">markdown</span><span class="p">(</span><span class="s1">'Remeber indexes and column names on this example: $P$ - 1, $d$ - 3, $h$ - 3, $m_a$ - 6,$T$ - 7'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run = SCI(*args,**kwargs)'</span><span class="p">)</span>
<span class="n">run</span> <span class="o">=</span> <span class="n">SCI</span><span class="p">()</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run.feature_gen()'</span><span class="p">)</span>
<span class="n">run</span><span class="o">.</span><span class="n">feature_gen</span><span class="p">()</span>
<span class="n">st</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'New features: (index-0:22 original samples, else is GAN generated)'</span><span class="p">,</span><span class="n">run</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">1</span><span class="p">:,</span><span class="mi">9</span><span class="p">:]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">))</span>
<span class="n">st</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'Most of real dataset is from *doi:0.2514/1.B37424*, hence the results mostly agree with it in specific'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run.feature_importance(run.df.iloc[1:,1:7].astype(float),run.df.iloc[1:,7]) # Clear and easy example'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">run</span><span class="o">.</span><span class="n">feature_importance</span><span class="p">(</span><span class="n">run</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">1</span><span class="p">:,</span><span class="mi">1</span><span class="p">:</span><span class="mi">6</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">),</span><span class="n">run</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">1</span><span class="p">:,</span><span class="mi">6</span><span class="p">]))</span>
<span class="n">st</span><span class="o">.</span><span class="n">markdown</span><span class="p">(</span><span class="s1">' As we can see only $h$ and $d$ passed for $m_a$ model, not only that linear dependacy was proven experimantally, but now we got this from data driven source'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run.compile(idx=(1,3,7))'</span><span class="p">)</span>
<span class="n">run</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">idx</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">7</span><span class="p">))</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run.train(epochs=10)'</span><span class="p">)</span>
<span class="n">run</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">epochs</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run.plot3d()'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">run</span><span class="o">.</span><span class="n">plot3d</span><span class="p">())</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run.performance()'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">run</span><span class="o">.</span><span class="n">performance</span><span class="p">())</span>
<span class="n">st</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'Try it out yourself! Select a column from 1 to 10'</span><span class="p">)</span>
<span class="n">number</span> <span class="o">=</span> <span class="n">st</span><span class="o">.</span><span class="n">number_input</span><span class="p">(</span><span class="s1">'Here'</span><span class="p">,</span><span class="n">min_value</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">max_value</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">number</span><span class="p">:</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="sa">f</span><span class="s1">'run.compile(idx=(1,3,</span><span class="si">{</span><span class="n">number</span><span class="si">}</span><span class="s1">))'</span><span class="p">)</span>
<span class="n">run</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">idx</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="n">number</span><span class="p">))</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run.train(epochs=10)'</span><span class="p">)</span>
<span class="n">run</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">epochs</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">code</span><span class="p">(</span><span class="s1">'run.plot3d()'</span><span class="p">)</span>
<span class="n">st</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">run</span><span class="o">.</span><span class="n">plot3d</span><span class="p">())</span>
<span class="n">st</span><span class="o">.</span><span class="n">markdown</span><span class="p">(</span><span class="s1">'In this intro we covered simplest user flow while using HETFit package, resulted data can be used to leverage PINN and analytical models of Hall effect thrusters'</span>
<span class="s1">'</span><span class="se">\n</span><span class="s1"> #### :orange[To cite please contact author on https://github.com/advpropsys]'</span><span class="p">)</span>
</pre></div>
</div>
</div>
<div class='clearall'></div>
</div>
</body>
|