Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -704,7 +704,7 @@ def nutri_call():
|
|
704 |
|
705 |
from tabulate import tabulate
|
706 |
|
707 |
-
# Входные данные
|
708 |
INPUT_DATA = {
|
709 |
"fertilizerConstants": {
|
710 |
"Кальциевая селитра": {"N (NO3-)": 0.11863, "Ca": 0.16972},
|
@@ -713,11 +713,11 @@ INPUT_DATA = {
|
|
713 |
"Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
|
714 |
"Монофосфат калия": {"P": 0.22761, "K": 0.28731},
|
715 |
"Калий сернокислый": {"K": 0.44874, "S": 0.18401},
|
716 |
-
"Кальций хлорид": {"Ca": 0.272} # Хлор
|
717 |
},
|
718 |
"profileSettings": {
|
719 |
-
"P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445,
|
720 |
-
"NO3_RAT":
|
721 |
}
|
722 |
}
|
723 |
|
@@ -734,12 +734,13 @@ class NutrientCalculator:
|
|
734 |
'Mg': self.profile["Mg"],
|
735 |
'Ca': self.profile["Ca"],
|
736 |
'S': self.profile["S"],
|
|
|
737 |
'N (NO3-)': self.profile["TOTAL_NITROG"] * (self.profile["NO3_RAT"] / total_parts),
|
738 |
'N (NH4+)': self.profile["TOTAL_NITROG"] * (1 / total_parts)
|
739 |
}
|
740 |
|
741 |
self.actual = {k: 0.0 for k in self.target}
|
742 |
-
self.results = {}
|
743 |
|
744 |
def calculate(self):
|
745 |
# 1. Вносим аммонийный азот
|
@@ -768,9 +769,6 @@ class NutrientCalculator:
|
|
768 |
content = self.fertilizers[name][element]
|
769 |
grams = (target_ppm * self.volume) / (content * 1000)
|
770 |
|
771 |
-
if name not in self.results:
|
772 |
-
self.results[name] = {'граммы': 0.0}
|
773 |
-
|
774 |
self.results[name]['граммы'] += grams
|
775 |
|
776 |
for el, val in self.fertilizers[name].items():
|
@@ -815,44 +813,6 @@ class NutrientCalculator:
|
|
815 |
'total_ppm': round(sum(self.actual.values()), 3)
|
816 |
}
|
817 |
|
818 |
-
def generate_report(self, results):
|
819 |
-
fert_table = []
|
820 |
-
for name, data in results['fertilizers'].items():
|
821 |
-
fert_table.append([name, f"{data} г"])
|
822 |
-
|
823 |
-
element_table = []
|
824 |
-
for el in sorted(self.target.keys()):
|
825 |
-
element_table.append([
|
826 |
-
el,
|
827 |
-
f"{self.target[el]} ppm",
|
828 |
-
f"{results['actual_profile'][el]} ppm",
|
829 |
-
f"{results['actual_profile'][el] - self.target[el]:+.2f} ppm"
|
830 |
-
])
|
831 |
-
|
832 |
-
report = "РЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:\n"
|
833 |
-
report += tabulate(fert_table, headers=["Удобрение", "Количество"], tablefmt="grid")
|
834 |
-
|
835 |
-
report += "\n\nБАЛАНС ЭЛЕМЕНТОВ:\n"
|
836 |
-
report += tabulate(element_table,
|
837 |
-
headers=["Элемент", "Цель", "Факт", "Отклонение"],
|
838 |
-
tablefmt="grid")
|
839 |
-
|
840 |
-
report += f"\n\nОбщая концентрация: {results['total_ppm']} ppm"
|
841 |
-
|
842 |
-
if results['deficits']:
|
843 |
-
report += "\n\nВНИМАНИЕ: Обнаружены небольшие отклонения:"
|
844 |
-
for el, diff in results['deficits'].items():
|
845 |
-
report += f"\n- {el}: не хватает {abs(diff)} ppm"
|
846 |
-
|
847 |
-
return report
|
848 |
-
|
849 |
-
# Запуск расчета
|
850 |
-
calculator = NutrientCalculator(INPUT_DATA)
|
851 |
-
results = calculator.calculate()
|
852 |
-
print(calculator.generate_report(results))
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
@app.route('/calculation', methods=['POST'])
|
857 |
def handle_calculation():
|
858 |
try:
|
@@ -920,7 +880,6 @@ def handle_calculation():
|
|
920 |
|
921 |
|
922 |
|
923 |
-
|
924 |
|
925 |
|
926 |
if __name__ == '__main__':
|
|
|
704 |
|
705 |
from tabulate import tabulate
|
706 |
|
707 |
+
# Входные данные (пример)
|
708 |
INPUT_DATA = {
|
709 |
"fertilizerConstants": {
|
710 |
"Кальциевая селитра": {"N (NO3-)": 0.11863, "Ca": 0.16972},
|
|
|
713 |
"Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
|
714 |
"Монофосфат калия": {"P": 0.22761, "K": 0.28731},
|
715 |
"Калий сернокислый": {"K": 0.44874, "S": 0.18401},
|
716 |
+
"Кальций хлорид": {"Ca": 0.272, "Cl": 0.483} # Хлор теперь учитывается
|
717 |
},
|
718 |
"profileSettings": {
|
719 |
+
"P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445, "Cl": 0, # Добавлен Cl
|
720 |
+
"NO3_RAT": 1.5, "TOTAL_NITROG": 138.57, "liters": 100
|
721 |
}
|
722 |
}
|
723 |
|
|
|
734 |
'Mg': self.profile["Mg"],
|
735 |
'Ca': self.profile["Ca"],
|
736 |
'S': self.profile["S"],
|
737 |
+
'Cl': self.profile.get("Cl", 0), # Добавлен Cl
|
738 |
'N (NO3-)': self.profile["TOTAL_NITROG"] * (self.profile["NO3_RAT"] / total_parts),
|
739 |
'N (NH4+)': self.profile["TOTAL_NITROG"] * (1 / total_parts)
|
740 |
}
|
741 |
|
742 |
self.actual = {k: 0.0 for k in self.target}
|
743 |
+
self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers} # Инициализация всех удобрений
|
744 |
|
745 |
def calculate(self):
|
746 |
# 1. Вносим аммонийный азот
|
|
|
769 |
content = self.fertilizers[name][element]
|
770 |
grams = (target_ppm * self.volume) / (content * 1000)
|
771 |
|
|
|
|
|
|
|
772 |
self.results[name]['граммы'] += grams
|
773 |
|
774 |
for el, val in self.fertilizers[name].items():
|
|
|
813 |
'total_ppm': round(sum(self.actual.values()), 3)
|
814 |
}
|
815 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
816 |
@app.route('/calculation', methods=['POST'])
|
817 |
def handle_calculation():
|
818 |
try:
|
|
|
880 |
|
881 |
|
882 |
|
|
|
883 |
|
884 |
|
885 |
if __name__ == '__main__':
|