File size: 5,226 Bytes
a8dd5f5
 
 
 
9c23216
38af3d3
a8dd5f5
38af3d3
 
 
 
 
 
 
a8dd5f5
 
 
38af3d3
 
 
a8dd5f5
 
 
 
 
 
 
 
38af3d3
a8dd5f5
 
38af3d3
 
 
a8dd5f5
 
 
 
 
 
 
 
38af3d3
a8dd5f5
 
38af3d3
 
 
a8dd5f5
38af3d3
 
 
a8dd5f5
38af3d3
 
 
a8dd5f5
38af3d3
 
 
a8dd5f5
 
 
38af3d3
 
 
a8dd5f5
38af3d3
 
 
 
 
 
 
a8dd5f5
38af3d3
 
 
 
 
 
 
 
 
 
 
 
 
2914aec
a8dd5f5
 
2914aec
 
 
 
 
 
 
 
a8dd5f5
2914aec
 
9c23216
 
 
 
38af3d3
9c23216
 
 
 
 
 
 
 
 
38af3d3
9c23216
 
 
 
 
 
 
 
38af3d3
 
 
9c23216
 
 
 
 
 
38af3d3
 
 
9c23216
 
 
38af3d3
 
 
 
 
 
 
9c23216
 
38af3d3
 
 
 
 
 
 
 
 
2914aec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import pandas as pd
import pandas as pd
import numpy as np

from utils.summary import get_meterological_summary, get_agricultural_yield_comparison

# Générer des dates sur 5 ans (historique) + 5 ans (prévision)
dates_past = pd.date_range(
    start="2023-01-01", periods=36, freq="ME"
)  # 3 ans d'historique
dates_future = pd.date_range(
    start="2023-01-01", periods=60, freq="ME"
)  # 5 ans de prévisions


# Température: Tendance à la hausse selon le scénario
def generate_temperature_trend(scenario):
    base_temp = 10 + 10 * np.sin(
        np.linspace(0, 2 * np.pi, len(dates_past) + len(dates_future))
    )
    if scenario == "optimiste":
        trend = base_temp + np.linspace(0, 1, len(base_temp))  # Faible réchauffement
    elif scenario == "modéré":
        trend = base_temp + np.linspace(0, 2, len(base_temp))  # Réchauffement moyen
    else:  # pessimiste
        trend = base_temp + np.linspace(0, 3, len(base_temp))  # Fort réchauffement
    return trend


# Précipitations: Variation selon le scénario
def generate_precipitation_trend(scenario):
    base_rain = 50 + 20 * np.cos(
        np.linspace(0, 2 * np.pi, len(dates_past) + len(dates_future))
    )
    if scenario == "optimiste":
        trend = base_rain - np.linspace(0, 5, len(base_rain))  # Légère baisse
    elif scenario == "modéré":
        trend = base_rain - np.linspace(0, 10, len(base_rain))  # Baisse moyenne
    else:  # pessimiste
        trend = base_rain - np.linspace(0, 15, len(base_rain))  # Forte baisse
    return trend


# Irradiance: Augmentation progressive
def generate_irradiance_trend(scenario):
    base_irradiance = 200 + 50 * np.sin(
        np.linspace(0, 2 * np.pi, len(dates_past) + len(dates_future))
    )
    if scenario == "optimiste":
        trend = base_irradiance + np.linspace(
            0, 5, len(base_irradiance)
        )  # Faible augmentation
    elif scenario == "modéré":
        trend = base_irradiance + np.linspace(
            0, 10, len(base_irradiance)
        )  # Augmentation modérée
    else:  # pessimiste
        trend = base_irradiance + np.linspace(
            0, 20, len(base_irradiance)
        )  # Forte augmentation
    return trend


def get_mocked_summary(scenario):
    # Choix du scénario
    # scenario = "modéré"  # Changer entre "optimiste", "modéré" et "pessimiste"

    # Créer les DataFrames
    temperature_df = pd.DataFrame(
        {
            "Date": dates_past.tolist() + dates_future.tolist(),
            "Température (°C)": generate_temperature_trend(scenario),
        }
    )

    rain_df = pd.DataFrame(
        {
            "Date": dates_past.tolist() + dates_future.tolist(),
            "Précipitations (mm)": generate_precipitation_trend(scenario),
        }
    )

    irradiation_df = pd.DataFrame(
        {
            "Date": dates_past.tolist() + dates_future.tolist(),
            "Irradiance (W/m²)": generate_irradiance_trend(scenario),
        }
    )
    return temperature_df, rain_df, irradiation_df


def get_not_shaded_summary():
    scenario = "pessimiste"
    temperature_df, rain_df, irradiance_df = get_mocked_summary(scenario)
    summary = get_meterological_summary(
        scenario, temperature_df, rain_df, irradiance_df
    )
    return summary


# Example usage
def get_shaded_summary():
    import pandas as pd
    import numpy as np

    from utils.soil_utils import find_nearest_point

    city = "Bourgogne Franche Comté"
    closest_soil_features = find_nearest_point(city)
    print(closest_soil_features)

    # Définir la période de 4 ans dans le passé + 15 ans dans le futur (19 ans)
    start_date = "2010-01"
    end_date = "2029-12"

    # Générer une série de dates mensuelles
    dates = pd.date_range(start=start_date, end=end_date, freq="M")

    # Générer des données fictives de rendement (en tonnes par hectare)
    np.random.seed(42)  # Pour reproductibilité

    # Tendance générale du rendement sans ombrage (augmentation progressive)
    trend = np.linspace(2.5, 3.2, len(dates))  # Augmente légèrement sur les années

    # Ajout de variations saisonnières et aléatoires
    seasonality = 0.3 * np.sin(
        np.linspace(0, 12 * np.pi, len(dates))
    )  # Effet saisonnier
    random_variation = np.random.normal(0, 0.1, len(dates))  # Bruit aléatoire

    # Calcul du rendement sans ombrage
    yield_no_shade = trend + seasonality + random_variation

    # Appliquer un effet d'ombrage (réduction de 10-20% du rendement)
    shade_factor = np.random.uniform(
        0.1, 0.2, len(dates)
    )  # Entre 10% et 20% de réduction
    yield_with_shade = yield_no_shade * (1 - shade_factor)

    # Créer le DataFrame
    df = pd.DataFrame(
        {
            "date": dates,
            "yield_no_shade": yield_no_shade,
            "yield_with_shade": yield_with_shade,
        }
    )
    water_deficit_data = pd.DataFrame()
    climate_data = pd.DataFrame()

    summary = get_agricultural_yield_comparison(
        culture="orge",
        region="bourgogne franche comté",
        water_df=water_deficit_data,
        climate_df=climate_data,
        soil_df=closest_soil_features,
        agri_yield_df=df,
    )
    return summary