Ë
    K}héN  ã                   ó¾  — d dl mZmZ d dlmZ d dlZd dlZd dlZ	d dl
mZmZmZmZ d dlZd dlZd dlZej$                  j'                  ej$                  j)                  e«      «      Zej$                  j'                  ej$                  j'                  e«      «      Zej$                  j1                  ed«      Zej$                  j1                  ed«      Zej$                  j1                  ed«      Z ede› �«        eed	«      5 Z ej>                  e«      Z ddd«       ej$                  j1                  ed
«      Z! ee!d	«      5 Z ej>                  e«      Z"ddd«       e"d   Z# ede#› �«       ej$                  j1                  ed«      Z$ ejJ                  e$«      Z&ej$                  j1                  ed«      Z' ee'dd¬«      5 Z ej>                  e«      Z(ddd«       ej$                  j1                  ed«      Z) ejJ                  e)«      Z* ede*jV                  jY                  «       «       ej$                  j1                  ed«      Z-	  ee-dd¬«      5 Z ej>                  e«      Z.ddd«        ed e/e.«      › d�«        e«       Z2 G d„ de«      Z3 G d„ de«      Z4 G d„ de«      Z5 G d„ de«      Z6 G d „ d!e«      Z7de3fd"„Z8d#e9d$e9d%e:fd&„Z;d'„ Z<d(„ Z=d)„ Z>e2j                  d*e7¬+«      de3fd,„«       Z@e2jƒ                  d-«      d.„ «       ZBy# 1 sw Y   �ŒùxY w# 1 sw Y   �ŒÆxY w# 1 sw Y   �ŒSxY w# 1 sw Y   ŒÍxY w# e0$ rZ1 ede1› �«       g Z.Y dZ1[1ŒÕdZ1[1ww xY w)/é    )Ú	APIRouterÚHTTPException)Ú	BaseModelN)ÚListÚOptionalÚDictÚAnyÚmodelsÚdataz	model.pklzLoading model from Úrbzmodel_meta.pklÚfeatureszModel features: zsystem_costs.csvzsoil_ph_ranges.jsonÚrzutf-8)Úencodingzagmarknet_prices.csvzPrice data columns:zsubsidies.jsonzSuccessfully loaded z subsidy recordszError loading subsidies: c                   óö   — e Zd ZU eed<   eed<   dZee   ed<   dZee   ed<   dZ	ee   ed<   d	Z
ee   ed
<   dZee   ed<   dZeee      ed<   dZeee      ed<   dZee   ed<   dZee   ed<   dZee   ed<   y)ÚRecommendationRequestÚ	plot_sizeÚbudgetÚKolhapurÚdistrictÚloamÚ	soil_typeg      @Úsoil_phÚwellÚwater_sourceé   Úsunlight_hoursNÚpreferred_cropsÚpreferred_systemsé   Úrisk_appetiteÚlabor_availabilityÚMaharashtraÚstate)Ú__name__Ú
__module__Ú__qualname__ÚfloatÚ__annotations__r   r   Ústrr   r   r   r   Úintr   r   r   r    r!   r#   © ó    úOC:\Users\aadil\OneDrive\Desktop\404\backend\app\api\endpoints\microfarm_main.pyr   r   :   s¥   … ØÓØƒMØ(€Hˆh�s‰mÓ(Ø%€Iˆx˜‰}Ó%Ø"€GˆX�e‰_Ó"Ø"(€L�(˜3‘-Ó(Ø$%€N�H˜S‘MÓ%Ø+/€O�X˜d 3™iÑ(Ó/Ø-1Ð�x  S¡	Ñ*Ó1Ø#$€M�8˜C‘=Ó$Ø()Ð˜ ™Ó)Ø(€Eˆ8�C‰=Ô(r,   r   c                   ó†   — e Zd ZU eed<   eed<   dZee   ed<   dZee   ed<   dZ	ee   ed<   dZ
ee   ed<   dZee   ed<   y)	ÚSubsidyÚnameÚsubsidy_pctNÚmax_capÚeligibilityÚ	apply_urlÚcategoryr#   )r$   r%   r&   r)   r(   r'   r2   r   r3   r4   r5   r#   r+   r,   r-   r/   r/   I   sS   … Ø
ƒIØÓØ#€GˆX�e‰_Ó#Ø!%€K�˜#‘Ó%Ø#€Iˆx˜‰}Ó#Ø"€Hˆh�s‰mÓ"Ø€Eˆ8�C‰=Ôr,   r/   c                   ó,   — e Zd ZU eed<   eed<   eed<   y)ÚMarketPriceÚlocationÚprice_per_quintalÚdateN)r$   r%   r&   r)   r(   r'   r+   r,   r-   r7   r7   S   s   … ØƒMØÓØ
„Ir,   r7   c                   óÀ   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   ee   ed<   eed<   eed	<   d
Ze	ee
eef         ed<   d
Ze	ee
eef         ed<   eed<   y
)ÚSystemRecommendationÚsystemr5   Úexpected_roi_percentÚsetup_cost_totalÚmonthly_costÚpayback_period_monthsÚsuitable_cropsÚwater_usage_per_dayÚelectricity_usage_per_dayNÚmarket_pricesÚ	subsidiesÚcompatibility_score)r$   r%   r&   r)   r(   r'   r*   r   rE   r   r   r	   rF   r+   r,   r-   r<   r<   Y   sx   … ØƒKØƒMØÓØÓØÓØÓØ˜‘IÓØÓØ$Ó$Ø48€M�8˜D  c¨3 h¡Ñ0Ñ1Ó8Ø04€Iˆx˜˜T # s (™^Ñ,Ñ-Ó4ØÔr,   r<   c                   óB   — e Zd ZU eed<   ee   ed<   ee   ed<   eed<   y)ÚRecommendationResponseÚsuccessÚrecommendationsÚcrop_suggestionsÚmessageN)r$   r%   r&   Úboolr(   r   r<   r)   r+   r,   r-   rI   rI   g   s"   … ØƒMØÐ.Ñ/Ó/Ø˜3‘iÓØ„Lr,   rI   c                 ó2  — t         t         d   | j                  k  t         d   | j                  k\  z     }||d   | j                  z  | j                  dz  k     }t        |«      dk(  r/t	        d«       t         j                  d«      j                  d«      S |S )NÚmin_area_sqftÚmax_area_sqftÚcapex_per_sqftç333333ó?r   zBNo systems matched constraints. Returning most affordable options.é   )Úsystem_costsr   r   ÚlenÚprintÚsort_valuesÚhead)r   Úsize_filteredÚbudget_filtereds      r-   Úfilter_suitable_systemsr\   n   sš   € Ü Ü	�oÑ	&¨$¯.©.Ñ	8Ü	�oÑ	&¨$¯.©.Ñ	8ñ	:ñ€Mð
 $Ø	Ð'Ñ	(¨4¯>©>Ñ	9¸T¿[¹[È3Ñ=NÑ	Nñ€Oô ˆ?Ó˜qÒ ÜÐRÔSÜ×'Ñ'Ð(8Ó9×>Ñ>¸qÓAÐAàÐr,   Úsystem_typer   r   c                 ór  — t         t         d   | k(     }t        |«      dk(  rg S |j                  d   d   j                  d«      D �cg c]  }|j	                  «       ‘Œ }}g }t
        d   D ]D  }|d   }||vrŒ||d   v sŒ|d   d	   }	|d   d
   }
