
    GXgH                         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 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dS )    Nc                     d t          j        d|           D             }t          |          dk    rdS t          |d                   S )Nc                 ,    g | ]}t          |          S  )float).0nums     A/home/debian/html/nutritwin/resources/KCALLMNutritionUtilities.py
<listcomp>z1extractFirstFiguresFromString.<locals>.<listcomp>   s    @@@cuSzz@@@    z[\d.]+r   )refindalllenint)txtnumberss     r	   extractFirstFiguresFromStringr      sG    @@RZ	3%?%?@@@G
7||qq71:r   c                 6    | }|                     dd          }|S )N"')replace)qoqs     r	   adjustQuantityr      s!    	
B 
D#		BIr   c                     | d         }t          | d                   }t          | d                   }d| d         z
  }d}| d         | d         k    rd	}t          | d                   }|d	k    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	AvvBBr   c                 f    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	   extractPortraitRobotsr5   =   s_     N   $S&*==	r'E/,QQQ"$r   c                 d   | d         }d}d}|dk    r|S t          j        |          }d}|                                }g d}	|	                    d          }
|	                    d          }|	                    d          }|	                    d          }|	                    d	          }|	                    d
          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }d}|	D ]}|dk    r|dz  }||z  }d|z   dz   |z   dz   |z   dz   }g }	 |                    |           |                                }n.# t           j        $ r}t          d|            Y d }~nd }~ww xY wt          |          dk    r7t          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k    r|t          d#|"d$          z  }|!dk    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 )/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_AllergenTracesr9   r:   r<   r;   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   ,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)$r2   r/   r0   fidportraitRobotfoodNameconntabledbCursorparamr9   r:   r<   r;   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   	statementpr   rowser4   packTypeunitBasevolumeweight
dataSources$                                       r	   r-   r-   L   s}    d)CMH byy ?6""DE {{}}H g  g  gE[[""FK((I{{:&&H\**J[[""F++m,,K;;vD{{#566KK00M;;~..L[[!122N;;~..L\**J++m,,K{{#566 I  ??IQ		I(503DDsJSPA D)   ""= ) ) )'A''(((((((() 4yyA~~YZZZ+c1222YZZZ 
B Awz"H*8Z@@HffAwvH*VT!WV_b
1
11B*VT!WV_b
1
11B*Wd1gk2B
7
77B*YQ(8 9;;Q
R
RRB{{
j7EEE{{
j7FFF*VT!W]3X5H
I
IIB*Wd1gn5x(7J
K
KKB*\47<#8"
=
==B*Za!4b
9
99B*[$q'+"6
;
;;B*&Q0@(A2
F
FFBtAwx011J*]J
3
33BM]""s   ,)G H%G<<Hc                    d}|                      d          }d}d}t          |            |D ]U}|dk    rKt          |          dk    r7|dd         }t          j                            ||d          }t          |d          5 }	|	                                }
t          j	        |
          }d}d}|
                    d          }|7t          |                    d	                    }|                    d
          }|                                dk    rd}|}nM|dk    rG|dz   }	 t          |                    |d                    }n#  d}t          d|z              Y nxY wd}d d d            n# 1 swxY w Y   W|||fS )N100grH   r   r+      zconfig_fr.xmlr
dimensionsquantityunitrP   100mlPOz.wd   zERROR with converion of )splitr]   r   ospathjoinopenreadET
fromstringfindr   getlowerr   )packr0   unitPackppro   rp   rj   trig
configPathfiler   rootrw   rx   rv   trigwqvals                    r	   r_   r_      s   H	CBFF	$KKK & &77s1vv{{QqS6Dj$HHJj#&& &$ iikk}S)) !YY|44
)":>>*#=#=>>H%>>&11D ::<<4''&H%FFT\\ 4KE>!$QYYub%9%9!:!:>"81<=====%H3& & & & & & & & & & & & & & &6 VV##s+   B#E7*#EE7E&$E77E;	>E;	c                 >    | }| dk    rd}n| dk    rd}n| dk    rd}|S )NCIQCiqualKCAKcalMeOFFzOpen Food Factsr   )codedss     r	   ra   ra      s:    	Bu}}		Ir   c                 \    t          |          }|dk    r| dz   |z   |z   }n| dz   }|dz  }|S )Nr+   z: z: noner,   )str)r   valuerx   svalslots        r	   r`   r`      sB    u::Drzzd{T!D(hDLDKr   c           	         g }t           j                            |          s)t          j        d|z   dz              t          d           t           j                            |          s)t          j        d|z   dz              t          d           | }|i k    r|S t          |t                    s| g}t          j	        |          }d}|
                                }g d}	|	                    d          }
