mcp-hf / tools /crop_calendar_tools.py
elanuk
t
d2a1db5
"""
This module contains tools for crop calendar operations.
"""
from datetime import date
CROP_CALENDAR = {
"rice": {
"season": "Kharif",
"planting": "June-July",
"harvesting": "October-November",
"stages": [
"Nursery/Seedling", "Transplanting", "Vegetative", "Tillering",
"Panicle Initiation", "Flowering", "Milk/Dough", "Maturity", "Harvesting"
]
},
"wheat": {
"season": "Rabi",
"planting": "November-December",
"harvesting": "March-April",
"stages": [
"Sowing", "Germination", "Tillering", "Jointing", "Booting",
"Heading", "Flowering", "Grain Filling", "Maturity", "Harvesting"
]
},
"maize": {
"season": "Kharif/Zaid",
"planting": "June-July / March-April",
"harvesting": "September-October / June",
"stages": [
"Sowing", "Emergence", "Vegetative", "Tasseling", "Silking",
"Grain Filling", "Maturity", "Harvesting"
]
},
"barley": {
"season": "Rabi",
"planting": "November",
"harvesting": "March-April",
"stages": [
"Sowing", "Germination", "Tillering", "Jointing", "Booting",
"Heading", "Flowering", "Grain Filling", "Maturity", "Harvesting"
]
},
"gram": {
"season": "Rabi",
"planting": "October-November",
"harvesting": "March-April",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Pod Formation",
"Pod Filling", "Maturity", "Harvesting"
]
},
"lentil": {
"season": "Rabi",
"planting": "October-November",
"harvesting": "March-April",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Pod Formation",
"Pod Filling", "Maturity", "Harvesting"
]
},
"pea": {
"season": "Rabi",
"planting": "October-November",
"harvesting": "February-March",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Pod Formation",
"Pod Filling", "Maturity", "Harvesting"
]
},
"mustard": {
"season": "Rabi",
"planting": "October-November",
"harvesting": "February-March",
"stages": [
"Sowing", "Germination", "Rosette", "Stem Elongation", "Flowering",
"Pod Formation", "Pod Filling", "Maturity", "Harvesting"
]
},
"linseed": {
"season": "Rabi",
"planting": "October-November",
"harvesting": "March-April",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Capsule Formation",
"Seed Filling", "Maturity", "Harvesting"
]
},
"potato": {
"season": "Rabi",
"planting": "October-November",
"harvesting": "February-March",
"stages": [
"Planting", "Sprouting", "Vegetative", "Tuber Initiation", "Tuber Bulking",
"Maturity", "Harvesting"
]
},
"arhar": {
"season": "Kharif",
"planting": "June-July",
"harvesting": "November-December",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Pod Formation",
"Pod Filling", "Maturity", "Harvesting"
]
},
"moong": {
"season": "Kharif/Zaid",
"planting": "June-July / March-April",
"harvesting": "September-October / June",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Pod Formation",
"Pod Filling", "Maturity", "Harvesting"
]
},
"urd": {
"season": "Kharif/Zaid",
"planting": "June-July / March-April",
"harvesting": "September-October / June",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Pod Formation",
"Pod Filling", "Maturity", "Harvesting"
]
},
"jowar": {
"season": "Kharif",
"planting": "June-July",
"harvesting": "September-October",
"stages": [
"Sowing", "Germination", "Vegetative", "Booting", "Flowering",
"Grain Filling", "Maturity", "Harvesting"
]
},
"bajra": {
"season": "Kharif",
"planting": "June-July",
"harvesting": "September-October",
"stages": [
"Sowing", "Germination", "Vegetative", "Booting", "Flowering",
"Grain Filling", "Maturity", "Harvesting"
]
},
"groundnut": {
"season": "Kharif",
"planting": "June-July",
"harvesting": "September-October",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Pegging",
"Pod Formation", "Pod Filling", "Maturity", "Harvesting"
]
},
"soybean": {
"season": "Kharif",
"planting": "June-July",
"harvesting": "September-October",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Pod Formation",
"Pod Filling", "Maturity", "Harvesting"
]
},
"watermelon": {
"season": "Zaid",
"planting": "March-April",
"harvesting": "May-June",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Fruit Setting",
"Fruit Development", "Maturity", "Harvesting"
]
},
"cucumber": {
"season": "Zaid",
"planting": "March-April",
"harvesting": "May-June",
"stages": [
"Sowing", "Germination", "Vegetative", "Flowering", "Fruit Setting",
"Fruit Development", "Maturity", "Harvesting"
]
}
}
from datetime import date
from .geographic_tools import BIHAR_DATA
async def get_crop_calendar(region: str, crop_type: str = None):
if region.lower() == 'bihar':
if crop_type:
crop = crop_type.lower()
if crop in CROP_CALENDAR:
return {**CROP_CALENDAR[crop], "crop": crop}
else:
return {"error": "Crop not found in Bihar"}
return {
"crops": list(CROP_CALENDAR.keys()),
"districts": list(BIHAR_DATA.keys())
}
return {"error": "Region not found"}
async def get_prominent_crops(region: str, season: str):
if region.lower() == 'bihar':
season = season.lower()
crops = [crop for crop, data in CROP_CALENDAR.items() if season in data["season"].lower()]
if crops:
return {"crops": crops}
else:
return {"error": "No crops found for this season in Bihar"}
return {"error": "Region or season not found"}
async def estimate_crop_stage(crop: str, plant_date: str, current_date: str):
plant_date = date.fromisoformat(plant_date)
current_date = date.fromisoformat(current_date)
days_since_planting = (current_date - plant_date).days
crop = crop.lower()
if crop in CROP_CALENDAR:
stages = CROP_CALENDAR[crop]["stages"]
# Estimate total duration (in days) for each crop (approximate, can be refined)
crop_durations = {
"rice": 120, "wheat": 120, "maize": 110, "barley": 110, "gram": 110,
"lentil": 110, "pea": 100, "mustard": 110, "linseed": 110, "potato": 100,
"arhar": 150, "moong": 70, "urd": 70, "jowar": 100, "bajra": 90,
"groundnut": 110, "soybean": 100, "watermelon": 80, "cucumber": 70
}
total_duration = crop_durations.get(crop, 100)
stage_length = total_duration // len(stages)
stage_index = min(days_since_planting // stage_length, len(stages) - 1)
return {"stage": stages[stage_index]}
return {"error": "Crop not found"}