
    UNgD                         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c mZ	 d dl
Zd dlZd dlZd Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zy)    Nc                     t        j                  d|       D cg c]  }t        |       }}t        |      dk(  ryt	        |d         S c c}w )Nz[\d.]+r   )refindallfloatlenint)txtnumnumberss      JE:\xampp\htdocs\apps\calme\nutritwin\resources\KCALLMNutritionUtilities.pyextractFirstFiguresFromStringr      sJ    %'ZZ	3%?@%?cuSz%?G@
7|q71:	 As   A
c                 .    | }|j                  dd      }|S )N"')replace)qoqs     r   adjustQuantityr      s    	
B 
D#	BI    c                     | d   }t        | d         }t        | d         }d| d   z
  }d}| d   | d   k(  rd	}t        | d         }|d	kD  rd}|||||fS )
NposiNormNamenamecommenti@B rank   gtingtinRefr   )r   )fl0l1l2l3l4l5s          r   sortFoodr%   !   s     
>	B 
QvYB 
Qy\	B 
1V9	B 
ByAiL  
QvYB	AvBBr   c                 b    d}| D ]'  }t        |||      \  }}|d|z   dz   z  }||z  }|dz  }) |S )N zFor "z"", here are the nutrition values:

)getPortraitRobot)solsdbPath
pictosPathportraitRobotssolfnameprs          r   extractPortraitRobotsr1   ;   sW     N $S&*=	r'E/,QQQ"$	  r   c                    | d   }d}d}|dk(  r|S t        j                  |      }d}|j                         }g d}	|	j                  d      }
|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d	      }|	j                  d
      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }d}|	D ]  }|dk7  r|dz  }||z  } d|z   dz   |z   dz   |z   dz   }g }	 |j	                  |       |j                         }t        |      dk7  r*t        d       t        d|z          t        d       t        S d}|d   |   }t        ||      \  } }!}"|d   |
   }|t        d|d   |
   d      z  }|t        d|d   |   d      z  }|t        d |d   |   d      z  }|t        d!|d   |   d"| z         z  }|"dk7  r|t        d#|"d$      z  }|!dk7  r|t        d%|!d&      z  }|t        d'|d   |   d(| z         z  }|t        d)|d   |   d(| z         z  }|t        d*|d   |   d      z  }|t        d+|d   |   d      z  }|t        d,|d   |   d      z  }|t        d-|d   |   d      z  }t        |d   |         }#|t        d.|#d      z  }|}||fS # t         j                  $ r}t        d|        Y d }~d }~ww xY w)/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_AllergenTracesr5   r6   r8   r7   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   ,SELECT  FROM z WHERE V_ID = 'r   An error occurred: r   zI+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++zERROR: UNKNOWN PRODUCT: ID=r   r   GTINbrandcaloriez	Kcal per zreference weight for a unitygzreference volume for a unitymlsaltzg per sugar
NutriScoreEcoScore	allergenszallergen traceszdata source)sqlite3connectcursorindexexecutefetchallErrorprintr   paramsgetUnitBase
formatSlotgetDataSource)$r.   r+   r,   fidportraitRobotfoodNameconntabledbCursorparamr5   r6   r8   r7   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   	statementpr   rowser0   packTypeunitBasevolumeweight
dataSources$                                       r   r)   r)   J   s    d)CMH by ??6"DE {{}H gE[["FK(I{{:&H\*J[["F++m,K;;vD{{#56KK0M;;~.L[[!12N;;~.L\*J++m,K{{#56 I?IQ	 
 	I(503DDsJSPA D)   " 4yA~YZ+c12YZ 
B Awz"H*8Z@HffAwvH*VT!WV_b
11B*VT!WV_b
11B*Wd1gk2B
77B*YQ(8 9;;Q
RRB{
j7EE{
j7FF*VT!W]3X5H
IIB*Wd1gn5x(7J
KKB*\47<#8"
==B*Za!4b
99B*[$q'+"6
;;B*&Q0@(A2
FFBtAwx01J*]J
33BM]""M == )#A3'(()s   *!L M.MMc                    d}| j                  d      }d}d}t        |        |D ]  }|dk7  s	t        |      dk\  s|dd }t        j                  j                  ||d      }t        |d      5 }	|	j                         }
t        j                  |
      }d}d}|j                  d      }|+t        |j                  d	            }|j                  d
      }|j                         dk(  rd}|}n(|dk(  r#|dz   }	 t        |j                  |d            }d}d d d         |||fS #  d}t        d|z          Y %xY w# 1 sw Y   "xY w)N100grD   r   r'      zconfig_fr.xmlr
dimensionsquantityunitrL   100mlPOz.wd   zERROR with converion of )splitrY   r   ospathjoinopenreadET
fromstringfindr   getlowerr   )packr,   unitPackpprk   rl   rf   trig
configPathfiler	   rootrs   rt   rr   trigwqvals                    r   r[   r[      sN   H	CBFF	$K7s1v{Qq6Dj$HJj#&$ iik}}S) !YY|4
)":>>*#=>H%>>&1D ::<4'&H%FT\ 4KE>!$QYYub%9!:  &H3 '&	 > VV##>"81<=1 '&s%   /B
D=:D&D=&D:8D==E	c                 <    | }| dk(  rd}|S | dk(  rd}|S | dk(  rd}|S )NCIQCiqualKCAKcalMeOFFzOpen Food Facts )codedss     r   r]   r]      sB    	Bu} I 
 I 
