Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -711,8 +711,32 @@ INPUT_DATA = {
|
|
711 |
|
712 |
|
713 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
714 |
class NutrientCalculator:
|
715 |
-
def __init__(self, fertilizer_constants, profile_settings, liters, rounding_precision, activation_cacl, enhancement_cacl):
|
716 |
self.fertilizers = fertilizer_constants
|
717 |
self.profile = profile_settings
|
718 |
self.volume = liters
|
@@ -721,6 +745,8 @@ class NutrientCalculator:
|
|
721 |
# Новые параметры
|
722 |
self.activation_cacl = float(activation_cacl) # Активация CaCl
|
723 |
self.enhancement_cacl = float(enhancement_cacl) # Усиление CaCl
|
|
|
|
|
724 |
|
725 |
total_parts = self.profile["NO3_RAT"] + 1
|
726 |
self.target = {
|
@@ -737,14 +763,35 @@ class NutrientCalculator:
|
|
737 |
self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers}
|
738 |
|
739 |
def calculate(self):
|
|
|
740 |
self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
|
|
|
|
|
741 |
self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
|
742 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
743 |
self._balance_k_s()
|
|
|
|
|
744 |
self._distribute_calcium()
|
|
|
|
|
745 |
no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
|
746 |
if no3_needed > 0:
|
747 |
self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
|
|
|
748 |
return self._verify_results()
|
749 |
|
750 |
def _apply_fertilizer(self, name, element, target_ppm):
|
@@ -847,6 +894,8 @@ liters = profile_settings["liters"]
|
|
847 |
rounding_precision = 3
|
848 |
activation_cacl = float(profile_settings.get("activation_cacl", 5))
|
849 |
enhancement_cacl = float(profile_settings.get("enhancement_cacl", 0.1))
|
|
|
|
|
850 |
|
851 |
# Создаем калькулятор
|
852 |
calculator = NutrientCalculator(
|
@@ -855,7 +904,9 @@ calculator = NutrientCalculator(
|
|
855 |
liters=liters,
|
856 |
rounding_precision=rounding_precision,
|
857 |
activation_cacl=activation_cacl,
|
858 |
-
enhancement_cacl=enhancement_cacl
|
|
|
|
|
859 |
)
|
860 |
|
861 |
# Запуск расчета
|
|
|
711 |
|
712 |
|
713 |
|
714 |
+
# Входные данные (пример)
|
715 |
+
INPUT_DATA = {
|
716 |
+
"fertilizerConstants": {
|
717 |
+
"Кальциевая селитра": {"N (NO3-)": 0.11863, "Ca": 0.16972},
|
718 |
+
"Калий азотнокислый": {"N (NO3-)": 0.13854, "K": 0.36672},
|
719 |
+
"Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
|
720 |
+
"Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
|
721 |
+
"Магний азотнокислый": {"Mg": 0.0948, "N (NO3-)": 0.109}, # Новое удобрение
|
722 |
+
"Монофосфат калия": {"P": 0.22761, "K": 0.28731},
|
723 |
+
"Калий сернокислый": {"K": 0.44874, "S": 0.18401},
|
724 |
+
"Кальций хлорид": {"Ca": 0.272, "Cl": 0.483}
|
725 |
+
},
|
726 |
+
"profileSettings": {
|
727 |
+
"P": 60, "K": 194, "Mg": 48.5, "Ca": 89.25, "S": 79.445, "CaCl": 38.5,
|
728 |
+
"NO3_RAT": 1.5, "TOTAL_NITROG": 138.57, "liters": 100,
|
729 |
+
"activation_cacl": 5, # Добавлено
|
730 |
+
"enhancement_cacl": 0.1, # Добавлено
|
731 |
+
"use_magnesium_sulfate": 1, # Флаг для использования "Сульфата магния"
|
732 |
+
"magnesium_nitrate_ratio": 0.2 # Коэффициент для "Магния азотнокислого"
|
733 |
+
}
|
734 |
+
}
|
735 |
+
|
736 |
+
from tabulate import tabulate
|
737 |
+
|
738 |
class NutrientCalculator:
|
739 |
+
def __init__(self, fertilizer_constants, profile_settings, liters, rounding_precision, activation_cacl, enhancement_cacl, use_magnesium_sulfate, magnesium_nitrate_ratio):
|
740 |
self.fertilizers = fertilizer_constants
|
741 |
self.profile = profile_settings
|
742 |
self.volume = liters
|
|
|
745 |
# Новые параметры
|
746 |
self.activation_cacl = float(activation_cacl) # Активация CaCl
|
747 |
self.enhancement_cacl = float(enhancement_cacl) # Усиление CaCl
|
748 |
+
self.use_magnesium_sulfate = int(use_magnesium_sulfate) # Флаг для использования "Сульфата магния"
|
749 |
+
self.magnesium_nitrate_ratio = float(magnesium_nitrate_ratio) # Коэффициент для "Магния азотнокислого"
|
750 |
|
751 |
total_parts = self.profile["NO3_RAT"] + 1
|
752 |
self.target = {
|
|
|
763 |
self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers}
|
764 |
|
765 |
def calculate(self):
|
766 |
+
# Добавляем аммонийный азот
|
767 |
self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
|
768 |
+
|
769 |
+
# Добавляем фосфор
|
770 |
self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
|
771 |
+
|
772 |
+
# Добавляем магний через "Сульфат магния", если флаг включен
|
773 |
+
if self.use_magnesium_sulfate == 1:
|
774 |
+
mg_needed = self.target["Mg"] - self.actual["Mg"]
|
775 |
+
if mg_needed > 0:
|
776 |
+
self._apply_fertilizer("Сульфат магния", "Mg", mg_needed * (1 - self.magnesium_nitrate_ratio))
|
777 |
+
|
778 |
+
# Добавляем магний через "Магний азотнокислый", если коэффициент > 0
|
779 |
+
if self.magnesium_nitrate_ratio > 0:
|
780 |
+
mg_remaining = self.target["Mg"] - self.actual["Mg"]
|
781 |
+
if mg_remaining > 0:
|
782 |
+
self._apply_fertilizer("Магний азотнокислый", "Mg", mg_remaining * self.magnesium_nitrate_ratio)
|
783 |
+
|
784 |
+
# Балансируем калий и серу
|
785 |
self._balance_k_s()
|
786 |
+
|
787 |
+
# Распределяем кальций
|
788 |
self._distribute_calcium()
|
789 |
+
|
790 |
+
# Балансируем нитратный азот
|
791 |
no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
|
792 |
if no3_needed > 0:
|
793 |
self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
|
794 |
+
|
795 |
return self._verify_results()
|
796 |
|
797 |
def _apply_fertilizer(self, name, element, target_ppm):
|
|
|
894 |
rounding_precision = 3
|
895 |
activation_cacl = float(profile_settings.get("activation_cacl", 5))
|
896 |
enhancement_cacl = float(profile_settings.get("enhancement_cacl", 0.1))
|
897 |
+
use_magnesium_sulfate = int(profile_settings.get("use_magnesium_sulfate", 1)) # Флаг для "Сульфата магния"
|
898 |
+
magnesium_nitrate_ratio = float(profile_settings.get("magnesium_nitrate_ratio", 0.2)) # Коэффициент для "Магния азотнокислого"
|
899 |
|
900 |
# Создаем калькулятор
|
901 |
calculator = NutrientCalculator(
|
|
|
904 |
liters=liters,
|
905 |
rounding_precision=rounding_precision,
|
906 |
activation_cacl=activation_cacl,
|
907 |
+
enhancement_cacl=enhancement_cacl,
|
908 |
+
use_magnesium_sulfate=use_magnesium_sulfate,
|
909 |
+
magnesium_nitrate_ratio=magnesium_nitrate_ratio
|
910 |
)
|
911 |
|
912 |
# Запуск расчета
|