
    &6jx                       % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
JrJrJrJrJr  / SQrS\S'   / S	QrS\S
'   SrSrS0S jrS1S jrS2S jrS3S jrS4S jrS5S jrS6S jrS7S jrS7S jrS7S jrS8S jrS9S jr S:S jr!S;S jr"\	 " S S5      5       r#S<S jr$S=S jr%S>S jr&S?S  jr'S@SAS! jjr(SBSCS" jjr)SDSES# jjr*S$S%S$S&.         SFS' jjr+SGS( jr,S)S*.         SHS+ jjr-SIS, jr.SJS- jr/\4SKS. jjr0\4SLS/ jjr1g)Mu   
Evaluación psicopedagógica (doc 27): matriz cuantitativa tipo EVALÚA (PD/X/DT/E.T.M/PT × RE..RP)
e índices generales (IGC–IGM). Parseo flexible del JSON en BD y gráfico PT en PNG (Pillow).
    )annotationsN)	dataclass)AnyDictListOptionalTuple)REPAOPMACLPPMEFORGROFCNRPz	List[str]
INDICATORSIGCIGLIGEIGMGENERAL_LABELSz[[PSYCHOPED_PT_CHART]]u   ﻿c                N   U c  g [        U [        5      (       a  g [        U [        [        45      (       a  [        U 5      $ [	        U 5      R                  5       R                  SS5      nUS:X  d  UR                  5       S;   a  g  [        U5      $ ! [        [        4 a     g f = f)N,. )nullnonezn/ana-)

isinstanceboolintfloatstrstripreplacelower
ValueError	TypeError)rawtxts     dC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\psychoped_cognitive_quantitative.py_safe_floatr2      s    
{#t#U|$$Sz
c(..

"
"3
,C
byCIIK#EESz	" s   
B B$#B$c                   U c  g [        U [        [        45      (       a  U $ [        U 5      R	                  5       nU(       d  g  [
        R                  " U5      n[        U[        5      (       aS  UR	                  5       nUR                  S5      (       d  UR                  S5      (       a   [
        R                  " U5      $ U$ ! [
        R                   a    Us $ f = f! [
        R                   a     g f = f)N{[)	r%   dictlistr)   r*   jsonloads
startswithJSONDecodeError)r/   svs2s       r1   _loads_json_flexr?   )   s    
{#d|$$
CAJJqMaB}}S!!R]]3%7%7::b>)  ++ H  s7   A'C  ,C C  CC  CC   C76C7c                    U =(       d    SR                  5       R                  5       nSR                  S [        R                  " SU5       5       5      n[
        R                  " SSU5      nU$ )Nr    c              3  ^   #    U  H#  n[         R                  " U5      S :w  d  M  Uv   M%     g7f)MnN)unicodedatacategory).0cs     r1   	<genexpr>_norm_key.<locals>.<genexpr>A   s(     _;a{?S?STU?VZ^?^;s   -	-NFKDz
[^a-z0-9]+)r*   r,   joinrC   	normalizeresub)r<   ts     r1   	_norm_keyrO   ?   sS    	
b!A
_;00;__A
}b!$AH    c           	         [        U [        5      (       a  U (       d  g U R                  5        VVs0 s H  u  p#[        [	        U5      5      U_M     nnnU H  n[        U5      nXd;   d  M  XF   s  $    g s  snnf N)r%   r6   itemsrO   r)   )m
candidateskr=   norm_maprF   nks          r1   _get_from_mappingrY   F   sh    aa12;	#a&!1$H;q\><   <s   !A5c                N    U S:X  a  gU S:X  a  gU S:X  a  gU S:X  a  gU S	:X  a  g
U 4$ )NPD)r[   pdpuntuacion_directau   puntuación_directadirectaX)r_   xmediamedia_baremomedia_del_baremobaremoDT)re   dtdesviacion_tipicau   desviación_típica
desviacionu   desviaciónETM)E.T.ME.T.M.ri   etmerror_tipicoerror_tipico_medidau   error_típicoPT)ro   ptpuntuacion_tipica   puntuación_típicau   puntuacion_típica )	canonicals    r1   _row_aliasesru   Q   sA    DSCPDdEhD]<rP   c                 :    S V s0 s H	  o S /S-  _M     sn $ s  sn f )Nr[   r_   re   ri   ro      rs   )rV   s    r1   _empty_rowsry   _   s$    $BC$Bqv{N$BCCCs   c                   X    n[        U 5       H  nUR                  U5      nUc  X@:w  a  [        X5      nUc  M,  [        U[        5      (       a?  [        [        S[        U5      5      5       H  nX6   c  [        XV   5      OX6   X6'   M       g [        U[        5      (       d  M  [        [        5       H@  u  pgX6   b  M  [        [        XWUR                  5       UR                  5       5      5      X6'   MB       g    g )Nrx   )ru   getrY   r%   r7   rangeminlenr2   r6   	enumerater   r,   upper)row_keysourceoutrowaliasnodeiinds           r1   _fill_row_from_dictr   c   s    
,Cg&zz% <E,$V3D<dD!!3r3t9-.14TW-SV /dD!!#J/6%$%dciikJ 0 # 'rP   c                   Sn[          H  nU R                  U5      =(       dE    U R                  UR                  5       5      =(       d    U R                  UR                  5       5      n[	        U[
        5      (       d  Mw  Sn[         R                  U5      nS H@  n[        U5       H.  n[        XG5      nUc  M  [        U5      n	X   U   c  XU   U'     M>     MB     M     U$ )NFTrw   )
r   r{   r,   r   r%   r6   indexru   rY   r2   )

matrix_objr   hitr   r   idxrkr   r=   fvs
             r1   _parse_transpose_testsr   y   s    
C~~c"`jnnSYY[&A`Z^^TWT]T]T_E`$%%s#0B%b)%d2=$QBws|+')B * 1  JrP   c                   U R                  S5      =(       d)    U R                  S5      =(       d    U R                  S5      n[        U[        5      (       a  U(       d  gU GHM  n[        U[        5      (       d  M  UR                  S5      =(       dq    UR                  S5      =(       dY    UR                  S5      =(       dA    UR                  S5      =(       d)    UR                  S	5      =(       d    UR                  S
5      nUc  M  [	        U5      R                  5       R                  5       nU[        ;  a  M  [        R                  U5      nS HV  nX   U   b  M  [        U5       H:  nX;   a  UR                  U5      O
[        X85      n	U	c  M)  [        U	5      X   U'     MT     MX     GMP     [        S UR                  5        5       5      $ )NtestspruebascolumnsFcodecodigoabbrabreviaturatestnombrerw   c              3  :   #    U  H  o  H  o"S Lv   M
     M     g 7frR   rs   rE   r   r=   s      r1   rG   %_parse_tests_array.<locals>.<genexpr>        Bc}c}   )r{   r%   r7   r6   r)   r*   r   r   r   ru   rY   r2   anyvalues)
r   r   arritemr   rF   r   r   r   r=   s
             r1   _parse_tests_arrayr      st   
..
!
[Z^^I%>
[*..QZB[Cc4  $%%HHV "xx!"xx" xx&" xx	"
 xx! 	 <IOO##%Jq!0Bws|'%b)',}DHHUO:KD:X=#.q>CGCL	 * 1# 2 B

BBBrP   c                J   U R                  S5      n[        U[        5      (       d  gSnS H  n[        U5       H  nUR                  U5      nUc  M  Sn[        U[        5      (       aB  [        [        S[        U5      5      5       H  nX   U   b  M  [        Xg   5      X   U'   M!     On[        U[        5      (       aY  [        [        5       HF  u  pxX   U   b  M  [        [        XhUR                  5       UR                  5       5      5      X   U'   MH       M     M     U$ )NrowsFrw   Trx   )r{   r%   r6   ru   r7   r|   r}   r~   r2   r   r   rY   r,   r   )	r   r   rows_objany_hitr   r   nestedr   r   s	            r1   _parse_rows_containerr      s    ~~f%Hh%%G,!"%E\\%(F~G&$''s2s6{34Awqz)%0%;
 5 FD))'
3FAwqz)%0-f399;		T&
 4
  & -" NrP   c                   [        U [        5      (       d  gSnU  GH8  n[        U[        5      (       d  M  UR                  S5      =(       dY    UR                  S5      =(       dA    UR                  S5      =(       d)    UR                  S5      =(       d    UR                  S5      nUc  M  [	        [        U5      5      nSSS	S
SS
S
S.nUR                  U5      nUcJ  SU;   d  SU;   a	  SU;   a  SnO5SU;   d  US:X  a  SnO&SU;   a  S	nOSU;   a	  SU;   a  S
nOSU;   d  US:X  a  SnUc  GM  SnUR                  S5      =(       dA    UR                  S5      =(       d)    UR                  S5      =(       d    UR                  S5      n[        U[        5      (       aD  [        [        S[        U5      5      5       H  n	X   U	   b  M  [        X   5      X   U	'   M!     GM  [        U[        5      (       d  GM  [        [        5       HF  u  pX   U	   b  M  [        [        XU
R                  5       U
R                  5       5      5      X   U	'   MH     GM;     U$ )NFr   labelmetrictiponamer[   r_   re   ri   ro   )r\   r`   rf   rl   rp   ze.t.mzetm.puntuaciondirecta
puntuacionr^   mediadelbaremora   rh   errortipicopuntuaciontipicarp   Tr   valoresdatacellsrx   )r%   r7   r6   r{   rO   r)   r|   r}   r~   r2   r   r   rY   r,   r   )objr   r   r   r   lkrk_mapr   valsr   r   s              r1   _parse_list_of_row_dictsr      s   c4  
C$%%HHUO  xx  xx!  xx  xx 	 =s5z"
 ZZ^:"b(\R-?IQSO!R'2=#B8r>#r)R4Z:xx!aTXXi%8aDHHV<LaPTPXPXY`PadD!!3r3t9-.71:%!,TW!5CGAJ / d###J/71:%!,)$SYY[#))+N"CGAJ 0W ` JrP   c           	        ^ [        5       n[        U 5      mTc  U$ [        T[        5      (       a  [	        TU5        U$ [        T[
        5      (       d  U$ TR                  S5      =(       dA    TR                  S5      =(       d)    TR                  S5      =(       d    TR                  S5      n[        U[
        [        45      (       a.  [        U4S j[        / SQ-    5       5      (       d  [        U5      $ [        T[
        5      (       Gaf  Sn[        [        5       H  u  pES H  nS	U S
U 3S	UR                  5        S
UR                  5        3S	U S
UR                  5        3S	UR                  5        S
U 34nUS:X  a1  USU 3SUR                  5        3SU 3SUR                  5        34-  nS nU H  n	U	T;   d  M  TR                  U	5      n  O   Uc  [        T/UQ76 n[        U5      n
U
c  M  XU   U'   SnM     M     U(       ac  [        S5       HR  nUS   U   b  M  US   U   US   U   US   U   pnUc  M*  Uc  M/  Uc  M4  [        U5      S:  d  ME  X-
  U-  US   U'   MT     U$ S H  n[!        UTU5        M     [        S UR#                  5        5       5      (       d  [%        TU5        [        S UR#                  5        5       5      (       d  ['        TU5        [        S UR#                  5        5       5      (       d  [)        TU5        [        S5       HR  nUS   U   b  M  US   U   US   U   US   U   pnUc  M*  Uc  M/  Uc  M4  [        U5      S:  d  ME  X-
  U-  US   U'   MT     U$ )Nmatrixmatrizcuantitativor   c              3  ,   >#    U  H	  oT;   v   M     g 7frR   rs   )rE   rV   r   s     r1   rG   $_normalize_matrix.<locals>.<genexpr>  s     2oEn8Ens   )r   r   r   Frw   quant__ri   quant_E_T_M_zquant_E.T.M_Trx   ro   r[   r_   re   g-q=c              3  :   #    U  H  o  H  o"S Lv   M
     M     g 7frR   rs   r   s      r1   rG   r   6  r   r   c              3  :   #    U  H  o  H  o"S Lv   M
     M     g 7frR   rs   r   s      r1   rG   r   8  r   r   c              3  :   #    U  H  o  H  o"S Lv   M
     M     g 7frR   rs   r   s      r1   rG   r   :  r   r   )ry   r?   r%   r7   r   r6   r{   r   r   _normalize_matrixr   r,   rY   r2   r|   absr   r   r   r   r   )
matrix_rawr   innerflat_hitr   r   r   key_variantsvalrV   r   pdvxvdtvr   s                 @r1   r   r      s\   
-C
:
&C
{
#t c*
c4  
GGH`!2`cggn6M`QTQXQXY_Q`E%$&&s2oZRnEn2o/o/o ''
 #t
+FA4RD#'RXXZL#))+7RD#))+/RXXZL#/	  ; &se,&syy{m4&se,&syy{m4	% L %ACx!ggaj & ;+C?,?C %>!#GAJ#H1 5 ,4 2Yt9Q<'#&t9Q<S!c$ilSC2>coRUVYRZ]bRb(+C'7D	!	 
 J,BS) - B

BBBc3'B

BBBsC(B

BBB3$ 2Yt9Q<t9Q<S!c$ilSC2>co#c(UZJZ #C/D	!	  JrP   c                   [          Vs0 s H  oS _M     nn[        U 5      nUc  U$ [        U[        5      (       Ga  U GH  n[        U[        5      (       d  M  UR                  S5      =(       dA    UR                  S5      =(       d)    UR                  S5      =(       d    UR                  S5      nUR                  S5      =(       dA    UR                  S5      =(       d)    UR                  S5      =(       d    UR                  S5      nUc  M  [        U5      R                  5       R                  5       nXb;   d  GM  [        U5      X&'   GM     U$ [        U[        5      (       a  [          H  nUR                  U5      =(       d1    UR                  UR                  5       5      =(       d    [        X75      n[        U[        5      (       a  [        [        USS	SS
SS5      5      X''   M  [        U5      X''   M     U$ U$ s  snf )Nkeyclaver   r   valuevalorrp   rq   ro   rr   )r   r?   r%   r7   r6   r{   r)   r*   r   r2   r,   rY   )	r/   rV   r   r   r   r=   kklabr   s	            r1   _parse_general_rawr   G  s   8F&G1$wC&G
3
C
{
#tDdD))]488G#4]8H]DHHU\L]A!iTXXg%6i$((4.iDHHUhLiAyQ%%'By%a.  
#t!C773<V377399;#7V;LS;VD$%%&%dD$8KMbdkmtu 't, " 
J5 'Hs   Hc                    SS jnSSSSS.n[        U5      nUR                  5        H(  u  nu  pgUR                  U5      b  M  U" XU 5      XE'   M*     U$ )Nc                    U  Vs/ s H  oc  M  [        U5      PM     nnU(       d  g [        U5      [        U5      -  $ s  snf rR   )r(   sumr~   )r   r=   xss      r1   _mean$_fill_general_from_pt.<locals>._meanf  s:     $61heAh62wR   7s   ??)r      )r      )r   
   )r   rx   r   )r   List[Optional[float]]returnOptional[float])r6   rS   r{   )rp   genr   slicesr   r   abs           r1   _fill_general_from_ptr   e  sa    ! 	F s)C||~Va773<R!W~CH & JrP   c                  H    \ rS rSr% S\S'   S\S'   SS jrSS jrSS jrS	rg
)CognitiveQuantitativeParsediy   Dict[str, List[Optional[float]]]r   Dict[str, Optional[float]]generalc                V    [        S U R                  R                  5        5       5      $ )Nc              3  :   #    U  H  o  H  o"S Lv   M
     M     g 7frR   rs   r   s      r1   rG   ACognitiveQuantitativeParsed.has_matrix_numbers.<locals>.<genexpr>  s     L,>S1D==,>r   )r   r   r   selfs    r1   has_matrix_numbers.CognitiveQuantitativeParsed.has_matrix_numbers~  s     LDII,<,<,>LLLrP   c                    [        S U R                  S    5       5      =(       d*    [        S U R                  R                  5        5       5      $ )Nc              3  (   #    U  H  oS Lv   M
     g 7frR   rs   rE   r=   s     r1   rG   @CognitiveQuantitativeParsed.has_chart_numbers.<locals>.<genexpr>  s     :/QD=/   ro   c              3  (   #    U  H  oS Lv   M
     g 7frR   rs   r   s     r1   rG   r     s      B
#8aTM#8r   )r   r   r   r   r   s    r1   has_chart_numbers-CognitiveQuantitativeParsed.has_chart_numbers  sE    :$))D/:: 
c B
#'<<#6#6#8B
 ?
 	
rP   c                    [        S U R                  R                  5        5       5      (       a  gS H)  n[        S U R                  U    5       5      (       d  M)    g   g)Nc              3  (   #    U  H  oS Lv   M
     g 7frR   rs   r   s     r1   rG   @CognitiveQuantitativeParsed.has_table_numbers.<locals>.<genexpr>  s     <&;}&;r   Trw   c              3  (   #    U  H  oS Lv   M
     g 7frR   rs   r   s     r1   rG   r    s     8-QD=-r   F)r   r   r   r   )r   r   s     r1   has_table_numbers-CognitiveQuantitativeParsed.has_table_numbers  sN    <dll&9&9&;<<<0B8$))B-888 1 rP   rs   N)r   r&   )	__name__
__module____qualname____firstlineno____annotations__r   r   r  __static_attributes__rs   rP   r1   r   r   y  s    
**''M

rP   r   c                @   [        U [        5      (       d  g [        U R                  S5      5      n[	        U R                  S5      5      n[        US   U5      n[        XS9nUR                  5       (       d&  [        S UR                  5        5       5      (       d  g U$ )Ncognitive_quantitative_matrixcognitive_general_scalesro   )r   r   c              3  (   #    U  H  oS Lv   M
     g 7frR   rs   r   s     r1   rG   2parse_evalua_psychoped_matrices.<locals>.<genexpr>  s     2[JZQD=JZr   )
r%   r6   r   r{   r   r   r   r   r   r   )	eval_datar   r   parseds       r1   parse_evalua_psychoped_matricesr    s    i&&Y]]+JKLD /I!JKG#DJ8G(dDF$$&&s2['..JZ2[/[/[MrP   c                <   U c  g[        U 5      n[        R                  " U5      (       aG  [        U[	        U5      -
  5      S:  a,  [        U5      S:  a  [        [        [	        U5      5      5      $ US nSU;   a   UR                  S5      R                  S5      nU$ )Nr$   &.>g    .Az.2fr   0)r(   mathisfiniter   roundr)   r'   rstrip)r=   r   r<   s      r1   _fmt_table_cellr    s    y	qB}}RSeBi047CGcM3uRy>""c(A
axHHSM  %HrP   c                
  ^  / nUR                  S5        UR                  SSR                  [        5      -   5        S H@  u  p#SR                  S T R                  U    5       5      nUR                  U SU 35        MB     UR                  S5        UR                  SSR                  U 4S	 j[         5       5      -   5        UR                  S5        UR                  S
5        SR                  U5      R                  5       $ )Nz<CUADRO CUANTITATIVO (HABILIDADES COGNITIVAS Y COMUNICATIVAS)z	PRUEBAS: z | )r[   r[   r_   r_   re   re   )ri   rj   ro   ro   c              3  8   #    U  H  n[        U5      v   M     g 7frR   )r  r   s     r1   rG   :build_cognitive_quantitative_table_text.<locals>.<genexpr>  s     G!?1--s   : r    zESCALAS GENERALES: c              3  t   >#    U  H-  o S [        TR                  R                  U5      5       3v   M/     g7f)r%  N)r  r   r{   )rE   rV   r  s     r1   rG   r$    s/     ^~!s"_V^^-?-?-BCDE~s   58uN   Gráfico: Puntuación típica (PT) — pruebas e índices generales (EVALÚA).
)appendrJ   r   r   r   r*   )r  linesr   r   r   s   `    r1   'build_cognitive_quantitative_table_textr*    s    E	LLOP	LLuzz*556	 

Gv{{2GGwb() 
LL	LL
**^~^
^	_ 
LL	LLab99U!!##rP   c                    SSK Jn  U=(       d    SR                  5       R	                  5       nU R                  U" S5      5       H  nUR                  U" S5      5      nUc  M  UR                  U" S5      5      nUc  M;  UR                  U" S5      5      =(       d    SR                  5       R	                  5       nXs:X  d  M~  Us  $    g! [         a     gf = f)	uN   Busca el primer w:sdt cuyo w:tag @w:val coincide (sin distinguir mayúsculas).r   qnNr    zw:sdtzw:sdtPrzw:tagw:val)docx.oxml.nsr-  ImportErrorr*   r,   iterfindr{   )root_eltagr-  wantsdtsdt_prtag_elr   s           r1   _find_sdt_element_by_tagr9    s    # I2$$&D||BwK("Y-(>R[)>zz"W+&,"335;;=;J )   s   C 
CCc                2   SSK Jn  SSKJn  U R                  nUR
                  nUc  U" S5      nUR                  SU5        [        UR                  U" S5      5      5       H  nUR                  U5        M     U" S5      nS H  nU" SU 35      nUR                  U" S5      S	5        UR                  U" S
5      S5        UR                  U" S5      S5        UR                  U" S5      U5        UR                  U5        M     UR                  U5        g )Nr   OxmlElementr,  w:tblPrzw:tblBorders)topleftbottomrightinsideHinsideVzw:r.  singlezw:sz8zw:spacer  zw:color)	docx.oxmlr<  r/  r-  _tbltblPrinsertr7   findallremovesetr(  )	table	color_hexr<  r-  tbltbl_prelbordersedges	            r1   _set_table_bordersrT    s    %
**CYYF~Y'

1f6>>"^"456b 7.)GH2dV%
r'{H%
r&z3
r)}c"
r)}i(r I MM'rP   c                   SSK Jn  SSKJn  U R                  nUR
                  nUc  U" S5      nUR                  SU5        [        UR                  U" S5      5      5       H  nUR                  U5        M     U" S5      nUR                  U" S5      [        U5      5        UR                  U" S5      S5        UR                  U5        g )	Nr   r;  r,  r=  zw:tblWzw:wzw:typepct)rF  r<  r/  r-  rG  rH  rI  r7   rJ  rK  rL  r)   r(  )rM  rV  r<  r-  rO  rP  rQ  tws           r1   _tbl_set_pct_widthrX    s    %
**CYYF~Y'

1f6>>"X,/0b 1	X	BFF2e9c#hFF2h<
MM"rP   c                R   SSK Jn  SSKJn  U R                  R                  5       n[        UR                  U" S5      5      5       H  nUR                  U5        M     U" S5      nUR                  U" S5      U5        UR                  U" S5      S5        UR                  U5        g )Nr   r;  r,  zw:shdzw:fillr.  clear)rF  r<  r/  r-  _tcget_or_add_tcPrr7   rJ  rK  rL  r(  )cellfill_hexr<  r-  tc_prrQ  shds          r1   _set_cell_shadingra    s|    %HH$$&E5==G-.R /
g
CGGBxL(#GGBwK!	LLrP   F	   boldsize_ptalign_centerc                   SSK Jn  SSKJn  U R                   HK  nU(       a  UR
                  Ul        UR                   H   nXl        U" U5      UR                  l
        M"     MM     g )Nr   WD_ALIGN_PARAGRAPHPt)docx.enum.textri  docx.sharedrk  
paragraphsCENTER	alignmentrunsrd  fontsize)r]  rd  re  rf  ri  rk  pararuns           r1   _style_cell_textrv    sJ     2/66DN99CHwKCHHM   rP   c                
   U(       a  UR                  5       (       d  g SSKJn  SSKJn  SSKJn  SSKJn  SSK	J
n  U" U 5      n[        UR                  R                  S5      nUc  gUR                  U" S	5      5      n	U	c  g[!        U	5       H  n
U	R#                  U
5        M     S
nSnUR%                  XS9nUR&                  nUR)                  5       nUb  UR#                  U5        U	R+                  U5        [-        US5        [/        US5        SnSnSnSnSnSSSSS.nUR0                  S   R2                  nSUS   l        US   R7                  US   5        SUS   l        UR8                  US   R:                  S   l        [?        US   SUSS9  US   R7                  US   5        SUS   l        UR8                  US   R:                  S   l        [?        US   SUSS9  [A        US   5        [A        US   5        UR0                  S   R2                  nSUS   l        [C        [D        5       HZ  u  nnUUSU-      l        UR8                  USU-      R:                  S   l        [?        USU-      SUSS9  [A        USU-      5        M\     [C        [F        5       HJ  u  nnUSU-      nUUl        UR8                  UR:                  S   l        [?        USUSS9  [A        U5        ML     / S Qn[C        US!S"9 GH/  u  nu  nn UR0                  U   R2                  n!U U!S   l        [?        U!S   SUS#9  [I        S5       H^  n[K        UR0                  U   U   5      U!SU-      l        UR8                  U!SU-      R:                  S   l        [?        U!SU-      USS$9  M`     US%:X  d  M  [C        [F        5       Hl  u  nnU!SU-      n[K        URL                  RO                  U5      5      Ul        UR8                  UR:                  S   l        [?        UUSS$9  [A        US&5        Mn     GM2     [C        [F        5       GH  u  nnURQ                  S!SU-   5      n"URQ                  S'SU-   5      n#U"R7                  U#5        URR                  U"l*        [A        U"S&5        SU"l        U"R:                  S   n$UR8                  U$l        U$RW                  UU   5      n%SU%l,        U" U5      U%RZ                  l.        U"R_                  5       n&UR8                  U&l        U&RW                  S(5      n'U" U5      U'RZ                  l.        GM     URa                  U 5        g! [         a     gf = f))u   
Sustituye el contenido del control de contenido `ac` por una tabla Word nativa
(12 pruebas + 4 índices), estilo similar a EVALÚA (cabeceras y bordes azules).
Fr   Document)WD_CELL_VERTICAL_ALIGNMENTrh  r,  rj  acw:sdtContentr      )r   cols  4F81BDg       @g      @g      @zRE, PA, OP, MAzCL, PPM, EFz
OR, GR, OFzCN, RPr   r       rx   PRUEBASTrc        zESCALAS GENERALES*)r  r   r!  )ri   rk   r"     )start)rd  re  )re  rf     E7EDF7   r$   )1r  docxry  docx.enum.tablerz  rl  ri  r/  r-  rm  rk  r0  r9  elementbodyr2  r7   rK  	add_tablerG  	getparentr(  rX  rT  r   r   textmergero  rn  rp  rv  ra  r   r   r   r|   r  r   r{   r]  TOPvertical_alignmentadd_runrd  rr  rs  add_paragraphsave)(	docx_pathr  ry  rz  ri  r-  rk  docr6  sdt_contentchildn_rowsn_colsrM  tbl_elparentsz_bandsz_headsz_labelsz_valsz_comp	comp_textr0r1r   r   jr   rF   row_defsr_idxr   r   r   r>  r@  p0run_compp_dashrrs(                                           r1   inject_evalua_matrix_word_tabler    s   
 1133!>5#" 9
C
"3;;#3#3T
:C
{((2n-.Kk"5! # FFMMvM3EZZFFfvud#uh' GGHFG  	I 
A		BBqEJqEKK2BqEJ$6$=$=BqEQ!RUwTJrFLLB&BrFK%7%>%>BrFa"RV$dKbebf	A		BBqEJZ(41q5	,>,E,E1q5	Q)AEwTR"QU)$	 )
 N+3rAvJ$6$=$=Q!wTJ! ,'H (:{Ejj%%AQdH=rA-fkk"oa.@ACAJO1C1J1JCAJ!!!$.SQZdK  A:#N33QK(););C)@A,>,E,EQ) FF!!X. 4 ;  N+3jjBF#ArAv&		&!;!?!?#x(^^A)00::in-[""$-44^^C &z ," HHY_  s   U 
U('U(      @)width_inchesc               ~   U(       a$  [         R                  R                  U5      (       d  g SSKJn  SSKJn  SSKJn  SSK	J
n  SSKJn  SSKJn	  U" U 5      n
[!        U
R"                  R$                  U5      nUc  gUR'                  U" S	5      5      nUc  g[)        U5       H  nUR+                  U5        M     U" S
5      nUR-                  U5        U	" XR.                  5      nUR0                  Ul        UR5                  5       nUR7                  X(" U5      S9  U
R9                  U 5        g! [         a     gf = f)u   
Vacía el primer SDT con w:tag @w:val == `tag` e inserta una imagen centrada.
Sustituye la tabla EVALÚA generada en el control `ac` del doc 27 cuando el usuario
sube una captura en lugar de usar la matriz en el Word.
Fr   rx  rh  r;  r,  Inches	Paragraphr|  w:pwidthT)ospathisfiler  ry  rl  ri  rF  r<  r/  r-  rm  r  docx.text.paragraphr  r0  r9  r  r  r2  r7   rK  r(  _bodyro  rp  r  add_picturer  )r  r4  
image_pathr  ry  ri  r<  r-  r  r  r  r6  r  r  new_p	paragraphru  s                    r1   (inject_image_into_content_control_by_tagr    s    RWW^^J77!5)#&1 9
C
"3;;#3#3S
9C
{((2n-.Kk"5! # Eu%+I,33I



COOJf\&:O;HHY+  s   $D/ /
D<;D<c                X    Uu  pEXEU-
  4XB-   U4XEU-   4XB-
  U4/nU R                  XcUS9  g )N)outlinefill)polygon)drawxyrr  r`   yptss          r1   _diamondr    s?    DA1u:qzA1u:qz
:CLLL.rP   c                	  ^8^9 U R                  5       (       d  g SSKJnJnJn  Su  pVUR                  SXV4S5      nUR                  U5      n[        R                  R                  [        R                  R                  SS5      S	S
5      n	 UR                  U	S5      n
UR                  U	S5      nUR                  U	S5      nSnUR!                  SUSUS9  SSUS-
  US-
  4u  nm9nnX-
  UT9-
  snm8S=U8U94S jjnSnUS::  a  T9SU-
  S-  T8-  -   nUR#                  UU4UU4/SSS9  [%        U['        U5      -
  5      S:  a  [)        [+        U5      5      OUS R-                  SS 5      nUR!                  US-
  US!-
  4US"US9  US#-  nUS::  a  M  UR#                  UT94UU4UU4UT94/S$SS9  US%-  nUS&-  nUS'-  n[/        S(5       Vs/ s H  nUUUS)-  -  -   PM     nnUU-   US*-  -   nUR#                  UT94UU4/S+S,S9  [/        S-5       Vs/ s H  nUUS*-  -   UUS-  -  -   PM     nnUU-   n[1        U R2                  S.   5      [4         Vs/ s H  nU R6                  R                  U5      PM      sn-   n [8        [4        -   n!S/n"[/        [;        U 5      S-
  5       HJ  nU U   U US-      n$n#U" U#5      U" U$5      n&n%U%c  M%  U&c  M*  UR#                  UU   U%4UUS-      U&4/U"S0S9  ML     [=        U 5       H&  u  nn'U" U'5      n(U(c  M  [?        UUU   U(4S1U"5        M(     US!-   n)Sn*U! H)  n+URA                  S2U+U
S39n,[C        U*U,S0   U,S   -
  5      n*M+     [=        U!5       H?  u  nn+URA                  S2U+U
S39n-U-S,   U-S   -
  n.UR!                  UU   U.S,-  -
  U)4U+S4U
S9  MA     S5n/S6n0URA                  S2U0US39n1U1S,   U1S   -
  n2U)U*-   U/-   n3UR!                  X-   U2-
  S,-  U34U0S7US9  S8n4URA                  S2U4US39n5U5S,   U5S   -
  n6U3U1S0   U1S   -
  -   S9-   n7UR!                  X-   U6-
  S,-  U74U4U"US9  URE                  US:S;9  g<! [
         a     gf = f! [         a    UR                  5       n
U
nU
n GNf = fs  snf s  snf s  snf )>NFr   )Image	ImageDraw	ImageFont)i  i  RGB)   r  r  WINDIRz
C:\WindowsFontsz	arial.ttf      r  u<   Análisis cuantitativo — PT (pruebas e índices generales))P      )r  r  r  )r  rr  X   H      c           	        > U b$  [         R                  " [        U 5      5      (       d  g [        S[	        S[        U 5      5      5      nTSU-
  S-  T-  -   $ )N            @r  )r  r  r(   maxr}   )r   vcplot_hy0s     r1   vy+render_evalua_pt_line_chart_png.<locals>.vy  sM    ;dmmE#J77s3c
+,S2X$v---rP   r  g5^I@r  r  )         r  )r  r  r  z.1fr   r   r   )<   r  r  g      ?)(   r  r  g
ףp=
?gGz?g)\(?rx   g      &@g       @)         r  r   ro   )r   f         r   )r   r   )rr  )   r  r     Puntuaciones)2   r  r  u   Puntuación típica (PT)   PNG)formatT)r   r   r   r   )#r   PILr  r  r  r0  newDrawr  r  rJ   environr{   truetypeOSErrorload_defaultr  liner   r  r)   r'   r+   r|   r7   r   r   r   r   r~   r   r  textbboxr  r  ):r  out_png_pathr  r  r  WHimgr  	font_pathrr  
font_title
font_smalltitlex0x1y1plot_wr  gyyyrN   gapw_tests_span
w_gen_spanr   xs_testsdividerr  xs_genr   rV   r   labelsbluev0v1y_ay_br=   ypy_catcat_hr   lb0lblwgap_below_categories
axis_titletbrW  y_axis_titleleglb2lw2y_legr  r  s:                                                           @@r1   render_evalua_pt_line_chart_pngr(    sY   ##%%33 DA
))EA6?
3C>>#DRZZ^^HmDg{[I!!)R0''	26
''	26
 KEIIhLzIB QVQW,NBBWb2gNFF. . 
B
+38s"V++		B8b"X&_A	FU2Y/$6CBLr#h<O<OPSUX<Y		27BG$al	L
c	 + 	IIBx"bB8b"X6\QRIS
5.CD=L$J8=b	B	1Q,-..	HB<#)+GII}wm,?!ILDI!HMHqgc	!Ac)9$::HFM	F	B"&v{{4'8"9\j<k\jWXV^^=O=OPQ=R\j<k"kD.(FD3t9q=!a$q1u+Bb62b6S?sII1s|bQi%56TIK	 " $1U:1r{At,	   GEEmmFCdm3E3q6CF?+  F#3]]63T]2URU]		2a526>5)3\	M $ J	vz
	;B	AAB5=#77LII"!<0*<V`Ia
$C
--*-
5C
a&3q6/CBqEBqEM*R/EII#"E*CdILHH\%H(u    %%'

@ C N =ls5   
Q	 6Q Q>R%R	
QQQ;:Q;c                  ^^
^^^^^ [         R                  R                  T5      (       d  g SSKJn  SSKJm  SSKJm  SSK	J
m
  U" U 5      mUmSmS	U
UUUUUU4S jjnTR                  R                  R                  T" S5      5       H  nU" U5        T(       d  M    O   T(       d  TR                   Hr  nUR                    HV  nUR"                   H:  nUR$                   H  n	U" U	R&                  5        T(       d  M    O   T(       d  M:    O   T(       d  MV    O   T(       d  Mr    O   T(       a  TR)                  U 5        T$ ! [         a     gf = f)
NFr   rx  r,  r  r  c                  > SR                  S U R                  T	" S5      5       5       5      nTU;  a  g T" U TR                  5      nUR                  5         UR	                  5       nUR                  TT" S5      S9  Sm
g )Nr    c              3  J   #    U  H  oR                   =(       d    S v   M     g7fr    Nr  rE   rN   s     r1   rG   binsert_chart_placeholder_paragraph_image.<locals>._replace_in_paragraph_element.<locals>.<genexpr>=       D/C!"/C   !#w:tg@r  T)rJ   r1  r  rZ  r  r  )p_elfullpr  r  r  r  markerpng_pathr-  replaceds       r1   _replace_in_paragraph_elementOinsert_chart_placeholder_paragraph_image.<locals>._replace_in_paragraph_element;  sl    wwDtyyE/CDDdCII&		IIK	hfSk2rP   r  r3  r   r   None)r  r  r  r  ry  r/  r-  r  r  rm  r  r0  r  r  r1  tablesr   r   rn  _elementr  )r  r7  placeholderry  r9  r3  rO  r   r]  rt  r  r  r  r6  r-  r8  s    `        @@@@@@r1   (insert_chart_placeholder_paragraph_imager@  ,  s   77>>(##!#1& 9
CFH
 
   %%bi0%d+8 1
 ::CxxIID $5dmmD#8! !0  x & 8   x  OS  s   E 
EEc                  ^^	^
^^  SSK Jn  SSKJm  SSKJm	  U" U 5      mSm
SU	U
UUU4S jjnTR                  R                  R                  T" S5      5       H  nU" U5        M     TR                   HN  nUR                   H;  nUR                   H(  nUR                   H  nU" UR                  5        M     M*     M=     MP     T
(       a  TR                  U 5        g g ! [         a     g f = f)	Nr   rx  r,  r  Fc                <  > SR                  S U R                  T" S5      5       5       5      nTU;  a  g T" U TR                  5      nUR                  R	                  TS5      R                  5       nUR                  5         U(       a  UR                  U5        Smg )Nr    c              3  J   #    U  H  oR                   =(       d    S v   M     g7fr,  r-  r.  s     r1   rG   Istrip_chart_placeholder_from_docx.<locals>._strip_p_el.<locals>.<genexpr>m  r0  r1  r2  T)rJ   r1  r  r  r+   r*   rZ  r  )	r3  r4  r5  r0   r  changedr  r?  r-  s	       r1   _strip_p_el6strip_chart_placeholder_from_docx.<locals>._strip_p_elk  sx    wwDtyyE/CDDd"dCII&ffnn["-335		IIcNrP   r  r;  )r  ry  r/  r-  r  r  r0  r  r  r1  r=  r   r   rn  r>  r  )r  r?  ry  rF  r3  rO  r   r]  rt  r  rE  r  r-  s    `       @@@@r1   !strip_chart_placeholder_from_docxrH  `  s    !#1 9
CG
 
   %%bi0D 1zz88C		 OOD. , "  
  3  s   C! !
C.-C.)r/   r   r   r   )r/   r   r   r   )r<   r)   r   r)   )rT   Dict[str, Any]rU   r)   r   r   )rt   r)   r   zTuple[str, ...])r   r   )r   r)   r   rI  r   r   r   r<  )r   rI  r   r   r   r&   )r   z	List[Any]r   r   r   r&   )r   r   r   r   )r/   r   r   r   )rp   r   r   r   r   r   )r  rI  r   z%Optional[CognitiveQuantitativeParsed])r=   r   r   r)   )r  r   r   r)   )r3  r   r4  r)   r   zOptional[Any])r  )rM  r   rN  r)   r   r<  )r  )rM  r   rV  r'   r   r<  )D9E2F3)r]  r   r^  r)   r   r<  )
r]  r   rd  r&   re  r(   rf  r&   r   r<  )r  r)   r  r   r   r&   )
r  r)   r4  r)   r  r)   r  r(   r   r&   )
r  r   r  zTuple[float, float]r  r(   r  zTuple[int, int, int]r   r<  )r  r   r   r)   r   r&   )r  r)   r7  r)   r?  r)   r   r&   )r  r)   r?  r)   r   r<  )2__doc__
__future__r   r8   r  r  rL   rC   dataclassesr   typingr   r   r   r   r	   r   r  r   CHART_PLACEHOLDERAC_CONTENT_CONTROL_HOLDr2   r?   rO   rY   ru   ry   r   r   r   r   r   r   r   r   r   r  r  r*  r9  rT  rX  ra  rv  r  r  r  r(  r@  rH  rs   rP   r1   <module>rQ     sx   #   	 	  ! 3 3a
I a8	 8 -  #  ,D,&C@24nHV<(   *		$.(,"
  (
( ( 	(
 ( 
($|H **	* *
 * 
*Z/_D `q 1h J[ rP   