Ir   c                 R    t        |      }|dk7  r| dz   |z   |z   }n| dz   }|dz  }|S )Nr'   z: z: noner(   )str)r   valuert   svalslots        r   r\   r\      s<    u:Drzd{T!D(hDLDKr   c           	      h   g }| }|i k(  r|S t        |t              s| g}t        j                  |      }d}|j	                         }g d}|j                  d      }	|j                  d      }
|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d	      }|j                  d
      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }d}|D ]  }|dk7  r|dz  }||z  } |D ]  }t        j                  d|      }t                t        d       t        |       |d   }d}	 t        |d         }t        |      }t        j                  |      }d}	 |d   }d}	 |d   }d}	 |d   }d} 	 |d   } d}!	 |d   }!|d k7  r=|d k7  r8|dk7  r3|j                  |      dk7  r||k7  r||k7  r|j                  |d      }nd}t        j                  |      }"t        j                   |      }#t        j                  |      }$|#j#                         }%|$j#                         }&d|z   dz   |z   dz   |"z   d z   }'|%dk7  r|'d!|%z   d"z   z  }'n|'d#z  }'t                t        d$       t        |'       t                g }(	 |j%                  |'       |j'                         }(t+        |(      d&k(  r|#j#                         }%d|z   dz   |z   dz   |"z   d'z   |"z   d"z   }'|j%                  |'       |j'                         }(t                t        d(       t        |'       t                t+        |(      d&k(  ru|dk7  rp|dk7  rkd|z   dz   |z   d)z   |"z   d'z   |#z   d'z   |$z   d"z   }'|j%                  |'       |j'                         }(t                t        d*       t        |'       t                g }*|(D ]  }+i },|+|	   |,d<   |+|   |,d+<   |+|
   |,d,<   |+|   |,d-<   |+|   |,d.<   |+|   |,d/<   ||,d<   ||,d0<   |+|   j-                  d      |,d1<   ||,d<   |+|   |,d2<   |+|   |,d3<   |+|   |,d<   | |,d<   |!|,d<   d|,d4<   |+|   j                  |"      |,d5<   |*j/                  |,        i }-t+        |*      d&kD  rbt1        |*t2        d67      }.t5        j6                  d       t5        j6                  d8       d&}/|.D ]m  }0|/d9k  s	t5        j6                  |0d   d:z   |0d+   z   d:z   |0d,   z   d:z   |0d   z   d:z   t        |0d.         z   d:z   |0d2   z   d:z   |0d3   z   d:z   |0d/   z          |/d;z  }/o t5        j6                  d<       t5        j6                  d       |.d&   }-|-d+   }1|-d-   }2d6}3|.D ]_  }|3d6k(  s	|d+   }4|d-   }5|4|1k(  rG|d1   j9                         }6t;        ||6|      }7|7dk7  r
|}-|7|-d4<   d=}3Gd6}3t5        j6                  d>       _ n |j/                  |-       t5        j<                  d?|'z           |j?                          |j?                          |S #  Y xY w#  Y xY w#  Y xY w#  Y xY w#  	 |d   } n#  Y nxY wY xY w#  Y xY w# t        j(                  $ r})t        d%|)        Y d })~)d })~)ww xY w)@Nr4   )r5   r6   
V_NormNameV_NormCommentr7   r9   	V_GTINRefr;   V_GlobalCountV_NormTrademarkr:   
V_NormAggrr5   r6   r   r   r7   r9   r   r;   r   r:   r   r   r'   rD   zfood:z------------ result to be analyzed -----------r   rs   rI   companytypetimetimeOfTheDayunknowneventrE   rF   z WHERE V_NormName LIKE '%z%'z AND V_NormTrademark LIKE '%z%' z6 AND (V_NormTrademark = '' OR V_NormTrademark IS NULL)z
First try:rG   r   z%' AND V_NormAggr LIKE '%zSecond try:z WHERE V_NormAggr LIKE '%z
Third try:normNamer   normCommentr   r3   quantityLemr   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listrR   rS   rT   rU   KCAUtilignorePrefixrY   r   r   KCAProcnormalizeQuantityPropositionr   r   normalizeNamenormalizeBrandstriprV   rW   rX   r   rx   appendsortedr%   KCATraceTRACEcopygetBestPictoTRACE_ERRORclose)8iSolsr+   jpicfsolsfoodListra   rb   rc   rd   r5   r6   r   r   r7   r9   r   r;   r   r:   r   r   re   rf   ffr   r   	quantityBquantityLLMr   rI   r   typeftimeM	eventtimer   	normBrandnormCompanyqBrandqCompanyr   rg   rh   r*   rowr.   fsolsorted_solsnbsssrefName
refComment
foundPictocurName
curCommentpackTabr   s8                                                           r   getBestSolutionsr      s*    E H2~h%7 ??6"DE {{}H oE[["FK(I\*JKK0M\*J[["FK(I;;vDKK0M++m,Kkk"34O\*J I?IQ	     "-=>a y 		AjM*I %Y/::;G 	gJE 		lG 	fIE 	fIE 		'
I
 4<ETMerkdii>NRT>TY^bfYfu}||E2. ((.**51	++G4
 "$$&	!H,u47RRU]]`ddR</&85@@AHH1la 	-Q $$&D t9>__&FI%058;VVYaad  CK  K  NS  SAQ$$&DG- !HG
 4yA~'R-ERK	)H4u<?ZZ]ee  iD  D  GP  P  Sn  n  q|  |  D  D  #((*l#a CCf+CK!*oC
O ^C	N!$]!3Cm,CKD	CI)C
O!,Cj///4CKCKf+CK ^C	N{+CLCK$CLC	N"%j/"6"6x"@C KK- 2 t9q= !8UCKNN2NNQRC!8NN2f:#5:#F#NQST]Q^#^af#fiklsit#tw|#|  @C  DF  GM  DN  @O  $O  QV  $V  Y[  \b  Yc  $c  ej  $j  mo  py  mz  $z  |A  $A  DF  GK  DL  $L  M1HC " NNQRNN2q>D:&Gm,JJ!& nG!#M!2J') #%V*//"3".{GT"J"b=#%D.5DO)-J).J$NN+_`# "& LL   !:Q!>?O X NNJJLL		
	
	
	.)
	T }} 	-'s+,,	-sx   2Y#Y+Y3Y;Y'Y= !ZYYYY$'Y:*Y0/Y:0Y42Y:=ZZ1Z,,Z1c                     | j                         }t        |      dk  rQ|j                  d      dk7  s<|j                  d      dk7  s(|j                  d      dk7  s|j                  d      dk7  ryy)	N   grr   rL   cllTF)r   r   r   )r	   tts     r   containUnitr     sa    	B
