Ë
    §‘ˆjß  ã                   óp  — d Z ddlZddlZddlmZ  ej
                  e«      Zh d£Zi dd“dd“dd“dd“d	d	“d
d	“dd	“dd	“dd“dd“dd“dd“dd“dd“dd“dd“dd“dddddddddddœ
¥Z	i dd“d d“d!d“d"d“d#d$“d%d$“d&d$“d'd$“d(d)“d*d)“d+d)“d,d)“d-d.“d/d.“d0d.“d1d.“d2d3“d3d3d3d4œ¥Z
d5d5d6d6d7d7d8d8d9d9d:d:d;œZd<d<d<d<d<d=d=d=d=d=d=d>d>d>d?d@œZdAdBdAdBdAdCdBdDœZdEdEdFdFdGdGdGdDœZ ej                  dHej                   «      Z ej                  dI«      Z ej                  dJ«      ZdAdAdKdLœZdM„ ZdN„ ZdO„ ZdP„ ZdQ„ ZdRedSefdT„Zy)UzJCanonicalises attribute keys and values from options, tags and metafields.é    N)Únormalise_text>   ÚtitleÚ	title_tagÚdescription_tagÚcolourÚcolorÚshadeÚ	colourwayÚsizeÚsizesz	size (uk)ÚfitÚmaterialÚfabricÚcompositionÚgenderÚsexÚforÚ
departmentÚstyleÚdesignÚpatternÚcapacityÚweightÚlengthÚwidthÚflavorÚscent)
r   r   Úvolumer   r   r   Úflavourr   r   Ú	fragranceÚnavyÚbluezmidnight blueÚcobaltÚtealÚcharcoalÚgreyÚslateÚgunmetalÚgraphiteÚivoryÚwhiteÚcreamÚecruz	off whiteÚburgundyÚredÚmaroonÚwineÚcrimsonÚtanÚbrown)ÚcamelÚkhakiÚbeigeÚxsÚsÚmÚlÚxlÚxxl)r8   Ú
extrasmallr9   Úsmallr:   Úmediumr;   Úlarger<   Ú
extralarger=   Ú2xlÚmaleÚfemaleÚunisexÚkids)ÚmensÚmenÚmanrD   ÚboysÚwomensÚwomenÚwomanrE   ÚladiesÚgirlsrF   ÚallÚadultrG   g      ð?g     @�@g      $@)Úmlr;   ÚgÚkgÚmmÚcmr:   rS   rT   rV   z&\A([a-z][a-z0-9 _-]*?)\s*[:=]\s*(.+)\Zz&\A(uk|us|eu|jp)?[- ]?(\d+(?:\.\d+)?)\Zz2\A(\d+(?:\.\d+)?)\s*(ml|l|g|kg|oz|lb|cm|mm|m|in)\ZgÍÌÌÌÌÌì?)Ú	metafieldÚoptionÚtag_kvc                 óÆ   — t        | «      }|sy |j                  «       }|t        v ry |t        v r	t        |   S t	        j
                  dd|«      j                  d«      xs d S )Nz
