File size: 1,861 Bytes
938949f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# SolarWine src package — re-exports for backward compatibility
# Modules live in subpackages: data, models, forecasting, shading, advisor, chatbot, genai

import sys

# Map old flat names to new subpackage locations
_REDIRECTS = {
    # data
    "ims_client": "src.data.ims_client",
    "sensor_data_loader": "src.data.sensor_data_loader",
    "data_schema": "src.data.data_schema",
    "thingsboard_client": "src.data.thingsboard_client",
    "data_providers": "src.data.data_providers",
    # models
    "farquhar_model": "src.models.farquhar_model",
    "canopy_photosynthesis": "src.models.canopy_photosynthesis",
    "phenology": "src.models.phenology",
    # forecasting
    "predictor": "src.forecasting.predictor",
    "ts_predictor": "src.forecasting.ts_predictor",
    "chronos_forecaster": "src.forecasting.chronos_forecaster",
    "preprocessor": "src.forecasting.preprocessor",
    "time_features": "src.forecasting.time_features",
    # shading
    "solar_geometry": "src.shading.solar_geometry",
    "tracker_optimizer": "src.shading.tracker_optimizer",
    "vine_3d_scene": "src.shading.vine_3d_scene",
    "tradeoff_engine": "src.shading.tradeoff_engine",
    # advisor
    "day_ahead_advisor": "src.advisor.day_ahead_advisor",
    "safety_rails": "src.advisor.safety_rails",
    # chatbot
    "vineyard_chatbot": "src.chatbot.vineyard_chatbot",
    "routing_agent": "src.chatbot.routing_agent",
    "llm_data_engineer": "src.chatbot.llm_data_engineer",
    # genai
    "genai_utils": "src.genai.utils",
}


def __getattr__(name: str):
    if name in _REDIRECTS:
        import importlib

        mod = importlib.import_module(_REDIRECTS[name])
        sys.modules[f"{__name__}.{name}"] = mod
        return mod
    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")


def __dir__():
    return sorted(_REDIRECTS.keys())