Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -767,9 +767,11 @@ class NutrientCalculator:
|
|
767 |
|
768 |
# Веса компенсации для элементов (кроме азотов)
|
769 |
self.element_compensation_weights = {
|
770 |
-
|
771 |
-
|
772 |
-
|
|
|
|
|
773 |
}
|
774 |
|
775 |
# Расчёт азота
|
@@ -851,11 +853,18 @@ class NutrientCalculator:
|
|
851 |
raise
|
852 |
|
853 |
def _compensate_element(self, element):
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
|
858 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
859 |
for weight_key, weight_data in self.element_compensation_weights.items():
|
860 |
fert_name = weight_data["fert"]
|
861 |
if element in self.fertilizers.get(fert_name, {}):
|
@@ -865,14 +874,14 @@ class NutrientCalculator:
|
|
865 |
'content': self.fertilizers[fert_name][element]
|
866 |
})
|
867 |
|
868 |
-
|
869 |
-
|
870 |
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
|
877 |
def calculate_ec(self):
|
878 |
return round(self.total_ec, 2)
|
|
|
767 |
|
768 |
# Веса компенсации для элементов (кроме азотов)
|
769 |
self.element_compensation_weights = {
|
770 |
+
"POTASSIUM_SULFATE": {"weight": -0.18, "fert": "Калий сернокислый", "main_element": "K"},
|
771 |
+
"MAGNESIUM_SULFATE": {"weight": -0.1, "fert": "Сульфат магния", "main_element": "Mg"},
|
772 |
+
"MONOPOTASSIUM_PHOSPHATE": {"weight": -0.14, "fert": "Монофосфат калия", "main_element": "P"},
|
773 |
+
"CALCIUM_NITRATE": {"weight": 0.25, "fert": "Кальциевая селитра", "main_element": "Ca"},
|
774 |
+
"CALCIUM_NITRATE_NO3": {"weight": 0.15, "fert": "Кальциевая селитра", "main_element": "NO3"}
|
775 |
}
|
776 |
|
777 |
# Расчёт азота
|
|
|
853 |
raise
|
854 |
|
855 |
def _compensate_element(self, element):
|
856 |
+
needed = self.target_profile[element] - self.actual_profile.get(element, 0)
|
857 |
+
if needed <= 0:
|
858 |
+
return
|
859 |
|
860 |
+
candidates = []
|
861 |
+
|
862 |
+
# Для азотных соединений особый случай
|
863 |
+
if element in ['NH4', 'NO3']:
|
864 |
+
# Здесь ваша текущая логика для NH4 и NO3
|
865 |
+
pass
|
866 |
+
else:
|
867 |
+
# Стандартная компенсация для других элементов
|
868 |
for weight_key, weight_data in self.element_compensation_weights.items():
|
869 |
fert_name = weight_data["fert"]
|
870 |
if element in self.fertilizers.get(fert_name, {}):
|
|
|
874 |
'content': self.fertilizers[fert_name][element]
|
875 |
})
|
876 |
|
877 |
+
if not candidates:
|
878 |
+
raise ValueError(f"Нет удобрений для элемента {element}")
|
879 |
|
880 |
+
total_weight = sum(abs(c['weight']) for c in candidates) # Берем модуль весов
|
881 |
+
for candidate in candidates:
|
882 |
+
share = abs(candidate['weight']) / total_weight # Используем модуль веса
|
883 |
+
ppm_to_apply = needed * share
|
884 |
+
self._apply(candidate['name'], element, ppm_to_apply)
|
885 |
|
886 |
def calculate_ec(self):
|
887 |
return round(self.total_ec, 2)
|