|	|cxk  r|
k  sŒ1n Œ4|j                  |«       ŒF |S c c}w )Nr=   r   rB   Ú,Úcropsr0   Ú
soil_typesÚoptimal_ph_rangeÚminÚmax)rU   rV   ÚilocÚsplitÚstripÚ	soil_dataÚappend)r]   r   r   Ú
system_rowÚcropÚsystem_cropsÚcompatible_cropsÚ	crop_dataÚ	crop_nameÚmin_phÚmax_phs              r-   Úget_crop_recommendationsrr      sÞ   € Üœl¨8Ñ4¸ÑCÑD€JÜ
ˆ:ƒ˜!ÒØˆ	à-7¯_©_¸QÑ-?Ð@PÑ-Q×-WÑ-WÐX[Ô-\Ó]Ñ-\ T�D—J‘J•LÐ-\€LÐ]ØÐä˜wÔ'ˆ	Ø˜fÑ%ˆ	Ø˜LÑ(Øà˜	 ,Ñ/Ò/ØÐ1Ñ2°5Ñ9ˆFØÐ1Ñ2°5Ñ9ˆFØ˜Ô* FÖ*Ø ×'Ñ'¨	Õ2ð (ð Ðùò ^s   ÁB4c                 ól  — t         st        d«       g S g }| j                  «       j                  «       }t         D ]N  }|j	                  dd«      j                  «       j                  «       }|r|dk(  s||k(  sŒ>|j                  |«       ŒP t        dt        |«      › d| › �«       t        |d„ d¬	«      }|S )
z,Get subsidies applicable to the user's stateúNo subsidies data availabler#   Ú ÚallúFound z subsidies applicable for c                 ó&   — | j                  dd«      S )Nr1   r   ©Úget)Úss    r-   Ú<lambda>z#get_top_subsidies.<locals>.<lambda>ª   s   € �a—e‘e˜M¨1Ô-r,   T©ÚkeyÚreverse)Úsubsidies_datarW   rg   Úlowerrz   ri   rV   Úsorted)r#   Ústate_subsidiesÚstate_lowerÚsubsidyÚsubsidy_stateÚsorted_subsidiess         r-   Úget_top_subsidiesrˆ   •   sµ   € åÜÐ+Ô,Øˆ	ð €OØ—+‘+“-×%Ñ%Ó'€Kç!ˆØŸ™ G¨RÓ0×6Ñ6Ó8×>Ñ>Ó@ˆá °Ò 6¸-È;Ó:VØ×"Ñ" 7Õ+ð	 "ô 
ˆF”3�Ó'Ð(Ð(BÀ5À'Ð
JÔKô ØÙ-ØôÐð Ðr,   c                 óh  ‡— |sg S | j                  «       j                  «       }|j                  «       j                  «       }g d¢g d¢g d¢g d¢g d¢g d¢g d¢dœ}g }|j                  «       D ]  \  }}||v s||v sŒ|j                  |«       Œ! |j	                  «       |j	                  «       z   }	|j                  |	«       g }
g }g }|D �]  }|j                  d	d
«      j                  «       j                  «       }|j                  dd
«      j                  «       j                  «       }|j                  dd
«      j                  «       j                  «       }|› d|› d|› �Š|‰v s|‰v r|
j                  |«       Œ²t        ˆfd„|D «       «      r|j                  |«       ŒØg d¢}t        ˆfd„|D «       «      sŒñ|j                  |«       �Œ |
|z   |z   }t        «       }g }|D ]L  }|j                  d	d
«      }||vsŒ|j                  |«       |j                  |«       t        |«      dk\  sŒK |S  |S )z<Match subsidies specifically relevant to this farming system)ÚhydroponicsÚ
hydroponicÚsoillessÚnftÚdwczwater culture)Ú
aquaponicsÚ	aquaponicÚfishÚaquaculture)Úmicrogreenszmicro greensÚsproutÚseedling)ÚverticalÚtowerzgarden tower)Ú
greenhousezprotected cultivationÚ	polyhouseÚshadenet)Ú
aeroponicsÚ	aeroponicÚmistÚfog)Úorganicznatural farmingÚjaivik)rŠ   r�   r“   r–   r˜   r›   rŸ   r0   ru   r5   ÚdescriptionÚ c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©Nr+   )Ú.0ÚkeywordÚtext_to_checks     €r-   Ú	<genexpr>z-match_subsidies_for_system.<locals>.<genexpr>ã   s   øè ø€ ÐKÑ7J¨Gˆw˜-Ô'Ñ7Jùó   ƒ)ÚfarmingÚagricultureÚcultivationrk   Úfarmc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr¤   r+   )r¥   Útermr§   s     €r-   r¨   z-match_subsidies_for_system.<locals>.<genexpr>é   s   øè ø€ Ð?±¨ˆt�}Ô$±ùr©   r   )rg   r�   ÚitemsÚextendrf   rz   ri   ÚanyÚsetÚaddrV   )Úsystem_namer5   rF   Úsystem_name_stdÚcategory_stdÚsystem_keywordsÚapplicable_keywordsr~   ÚkeywordsÚsystem_wordsÚexact_matchesÚpartial_matchesÚgeneral_matchesr…   Úsubsidy_nameÚsubsidy_categoryÚsubsidy_descriptionÚgeneral_termsÚresultÚseenÚunique_subsidiesÚ
subsidy_idr§   s                         @r-   Úmatch_subsidies_for_systemrÇ   ±   s@  ø€ áØˆ	à!×'Ñ'Ó)×/Ñ/Ó1€OØ—>‘>Ó#×)Ñ)Ó+€Lò `ÚHÚLÚ9ÚVÚ@Ú;ñ€Oð ÐØ(×.Ñ.Ö0‰ˆˆXØ�/Ñ! S¨LÒ%8Ø×&Ñ& xÕ0ð 1ð
 #×(Ñ(Ó*¨\×-?Ñ-?Ó-AÑA€LØ×Ñ˜|Ô,ð €Mà€Oà€OäˆØ—{‘{ 6¨2Ó.×4Ñ4Ó6×<Ñ<Ó>ˆØ"Ÿ;™; z°2Ó6×<Ñ<Ó>×DÑDÓFÐØ%Ÿk™k¨-¸Ó<×BÑBÓD×JÑJÓLÐð (˜.¨Ð*:Ð);¸1Ð=PÐ<QÐRˆð ˜mÑ+¨|¸}Ñ/LØ× Ñ  Ô)Øô ÓKÑ7JÓKÔKØ×"Ñ" 7Ô+Øò RˆÜÓ?±Ó?Õ?Ø×"Ñ" 7Ö+ð+ ð0 ˜_Ñ,¨Ñ>€Fô ‹5€DØÐÛˆØ—[‘[ ¨Ó,ˆ
