Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -732,7 +732,7 @@ class NutrientCalculator:
|
|
| 732 |
self.results = {}
|
| 733 |
self.target_profile = BASE_PROFILE.copy()
|
| 734 |
self.actual_profile = {k: 0.0 for k in BASE_PROFILE}
|
| 735 |
-
self.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
|
| 736 |
self.total_ec = 0.0
|
| 737 |
|
| 738 |
# Расчёт азота
|
|
@@ -821,7 +821,7 @@ class NutrientCalculator:
|
|
| 821 |
content = self.fertilizers[fert_name][main_element]
|
| 822 |
max_allowed_ppm = self.target_profile[main_element] - self.actual_profile[main_element]
|
| 823 |
grams = min((required_ppm * self.volume) / (content * 1000), (max_allowed_ppm * self.volume) / (content * 1000))
|
| 824 |
-
|
| 825 |
if fert_name not in self.results:
|
| 826 |
result = {
|
| 827 |
'граммы': 0.0,
|
|
@@ -831,17 +831,17 @@ class NutrientCalculator:
|
|
| 831 |
for element in self.fertilizers[fert_name]:
|
| 832 |
result[f'внесет {self._label(element)}'] = 0.0
|
| 833 |
self.results[fert_name] = result
|
| 834 |
-
|
| 835 |
self.results[fert_name]['граммы'] += grams
|
| 836 |
self.results[fert_name]['миллиграммы'] += int(grams * 1000)
|
| 837 |
-
|
| 838 |
fert_ec = 0.0
|
| 839 |
for element, percent in self.fertilizers[fert_name].items():
|
| 840 |
added_ppm = (grams * percent * 1000) / self.volume
|
| 841 |
self.results[fert_name][f'внесет {self._label(element)}'] += added_ppm
|
| 842 |
self.actual_profile[element] += added_ppm
|
| 843 |
fert_ec += added_ppm * EC_COEFFICIENTS.get(element, 0.0015)
|
| 844 |
-
|
| 845 |
self.results[fert_name]['вклад в EC'] += fert_ec
|
| 846 |
self.total_ec += fert_ec
|
| 847 |
except KeyError as e:
|
|
@@ -853,8 +853,22 @@ class NutrientCalculator:
|
|
| 853 |
for element in self.actual_profile:
|
| 854 |
if self.actual_profile[element] > self.target_profile[element]:
|
| 855 |
overage = self.actual_profile[element] - self.target_profile[element]
|
| 856 |
-
self.actual_profile[element] -= overage
|
| 857 |
print(f"Корректировка перебора: {element} уменьшен на {overage:.2f} ppm")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 858 |
|
| 859 |
def calculate_ec(self):
|
| 860 |
return round(self.total_ec, 2)
|
|
|
|
| 732 |
self.results = {}
|
| 733 |
self.target_profile = BASE_PROFILE.copy()
|
| 734 |
self.actual_profile = {k: 0.0 for k in BASE_PROFILE}
|
| 735 |
+
self.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
|
| 736 |
self.total_ec = 0.0
|
| 737 |
|
| 738 |
# Расчёт азота
|
|
|
|
| 821 |
content = self.fertilizers[fert_name][main_element]
|
| 822 |
max_allowed_ppm = self.target_profile[main_element] - self.actual_profile[main_element]
|
| 823 |
grams = min((required_ppm * self.volume) / (content * 1000), (max_allowed_ppm * self.volume) / (content * 1000))
|
| 824 |
+
|
| 825 |
if fert_name not in self.results:
|
| 826 |
result = {
|
| 827 |
'граммы': 0.0,
|
|
|
|
| 831 |
for element in self.fertilizers[fert_name]:
|
| 832 |
result[f'внесет {self._label(element)}'] = 0.0
|
| 833 |
self.results[fert_name] = result
|
| 834 |
+
|
| 835 |
self.results[fert_name]['граммы'] += grams
|
| 836 |
self.results[fert_name]['миллиграммы'] += int(grams * 1000)
|
| 837 |
+
|
| 838 |
fert_ec = 0.0
|
| 839 |
for element, percent in self.fertilizers[fert_name].items():
|
| 840 |
added_ppm = (grams * percent * 1000) / self.volume
|
| 841 |
self.results[fert_name][f'внесет {self._label(element)}'] += added_ppm
|
| 842 |
self.actual_profile[element] += added_ppm
|
| 843 |
fert_ec += added_ppm * EC_COEFFICIENTS.get(element, 0.0015)
|
| 844 |
+
|
| 845 |
self.results[fert_name]['вклад в EC'] += fert_ec
|
| 846 |
self.total_ec += fert_ec
|
| 847 |
except KeyError as e:
|
|
|
|
| 853 |
for element in self.actual_profile:
|
| 854 |
if self.actual_profile[element] > self.target_profile[element]:
|
| 855 |
overage = self.actual_profile[element] - self.target_profile[element]
|
|
|
|
| 856 |
print(f"Корректировка перебора: {element} уменьшен на {overage:.2f} ppm")
|
| 857 |
+
|
| 858 |
+
# Уменьшаем фактическое значение
|
| 859 |
+
self.actual_profile[element] -= overage
|
| 860 |
+
|
| 861 |
+
# Обновляем результаты удобрений
|
| 862 |
+
for fert_name, fert_data in self.results.items():
|
| 863 |
+
if f'внесет {self._label(element)}' in fert_data:
|
| 864 |
+
fert_data[f'внесет {self._label(element)}'] -= overage
|
| 865 |
+
|
| 866 |
+
# Пересчитываем граммы удобрения
|
| 867 |
+
if element in self.fertilizers[fert_name]:
|
| 868 |
+
content = self.fertilizers[fert_name][element]
|
| 869 |
+
grams_to_remove = (overage * self.volume) / (content * 1000)
|
| 870 |
+
fert_data['граммы'] -= grams_to_remove
|
| 871 |
+
fert_data['миллиграммы'] -= int(grams_to_remove * 1000)
|
| 872 |
|
| 873 |
def calculate_ec(self):
|
| 874 |
return round(self.total_ec, 2)
|