[^a-z0-9]+Ú_)r   ÚlowerÚDROPPED_KEYSÚKEY_ALIASESÚreÚsubÚstrip)ÚkÚcs     ú>/var/www/html/strategist-ai/app/services/catalog/attributes.pyÚnormalise_keyrf   A   s]   € Ü�qÓ€AÙØØ	�‰‹	€AØŒLÑØØŒKÑÜ˜1‰~ÐÜ�6‰6�-  aÓ(×.Ñ.¨sÓ3Ò;°tÐ;ó    c                 ó  — t        | «      }|sy |j                  «       }t        j                  d|«      d   j	                  «       }|t
        v r	t
        |   S t
        j                  «       D ]  \  }}||v sŒ|c S  |xs d S )Nz[/,|+]| and r   )r   r]   r`   Úsplitrb   Ú
COLOR_BASEÚitems)ÚrawÚvÚfirstrc   Úbases        re   Ú_normalise_colourrp   M   s‚   € Ü�sÓ€AÙØØ	�‰‹	€AÜ�H‰H�_ aÓ(¨Ñ+×1Ñ1Ó3€EØ”
ÑÜ˜%Ñ Ð Ü×#Ñ#Ó%ò ‰ˆˆ4Ø�Š:ØŠKðð Š=�DÐrg   c                 ó   — t        | «      }|sy|j                  «       j                  dd«      }|t        v rt        |   dfS t        j                  |«      }|rf|j                  d«      t        v rOt        |j                  d«      «      t        |j                  d«         z  }|d›t        |j                  d«         fS t        j                  |«      }|r&|j                  d«      |j                  d«      xs dfS |d fS )	N)NNÚ Ú Úalphaé   é   rT   Únumeric)r   r]   ÚreplaceÚ_ALPHA_SIZEÚ	_MEASUREDÚmatchÚgroupÚ_TO_BASEÚfloatÚ
_BASE_UNITÚ	_REGIONAL)rl   rm   Úflatr:   Úamounts        re   Ú_normalise_sizerƒ   [   sÝ   € Ü�sÓ€AÙØØ�7‰7‹9×Ñ˜S "Ó%€DàŒ{ÑÜ˜4Ñ  'Ð)Ð)ä�‰˜Ó€AÙˆQ�W‰W�Q‹Zœ8Ñ#Ü�q—w‘w˜q“zÓ"¤X¨a¯g©g°a«jÑ%9Ñ9ˆØ˜�œj¨¯©°«Ñ4Ð4Ð4ä�‰˜Ó€AÙØ�w‰w�q‹z˜1Ÿ7™7 1›:Ò2¨Ð2Ð2à�ˆ:Ðrg   c                 ó"  — | dk(  rt        |«      d fS | dk(  rt        |«      S | dk(  rFt        |«      }|r5t        j	                  |j                  «       j                  dd«      «      d fS d d fS t        |«      }|r|j                  «       d fS d d fS )Nr   r   r   ú'rs   )rp   rƒ   r   ÚGENDERÚgetr]   rx   )Úkeyrl   rm   s      re   Únormalise_valuer‰   p   s–   € Ø
ˆg‚~Ü  Ó% tÐ+Ð+Ø
ˆf‚}Ü˜sÓ#Ð#Ø
ˆh‚Ü˜3ÓˆÙ:;”—
‘
˜1Ÿ7™7›9×,Ñ,¨S°"Ó5Ó6ÈÐLÐLÀÈÐLÐLÜ�sÓ€AÙˆA�G‰G‹I tÐ+Ð+  tÐ+Ð+rg   c                 óv   — t        | |«      \  }}|€y t        j                  |d«      }| t        |«      ||||dœS )Ng      à?)rˆ   Ú	raw_valueÚvalueÚunitÚsourceÚ
confidence)r‰   ÚSOURCE_CONFIDENCEr‡   r   )rˆ   r‹   rŽ   rŒ   r�   r�   s         re   Ú_attrr‘   |   sM   € Ü! # yÓ1�K€Eˆ4Ø€}Øô #×&Ñ& v¨sÓ3€JØ¤^°IÓ%>ÈØ F¸*ñFð Frg   Úsource_productÚreturnc           	      ó”  — g }| j                  d«      xs g D ]_  }t        |j                  d«      «      }|sŒ t        ||j                  d«      |j                  dd«      «      }|sŒO|j                  |«       Œa | j                  d«      xs g D ]\  }|j                  d«      xs i j	                  «       D ]4  \  }}t        |«      }|sŒt        ||d«      }|sŒ$|j                  |«       Œ6 Œ^ | j                  d	«      xs g D ]u  }t        |«      }	|	sŒt        j                  |	«      }
|
sŒ)t        |
j                  d
«      «      }|sŒFt        ||
j                  d«      d«      }|sŒe|j                  |«       Œw i }|D ],  }|j                  |d   «      }|�|d   |d   kD  sŒ%|||d   <   Œ. t        |j                  «       d„ ¬«      S )zGCollect attributes from every source, keeping the most trusted per key.Úattributes_rawrˆ   rŒ   rŽ   rX   ÚvariantsÚoptionsrY   Útagsrv   ru   rZ   r�   c                 ó   — | d   | d   fS )Nrˆ   rŒ   © )Úas    re   ú<lambda>z"build_attributes.<locals>.<lambda>³   s   € °!°E±(¸A¸g¹JÐ1G€ rg   )rˆ   )r‡   rf   r‘   Úappendrk   r   Ú_KV_TAGr{   r|   ÚsortedÚvalues)r’   Úfoundr›   rˆ   ÚattrÚvariantÚnamerŒ   ÚtagÚtr:   Úby_keyÚseens                re   Úbuild_attributesr©   ˆ   s¾  € à€Eà×ÑÐ 0Ó1Ò7°Rò #ˆÜ˜AŸE™E %›LÓ)ˆÚÜ˜˜aŸe™e G›n¨a¯e©e°H¸kÓ.JÓKˆDÚØ—‘˜TÕ"ð#ð "×%Ñ% jÓ1Ò7°Rò 'ˆØ#ŸK™K¨	Ó2Ò8°b×?Ñ?ÓAò 	'‰KˆD�%Ü Ó%ˆCÚÜ˜S %¨Ó2�ÚØ—L‘L Õ&ñ	'ð'ð ×!Ñ! &Ó)Ò/¨Rò 
'ˆÜ˜3ÓˆÙØÜ�M‰M˜!ÓˆÚÜ §¡¨£
Ó+ˆCÚÜ˜S !§'¡'¨!£*¨hÓ7�ÚØ—L‘L Õ&ð
'ð  €FØò !ˆØ�z‰z˜!˜E™(Ó#ˆØˆ<˜1˜\™?¨T°,Ñ-?Ó?Ø ˆF�1�U‘8Òð!ô �&—-‘-“/Ñ'GÔHÐHrg   )Ú__doc__Úloggingr`   Úapp.services.catalog.textr   Ú	getLoggerÚ__name__Úloggerr^   r_   rj   ry   r†   r}   r   ÚcompileÚIrž   r€   rz   r�   rf   rp   rƒ   r‰   r‘   ÚdictÚlistr©   rš   rg   re   ú<module>r´      sÛ  ðÙ PÛ Û 	å 4à	ˆ×	Ñ	˜8Ó	$€ò
 9€ð
