|
import streamlit as st |
|
|
|
from nets.envs import SCI |
|
|
|
|
|
st.set_page_config( |
|
page_title="HET_sci", |
|
menu_items={ |
|
'About':'https://advpropsys.github.io' |
|
} |
|
) |
|
|
|
st.title('HETfit_scientific') |
|
st.markdown("#### Imagine a package which was engineered primarly for data driven plasma physics devices design, mainly low power hall effect thrusters, yup that's it" |
|
"\n### :orange[Don't be scared away though, it has much simpler interface than anything you ever used for such designs]") |
|
st.markdown('### Main concepts:') |
|
st.markdown( "- Each observational/design session is called an **environment**, for now it can be either RCI or SCI (Real or scaled interface)" |
|
"\n In this overview we will only touch SCI, since RCI is using PINNs which are different topic" |
|
"\n- You specify most of the run parameters on this object init, :orange[**including generation of new samples**] via GAN" |
|
"\n- You may want to generate new features, do it !" |
|
"\n- Want to select best features for more effctive work? Done!" |
|
"\n- Compile environment with your model of choice, can be ***any*** torch model or sklearn one" |
|
"\n- Train !" |
|
"\n- Plot, inference, save, export to jit/onnx, measure performance - **they all are one liners** " |
|
) |
|
st.markdown('### tl;dr \n- Create environment' |
|
'\n```run = SCI(*args,**kwargs)```' |
|
'\n - Generate features ```run.feature_gen()``` ' |
|
'\n - Select features ```run.feature_importance()```' |
|
'\n - Compile env ```run.compile()```' |
|
'\n - Train model in env ```run.train()```' |
|
'\n - Inference, plot, performance, ex. ```run.plot3d()```' |
|
'\n #### And yes, it all will work even without any additional arguments from user besides column indexes' |
|
) |
|
st.write('Comparison with *arXiv:2206.04440v3*') |
|
col1, col2 = st.columns(2) |
|
col1.metric('Geometry accuracy on domain',value='83%',delta='15%') |
|
col2.metric('$d \mapsto h$ prediction',value='98%',delta='14%') |
|
|
|
st.header('Example:') |
|
|
|
st.markdown('Remeber indexes and column names on this example: $P$ - 1, $d$ - 3, $h$ - 3, $m_a$ - 6,$T$ - 7') |
|
st.code('run = SCI(*args,**kwargs)') |
|
|
|
run = SCI() |
|
st.code('run.feature_gen()') |
|
run.feature_gen() |
|
st.write('New features: (index-0:22 original samples, else is GAN generated)',run.df.iloc[1:,9:].astype(float)) |
|
st.write('Most of real dataset is from *doi:0.2514/1.B37424*, hence the results mostly agree with it in specific') |
|
st.code('run.feature_importance(run.df.iloc[1:,1:7].astype(float),run.df.iloc[1:,7]) # Clear and easy example') |
|
|
|
st.write(run.feature_importance(run.df.iloc[1:,1:6].astype(float),run.df.iloc[1:,6])) |
|
st.markdown(' 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') |
|
st.code('run.compile(idx=(1,3,7))') |
|
run.compile(idx=(1,3,7)) |
|
st.code('run.train(epochs=10)') |
|
if st.button('Start Training⏳'): |
|
run.train(epochs=10) |
|
st.code('run.plot3d()') |
|
st.write(run.plot3d()) |
|
st.code('run.performance()') |
|
st.write(run.performance()) |
|
else: |
|
st.markdown('#') |
|
|
|
st.markdown('---\nTry it out yourself! Select a column from 1 to 10') |
|
|
|
|
|
number = st.number_input('Here',min_value=1, max_value=10, step=1) |
|
|
|
if number: |
|
if st.button('Compile And Train💅'): |
|
st.code(f'run.compile(idx=(1,3,{number}))') |
|
run.compile(idx=(1,3,number)) |
|
st.code('run.train(epochs=10)') |
|
run.train(epochs=10) |
|
st.code('run.plot3d()') |
|
st.write(run.plot3d()) |
|
|
|
|
|
|
|
st.markdown('In this intro we covered simplest userflow while using HETFit package, resulted data can be used to leverage PINN and analytical models of Hall effect thrusters' |
|
'\n #### :orange[To cite please contact author on https://github.com/advpropsys]') |