o
    P6f_D                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlm  mZ	 d dl
Zd dlZd dlZdd Zdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    Nc                 C   s2   dd t d| D }t|dkrdS t|d S )Nc                 S   s   g | ]}t |qS  )float).0numr   r   FE:\wamp\www\apps\calme\nutritwin\resources\KCALLMNutritionUtilities.py
<listcomp>   s    z1extractFirstFiguresFromString.<locals>.<listcomp>z[\d.]+r   )refindalllenint)txtnumbersr   r   r   extractFirstFiguresFromString   s   r   c                 C   s   | }| dd}|S )N"')replace)qZoqr   r   r   adjustQuantity   s   r   c                 C   sj   | d }t | d }t | d }d| d  }d}| d | d kr"d	}t | d }|d	kr.d}|||||fS )
NposiNormNamenamecommenti@B rank   gtingtinRefr   )r
   )fZl0l1l2l3l4l5r   r   r   sortFood!   s   r!   c                 C   sB   d}| D ]}t |||\}}|d| d 7 }||7 }|d7 }q|S )N zFor "z"", here are the nutrition values:

)getPortraitRobot)solsdbPath
pictosPathZportraitRobotssolfnameprr   r   r   extractPortraitRobots;   s   
r+   c           $   
   C   s  | d }d}d}|dkr|S t |}d}| }g d}	|	d}
|	d}|	d}|	d}|	d	}|	d
}|	d}|	d}|	d}|	d}|	d}|	d}|	d}|	d}|	d}d}|	D ]}|dkrv|d7 }||7 }qld| d | d | d }g }z|| | }W n t jy } ztd|  W Y d }~nd }~ww t|dkrtd td|  td t	S d}|d | }t
||\} }!}"|d |
 }|td|d |
 d7 }|td|d | d7 }|td |d | d7 }|td!|d | d"|  7 }|"dkr|td#|"d$7 }|!dkr)|td%|!d&7 }|td'|d | d(|  7 }|td)|d | d(|  7 }|td*|d | d7 }|td+|d | d7 }|td,|d | d7 }|td-|d | d7 }t|d | }#|td.|#d7 }|}||fS )/Nidr"   KCALME_TABLE)V_Name	V_Comment
V_PackTypeV_SourceV_GTINV_TrademarkV_IDV_CaloriePerUnitV_SaltPerUnitV_WaterRatioV_SugarPerUnitV_NutriScore
V_EcoscoreV_AllergensV_AllergenTracesr.   r/   r1   r0   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   ,SELECT  FROM z WHERE V_ID = 'r   An error occurred: r   zI+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++zERROR: UNKNOWN PRODUCT: ID=r   r   ZGTINbrandZcaloriez	Kcal per zreference weight for a unitygzreference volume for a unitymlsaltzg per ZsugarZ
NutriScoreZEcoScoreZ	allergenszallergen traceszdata source)sqlite3connectcursorindexexecutefetchallErrorprintr
   paramsgetUnitBase
formatSlotgetDataSource)$r(   r&   r'   ZfidportraitRobotZfoodNameconntabledbCursorparamr.   r/   r1   r0   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   	statementpr   rowser*   ZpackTypeZunitBasevolumeweightZ
dataSourcer   r   r   r$   J   s   



















r$   c              	   C   s(  d}|  d}d}d}t|  |D ]}}|dkrt|dkr|dd }tj||d}t|dV}	|	 }
t	|
}d}d}|
d}|d urSt|d	}|d
}| dkr^d}|}n!|dkr|d }z
t||d}W n   d}td|  Y d}W d    q1 sw   Y  q|||fS )NZ100gr=   r   r"      zconfig_fr.xmlr
dimensionsquantityunitrC   Z100mlZPOz.wd   zERROR with converion of )splitrL   r
   ospathjoinopenreadET
fromstringfindr   getlowerr   )packr'   ZunitPackpprZ   r[   rW   ZtrigZ
configPathfiler   rootr_   r`   r^   ZtrigwZqvalr   r   r   rN      sB   




rN   c                 C   s4   | }| dkr
d}|S | dkrd}|S | dkrd}|S )NZCIQZCiqualZKCAZKcalMeZOFFzOpen Food Factsr   )codedsr   r   r   rP      s   rP   c                 C   s6   t |}|dkr| d | | }n| d }|d7 }|S )Nr"   z: z: noner#   )str)r   valuer`   Zsvalslotr   r   r   rO      s   rO   c           7      C   sL  g }t | ts	|S t|}d}| }g d}|d}|d}	|d}
|d}|d}|d}|d	}|d
}|d}|d}|d}|d}d}|D ]}|dkrb|d7 }||7 }qX| D ]}td|}t  td t| |d }d}zt	|d }W n   Y t
|}t|}d}z|d }W n   Y d}z|d }W n   Y d}z|d }W n   Y d}z|d }W n   z|d }W n   Y Y d} z|d } W n   Y |d kr
|d kr
|dkr
||dkr
||kr||d}nd}t|}!t|}"t|}#|" }$|# }%d| d | d |! d  }&|$dkr=|&d!|$ d" 7 }&n|&d#7 }&t  td$ t|& t  g }'z||& | }'W n tjyw }( ztd%|(  W Y d }(~(nd }(~(ww t|'d&kr|" }$d| d | d' |! d( |$ d" }&||& | }'t  td) t|& t  t|'d&kr|dkr|dkrd| d | d' |! d* |" d* |# d" }&||& | }'t  td+ t|& t  g })|'D ]j}*i }+|*| |+d< |*|
 |+d,< |*|	 |+d-< |*| |+d.< |*| |+d/< |*| |+d0< ||+d< ||+d1< |*| d|+d2< ||+d< |*| |+d3< |*| |+d4< |*| |+d< ||+d< | |+d< d|+d5< |*|
 |!|+d6< |)|+ qi },t|)d&krt|)td7d8}-td td9 d&}.|-D ]?}/|.d:k rt|/d d; |/d,  d; |/d-  d; |/d  d; t	|/d/  d; |/d3  d; |/d4  d; |/d0   |.d<7 }.qwtd= td |-d& },|,d, }0|,d. }1d7}2|-D ]<}|2d7kr|d, }3|d. }4|3|0kr	|d2  }5t||5|}6|6dkr |},|6|,d5< d>}2qd7}2td? q qq||, qitd@|&  qi|  |  |S )ANr-   )r.   r/   