Øˆgð
Ø ð
Ø)0°'ð
Ø;FÈð
à
ˆFð
à˜Vð
à%0°&ð
à:?Àð
ð �
ð
ð % jð
ð 3@Àð
ð ˆhð	
ð ˜xð	
ð */°ð	
ð ;GÈð	
ð
 ˆWð
ð
  ð
ð
 5>Ø jØ (°WØ 8Ø 7ò
€ðØ
ˆFðØ# VðØ-5°vðØ?EÀvðà�ðà ðà)3°Vðà=GÈðð ˆWðð ˜wðð )/°ðð :EÀgðð �ð	ð   ð	ð )/°ð	ð 8AÀ%ð	ð
 
ˆ7ðð
 %¨wÀò€
ð ˜d¨°sÀØ˜ c°ÀTØ˜ñ€ð ˜6¨&¸&È&Ø °HÈØ Ø˜x°(ÀFñ	
€ð ˜F¨°FØ˜T¨ñ0€à˜t¨#°SØ ¨4ñ1€
ð ˆ"�*‰*Ð>ÀÇÁÓ
E€ØˆB�J‰JÐ@ÓA€	ØˆB�J‰JÐLÓM€	ð
 #&°ÀÑDÐ ò	<òòò*	,ò	Fð+I Tð +I¨dô +Irg   