|	                    d	          }|	                    d
          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }|	                    d          }d}|	D ]}|dk    r|dz  }||z  }|D ]}t          j        d|          }t                       t          d           t          |           |d         }d}	 t          |d                   }n#  Y nxY wt!          |          }t#          j        |          }d}	 |d         }n#  Y nxY wd}	 |d         }n#  Y nxY wd} 	 |d         } n#  Y nxY wd}!	 |d         }!n#  	 |d         }!n#  Y nxY wY nxY wd}"	 |d          }"n#  Y nxY w|d k    rJ|d k    rD|dk    r>|                    |          d!k    r%||k    r||k    r|                    |d          }nd}t#          j        |          }#t#          j        |          }$t#          j        |          }%|$                                }&|%                                }'d"|z   d#z   |z   d$z   |#z   d%z   }(|&dk    r|(d&|&z   d'z   z  }(n|(d(z  }(t                       t          d)           t          |(           t                       g })	 |                    |(           |                                })n.# t          j        $ r}*t          d*|*            Y d }*~*nd }*~*ww xY wt7          |)          dk    rt9          j        ||d+          }+t7          |+          dk    r|+d         d,         },t          d-|,z              d"|z   d#z   |z   d.z   |,z   d/z   }(|                    |(           |                                })t                       t          d0           t          |(           t                       n|$                                }&d"|z   d#z   |z   d$z   |#z   d1z   |#z   d'z   }(|                    |(           |                                })t                       t          d0           t          |(           t                       t7          |)          dk    r|dk    r|dk    rd"|z   d#z   |z   d2z   |#z   d1z   |$z   d1z   |%z   d'z   }(|                    |(           |                                })t                       t          d3           t          |(           t                       g }-|)D ]}.i }/|.|
         |/d<   |.|         |/d4<   |.|         |/d5<   |.|         |/d6<   |.|         |/d7<   |.|         |/d8<   ||/d<   ||/d9<   |.|                             d          |/d:<   | |/d<   |.|         |/d;<   |.|         |/d<<   |.|         |/d<   |!|/d<   |"|/d <   d|/d=<   |.|                             |#          |/d><   |-                    |/           i }0t7          |-          dk    rtA          |-tB          d?@          }1tE          j#        d           tE          j#        dA           d}2|1D ]}3|2dBk     rtE          j#        |3d         dCz   |3d4         z   dCz   |3d5         z   dCz   |3d         z   dCz   t          |3d7                   z   dCz   |3d;         z   dCz   |3d<         z   dCz   |3d8         z              |2dDz  }2tE          j#        dE           tE          j#        d           |1d         }0|0d4         }4|0d6         }5d?}6|1D ]r}|6d?k    rj|d4         }7|d6         }8|7|4k    rR|d:         $                                }9tK          ||9|          }:|:dk    r
|}0|:|0d=<   dF}6Yd?}6tE          j#        dG           p ns|                    |0           tE          j        dH|(z              |&                                 |&                                 |S )INzThe DB path zdoes not existr   zThe embedding DB path zdoes not exist (update it!)r8   )r9   r:   
V_NormNameV_NormCommentr;   r=   	V_GTINRefr?   V_GlobalCountV_NormTrademarkr>   
V_NormAggrr9   r:   r   r   r;   r=   r   r?   r   r>   r   r   r+   rH   zfood:z------------ result to be analyzed -----------r   rw   rM   companytypetimetimeOfTheDayunknowneventrI   rJ   z WHERE V_NormName LIKE '%z%'z AND V_NormTrademark LIKE '%z%' z6 AND (V_NormTrademark = '' OR V_NormTrademark IS NULL)z
First try:rK      wordzFound embedding word: z WHERE V_Name = 'r   zSecond try:z%' AND V_NormAggr LIKE '%z WHERE V_NormAggr LIKE '%z
Third try:normNamer   normCommentr   r7   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: )'r}   r~   existsKCALLMTraceTRACE_ERRORexit
isinstancelistrV   rW   rX   rY   KCAUtilignorePrefixr]   r   r   KCAProcnormalizeQuantityPropositionr   r   normalizeNamenormalizeBrandstriprZ   r[   r\   r   KCALLMMainGenEmbeddingsearchBestSolutionsr|   appendsortedr)   KCATraceTRACEcopygetBestPictoclose);iSolsr/   dbEmbeddingPathjpicfsolsfoodListre   rf   rg   rh   r9   r:   r   r   r;   r=   r   r?   r   r>   r   r   ri   rj   ffr"   r   	quantityBquantityLLMr   rM   r   typeftimeM	eventtimer   	normBrandnormCompanyqBrandqCompanyr   rk   rl   resTabembWordr.   rowr2   fsolsorted_solsnbsssrefName
refComment
foundPictocurName
curCommentpackTabr   s;                                                              r	   getBestSolutionsr      s    E 7>>&!!  7:J JKKKQ7>>/**  8? JMj jkkkQ H2~~h%% 7 ?6""DE {{}}H o  o  oE[[""FK((I\**JKK00M\**J[[""FK((I;;vDKK00M++m,,Kkk"344O\**J I  ??IQ		  Y@ Y@  "--=>>>a y 		AjM**II	D$Y//:;GG 	gJEE	D		lGG	D	fIEE	D	fIEE	.)		'
II	D 4<<ETMMerkkdii>N>NRT>T>TY^bfYfYfu}}||E2.. (..*511	+G44
 ""$$&&	!H,u47RRU]]`ddR<</&85@@AAHH1la 	-Q $$&&DD} 	- 	- 	-+++,,,,,,,,	- t99>> ,?oWXYYF6{{a )F+.8999	)H4u<?RRU\\_bb  ###((**m$$$a #**	)H4u<?ZZ]ee  iD  D  GO  O  RW  W  ###((**m$$$a
 4yyA~~'R--ERKK	)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///44CKCKf+CK ^C	N{+CLCK$CLC	N"%j/"6"6x"@"@C KK t99q== !8UCCCKN2NQRRRC!  88N2f:#5:#F#NQST]Q^#^af#fiklsit#tw|#|  @C  DF  GM  DN  @O  @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  M  M1HCNQRRRN2q>D:&Gm,JJ!  && nG!#M!2J')) #%V*//"3"3".{GT"J"J"b==#%D.5DO)-JJ).J$N+_````! '$ LL  !:Q!>????
 NNJJLLLLsx   II!