Ø˜TÒ!Ø�H‰H�ZÔ Ø×#Ñ# GÔ,ÜÐ#Ó$¨Ó)ØàÐð ð Ðr,   c                 óh  — | sg S | D �cg c]   }|j                  «       j                  «       ‘Œ" }}|d   j                  j                  «       j                  j                  «       |d<   |d   j                  j                  «       j                  j                  «       |d<   |j                  «       j                  «       }g }|d   j                  «       j	                  «       }|D ]H  }||v r|j                  |«       Œt        j                  ||dd¬«      }|sŒ5|j                  |d   «       ŒJ |sg S ||d   j                  |«      |d   j                  j                  |«      z     }	|	j                  r||d   j                  |«         }	|	j                  s|	g d	¢   j                  d
«      S g S c c}w )Nrk   Úcrop_stdr8   Úlocation_stdé   çffffffæ?)ÚnÚcutoffr   )r8   r9   r:   Úrecords)rg   r�   r)   ÚuniqueÚtolistri   ÚdifflibÚget_close_matchesÚisinÚcontainsÚemptyÚto_dict)
r`   r   Úprices_dataÚcÚstandardized_cropsÚdistrict_stdÚmatched_cropsÚall_market_cropsÚfuzzyÚcrop_pricess
             r-   Úget_market_pricesrà   ý   s¦  € ÙØˆ	ñ 6;Ó;±U°˜!Ÿ'™'›)Ÿ/™/Õ+°UÐÐ;Ø)¨&Ñ1×5Ñ5×;Ñ;Ó=×AÑA×GÑGÓI€K�
ÑØ"-¨jÑ"9×"=Ñ"=×"CÑ"CÓ"E×"IÑ"I×"OÑ"OÓ"Q€K�ÑØ—>‘>Ó#×)Ñ)Ó+€Lð €MØ" :Ñ.×5Ñ5Ó7×>Ñ>Ó@ÐãˆØÐ Ñ Ø× Ñ  Õ#ä×-Ñ-¨aÐ1AÀQÈsÔSˆEÚØ×$Ñ$ U¨1¡XÕ.ð  ñ Øˆ	àØ	�ZÑ	 ×	%Ñ	% mÓ	4Ø	�^Ñ	$×	(Ñ	(×	1Ñ	1°,Ó	?ñ	Añ€Kð
 ×Òà! +¨jÑ"9×">Ñ">¸}Ó"MÑNˆð ×ÒØÒDÑE×MÑMÈiÓXÐXàˆ	ùòE <s   ‰%F/z
/recommend)Úresponse_modelc              ƒ   ó€  ‡
K  — 	 t        d| j                  › d| j                  › d| j                  › �«       t	        | «      }t        t        |«      › d�«       |j                  rt        dg g d¬«      S | j                  r| j                  j                  «       nd}t        |«      }t        d	t        |«      › d
|› �«       g }|j                  «       D �]"  \  }}|d   | j                  z  }|d   }t        |d   | j                  | j                  «      }	|	s/|d   j                  d«      D �
cg c]  }
|
j                  «       ‘Œ }	}
| j                   rŠ| j                   D �
cg c]   }
|
j#                  «       j                  «       ‘Œ" }}
|	D �
‡
cg c]  Š
t%        ˆ
fd„|D «       «      r‰
‘Œ }	}
|	s/|d   j                  d«      D �
cg c]  }
|
j                  «       ‘Œ }	}
|d   | j                  z  }|d   | j                  z  }	 | j                  | j                  |d   | j                  | j&                  | j(                  | j*                  | j,                  dœ}t/        |j1                  «       «      j3                  t/        t4        «      «      rNt7        j8                  |g«      t4           }t:        j=                  |«      d   }t        d|d   › d|d›d�«       |}nd|d   z  dz  }dtA        |d   dz  | j,                  d z  z
  «      z
  }dtA        |d   d!z  | j*                  d z  z
  «      z
  }d"d#d$d"d%œd#d"d"d&d%œd'd'd#d(d%œd$d#d$d$d%œd)œ}|jC                  | j&                  j#                  «       i «      jC                  |d   j#                  «       d&«      }|d*z  |d*z  z   |d+z  z   |dz  d,z  z   dz  }tE        dtG        d|«      «      }| jH                  r"|d   | jH                  v r|d-z  }tG        d|«      }tK        |	| j                  tL        «      }tO        |d   |d   |«      }|rYtQ        d.„ |d d/ D «       «      }tG        |d0«      }|d|dz  z
  z  }||z
  }|dkD  r
||z  }||z  }t        d1|› d2|d   › d3|d›d�«       |jS                  tU        |d   |d   tW        |d4«      tW        |d4«      tW        |d4«      tW        |d   d«      |	d d5 tW        |d4«      tW        |d4«      tW        |d4«      |d d/ |¬6«      «       �Œ% |jY                  d7„ d8¬9«       |d d/ }g }|D ]_  } | jZ                  sŒt        | jZ                  «      dkD  sŒ)| jZ                  D ](  Š
‰
|vsŒ|jS                  ‰
«       t        |«      d5k\  sŒ( Œ_ Œa t        d8||d d5 d	t        |«      › d:| j                  › d;| j                  › d<�¬«      S c c}
w c c}
w c c}
w c c}
w # t>        $ r$}t        d|› �«       d|d   z  dz  }Y d }~�Œ
d }~ww xY w# t>        $ r=}t        d=|› �«       dd l.}!|!j_                  «        ta        d>tc        |«      ¬?«      ‚d }~ww xY w­w)@NzReceived request for u    sqft & â‚¹z budget in z$ systems matched initial constraintsFzpNo suitable farming systems found for your constraints. Please try increasing your budget or reducing plot size.)rJ   rK   rL   rM   r"   rw   z applicable subsidies for rR   Úopex_per_monthr=   rB   r_   c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wr¤   )r�   )r¥   Ú	user_croprk   s     €r-   r¨   z#recommend_system.<locals>.<genexpr>M  s   øè ø€ Ð'^ÑS]Ài¨	°T·Z±Z³\Ô(AÑS]ùs   ƒÚ!water_use_litres_per_day_per_sqftÚ$electricity_use_kwh_per_day_per_sqftr5   )r   r   r]   r   r   r   r    r!   r   zModel predicted ROI for z: z.2fÚ%éd   rA   é   zError predicting ROI: rË   Úlabour_per_monthé
   é   gÍÌÌÌÌÌì?gš™™™™™é?g      ð?)rŠ   r�   r“   r›   rÌ   g333333ã?g      à?)r   ÚcanalÚ	rainwaterÚ	municipalg      Ð?gš™™™™™É?g333333Ó?rS   c              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­w)r1   r   Nry   )r¥   r{   s     r-   r¨   z#recommend_system.<locals>.<genexpr>–  s   è ø€ Ð'^ÑI]ÀA¨¯©¨m¸Q×(?ÑI]ùs   ‚rT   éF   zApplied z% subsidies to z, ROI adjusted to é   r   )r=   r5   r>   r?   r@   rA   rB   rC   rD   rG   rE   rF   c                 ó   — | j                   S r¤   )rG   )Úxs    r-   r|   z"recommend_system.<locals>.<lambda>¶  s
   € ¨1×+@Ò+@r,   Tr}   z% best micro-farming systems for your z sqft plot in Ú.z"Error generating recommendations: iô  )Ústatus_codeÚdetail)2rW   r   r   r   r\   rV   rÖ   rI   r#   rg   rˆ   Úiterrowsrr   r   r   rf   r   r�   r²   r   r   r    r!   r³   ÚkeysÚissubsetÚmodel_featuresÚpdÚ	DataFrameÚmodelÚpredictÚ	ExceptionÚabsrz   rd   rc   r   rà   rØ   rÇ   Úsumri   r<   ÚroundÚsortrB   Ú	tracebackÚ	print_excr   r)   )"r   Úsuitable_systemsÚ
user_stateÚavailable_subsidiesrK   Ú_r=   Útotal_setup_costr@   rB   rk   Ú
user_cropsÚwater_usageÚelectricity_usageÚinput_featuresÚXÚpredicted_roiÚexpected_roiÚeÚlabor_matchÚ
risk_matchÚwater_source_scoresÚwater_scorerG   Úmarket_prices_listÚsystem_subsidiesÚtotal_subsidy_pctÚsubsidized_setup_costÚsubsidy_savingsÚadjustment_factorÚtop_recommendationsrL   r   r  s"             `                       r-   Úrecommend_systemr   '  s=  øè ø€ ðf<ÜÐ% d§n¡nÐ%5°[ÀÇÁÀÈ[ÐY]×YfÑYfÐXgÐhÔiô 3°4Ó8ÐÜ”Ð%Ó&Ð'Ð'KÐLÔMà×!Ò!Ü)ØØ "Ø!#ð Kô	ð ð ,0¯:ª:�T—Z‘Z×%Ñ%Ô'¸=ˆ
Ü/°
Ó;ÐÜ�”sÐ.Ó/Ð0Ð0JÈ:È,ÐWÔXð ˆØ)×2Ñ2×4‰IˆAˆvà%Ð&6Ñ7¸$¿.¹.ÑHÐØ!Ð"2Ñ3ˆLô 6°f¸XÑ6FÈÏÉÐX\×XdÑXdÓeˆNÙ!Ø;AÐBRÑ;S×;YÑ;YÐZ]Ô;^Ó!_Ñ;^°4 $§*¡*¥,Ð;^�Ð!_ð ×#Ò#Ø?C×?SÒ?SÓTÑ?S°t˜dŸj™j›l×0Ñ0Õ2Ð?S�
ÐTÙ3Aô "`±>¨4Ü$'Ó'^ÑS]Ó'^Ô$^ò #'°>�ð "`á%Ø?EÐFVÑ?W×?]Ñ?]Ð^aÔ?bÓ%cÑ?b°t d§j¡j¥lÐ?b�NÐ%cð !Ð!DÑEÈÏÉÑVˆKØ &Ð'MÑ NÐQU×Q_ÑQ_Ñ _ÐðJà!%§¡Ø"Ÿk™kØ#)¨*Ñ#5Ø!%§¡Ø$(×$5Ñ$5Ø&*×&9Ñ&9Ø%)×%7Ñ%7Ø*.×*AÑ*Añ	"�ô �~×*Ñ*Ó,Ó-×6Ñ6´s¼>Ó7JÔKäŸ™ nÐ%5Ó6´~ÑF�AÜ$)§M¡M°!Ó$4°QÑ$7�MÜÐ4°V¸HÑ5EÐ4FÀbÈÐWZÐH[Ð[\Ð]Ô^Ø#0‘Lð $'¨Ð0GÑ)HÑ#HÈ2Ñ#M�Lð œc 6Ð*<Ñ#=ÀÑ#CÈ×H_ÑH_ÐbdÑHdÑ"eÓfÑfˆKØœS &Ð)@Ñ"AÀBÑ"FÈ4×K]ÑK]Ð`bÑKbÑ!cÓdÑdˆJð ),¸3ÈsÐbeÑfØ),¸CÐPSÐcfÑgØ-0ÀÐTWÐgjÑkØ-0ÀÐTWÐgjÑkñ	#Ðð .×1Ñ1°$×2CÑ2C×2IÑ2IÓ2KÈRÓP×TÑTØ�zÑ"×(Ñ(Ó*¨Có1ˆKð
 ˜dÑ"Ø˜TÑ!ñ"à˜cÑ!ñ"ð  Ñ# sÑ*ñ+ð ñ#Ðô #& a¬¨SÐ2EÓ)FÓ"GÐð ×%Ò%¨&°Ñ*:¸d×>TÑ>TÑ*TØ# sÑ*Ð#ä&)¨#Ð/BÓ&CÐ#ô "3°>À4Ç=Á=ÔR]Ó!^Ðô  :¸&ÀÑ:JÈFÐS]ÑL^Ð`sÓtÐñ  Ü$'Ñ'^ÐIYÐZ\Ð[\ÑI]Ó'^Ó$^Ð!ä$'Ð(9¸2Ó$>Ð!ð )9¸AÐ@QÐRUÑ@UÑ<UÑ(VÐ%Ø"2Ð5JÑ"J�ð )¨1Ò,Ø(8Ð;PÑ(PÐ%Ø Ð$5Ñ5�Lä˜Ð!2Ð 3°?À6È(ÑCSÐBTÐTfÐgsÐtwÐfxÐxyÐzÔ{ð ×"Ñ"Ô#7Ø˜hÑ'Ø 
