Ë
    �×j'  ã                   óH  — d Z ddlZddlZddlZddlZddlmZ ddlZddlmZm	Z	 ej                  j                  dd¬«       h d£Z ej                  d	ej                  «      Z ej                  d
«      Zdedefd„Zdedefd„Zdefd„Zdefd„Zedk(  r e e«       «      ‚y)a¶  
Saneamiento de las lineas del banco de poses: quita ropa/accesorios y meta.

El banco se cosecho de imagenes reales, asi que cada linea arrastra tags de la
prenda y del atrezo de esa foto (`floral_print`, `beads`, `ring`, `censored`).
En un pack esos tags pelean con el outfit del tema y meten joyas o ropa que no
toca. Aqui se dejan solo pose / estado / expresion / cuerpo / camara; la escena
la pone el tema (y `strip_scene_tags` la limpia en el ensamblado).

    python Engine/clean_bank_lines.py             # dry-run
    python Engine/clean_bank_lines.py --apply
    python Engine/clean_bank_lines.py --apply --blacklist pb0005

Idempotente: si ya no queda nada que quitar, no reescribe.
é    N)Údatetime)Ú	DROP_METAÚOUTFITzutf-8Úbackslashreplace)ÚencodingÚerrors>
   úsame-sex_bathingúmixed-sex_bathingÚringÚbeadsÚon_bedÚcensoredÚcovered_navelÚcovered_nipplesÚmosaic_censoringÚlooking_at_anotherzclothes|clothingz#^\(\s*([^():]*?)\s*:\s*[\d.]+\s*\)$ÚtokenÚreturnc                 ó¶   — | xs dj                  «       }t        j                  |«      }|r|j                  d«      }|j                  «       j	                  «       S )NÚ é   )ÚstripÚ_WEIGHTÚmatchÚgroupÚlower)r   ÚtÚms      ú8C:\Users\Usuario\Downloads\SD\Engine\clean_bank_lines.pyÚtag_keyr    '   sE   € Ø	Š�"×ÑÓ€AÜ�‰�aÓ€AÙØ�G‰G�A‹JˆØ�7‰7‹9�?‰?ÓÐó    c                 óÖ   — t        | «      }t        |«      xrR |t        v xsH |t        v xs> t        t	        j
                  |«      «      xs t        t        j                  |«      «      S )N)r    ÚboolÚ
