diff --git a/site.py b/site.py index bd7ebab..7660e1e 100644 --- a/site.py +++ b/site.py @@ -1,125 +1,21 @@ -import streamlit as st +from dash import Dash, dcc, html, Input, Output,callback -## LOAD DB ## +app = Dash(__name__) -#{ -# "Бикаридин": [ [0, "Углерод", 1], [1, "Инапровалин"] ], -# "Инапровалин": [ [0, "Кислород", 1], [0, "Сахар", 1], [0, "Углерод", 1] ] -#} -# Тип Название Часть (1 к 1) -# -# 0 - без нагрева и т.п., 1 - зависит от того-то -# -# 100 = 50 углерод + 50 инапровалин = -# = 50 углерод + round(50/3) * составные -# = 50 углерод + 16 кислород + 16 сахар + 16 углерод -# !!! 50 != 48 => делаем 48 !!! -# = 48 углерод + 16 кислород + 16 сахар + 16 углерод -# = 96 бикаридин -# -# Список составных: ["Кислород", "Сахар", "Углерод"] +app.layout = html.Div([ + dcc.Dropdown(['NYC', 'MTL', 'SF'], 'NYC', id='demo-dropdown'), + html.Div(id='dd-output-container') +]) -from db import * -db = read_db() -els = list(db.keys()) +@callback( + Output('dd-output-container', 'children'), + Input('demo-dropdown', 'value') +) +def update_output(value): + return f'You have selected {value}' -############# - -#### UI #### - -# Set columns -react, star, amount = st.columns([73, 7, 20]) - -with react: - option_react = st.selectbox( - label = '0', - options = els, - index = None, - placeholder = 'Реакция', - label_visibility = 'collapsed', - ) - -with star: - st.button(':orange[:star:]') - -with amount: - option_amount = st.selectbox( - label = '0', - options = [30, 50, 100, 300, 1000], - index = 2, - placeholder = 'Объём', - label_visibility = 'collapsed' - ) - - -#### CALCULATE RECIPE #### - -if option_react: - parts = 0 - part = 0 - vol = option_amount - - # Определяем 1 часть - for i in db[option_react]: - parts += i[2] - part = vol // parts - - # Делаем около-кратным 10 и 15 - # !!ЭКСПЕРЕМЕНТАЛЬНОЕ!! - part = round(part/10)*10 - if part%10 != 0: - part = round(part/15)*15 - - # Название: количество (локальные части) - parted = {} - # Проверяем конфликты с составными частями: 48 != 50 - lparts = 0 ; lpart = 0 - for i in db[option_react]: - if i[0] == True: - # Перебираем составные - for el in db[i[1]]: - lparts += el[2] - # 50//3 ~ 16 16 * 3 = 48 - lpart = (part//lparts) * lparts - if lpart < part: - part = lpart - - parted[i[1]] = [part, lparts] - # part = 48 - # parted["Инапровалин"] = [48, 3] - # 48 - 1 часть, 3 - кол. частей - - # Фикс для плазмы в составных частях -# for i in db[option_react]: -# if i[0] == True: -# for el in db[i[1]]: -# if el[1] == "Плазма": -# parted[i[1]][0] -# parted[i[1]][1] -= 2 - - comps = {} - # Распределяем (пока не учитывает большую глубину) - for i in db[option_react]: - if i[0] == False: - if i[1] == "Плазма": - comps[i[1]] = 1 - else: - comps[i[1]] = part * i[2] - elif i[0] == True: - # Перебираем составные - for el in db[i[1]]: - if el[1] == "Плазма": - comps[el[1]] = 1 - else: - if el[1] not in comps: - comps[el[1]] = int( parted[i[1]][0]/parted[i[1]][1] * el[2] ) - else: - comps[el[1]] += int( parted[i[1]][0]/parted[i[1]][1] * el[2] ) - - # Выводим результат - for i in comps: - st.warning(f'{i}: {comps[i]}') - - st.success(f'{option_react}: {part*parts}') +if __name__ == '__main__': + #app.run(debug=True) + app.run(debug=False) diff --git a/site_old.py b/site_old.py new file mode 100644 index 0000000..bd7ebab --- /dev/null +++ b/site_old.py @@ -0,0 +1,125 @@ +import streamlit as st + +## LOAD DB ## + +#{ +# "Бикаридин": [ [0, "Углерод", 1], [1, "Инапровалин"] ], +# "Инапровалин": [ [0, "Кислород", 1], [0, "Сахар", 1], [0, "Углерод", 1] ] +#} +# Тип Название Часть (1 к 1) +# +# 0 - без нагрева и т.п., 1 - зависит от того-то +# +# 100 = 50 углерод + 50 инапровалин = +# = 50 углерод + round(50/3) * составные +# = 50 углерод + 16 кислород + 16 сахар + 16 углерод +# !!! 50 != 48 => делаем 48 !!! +# = 48 углерод + 16 кислород + 16 сахар + 16 углерод +# = 96 бикаридин +# +# Список составных: ["Кислород", "Сахар", "Углерод"] + +from db import * + +db = read_db() +els = list(db.keys()) + +############# + + +#### UI #### + +# Set columns +react, star, amount = st.columns([73, 7, 20]) + +with react: + option_react = st.selectbox( + label = '0', + options = els, + index = None, + placeholder = 'Реакция', + label_visibility = 'collapsed', + ) + +with star: + st.button(':orange[:star:]') + +with amount: + option_amount = st.selectbox( + label = '0', + options = [30, 50, 100, 300, 1000], + index = 2, + placeholder = 'Объём', + label_visibility = 'collapsed' + ) + + +#### CALCULATE RECIPE #### + +if option_react: + parts = 0 + part = 0 + vol = option_amount + + # Определяем 1 часть + for i in db[option_react]: + parts += i[2] + part = vol // parts + + # Делаем около-кратным 10 и 15 + # !!ЭКСПЕРЕМЕНТАЛЬНОЕ!! + part = round(part/10)*10 + if part%10 != 0: + part = round(part/15)*15 + + # Название: количество (локальные части) + parted = {} + # Проверяем конфликты с составными частями: 48 != 50 + lparts = 0 ; lpart = 0 + for i in db[option_react]: + if i[0] == True: + # Перебираем составные + for el in db[i[1]]: + lparts += el[2] + # 50//3 ~ 16 16 * 3 = 48 + lpart = (part//lparts) * lparts + if lpart < part: + part = lpart + + parted[i[1]] = [part, lparts] + # part = 48 + # parted["Инапровалин"] = [48, 3] + # 48 - 1 часть, 3 - кол. частей + + # Фикс для плазмы в составных частях +# for i in db[option_react]: +# if i[0] == True: +# for el in db[i[1]]: +# if el[1] == "Плазма": +# parted[i[1]][0] +# parted[i[1]][1] -= 2 + + comps = {} + # Распределяем (пока не учитывает большую глубину) + for i in db[option_react]: + if i[0] == False: + if i[1] == "Плазма": + comps[i[1]] = 1 + else: + comps[i[1]] = part * i[2] + elif i[0] == True: + # Перебираем составные + for el in db[i[1]]: + if el[1] == "Плазма": + comps[el[1]] = 1 + else: + if el[1] not in comps: + comps[el[1]] = int( parted[i[1]][0]/parted[i[1]][1] * el[2] ) + else: + comps[el[1]] += int( parted[i[1]][0]/parted[i[1]][1] * el[2] ) + + # Выводим результат + for i in comps: + st.warning(f'{i}: {comps[i]}') + + st.success(f'{option_react}: {part*parts}')