Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -786,47 +786,47 @@ class NutrientCalculator:
|
|
786 |
'N (NH4+)': 'NH4'
|
787 |
}
|
788 |
return labels.get(element, element)
|
789 |
-
def _apply(self, fert_name: str, main_element: str, required_ppm: float):
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
|
798 |
-
|
799 |
-
|
800 |
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
|
824 |
-
|
825 |
-
|
826 |
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
def set_compensation_weights(self, kno3_weight: float, cano3_weight: float, k2so4_weight: float):
|
831 |
"""Установка весов для компенсации элементов"""
|
832 |
total = kno3_weight + cano3_weight + k2so4_weight
|
@@ -834,7 +834,7 @@ def _apply(self, fert_name: str, main_element: str, required_ppm: float):
|
|
834 |
'KNO3': kno3_weight / total,
|
835 |
'CaNO3': cano3_weight / total,
|
836 |
'K2SO4': k2so4_weight / total
|
837 |
-
|
838 |
|
839 |
def calculate(self) -> Dict[str, Any]:
|
840 |
"""Основной метод расчета с новой логикой"""
|
|
|
786 |
'N (NH4+)': 'NH4'
|
787 |
}
|
788 |
return labels.get(element, element)
|
789 |
+
def _apply(self, fert_name: str, main_element: str, required_ppm: float):
|
790 |
+
"""Применяет удобрение и обновляет профиль"""
|
791 |
+
if required_ppm <= 0:
|
792 |
+
return
|
793 |
|
794 |
+
try:
|
795 |
+
# Получаем содержание элемента в удобрении
|
796 |
+
content = self.fertilizers[fert_name][main_element]
|
797 |
|
798 |
+
# Рассчитываем граммы удобрения
|
799 |
+
grams = (required_ppm * self.volume) / (content * 1000)
|
800 |
|
801 |
+
# Инициализируем запись, если удобрение применяется впервые
|
802 |
+
if fert_name not in self.results:
|
803 |
+
self.results[fert_name] = {
|
804 |
+
'граммы': 0.0,
|
805 |
+
'миллиграммы': 0,
|
806 |
+
'вклад в EC': 0.0
|
807 |
+
}
|
808 |
+
# Добавляем поля для каждого элемента в удобрении
|
809 |
+
for element in self.fertilizers[fert_name]:
|
810 |
+
self.results[fert_name][f'внесет {self._label(element)}'] = 0.0
|
811 |
|
812 |
+
# Обновляем результаты
|
813 |
+
self.results[fert_name]['граммы'] += grams
|
814 |
+
self.results[fert_name]['миллиграммы'] = int(grams * 1000)
|
815 |
|
816 |
+
# Рассчитываем вклад в EC и обновляем профиль
|
817 |
+
fert_ec = 0.0
|
818 |
+
for element, percent in self.fertilizers[fert_name].items():
|
819 |
+
added_ppm = (grams * percent * 1000) / self.volume
|
820 |
+
self.results[fert_name][f'внесет {self._label(element)}'] += added_ppm
|
821 |
+
self.actual_profile[element] += added_ppm
|
822 |
+
fert_ec += added_ppm * EC_COEFFICIENTS.get(element, 0.0015)
|
823 |
|
824 |
+
self.results[fert_name]['вклад в EC'] += fert_ec
|
825 |
+
self.total_ec += fert_ec
|
826 |
|
827 |
+
except KeyError as e:
|
828 |
+
print(f"Ошибка: отсутствует элемент {str(e)} в удобрении {fert_name}")
|
829 |
+
raise
|
830 |
def set_compensation_weights(self, kno3_weight: float, cano3_weight: float, k2so4_weight: float):
|
831 |
"""Установка весов для компенсации элементов"""
|
832 |
total = kno3_weight + cano3_weight + k2so4_weight
|
|
|
834 |
'KNO3': kno3_weight / total,
|
835 |
'CaNO3': cano3_weight / total,
|
836 |
'K2SO4': k2so4_weight / total
|
837 |
+
}
|
838 |
|
839 |
def calculate(self) -> Dict[str, Any]:
|
840 |
"""Основной метод расчета с новой логикой"""
|