JJJ&&J*0J99J=KK!KK!KK!'K00K4)P==Q(Q##Q(c                     |                                  }t          |          dk     rf|                    d          dk    sK|                    d          dk    s2|                    d          dk    s|                    d          dk    rdS dS )	N   grr   rP   cllTF)r   r   r   )r   tts     r	   containUnitr     s    	B
2ww{{++rwwt}}/B/BbggdmmWYFYFY]_]d]deh]i]imo]o]ot5r   c                    t          | ||          }|dk    r|                     d          }t          |          }d}t          |          D ]}|dk    rd}|d||         z   z  }|dk    rk|dk    ret          |||          }|d         }|                                r6t          |          dz  }	|                    dt          |	                    }nd}|S )Nr+    r   2r{   200)identifyBestPictor|   r   range	isnumericr   r   r   )
rw   r   r   pictoResultwdsnbw	quantity2inumstrr   s
             r	   r   r     s     $Hgt<<K b nnS!!#hh	s 	* 	*AAvv		S3q6\)		 ??sQww+IwEEKVF!! !&kkC')11%SBB r   c                    g }t          |          dk    rdS d}|                                                                                                 }t	          |          dk    r,|                     dd          }|dk    r|d         dz   |z   }nH|                    d          }t          |          }	|	dk    r|S |d         }
g }d}d}|
D ]&}|d	         |d         k    r|d
         }|d         } n'd}||	k     r|dz  }||	k    rmt          |
|         d                   dk    r d| z   dz   }t          j        d|z              na|dk    s|	dk    r!|
|         d         	                                }n:n3||         }|D ](}|
|         d	         |k    r|
|         d
         }|}d} n)||	k     d}|D ]'}|dk    r|D ]}|dd         |dd         k    r|} n(|S )Nr   r+   FTr   -decisionTreer   r   nextr7   r   leafzWrong quantity: 'r   zERROR: rt   )
r   r   rstriplstripr   r   r|   r   r   r   )rw   r   r   pictosfoundnqqqr   allWordsr   tabnextIDs	currentIDmsgErrr   idxcwr   rj   pics                       r	   r   r   '  sg   F
7||qr E				 	 	"	"	)	)	+	+B
 2$c2&&88!!*s*R/K 88C==(mm!88M>" 	 	 	DF|x{**v, J	 + Cii1HCczzs9~f-..!3308;cAFN9v#56666d]]cQhh ^F388::F '/ c]   A1vf~++"%a&.$%	 $	 , Cii&  	 	Ab  !  C1vQqS))&) * r   )r}   r   jsonrV   r   r   xml.etree.ElementTreeetreeElementTreer   KCADBProcessorUtilitiesr   r   r   KCALLMUtilitiesr   r   r   r   r)   r5   r-   r_   ra   r`   r   r   r   r   r   r   r	   <module>r     s^   				     				 " " " " " " " " " ) ) ) )     ! ! ! !                 4  [# [# [#|%$ %$ %$N	 	 		 	 	S S Sl    >C C C C Cr   