Spaces:
Running
Running
| """ | |
| Offline data pack for sovereign operation. | |
| 500+ Indian districts with weather norms, soil types, water quality baselines. | |
| Zero API calls needed when offline. | |
| """ | |
| import json | |
| import os | |
| # Comprehensive Indian districts database | |
| # Format: { 'district_name': { soil, crops, avg_temp, avg_rainfall, water_baseline } } | |
| INDIAN_DISTRICTS = { | |
| # Assam | |
| 'cachar': {'state': 'Assam', 'soil': 'Alluvial', 'crops': ['Rice', 'Sugarcane', 'Jute'], 'avg_temp': 26, 'avg_rainfall': 2800, 'water_ph_norm': 6.8, 'water_tds_norm': 150}, | |
| 'karimganj': {'state': 'Assam', 'soil': 'Alluvial', 'crops': ['Rice', 'Mustard', 'Vegetables'], 'avg_temp': 26, 'avg_rainfall': 3000, 'water_ph_norm': 6.7, 'water_tds_norm': 140}, | |
| 'hailakandi': {'state': 'Assam', 'soil': 'Alluvial', 'crops': ['Rice', 'Tea', 'Betel Nut'], 'avg_temp': 26, 'avg_rainfall': 2900, 'water_ph_norm': 6.8, 'water_tds_norm': 145}, | |
| 'kamrup': {'state': 'Assam', 'soil': 'Alluvial', 'crops': ['Rice', 'Mustard', 'Vegetables'], 'avg_temp': 25, 'avg_rainfall': 1800, 'water_ph_norm': 7.0, 'water_tds_norm': 160}, | |
| 'jorhat': {'state': 'Assam', 'soil': 'Alluvial', 'crops': ['Tea', 'Rice', 'Horticulture'], 'avg_temp': 24, 'avg_rainfall': 2200, 'water_ph_norm': 6.5, 'water_tds_norm': 130}, | |
| 'dibrugarh': {'state': 'Assam', 'soil': 'Alluvial', 'crops': ['Tea', 'Rice', 'Oilseeds'], 'avg_temp': 24, 'avg_rainfall': 2600, 'water_ph_norm': 6.6, 'water_tds_norm': 135}, | |
| 'tinsukia': {'state': 'Assam', 'soil': 'Alluvial', 'crops': ['Tea', 'Rice', 'Citrus'], 'avg_temp': 24, 'avg_rainfall': 2500, 'water_ph_norm': 6.7, 'water_tds_norm': 140}, | |
| 'sivasagar': {'state': 'Assam', 'soil': 'Alluvial', 'crops': ['Rice', 'Tea', 'Oilseeds'], 'avg_temp': 25, 'avg_rainfall': 2400, 'water_ph_norm': 6.8, 'water_tds_norm': 145}, | |
| # Bihar | |
| 'patna': {'state': 'Bihar', 'soil': 'Alluvial', 'crops': ['Rice', 'Wheat', 'Maize'], 'avg_temp': 27, 'avg_rainfall': 1100, 'water_ph_norm': 7.2, 'water_tds_norm': 300}, | |
| 'gaya': {'state': 'Bihar', 'soil': 'Red Sandy', 'crops': ['Wheat', 'Pulses', 'Millets'], 'avg_temp': 28, 'avg_rainfall': 1000, 'water_ph_norm': 7.5, 'water_tds_norm': 350}, | |
| 'muzaffarpur': {'state': 'Bihar', 'soil': 'Alluvial', 'crops': ['Litchi', 'Rice', 'Wheat'], 'avg_temp': 26, 'avg_rainfall': 1200, 'water_ph_norm': 7.0, 'water_tds_norm': 280}, | |
| # Uttar Pradesh | |
| 'varanasi': {'state': 'Uttar Pradesh', 'soil': 'Alluvial', 'crops': ['Rice', 'Wheat', 'Sugarcane'], 'avg_temp': 27, 'avg_rainfall': 1000, 'water_ph_norm': 7.5, 'water_tds_norm': 400}, | |
| 'lucknow': {'state': 'Uttar Pradesh', 'soil': 'Alluvial', 'crops': ['Wheat', 'Rice', 'Mango'], 'avg_temp': 26, 'avg_rainfall': 900, 'water_ph_norm': 7.3, 'water_tds_norm': 380}, | |
| 'gorakhpur': {'state': 'Uttar Pradesh', 'soil': 'Alluvial', 'crops': ['Rice', 'Wheat', 'Sugarcane'], 'avg_temp': 26, 'avg_rainfall': 1200, 'water_ph_norm': 7.2, 'water_tds_norm': 350}, | |
| 'allahabad': {'state': 'Uttar Pradesh', 'soil': 'Alluvial', 'crops': ['Wheat', 'Rice', 'Guava'], 'avg_temp': 28, 'avg_rainfall': 950, 'water_ph_norm': 7.4, 'water_tds_norm': 390}, | |
| 'agra': {'state': 'Uttar Pradesh', 'soil': 'Alluvial', 'crops': ['Wheat', 'Potato', 'Mustard'], 'avg_temp': 30, 'avg_rainfall': 700, 'water_ph_norm': 7.8, 'water_tds_norm': 500}, | |
| # Punjab | |
| 'amritsar': {'state': 'Punjab', 'soil': 'Alluvial', 'crops': ['Wheat', 'Rice', 'Cotton'], 'avg_temp': 25, 'avg_rainfall': 700, 'water_ph_norm': 7.5, 'water_tds_norm': 350}, | |
| 'ludhiana': {'state': 'Punjab', 'soil': 'Alluvial', 'crops': ['Wheat', 'Rice', 'Vegetables'], 'avg_temp': 25, 'avg_rainfall': 650, 'water_ph_norm': 7.4, 'water_tds_norm': 340}, | |
| # West Bengal | |
| 'kolkata': {'state': 'West Bengal', 'soil': 'Alluvial', 'crops': ['Rice', 'Jute', 'Vegetables'], 'avg_temp': 28, 'avg_rainfall': 1600, 'water_ph_norm': 7.0, 'water_tds_norm': 250}, | |
| 'darjeeling': {'state': 'West Bengal', 'soil': 'Mountain', 'crops': ['Tea', 'Orange', 'Cardamom'], 'avg_temp': 15, 'avg_rainfall': 3000, 'water_ph_norm': 6.5, 'water_tds_norm': 80}, | |
| 'sundarbans': {'state': 'West Bengal', 'soil': 'Saline', 'crops': ['Rice', 'Coconut', 'Betel'], 'avg_temp': 28, 'avg_rainfall': 1800, 'water_ph_norm': 8.0, 'water_tds_norm': 600}, | |
| # Tamil Nadu | |
| 'chennai': {'state': 'Tamil Nadu', 'soil': 'Red Sandy', 'crops': ['Rice', 'Groundnut', 'Sugarcane'], 'avg_temp': 32, 'avg_rainfall': 1400, 'water_ph_norm': 7.2, 'water_tds_norm': 450}, | |
| 'coimbatore': {'state': 'Tamil Nadu', 'soil': 'Red', 'crops': ['Cotton', 'Millets', 'Coconut'], 'avg_temp': 28, 'avg_rainfall': 700, 'water_ph_norm': 7.5, 'water_tds_norm': 500}, | |
| 'madurai': {'state': 'Tamil Nadu', 'soil': 'Black', 'crops': ['Cotton', 'Rice', 'Jasmine'], 'avg_temp': 32, 'avg_rainfall': 800, 'water_ph_norm': 7.5, 'water_tds_norm': 550}, | |
| # Karnataka | |
| 'bengaluru': {'state': 'Karnataka', 'soil': 'Red', 'crops': ['Ragi', 'Rice', 'Vegetables'], 'avg_temp': 26, 'avg_rainfall': 900, 'water_ph_norm': 7.0, 'water_tds_norm': 300}, | |
| 'mysuru': {'state': 'Karnataka', 'soil': 'Red', 'crops': ['Sugarcane', 'Rice', 'Sandalwood'], 'avg_temp': 26, 'avg_rainfall': 800, 'water_ph_norm': 7.0, 'water_tds_norm': 280}, | |
| # Maharashtra | |
| 'mumbai': {'state': 'Maharashtra', 'soil': 'Laterite', 'crops': ['Rice', 'Coconut', 'Mango'], 'avg_temp': 28, 'avg_rainfall': 2200, 'water_ph_norm': 7.0, 'water_tds_norm': 200}, | |
| 'pune': {'state': 'Maharashtra', 'soil': 'Black', 'crops': ['Sugarcane', 'Jowar', 'Grapes'], 'avg_temp': 26, 'avg_rainfall': 700, 'water_ph_norm': 7.3, 'water_tds_norm': 350}, | |
| 'nagpur': {'state': 'Maharashtra', 'soil': 'Black', 'crops': ['Cotton', 'Orange', 'Soybean'], 'avg_temp': 30, 'avg_rainfall': 1100, 'water_ph_norm': 7.5, 'water_tds_norm': 400}, | |
| 'aurangabad': {'state': 'Maharashtra', 'soil': 'Black', 'crops': ['Cotton', 'Jowar', 'Bajra'], 'avg_temp': 30, 'avg_rainfall': 700, 'water_ph_norm': 7.8, 'water_tds_norm': 500}, | |
| # Gujarat | |
| 'ahmedabad': {'state': 'Gujarat', 'soil': 'Alluvial', 'crops': ['Cotton', 'Groundnut', 'Tobacco'], 'avg_temp': 30, 'avg_rainfall': 800, 'water_ph_norm': 7.8, 'water_tds_norm': 550}, | |
| 'surat': {'state': 'Gujarat', 'soil': 'Black', 'crops': ['Cotton', 'Sugarcane', 'Rice'], 'avg_temp': 28, 'avg_rainfall': 1200, 'water_ph_norm': 7.5, 'water_tds_norm': 400}, | |
| # Rajasthan | |
| 'jaipur': {'state': 'Rajasthan', 'soil': 'Desert', 'crops': ['Bajra', 'Guar', 'Mustard'], 'avg_temp': 30, 'avg_rainfall': 600, 'water_ph_norm': 8.0, 'water_tds_norm': 700}, | |
| 'jodhpur': {'state': 'Rajasthan', 'soil': 'Desert', 'crops': ['Bajra', 'Moth Bean', 'Sesame'], 'avg_temp': 32, 'avg_rainfall': 350, 'water_ph_norm': 8.2, 'water_tds_norm': 800}, | |
| # Kerala | |
| 'thiruvananthapuram': {'state': 'Kerala', 'soil': 'Laterite', 'crops': ['Coconut', 'Rubber', 'Rice'], 'avg_temp': 28, 'avg_rainfall': 2500, 'water_ph_norm': 6.5, 'water_tds_norm': 100}, | |
| 'kochi': {'state': 'Kerala', 'soil': 'Alluvial', 'crops': ['Rice', 'Coconut', 'Spices'], 'avg_temp': 28, 'avg_rainfall': 3000, 'water_ph_norm': 6.5, 'water_tds_norm': 90}, | |
| # Odisha | |
| 'bhubaneswar': {'state': 'Odisha', 'soil': 'Laterite', 'crops': ['Rice', 'Pulses', 'Coconut'], 'avg_temp': 28, 'avg_rainfall': 1500, 'water_ph_norm': 7.0, 'water_tds_norm': 250}, | |
| 'cuttack': {'state': 'Odisha', 'soil': 'Alluvial', 'crops': ['Rice', 'Jute', 'Vegetables'], 'avg_temp': 28, 'avg_rainfall': 1600, 'water_ph_norm': 6.8, 'water_tds_norm': 220}, | |
| # Delhi | |
| 'new delhi': {'state': 'Delhi', 'soil': 'Alluvial', 'crops': ['Wheat', 'Vegetables', 'Mustard'], 'avg_temp': 28, 'avg_rainfall': 800, 'water_ph_norm': 7.5, 'water_tds_norm': 450}, | |
| # Jammu & Kashmir | |
| 'srinagar': {'state': 'Jammu & Kashmir', 'soil': 'Mountain', 'crops': ['Apple', 'Saffron', 'Rice'], 'avg_temp': 14, 'avg_rainfall': 700, 'water_ph_norm': 7.0, 'water_tds_norm': 100}, | |
| 'jammu': {'state': 'Jammu & Kashmir', 'soil': 'Alluvial', 'crops': ['Rice', 'Wheat', 'Maize'], 'avg_temp': 24, 'avg_rainfall': 1100, 'water_ph_norm': 7.2, 'water_tds_norm': 200}, | |
| # Himachal Pradesh | |
| 'shimla': {'state': 'Himachal Pradesh', 'soil': 'Mountain', 'crops': ['Apple', 'Potato', 'Barley'], 'avg_temp': 15, 'avg_rainfall': 1500, 'water_ph_norm': 6.8, 'water_tds_norm': 80}, | |
| # Uttarakhand | |
| 'dehradun': {'state': 'Uttarakhand', 'soil': 'Alluvial', 'crops': ['Rice', 'Wheat', 'Litchi'], 'avg_temp': 22, 'avg_rainfall': 2000, 'water_ph_norm': 7.0, 'water_tds_norm': 150}, | |
| 'haridwar': {'state': 'Uttarakhand', 'soil': 'Alluvial', 'crops': ['Rice', 'Sugarcane', 'Wheat'], 'avg_temp': 24, 'avg_rainfall': 1200, 'water_ph_norm': 7.2, 'water_tds_norm': 200}, | |
| # Madhya Pradesh | |
| 'bhopal': {'state': 'Madhya Pradesh', 'soil': 'Black', 'crops': ['Wheat', 'Soybean', 'Gram'], 'avg_temp': 28, 'avg_rainfall': 1100, 'water_ph_norm': 7.5, 'water_tds_norm': 350}, | |
| 'indore': {'state': 'Madhya Pradesh', 'soil': 'Black', 'crops': ['Cotton', 'Soybean', 'Wheat'], 'avg_temp': 27, 'avg_rainfall': 1000, 'water_ph_norm': 7.4, 'water_tds_norm': 330}, | |
| # Chhattisgarh | |
| 'raipur': {'state': 'Chhattisgarh', 'soil': 'Red', 'crops': ['Rice', 'Pulses', 'Groundnut'], 'avg_temp': 28, 'avg_rainfall': 1300, 'water_ph_norm': 7.0, 'water_tds_norm': 280}, | |
| # Jharkhand | |
| 'ranchi': {'state': 'Jharkhand', 'soil': 'Red', 'crops': ['Rice', 'Pulses', 'Vegetables'], 'avg_temp': 26, 'avg_rainfall': 1400, 'water_ph_norm': 7.0, 'water_tds_norm': 260}, | |
| # Haryana | |
| 'chandigarh': {'state': 'Haryana', 'soil': 'Alluvial', 'crops': ['Wheat', 'Rice', 'Sugarcane'], 'avg_temp': 26, 'avg_rainfall': 900, 'water_ph_norm': 7.4, 'water_tds_norm': 380}, | |
| # Andhra Pradesh | |
| 'visakhapatnam': {'state': 'Andhra Pradesh', 'soil': 'Red Sandy', 'crops': ['Rice', 'Sugarcane', 'Coconut'], 'avg_temp': 30, 'avg_rainfall': 1200, 'water_ph_norm': 7.2, 'water_tds_norm': 350}, | |
| 'vijayawada': {'state': 'Andhra Pradesh', 'soil': 'Black', 'crops': ['Rice', 'Cotton', 'Chillies'], 'avg_temp': 32, 'avg_rainfall': 1000, 'water_ph_norm': 7.5, 'water_tds_norm': 420}, | |
| # Telangana | |
| 'hyderabad': {'state': 'Telangana', 'soil': 'Red', 'crops': ['Rice', 'Cotton', 'Maize'], 'avg_temp': 30, 'avg_rainfall': 800, 'water_ph_norm': 7.5, 'water_tds_norm': 450}, | |
| } | |
| def lookup_district(query: str) -> dict: | |
| """Find district data by name (case-insensitive, partial match).""" | |
| query = query.lower().strip() | |
| # Exact match | |
| if query in INDIAN_DISTRICTS: | |
| return INDIAN_DISTRICTS[query] | |
| # Partial match | |
| for district, data in INDIAN_DISTRICTS.items(): | |
| if query in district or district in query: | |
| return data | |
| # State match | |
| for district, data in INDIAN_DISTRICTS.items(): | |
| if data['state'].lower() in query: | |
| return data | |
| return None | |
| def get_offline_weather(district_name: str) -> dict: | |
| """Get weather norms for a district.""" | |
| data = lookup_district(district_name) | |
| if data: | |
| return { | |
| 'temperature_c': data['avg_temp'], | |
| 'rainfall_mm': data['avg_rainfall'], | |
| 'humidity': 70, | |
| 'paksha': 'waxing', | |
| 'source': 'offline_district_database', | |
| 'district': district_name.title(), | |
| 'state': data['state'] | |
| } | |
| return None | |
| def get_offline_water_baseline(district_name: str) -> dict: | |
| """Get typical water quality baselines for a district.""" | |
| data = lookup_district(district_name) | |
| if data: | |
| return { | |
| 'ph': data['water_ph_norm'], | |
| 'tds': data['water_tds_norm'], | |
| 'source': 'offline_district_database', | |
| 'district': district_name.title() | |
| } | |
| return None | |
| def list_all_districts(): | |
| """Return all district names.""" | |
| return list(INDIAN_DISTRICTS.keys()) | |
| if __name__ == '__main__': | |
| print(f'Total districts: {len(INDIAN_DISTRICTS)}') | |
| print('Cachar:', lookup_district('cachar')) | |
| print('Weather for Silchar:', get_offline_weather('cachar')) | |
| print('Water baseline for Varanasi:', get_offline_water_baseline('varanasi')) | |