Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -744,35 +744,54 @@ class NutrientCalculator:
|
|
744 |
def calculate(self):
|
745 |
# Добавляем аммонийный азот
|
746 |
self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
|
747 |
-
|
748 |
# Добавляем фосфор
|
749 |
self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
|
750 |
-
|
751 |
# Добавляем магний через "Сульфат магния", если флаг включен
|
752 |
if self.use_magnesium_sulfate == 1:
|
753 |
mg_needed = self.target["Mg"] - self.actual["Mg"]
|
754 |
if mg_needed > 0:
|
755 |
self._apply_fertilizer("Сульфат магния", "Mg", mg_needed * (1 - self.magnesium_nitrate_ratio))
|
756 |
-
|
757 |
-
#
|
|
|
|
|
|
|
758 |
if self.magnesium_nitrate_ratio > 0:
|
759 |
mg_remaining = self.target["Mg"] - self.actual["Mg"]
|
760 |
if mg_remaining > 0:
|
761 |
-
self._apply_fertilizer("Магний азотнокислый", "Mg", mg_remaining
|
762 |
-
|
763 |
-
# Балансируем калий и серу
|
764 |
-
self._balance_k_s()
|
765 |
-
|
766 |
# Распределяем кальций
|
767 |
self._distribute_calcium()
|
768 |
-
|
769 |
# Балансируем нитратный азот
|
770 |
no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
|
771 |
if no3_needed > 0:
|
772 |
self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
|
773 |
-
|
774 |
return self._verify_results()
|
775 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
776 |
def _apply_fertilizer(self, name, element, target_ppm):
|
777 |
if name not in self.fertilizers:
|
778 |
raise KeyError(f"Удобрение '{name}' не найдено!")
|
|
|
744 |
def calculate(self):
|
745 |
# Добавляем аммонийный азот
|
746 |
self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
|
747 |
+
|
748 |
# Добавляем фосфор
|
749 |
self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
|
750 |
+
|
751 |
# Добавляем магний через "Сульфат магния", если флаг включен
|
752 |
if self.use_magnesium_sulfate == 1:
|
753 |
mg_needed = self.target["Mg"] - self.actual["Mg"]
|
754 |
if mg_needed > 0:
|
755 |
self._apply_fertilizer("Сульфат магния", "Mg", mg_needed * (1 - self.magnesium_nitrate_ratio))
|
756 |
+
|
757 |
+
# Балансируем калий и серу
|
758 |
+
self._balance_k_s()
|
759 |
+
|
760 |
+
# Добавляем оставшийся магний через "Магний азотнокислый", если коэффициент > 0
|
761 |
if self.magnesium_nitrate_ratio > 0:
|
762 |
mg_remaining = self.target["Mg"] - self.actual["Mg"]
|
763 |
if mg_remaining > 0:
|
764 |
+
self._apply_fertilizer("Магний азотнокислый", "Mg", mg_remaining)
|
765 |
+
|
|
|
|
|
|
|
766 |
# Распределяем кальций
|
767 |
self._distribute_calcium()
|
768 |
+
|
769 |
# Балансируем нитратный азот
|
770 |
no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
|
771 |
if no3_needed > 0:
|
772 |
self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
|
773 |
+
|
774 |
return self._verify_results()
|
775 |
|
776 |
+
def _balance_k_s(self):
|
777 |
+
k_needed = self.target["K"] - self.actual["K"]
|
778 |
+
s_needed = self.target["S"] - self.actual["S"]
|
779 |
+
|
780 |
+
# Используем "Калий сернокислый" для баланса K и S
|
781 |
+
if k_needed > 0 and s_needed > 0:
|
782 |
+
k_fraction = self.fertilizers["Калий сернокислый"].get("K", 0)
|
783 |
+
s_fraction = self.fertilizers["Калий сернокислый"].get("S", 0)
|
784 |
+
if k_fraction == 0 or s_fraction == 0:
|
785 |
+
print("ПРЕДУПРЕЖДЕНИЕ: Удобрение 'Калий сернокислый' содержит нулевые значения!")
|
786 |
+
return
|
787 |
+
k_from_k2so4 = min(k_needed, s_needed * k_fraction / s_fraction)
|
788 |
+
self._apply_fertilizer("Калий сернокислый", "K", k_from_k2so4)
|
789 |
+
|
790 |
+
# Оставшийся калий добавляем через "Калий азотнокислый"
|
791 |
+
remaining_k = self.target["K"] - self.actual["K"]
|
792 |
+
if remaining_k > 0:
|
793 |
+
self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
|
794 |
+
|
795 |
def _apply_fertilizer(self, name, element, target_ppm):
|
796 |
if name not in self.fertilizers:
|
797 |
raise KeyError(f"Удобрение '{name}' не найдено!")
|