2w{+rwwt}/BbggdmWYFY]_]d]deh]imo]or   c                 ^   t        | ||      }|dk(  r| j                  d      }t        |      }d}t        |      D ]  }|dk(  rd}|d||   z   z  } |dk7  rT|dkD  rOt        |||      }|d   }|j	                         r+t        |      dz  }	|j                  dt        |	            }|S d}|S )Nr'    r   2rw   200)identifyBestPictorx   r   range	isnumericr   r   r   )
rs   r   r   pictoResultwdsnbw	quantity2inumstrr
   s
             r   r   r     s     $Hgt<K b nnS!#h	sAAv	S3q6\)		  ?sQw+IwEKVF!&kC')11%SB  !r   c                    g }t        |      dk(  ryd}| j                         j                         j                         }t	        |      dk(  r$| j                  dd      }|dk7  r|d   dz   |z   }S |j                  d      }t        |      }	|	dk(  r|S |d   }
g }d}d}|
D ]  }|d	   |d   k(  s|d
   }|d   } n d}||	k  r|dz  }||	k(  rVt        |
|   d         dk(  r!d| z   dz   }t        j                  d|z          nF|dk(  s|	dk(  r<|
|   d   j                         }n+||   }|D ]  }|
|   d	   |k(  s|
|   d
   }|}d} n ||	k  rd}|D ]  }|dk(  s	|D ]  }|dd |dd k(  s|}    |S )Nr   r'   FTr   -decisionTreer   r   nextr3   r   leafzWrong quantity: 'r   zERROR: rp   )
r   r   rstriplstripr   r   rx   r   r   r   )rs   r   r   pictosfoundnqqqr   allWordsr   tabnextIDs	currentIDmsgErrr   idxcwr   rf   pics                       r   r   r     s   F
7|q E			 	 	"	)	)	+B
 2$c2&8!!*s*R/Kf W 88C=(m!8M>" 	DF|x{*v, J		 
 Ci1HCczs9~f-.!308;cAFNN9v#56d]cQh ^F388:Fc] A1vf~+"%a&.$%	 $ ! Ci& Ab !C1vQq)&) "  r   )ry   r   jsonrR   r   r   xml.etree.ElementTreeetreeElementTreer~   KCADBProcessorUtilitiesr   KCALLMTracer   KCALLMUtilitiesr   r   r   r%   r1   r)   r[   r]   r\   r   r   r   r   r   r   r   <module>r     sh    	     	 " " )  ! 4[#|%$N		yx>Cr   