V_NormNameV_NormCommentr0   r2   	V_GTINRefr4   V_GlobalCountV_NormTrademarkr3   
V_NormAggrr.   r/   rv   rw   r0   r2   rx   r4   ry   r3   rz   r{   r"   r=   zfood:z------------ result to be analyzed -----------r   r_   rA   companytypetimeZtimeOfTheDayunknowneventr>   r?   z WHERE V_NormName LIKE '%z%'z AND V_NormTrademark LIKE '%z%' z6 AND (V_NormTrademark = '' OR V_NormTrademark IS NULL)z
First try:r@   r   z WHERE V_NormAggr LIKE '%z%' AND V_NormTrademark LIKE '%zSecond try:z%' AND V_NormAggr LIKE '%z
Third try:normNamer   ZnormCommentr   r,   quantityLemrm   r   r   servingr   F)keyreversez4------------- Found solution (max 20) --------------   z - r   z4----------------------------------------------------Tz2ERROR: no solution for picto in the first solutionzNo solution for query: ) 
isinstancelistrE   rF   rG   rH   KCAUtilZignorePrefixrL   rs   r   KCAProcZnormalizeQuantityPropositionrj   r   ZnormalizeNameZnormalizeBrandstriprI   rJ   rK   r
   rb   appendsortedr!   KCATraceTRACEcopygetBestPictoZTRACE_ERRORclose)7ZfoodListr&   jpicZfsolsrR   rS   rT   rU   r.   r/   rv   rw   r0   r2   rx   r4   ry   r3   rz   r{   rV   rW   ffr   r   Z	quantityBZquantityLLMr   rA   r|   ZtypefZtimeMZ	eventtimer   Z	normBrandZnormCompanyZqBrandZqCompanyr   rX   rY   r%   rowr(   ZfsolZsorted_solsZnbsssZrefNameZ
refCommentZ
foundPictoZcurNameZ
curCommentpackTabr   r   r   r   getBestSolutions   sL  
















.





$
",



f




r   c                 C   sT   |   }t|dk r(|ddks&|ddks&|ddks&|ddkr(dS dS )	N   Zgrr   rC   ZcllTF)rl   r
   rj   )r   ttr   r   r   containUnit  s   Dr   c           
      C   s   t | ||}|dkrS| d}t|}d}t|D ]}|dkr"d}q|d||  7 }q|dkrS|dkrSt |||}|d }| rQt|d }	|dt|	}|S d}|S )Nr"    r   2ra   Z200)identifyBestPictorb   r
   range	isnumericr   r   rs   )
r_   r   r   pictoResultZwdsnbwZ	quantity2iZnumstrr   r   r   r   r     s$   
r   c                 C   s  g }t |dkr
dS d}|    }t|dkr.| dd}|dkr,|d d | }|S |d}t |}	|	dkr=|S |d }
g }d}d}|
D ]}|d	 |d kr]|d
 }|d } q^qId}||	k r|d7 }||	krt |
| d dkrd|  d }td|  n/|dks|	dkr|
| d 	 }qn|| }|D ]}|
| d	 |kr|
| d
 }|}d} qq||	k sdd}|D ]}|dkr|D ]}|dd |dd kr|} qqq|S )Nr   r"   FTr   -ZdecisionTreer   r   nextr,   r   ZleafzWrong quantity: 'r   zERROR: r\   )
r
   rl   rstriplstripr   r   rb   r   r   r   )r_   r   r   ZpictosfoundZnqZqqr   ZallWordsr   tabZnextIDsZ	currentIDZmsgErrru   idxZcwr   rW   Zpicr   r   r   r     sl   3
r   )rc   r   jsonrE   r~   r   xml.etree.ElementTreeetreeElementTreerh   KCADBProcessorUtilitiesr   KCALLMTracer   KCALLMUtilitiesr   r   r   r!   r+   r$   rN   rP   rO   r   r   r   r   r   r   r   r   <module>   s.    
^' x	