DROP_EXTRAr   r   ÚsearchÚ_CLOTHES)r   Úkeys     r   Úis_noiser(   /   s_   € Ü
�%‹.€CÜ�‹9ò ØŒzÐò 	B˜S¤IÐ-ò 	BÜ”—‘˜cÓ"Ó#ò	BÜ'+¬H¯O©O¸CÓ,@Ó'Aðr!   Úlinec                 óÆ   — g g }}| xs dj                  d«      D ]3  }|j                  «       }|sŒt        |«      r|n|j                  |«       Œ5 dj	                  |«      |fS )Nr   Ú,ú, )Úsplitr   r(   ÚappendÚjoin)r)   ÚkeptÚdroppedr   s       r   Ú
clean_liner2   7   s`   € Ø˜ˆ'€DØ’*˜"×#Ñ# CÖ(ˆØ—‘“ˆÙØÜ˜U”O‰¨×5Ñ5°eÕ<ð	 )ð
 �9‰9�T‹?˜GÐ#Ð#r!   c                  ó8  — t        j                  «       } | j                  ddd¬«       | j                  dd dd¬«       | j                  «       }t	        j
                  «       }|st        d	t        j                  › �«       y
d}|D ]’  }|j                  dd«      }t        |«      \  }}|sŒ&|d
z  }t        |j                  d«      › dt        |«      › ddj                  |«      › �«       t        d|› �«       t        d|› �«       |j                  sŒŽ||d<   Œ” t        d|j                  rdnd› d|› dt        |«      › d�«       |j                  xs dj                  d«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% }	}|	�r0t	        j                   «       }
|D �ci c]  }|j                  d«      |“Œ }}d}|	D ]Ó  }|j                  |«      }|st        d|› d�«       Œ&t	        j"                  |j                  dd«      «      }|
j                  |«      xs |dddœ}|j%                  |t'        dt)        |j                  d d«      «      «      d!t+        j,                  «       j/                  d"«      d#œ«       ||
|<   t        d$|› d|› �«       ŒÕ |j                  r|	rt	        j0                  |
«       |j                  �r|�rt+        j,                  «       j/                  d%«      }t        j2                  d&|› �z  }|j5                  d!d!¬'«       t7        j8                  t        j                  |t        j                  j:                  z  «       t        j<                  j?                  «       r?t7        j8                  t        j<                  |t        j<                  j:                  z  «       t	        j@                  |«       t        d(|› �«       y|j                  r|	rt        d)«       y|j                  st        d*«       yc c}w c c}w )+Nz--applyÚ
store_truezescribe los cambios)ÚactionÚhelpz--blacklistzID[,ID]z&blacklist inmediata de poses del banco)ÚdefaultÚmetavarr6   z[!] banco vacio: r   r   Ú	pose_liner   Úidz  -z: r,   z    antes: z    despues: z
[Ú+Ú-z] Ú/z lineas con ruidor+   z.saneamiento 2026-10-20: tapa entorno / deformaz[!] z no existe en el banco)r'   ÚfallosÚultimaé   r>   Tz%Y-%m-%d)Úmotivor>   Ú	blacklistr?   z[+] blacklist z%Y%m%d_%H%M%SÚ_backup_)ÚparentsÚexist_okz[+] banco escrito; backup en z[+] avoid escritoz&[-] dry-run: usa --apply para escribir)!ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsÚ	pose_bankÚ	load_bankÚprintÚ	BANK_FILEÚgetr2   Úlenr/   ÚapplyrB   r-   r   Ú
load_avoidÚnormalize_keyÚupdateÚmaxÚintr   ÚnowÚstrftimeÚ
save_avoidÚBANK_DIRÚmkdirÚshutilÚcopy2ÚnameÚ
AVOID_FILEÚexistsÚ	save_bank)ÚapÚargsÚbankÚchangedÚentryÚoriginalÚcleanedr1   ÚxÚblacklist_idsÚavoidÚeÚby_idrA   Úpidr'   ÚrowÚstampÚbackups                      r   Úmainrq   A   sˆ  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�I lÐ9N€OÔOØ‡O�O�M¨4¸ØAð ô Cà�=‰=‹?€Dä×ÑÓ €DÙÜÐ!¤)×"5Ñ"5Ð!6Ð7Ô8Øà€GÛˆØ—9‘9˜[¨"Ó-ˆÜ% hÓ/Ñˆ�ÚØ�q‰LˆGÜ�U—Y‘Y˜t“_Ð% S¬¨W«¨°b¸¿¹À7Ó9KÐ8LÐMÔNÜ�K ˜zÐ*Ô+Ü�M ' Ð+Ô,Ø�z‹zØ%,��kÒ"ð ô 
ˆC�t—z’z‘ sÐ+¨2¨g¨Y°a¼¸D»	°{ÐBSÐ
TÔUà)-¯©Ò)=¸2×(DÑ(DÀSÔ(IÓWÑ(I 1ÈQÏWÉWÍY�Q—W‘W•YÐ(I€MÐWÚÜ×$Ñ$Ó&ˆÙ)-Ó.© A�—‘�t“˜a‘¨ˆÐ.ØAˆÛ ˆCØ—I‘I˜c“NˆEÙÜ˜˜S˜EÐ!7Ð8Ô9ØÜ×)Ñ)¨%¯)©)°KÀÓ*DÓEˆCØ—)‘)˜C“.ÒK¨C¸1ÈÑ$KˆCØ�J‰JØ Ü˜a¤ S§W¡W¨X°qÓ%9Ó!:Ó;Ø!Ü"Ÿ,™,›.×1Ñ1°*Ó=ñ	ô ð ˆE�#‰JÜ�N 3 % r¨&¨Ð2Õ3ð !ð �:Š:™-Ü× Ñ  Ô'à‡zƒz’gÜ—‘“×'Ñ'¨Ó8ˆÜ×#Ñ#¨°°Ð&8Ñ8ˆØ�‰˜T¨DˆÔ1Ü�‰”Y×(Ñ(¨&´9×3FÑ3F×3KÑ3KÑ*KÔLÜ×Ñ×&Ñ&Ô(Ü�L‰Lœ×-Ñ-¨v¼	×8LÑ8L×8QÑ8QÑ/QÔRÜ×Ñ˜DÔ!ÜÐ-¨f¨XÐ6Ô7ð ð 
�Š™äÐ!Ô"ð ð �ZŠZÜÐ6Ô7àùòM Xùò /s   Å'PÅ=PÆ,PÚ__main__)Ú__doc__rF   Úrer[   Úsysr   rJ   Úwd14_harvestr   r   ÚstdoutÚreconfigurer$   ÚcompileÚIr&   r   Ústrr    r#   r(   r2   rU   rq   Ú__name__Ú
SystemExit© r!   r   Ú<module>r      sÇ   ðñó Û 	Û Û 
Ý ã ß *à ‡
�
× Ñ  Ð0BÐ Ô Cò€
ð ˆ2�:‰:Ð)¨2¯4©4Ó0€Ø
ˆ"�*‰*Ð;Ó
<€ð�3ð ˜3ó ð�Cð ˜Dó ð$�Só $ð@ˆcó @ðF ˆzÒÙ
‘T“VÓ
Ðð r!   