Ñ+Ü%*¨<¸Ó%;Ü!&Ð'7¸Ó!;Ü" <°Ó3Ü&+¨FÐ3JÑ,KÈQÓ&OØ-¨b¨qÐ1Ü$)¨+°qÓ$9Ü*/Ð0AÀ1Ó*EÜ$)Ð*=¸qÓ$AØ0°°!Ð4Ø*ô$ö ðO 5ðn 	×ÑÑ!@È$ÐÔOØ-¨b¨qÐ1Ðð ÐÛ$ˆAØ×Ó¤C¨×(8Ñ(8Ó$9¸AÓ$=Ø×,Ô,�DØÐ#3Ò3Ø(×/Ñ/°Ô5ÜÐ/Ó0°AÓ5Ù!ñ	 -ð %ô &ØØ/Ø-¨b¨qÐ1ØœSÐ!4Ó5Ð6Ð6[Ð\`×\jÑ\jÐ[kÐkyÐz~÷  {Hñ  {Hð  zIð  IJð  Kô	
ð 	
ùò{ "`ùò Uùò"`ùò &døô8 ò JÜÐ.¨q¨cÐ2Ô3Ø" VÐ,CÑ%DÑDÀrÑI–ûðJûô@ ò <ÜÐ2°1°#Ð6Ô7ÛØ×ÑÔÜ¨´C¸³FÔ;Ð;ûð	<üs°   ƒX>…A.W5 Á3X>Á4B9W5 Ä-V1ÅW5 Å %V6ÆW5 ÆV;Æ)W5 ÇW Ç&W5 ÈC"WË#IW5 Ô&W5 Ô?W5 ÕW5 Õ3=W5 Ö0X>Ö1W5 ×	W2×W-×'W5 ×-W2×2W5 ×5	X;×>8X6Ø6X;Ø;X>z/debug/subsidiesc               ƒ   óœ   K  — 	 t         sdg dœS dt        t         «      › d�t         dœS # t        $ r} dt        | «      icY d} ~ S d} ~ ww xY w­w)z+Debug endpoint to view all loaded subsidiesrt   )rM   rF   rw   z
 subsidiesÚerrorN)r€   rV   r  r)   )r  s    r-   Úlist_all_subsidiesr#  Ò  sZ   è ø€ ð	!ÝØ<È2ÑNÐNð  ¤¤NÓ 3Ð4°JÐ?Ü'ñ
ð 	
øô ò !Øœ˜Q›Ð Õ ûð!üs7   ‚A„
) ŽA�) ¨A©	A	²A¾A	¿AÁA	Á	A)CÚfastapir   r   Úpydanticr   ÚpickleÚpandasrý   ÚnumpyÚnpÚtypingr   r   r   r	   ÚosÚjsonrÒ   ÚpathÚdirnameÚabspathÚ__file__Ú
script_dirÚproject_rootÚjoinÚ
models_dirÚdata_dirÚ
model_pathrW   ÚopenÚfÚloadrÿ   Ú	meta_pathÚ
model_metarü   Úsystem_costs_pathÚread_csvrU   Úsoil_ph_pathrh   Úprices_pathrØ   ÚcolumnsrÑ   Úsubsidies_pathr€   rV   r  r  Úrouterr   r/   r7   r<   rI   r\   r)   r'   rr   rˆ   rÇ   rà   Úpostr   rz   r#  r+   r,   r-   Ú<module>rD     s3  ðß ,Ý Û Û Û ß ,Ó ,Û 	Û Û ð �W‰W�_‰_˜RŸW™WŸ_™_¨XÓ6Ó7€
Ø�w‰w�‰˜rŸw™wŸ™¨zÓ:Ó;€Ø�W‰W�\‰\˜,¨Ó1€
Ø�7‰7�<‰<˜ fÓ-€à�W‰W�\‰\˜* kÓ2€
Ù Ð˜J˜<Ð(Ô )Ù	ˆ*�dÔ˜qØˆF�K‰K˜‹N€E÷ ð �G‰G�L‰L˜Ð%5Ó6€	Ù	ˆ)�TÔ˜aØ�—‘˜Q“€J÷ ð ˜JÑ'€Ù Ð˜Ð(Ð)Ô *ð —G‘G—L‘L Ð+=Ó>Ð Øˆr�{‰{Ð,Ó-€ð �w‰w�|‰|˜HÐ&;Ó<€Ù	ˆ,˜ gÕ.°!Ø�—	‘	˜!“€I÷ /ð �g‰g�l‰l˜8Ð%;Ó<€Øˆb�k‰k˜+Ó&€Ù Ð˜[×0Ñ0×7Ñ7Ó9Ô :ð —‘—‘˜hÐ(8Ó9€ðÙ	ˆn˜c¨GÕ	4¸Ø"˜Ÿ™ 1›ˆ÷ 
5á	Ð ¡ ^Ó!4Ð 5Ð5EÐ
FÔGñ 
‹€ô)˜Iô )ô ˆiô  ô�)ô ô˜9ô ô˜Yô ðÐ"7ó ð"¨#ð ¸#ð Èó ò,ò8IòX'ðT ‡�ˆ\Ð*@€ÓAðg<Ð!6ò g<ó Bðg<ðT ‡�ÐÓñ!ó  ñ!÷A Ñú÷
 Ñú÷ /Ñ.ú÷ 
5Ð	4ûð ò Ù	Ð% a SÐ
)Ô*Ø…NûðúsT   ÄLÅLÇL'É
M  ÉL4É(M  ÌLÌL$Ì'L1Ì4L=Ì9M  Í MÍMÍM