
    ix                       U d Z ddlm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	Z	 ddl
mZmZmZmZmZ g dZded<   g d	Zded
<   dZdZd0dZd1dZd2dZd3dZd4dZd5dZd6dZd7dZd7dZd7dZd8dZd9dZ d:dZ!d;dZ"e	 G d d             Z#d<dZ$d=dZ%d>dZ&d?d Z'd@dAd!Z(dBdCd"Z)dDdEd#Z*d$d%d$d&	 	 	 	 	 	 	 	 	 dFd'Z+dGd(Z,d)d*	 	 	 	 	 	 	 	 	 dHd+Z-dId,Z.dJd-Z/efdKd.Z0efdLd/Z1y)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                0   | y t        | t              ry t        | t        t        f      rt        |       S t	        |       j                         j                  dd      }|dk(  s|j                         dv ry 	 t        |      S # t        t        f$ r Y y w xY w)N,. )nullnonezn/ana-)

isinstanceboolintfloatstrstripreplacelower
ValueError	TypeError)rawtxts     [/var/www/pie360backend.cl/public_html/app/backend/utils/psychoped_cognitive_quantitative.py_safe_floatr2      s    
{#t#U|$Sz
c(..

"
"3
,C
byCIIK#EESz	" s   8
B BBc                   | y t        | t        t        f      r| S t        |       j	                         }|sy 	 t        j                  |      }t        |t              rH|j	                         }|j                  d      s|j                  d      r	 t        j                  |      S |S # t
        j                  $ r |cY S w xY w# t
        j                  $ r Y y w xY w)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::b>)  ++ H  s6   AC B( &C (C =C ?C  C CCc                    | xs dj                         j                         }dj                  d t        j                  d|      D              }t        j                  dd|      }|S )Nr    c              3  R   K   | ]  }t        j                  |      d k7  s| ! yw)MnN)unicodedatacategory).0cs     r1   	<genexpr>z_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_keyrN   ?   sS    	
b!A
_;00;__A
}b!$AH    c           	         t        | t              r| sy | j                         D ci c]  \  }}t        t	        |            | }}}|D ]  }t        |      }||v s||   c S  y c c}}w N)r%   r6   itemsrN   r)   )m
candidateskr=   norm_maprF   nks          r1   _get_from_mappingrX   F   so    aa12;A	#a&!1$;H;  q\>B<   <s   A'c                D    | dk(  ry| dk(  ry| dk(  ry| dk(  ry| d	k(  ry
| fS )NPD)rZ   pdpuntuacion_directau   puntuación_directadirectaX)r^   xmediamedia_baremomedia_del_baremobaremoDT)rd   dtdesviacion_tipicau   desviación_típica
desviacionu   desviaciónETM)E.T.ME.T.M.rh   etmerror_tipicoerror_tipico_medidau   error_típicoPT)rn   ptpuntuacion_tipica   puntuación_típicau   puntuacion_típica )	canonicals    r1   _row_aliasesrt   Q   sA    DSCPDdEhD]<rO   c                 6    dD  ci c]	  } | d gdz   c} S c c} w )NrZ   r^   rd   rh   rn      rr   )rU   s    r1   _empty_rowsrx   _   s     $BCqAv{NCCCs   c                   ||    }t        |       D ]  }|j                  |      }||| k7  rt        ||      }|*t        |t              r@t        t        dt        |                  D ]  }||   t        ||         n||   ||<     y t        |t              st        t              D ]A  \  }}||   t        t        |||j                         |j                                     ||<   C  y  y )Nrw   )rt   getrX   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    
g,Cg& zz% <EW,$VU3D<dD!3r3t9-. L14QT!W-SVALdD!#J/ 3q6%$%dCciikJA #rO   c                   d}t         D ]  }| j                  |      xs@ | j                  |j                               xs | j                  |j                               }t	        |t
              sgd}t         j                  |      }dD ]=  }t        |      D ]-  }t        ||      }|t        |      }	||   |   |	||   |<    = ?  |S )NFTrv   )
r   rz   r,   r   r%   r6   indexrt   rX   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#0 	B%b) %dE2=$QB2ws|+')B	 JrO   c                &   | j                  d      xs$ | j                  d      xs | j                  d      }t        |t              r|sy|D ]"  }t        |t              s|j                  d      xs] |j                  d      xsJ |j                  d      xs7 |j                  d      xs$ |j                  d	      xs |j                  d
      }|t	        |      j                         j                         }|t        vrt        j                  |      }dD ]Q  }||   |   t        |      D ]8  }||v r|j                  |      nt        ||      }	|	't        |	      ||   |<    Q S % t        d |j                         D              S )NtestspruebascolumnsFcodecodigoabbrabreviaturatestnombrerv   c              3  2   K   | ]  }|D ]  }|d u 
  y wrQ   rr   rE   r   r=   s      r1   rG   z%_parse_tests_array.<locals>.<genexpr>         BcBq}B}B   )rz   r%   r7   r6   r)   r*   r   r   r   rt   rX   r2   anyvalues)
r   r   arritemr   rF   r   r   r   r=   s
             r1   _parse_tests_arrayr      s   
..
!
[Z^^I%>
[*..QZB[Cc4  $%HHV "xx!"xx" xx&" xx	"
 xx! 	 <IOO##%Jq!0 	B2ws|'%b) ',}DHHUO:KDRW:X=#.q>CGCL		#2 B

BBBrO   c                   | j                  d      }t        |t              syd}dD ]  }t        |      D ]  }|j                  |      }|d}t        |t              rAt        t        dt        |                  D ]  }||   |   t        ||         ||   |<   ! nit        |t              rYt        t              D ]G  \  }}||   |   t        t        |||j                         |j                                     ||   |<   I    |S )NrowsFrv   Trw   )rz   r%   r6   rt   r7   r{   r|   r}   r2   r~   r   rX   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4 <A2wqz)%0%;B
< FD)'
3 FAs2wqz)%0-fc399;		T&B

 	" NrO   c                
   t        | t              syd}| D ]  }t        |t              s|j                  d      xsJ |j                  d      xs7 |j                  d      xs$ |j                  d      xs |j                  d      }|ut	        t        |            }ddd	d
dd
d
d}|j                  |      }|8d|v sd|v rd|v rd}n)d|v s|dk(  rd}nd|v rd	}nd|v rd|v rd
}nd|v s|dk(  rd}|d}|j                  d      xs7 |j                  d      xs$ |j                  d      xs |j                  d      }t        |t              rBt        t        dt        |                  D ]  }	||   |	   t        ||	         ||   |	<   ! t        |t              st        t              D ]G  \  }	}
||   |	   t        t        ||
|
j                         |
j                                     ||   |	<   I  |S )NFr   labelmetrictiponamerZ   r^   rd   rh   rn   )r[   r_   re   rk   ro   ze.t.mzetm.puntuaciondirecta
puntuacionr]   mediadelbaremor`   rg   errortipicopuntuaciontipicaro   Tr   valoresdatacellsrw   )r%   r7   r6   rz   rN   r)   r{   r|   r}   r2   r~   r   rX   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-. 6r71:%!,T!W!5CGAJ6 d##J/ 3r71:%!,)$SYY[#))+N"CGAJW/` JrO   c           	     D   t               }t        |       |S t        t              rt	        |       |S t        t
              s|S j                  d      xs7 j                  d      xs$ j                  d      xs j                  d      }t        |t
        t        f      r(t        fdt        g dz   D              st        |      S t        t
              rMd}t        t              D ]  \  }}dD ]  }d	| d
| d	|j                          d
|j                          d	| d
|j                          d	|j                          d
| f}|dk(  r1|d| d|j                          d| d|j                          fz  }d }|D ]  }	|	v sj                  |	      } n |t        g| }t        |      }
|
|
||   |<   d}  |rYt        d      D ]I  }|d   |   |d   |   |d   |   |d   |   }}}|'|*|-t        |      dkD  s<||z
  |z  |d   |<   K |S dD ]  }t!        ||        t        d |j#                         D              st%        |       t        d |j#                         D              st'        |       t        d |j#                         D              st)        |       t        d      D ]I  }|d   |   |d   |   |d   |   |d   |   }}}|'|*|-t        |      dkD  s<||z
  |z  |d   |<   K |S )Nmatrixmatrizcuantitativor   c              3  &   K   | ]  }|v  
 y wrQ   rr   )rE   rU   r   s     r1   rG   z$_normalize_matrix.<locals>.<genexpr>  s     2o182os   )r   r   r   Frv   quant__rh   quant_E_T_M_zquant_E.T.M_Trw   rn   rZ   r^   rd   g-q=c              3  2   K   | ]  }|D ]  }|d u 
  y wrQ   rr   r   s      r1   rG   z$_normalize_matrix.<locals>.<genexpr>6  r   r   c              3  2   K   | ]  }|D ]  }|d u 
  y wrQ   rr   r   s      r1   rG   z$_normalize_matrix.<locals>.<genexpr>8  r   r   c              3  2   K   | ]  }|D ]  }|d u 
  y wrQ   rr   r   s      r1   rG   z$_normalize_matrix.<locals>.<genexpr>:  r   r   )rx   r?   r%   r7   r   r6   rz   r   r   _normalize_matrixr~   r,   rX   r2   r{   absr   r   r   r   r   )
matrix_rawr   innerflat_hitr   r   r   key_variantsvalrU   r   pdvxvdtvr   s                 @r1   r   r      sn   
-C
:
&C
{
#t c*
c4 
GGH`!2`cggn6M`QTQXQXY_Q`E%$&s2oZRnEn2o/o ''
 #t
+ 	$FAs4 $RD#'RXXZL#))+7RD#))+/RXXZL#/	  ; &se,&syy{m4&se,&syy{m4	% L % ACx!ggaj ;+C?,?C %>!#CGAJ#H1$	$4 2Y 8t9Q<'#&t9Q<S!c$ilSC2>coRUVYRZ]bRb(+bC'7D	!	8
 J, *BS)* B

BBc3'B

BBsC(B

BB3$ 2Y 0t9Q<t9Q<S!c$ilSC2>co#c(UZJZ #bC/D	!	0 JrO   c                ~   t         D ci c]  }|d  }}t        |       }||S t        |t              r|D ]  }t        |t              s|j                  d      xs7 |j                  d      xs$ |j                  d      xs |j                  d      }|j                  d      xs7 |j                  d      xs$ |j                  d      xs |j                  d      }|t        |      j                         j                         }||v st        |      ||<    |S t        |t              rt         D ]~  }|j                  |      xs- |j                  |j                               xs t        ||      }t        |t              rt        t        |dd	dd
dd            ||<   qt        |      ||<    |S |S c c}w )Nkeyclaver   r   valuevalorro   rp   rn   rq   )r   r?   r%   r7   r6   rz   r)   r*   r   r2   r,   rX   )	r/   rU   r   r   r   r=   kklabr   s	            r1   _parse_general_rawr   G  s   8F&G1q$w&GC&G
3
C
{
#t 		)DdD)]488G#4]8H]DHHU\L]A!iTXXg%6i$((4.iDHHUhLiAyQ%%'BSy%a.B		) 
#t! 	-C773<V377399;#7V;LSRU;VD$%&%dD$8KMbdkmtuC 't,C	- 
J5 'Hs   
F:c                    dd}ddddd}t        |      }|j                         D ](  \  }\  }}|j                  |       || ||       ||<   * |S )Nc                v    | D cg c]  }|t        |       }}|sy t        |      t        |      z  S c c}w rQ   )r(   sumr}   )r   r=   xss      r1   _meanz$_fill_general_from_pt.<locals>._meanf  s;     $61eAh662wR   7s   66)r      )r      )r   
   )r   rw   r   )r   List[Optional[float]]returnOptional[float])r6   rR   rz   )ro   genr   slicesr   r   abs           r1   _fill_general_from_ptr   e  sl    ! 	F s)C||~ &Va773<R!W~CH& JrO   c                  :    e Zd ZU ded<   ded<   d	dZd	dZd	dZy)
CognitiveQuantitativeParsed Dict[str, List[Optional[float]]]r   Dict[str, Optional[float]]generalc                V    t        d | j                  j                         D              S )Nc              3  2   K   | ]  }|D ]  }|d u 
  y wrQ   rr   r   s      r1   rG   zACognitiveQuantitativeParsed.has_matrix_numbers.<locals>.<genexpr>  s      LSL11D=L=Lr   )r   r   r   selfs    r1   has_matrix_numbersz.CognitiveQuantitativeParsed.has_matrix_numbers~  s     LDII,<,<,>LLLrO   c                    t        d | j                  d   D              xs* t        d | j                  j                         D              S )Nc              3  $   K   | ]  }|d u 
 y wrQ   rr   rE   r=   s     r1   rG   z@CognitiveQuantitativeParsed.has_chart_numbers.<locals>.<genexpr>  s     :Q1D=:   rn   c              3  $   K   | ]  }|d u 
 y wrQ   rr   r   s     r1   rG   z@CognitiveQuantitativeParsed.has_chart_numbers.<locals>.<genexpr>  s      B
ATMB
r   )r   r   r   r   r   s    r1   has_chart_numbersz-CognitiveQuantitativeParsed.has_chart_numbers  sE    :$))D/:: 
c B
#'<<#6#6#8B
 ?
 	
rO   c                    t        d | j                  j                         D              rydD ]#  }t        d | j                  |   D              s# y y)Nc              3  $   K   | ]  }|d u 
 y wrQ   rr   r   s     r1   rG   z@CognitiveQuantitativeParsed.has_table_numbers.<locals>.<genexpr>  s     <q}<r   Trv   c              3  $   K   | ]  }|d u 
 y wrQ   rr   r   s     r1   rG   z@CognitiveQuantitativeParsed.has_table_numbers.<locals>.<genexpr>  s     8Q1D=8r   F)r   r   r   r   )r   r   s     r1   has_table_numbersz-CognitiveQuantitativeParsed.has_table_numbers  sM    <dll&9&9&;<<0 	B8$))B-88	 rO   N)r   r&   )__name__
__module____qualname____annotations__r   r   r   rr   rO   r1   r   r   y  s    
**''M

rO   r   c                *   t        | t              sy t        | j                  d            }t	        | j                  d            }t        |d   |      }t        ||      }|j                         s!t        d |j                         D              sy |S )Ncognitive_quantitative_matrixcognitive_general_scalesrn   )r   r   c              3  $   K   | ]  }|d u 
 y wrQ   rr   r   s     r1   rG   z2parse_evalua_psychoped_matrices.<locals>.<genexpr>  s     2[Q1D=2[r   )
r%   r6   r   rz   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(dGDF$$&s2['..JZ2[/[MrO   c                &   | yt        |       }t        j                  |      rEt        |t	        |      z
        dk  r+t        |      dk  rt        t        t	        |                  S |d}d|v r |j                  d      j                  d      }|S )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  %HrO   c                    g }|j                  d       |j                  ddj                  t              z          dD ]@  \  }}dj                  d  j                  |   D              }|j                  | d|        B |j                  d       |j                  ddj                   fd	t        D              z          |j                  d       |j                  d
       dj                  |      j                         S )Nz<CUADRO CUANTITATIVO (HABILIDADES COGNITIVAS Y COMUNICATIVAS)z	PRUEBAS: z | )rZ   rZ   r^   r^   rd   rd   )rh   ri   rn   rn   c              3  2   K   | ]  }t        |        y wrQ   )r  r   s     r1   rG   z:build_cognitive_quantitative_table_text.<locals>.<genexpr>  s     G!?1-Gr   : r    zESCALAS GENERALES: c              3  p   K   | ]-  }| d t        j                  j                  |              / yw)r  N)r  r   rz   )rE   rU   r  s     r1   rG   z:build_cognitive_quantitative_table_text.<locals>.<genexpr>  s1     ^!s"_V^^-?-?-BCDE^s   36uN   Gráfico: Puntuación típica (PT) — pruebas e índices generales (EVALÚA).
)appendrI   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 *	E 

Gv{{2GGwb()* 
LL	LL
**^~^
^	_ 
LL	LLab99U!!##rO   c                   	 ddl m} |xs dj                         j	                         }| j                   |d            D ]v  }|j                   |d            }||j                   |d            }|7|j                   |d            xs dj                         j	                         }||k(  st|c S  y# t        $ r Y yw xY w)	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findrz   )root_eltagr  wantsdtsdt_prtag_elr   s           r1   _find_sdt_element_by_tagr+    s    # I2$$&D||BwK( 	"Y-(>R[)>zz"W+&,"335;;=$;J	   s   B; ;	CCc                (   ddl m} ddlm} | j                  }|j
                  }| |d      }|j                  d|       t        |j                   |d                  D ]  }|j                  |         |d      }dD ]~  } |d|       }|j                   |d      d	       |j                   |d
      d       |j                   |d      d       |j                   |d      |       |j                  |        |j                  |       y )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_bordersrF    s    %
**CYYF~Y'

1f6>>"^"456 b.)GH 2dV%
r'{H%
r&z3
r)}c"
r)}i(r MM'rO   c                   ddl m} ddlm} | j                  }|j
                  }| |d      }|j                  d|       t        |j                   |d                  D ]  }|j                  |         |d      }|j                   |d      t        |             |j                   |d      d       |j                  |       y )	Nr   r-  r  r/  zw:tblWzw:wzw:typepct)r8  r.  r!  r  r9  r:  r;  r7   r<  r=  r>  r)   r  )r?  rH  r.  r  rA  rB  rC  tws           r1   _tbl_set_pct_widthrJ    s    %
**CYYF~Y'

1f6>>"X,/0 b	X	BFF2e9c#hFF2h<
MM"rO   c                N   ddl m} ddlm} | j                  j                         }t        |j                   |d                  D ]  }|j                  |         |d      }|j                   |d      |       |j                   |d      d       |j                  |       y )Nr   r-  r  zw:shdzw:fillr   clear)r8  r.  r!  r  _tcget_or_add_tcPrr7   r<  r=  r>  r  )cellfill_hexr.  r  tc_prrC  shds          r1   _set_cell_shadingrS    s    %HH$$&E5==G-. R
g
CGGBxL(#GGBwK!	LLrO   F	   boldsize_ptalign_centerc                   ddl m} ddlm} | j                  D ]D  }|r|j
                  |_        |j                  D ]   }||_         ||      |j                  _
        " F y )Nr   WD_ALIGN_PARAGRAPHPt)docx.enum.textr[  docx.sharedr]  
paragraphsCENTER	alignmentrunsrV  fontsize)rO  rV  rW  rX  r[  r]  pararuns           r1   _style_cell_textrh    sV     2 (/66DN99 	(CCHwKCHHM	((rO   c                
   |r|j                         sy	 ddlm} ddlm} ddlm} ddlm} ddl	m
}  ||       }t        |j                  j                  d      }|y|j                   |d	            }	|	yt!        |	      D ]  }
|	j#                  |
        d
}d}|j%                  ||      }|j&                  }|j)                         }||j#                  |       |	j+                  |       t-        |d       t/        |d       d}d}d}d}d}ddddd}|j0                  d   j2                  }d|d   _        |d   j7                  |d          d|d   _        |j8                  |d   j:                  d   _        t?        |d   d|d       |d   j7                  |d          d|d   _        |j8                  |d   j:                  d   _        t?        |d   d|d       tA        |d          tA        |d          |j0                  d   j2                  }d|d   _        tC        tD              D ]\  \  }}||d|z      _        |j8                  |d|z      j:                  d   _        t?        |d|z      d|d       tA        |d|z             ^ tC        tF              D ]L  \  }}|d|z      }||_        |j8                  |j:                  d   _        t?        |d|d       tA        |       N g d }tC        |d!"      D ]1  \  }\  }} |j0                  |   j2                  }!| |!d   _        t?        |!d   d|#       tI        d      D ]`  }tK        |j0                  |   |         |!d|z      _        |j8                  |!d|z      j:                  d   _        t?        |!d|z      |d$       b |d%k(  stC        tF              D ]n  \  }}|!d|z      }tK        |jL                  jO                  |            |_        |j8                  |j:                  d   _        t?        ||d$       tA        |d&       p 4 tC        tF              D ]   \  }}|jQ                  d!d|z         }"|jQ                  d'd|z         }#|"j7                  |#       |jR                  |"_*        tA        |"d&       d|"_        |"j:                  d   }$|j8                  |$_        |$jW                  ||         }%d|%_,         ||      |%jZ                  _.        |"j_                         }&|j8                  |&_        |&jW                  d(      }' ||      |'jZ                  _.         |ja                  |        y# t        $ r Y yw xY w))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_ALIGNMENTrZ  r  r\  acw:sdtContentr      )r   cols  4F81BDg       @g      @g      @zRE, PA, OP, MAzCL, PPM, EFz
OR, GR, OFzCN, RPr   r       rw   PRUEBASTrU        zESCALAS GENERALES*)r  r  r  )rh   rj   r     )start)rV  rW  )rW  rX     E7EDF7   r$   )1r   docxrk  docx.enum.tablerl  r^  r[  r!  r  r_  r]  r"  r+  elementbodyr$  r7   r=  	add_tabler9  	getparentr  rJ  rF  r   r   textmergera  r`  rb  rh  rS  r~   r   r   r{   r  r   rz   rO  TOPvertical_alignmentadd_runrV  rd  re  add_paragraphsave)(	docx_pathr  rk  rl  r[  r  r]  docr(  sdt_contentchildn_rowsn_colsr?  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   r0  r2  p0run_compp_dashrrs(                                           r1   inject_evalua_matrix_word_tabler    s+   
 113!>5#" 9
C
"3;;#3#3T
:C
{((2n-.Kk" "5!" FFMMvFM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 	LA-fkk"oa.@ACAJO1C1J1JCAJ!!!$.SQZdK	L A:#N3 /3QK(););C)@A,>,E,EQ) FF!!X.//  N+ "3jjBF#ArAv&		&!;!?!?#x(^^A)00::in-[""$-44^^C &z"" HHY_  s   U 	U&%U&      @)width_inchesc               j   |rt         j                  j                  |      sy	 ddlm} ddlm} ddlm} ddl	m
} ddlm} ddlm}	  ||       }
t!        |
j"                  j$                  |      }|y|j'                   |d	            }|yt)        |      D ]  }|j+                  |         |d
      }|j-                  |        |	||
j.                        }|j0                  |_        |j5                         }|j7                  | ||             |
j9                  |        y# t        $ r Y yw xY w)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   rj  rZ  r-  r  Inches	Paragraphrn  w:pwidthT)ospathisfiler|  rk  r^  r[  r8  r.  r!  r  r_  r  docx.text.paragraphr  r"  r+  r~  r  r$  r7   r=  r  _bodyra  rb  r  add_picturer  )r  r&  
image_pathr  rk  r[  r.  r  r  r  r  r(  r  r  new_p	paragraphrg  s                    r1   (inject_image_into_content_control_by_tagr    s    RWW^^J7!5)#&1 9
C
"3;;#3#3S
9C
{((2n-.Kk" "5!" Eu%+I,33I



COOJf\&:O;HHY+  s   $D& &	D21D2c                j    |\  }}|||z
  f||z   |f|||z   f||z
  |fg}| j                  |||       y )N)outlinefill)polygon)drawxyrr  r_   yptss          r1   _diamondr    sK    DAqq1u:AqzAq1u:Aqz
:CLLdL.rO   c                0	  89 | j                         sy	 ddlm}m}m} d\  }}|j                  d||fd      }|j                  |      }t        j                  j                  t        j                  j                  dd      d	d
      }		 |j                  |	d      }
|j                  |	d      }|j                  |	d      }d}|j!                  d|d|       dd|dz
  |dz
  f\  }9}}||z
  |9z
  c}8d=89fd}d}|dk  r9d|z
  dz  8z  z   }|j#                  ||f||fgdd       t%        |t'        |      z
        dk  rt)        t+        |            n|dj-                  dd       }|j!                  |dz
  |d!z
  f|d"|       |d#z  }|dk  r|j#                  |9f||f||f|9fgd$d       |d%z  }|d&z  }|d'z  }t/        d(      D cg c]  }|||d)z  z  z    }}||z   |d*z  z   }|j#                  |9f||fgd+d,       t/        d-      D cg c]  }||d*z  z   ||dz  z  z    }}||z   }t1        | j2                  d.         t4        D cg c]  }| j6                  j                  |       c}z   } t8        t4        z   }!d/}"t/        t;        |       dz
        D ]H  }| |   | |dz      }$}# ||#       ||$      }&}%|%#|&&|j#                  ||   |%f||dz      |&fg|"d0       J t=        |       D ]#  \  }}' ||'      }(|(t?        |||   |(fd1|"       % |d!z   })d}*|!D ]+  }+|jA                  d2|+|
3      },tC        |*|,d0   |,d   z
        }*- t=        |!      D ]D  \  }}+|jA                  d2|+|
3      }-|-d,   |-d   z
  }.|j!                  ||   |.d,z  z
  |)f|+d4|
       F d5}/d6}0|jA                  d2|0|3      }1|1d,   |1d   z
  }2|)|*z   |/z   }3|j!                  ||z   |2z
  d,z  |3f|0d7|       d8}4|jA                  d2|4|3      }5|5d,   |5d   z
  }6|3|1d0   |1d   z
  z   d9z   }7|j!                  ||z   |6z
  d,z  |7f|4|"|       |jE                  |d:;       y<# t
        $ r Y yw xY w# t        $ r |j                         }
|
}|
}Y w xY wc c}w c c}w c c}w )>NFr   )Image	ImageDraw	ImageFont)i  i  RGB)   r  r  WINDIRz
C:\WindowsFontsz	arial.ttf      rv  u<   Análisis cuantitativo — PT (pruebas e índices generales))P      )r  r  r  )r  rd  X   H      c           	         | t        j                  t        |             sy t        dt	        dt        |                   }d|z
  dz  z  z   S )N            @r  )r  r  r(   maxr|   )r   vcplot_hy0s     r1   vyz+render_evalua_pt_line_chart_png.<locals>.vy  sJ    ;dmmE#J7s3c
+,S2X$v---rO   r  g5^I@r  r  )         rs  )r  r  r
  z.1fr   r   r   )<   r  r  g      ?)(   r  r  g
ףp=
?gGz?g)\(?rw   g      &@g       @)         rw  r   rn   )r   f         r   )r   r   )rd  )   r  r     Puntuaciones)2   r  r  u   Puntuación típica (PT)   PNG)formatT)r   r   r   r   )#r   PILr  r  r  r"  newDrawr  r  rI   environrz   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_pathrd  
font_title
font_smalltitlex0x1y1plot_wr  gyyyrM   gapw_tests_span
w_gen_spanr   xs_testsdividerr  xs_genr   rU   r   labelsbluev0v1y_ay_br=   ypy_catcat_hr   lb0lblwgap_below_categories
axis_titletbrI  y_axis_titleleglb2lw2y_legr  r  s:                                                           @@r1   render_evalua_pt_line_chart_pngr    sk   ##%33 DAq
))EAq6?
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	B1Q,-..BHB<#)+GII}wm,?!ILDI!HMqgc	!Ac)9$::MFM	F	B"&v{{4'8"9\j<kWXV^^=O=OPQ=R<k"kD.(FD3t9q=! La$q1u+Bb62b6S?sII1s|bQi%56TIK	L $ -1U:1r{At,	- GEE ,mmFCdm3E3q6CF?+, F# N3]]63T]2URU]		2a526>5)3\	MN J	vz
	;B	AAB5=#77LIIR"!<0*<V`Ia
$C
--*-
5C
a&3q6/CBqEBqEM*R/EIIR#"E*CdILHH\%H(u    %%'

@ C N =ls5   
Q 
6Q% R	R"R	Q"!Q"%RRc                B  
 t         j                  j                        sy	 ddlm} ddlm ddlm ddl	m

  ||       |dd	
fd}j                  j                  j                   d            D ]  } ||       s n sfj                  D ]W  }|j                   D ]B  }|j"                  D ]-  }|j$                  D ]  }	 ||	j&                         s n s- n sB n sW n rj)                  |        S # t        $ r Y yw xY w)
NFr   rj  r  r  r  c                   dj                  d | j                   	d            D              }|vry  | j                        }|j                          |j	                         }|j                   d             d
y )Nr    c              3  <   K   | ]  }|j                   xs d   ywr    Nr  rE   rM   s     r1   rG   zbinsert_chart_placeholder_paragraph_image.<locals>._replace_in_paragraph_element.<locals>.<genexpr>=       D!"D   w:tg@r  T)rI   r#  r  rL  r  r  )p_elfullpr  r  r  r  markerpng_pathr  replaceds       r1   _replace_in_paragraph_elementzOinsert_chart_placeholder_paragraph_image.<locals>._replace_in_paragraph_element;  sl    wwDtyyE/CDDdCII&		IIK	hfSk2rO   r  r#  r   r   None)r  r  r  r|  rk  r!  r  r  r  r_  r  r"  r~  r  r#  tablesr   r   r`  _elementr  )r  r'  placeholderrk  r)  r#  rA  r   rO  rf  r  r  r  r&  r  r(  s    `        @@@@@@r1   (insert_chart_placeholder_paragraph_imager/  ,  s%   77>>(#!#1& 9
CFH
 
   %%bi0 %d+
 :: 	Cxx 	II D $ "5dmmD#!"   	 	 OS  s   D 	DDc                  	
 	 ddl m} ddlm ddlm	  ||       d
d	
fd}j                  j                  j                   d            D ]
  } ||        j                  D ]G  }|j                  D ]6  }|j                  D ]%  }|j                  D ]  } ||j                          ' 8 I 
rj                  |        y y # t        $ r Y y w xY w)	Nr   rj  r  r  Fc                .   dj                  d | j                   d            D              }|vry  | j                        }|j                  j	                  d      j                         }|j                          |r|j                  |       dy )Nr    c              3  <   K   | ]  }|j                   xs d   ywr  r  r  s     r1   rG   zIstrip_chart_placeholder_from_docx.<locals>._strip_p_el.<locals>.<genexpr>m  r   r!  r"  T)rI   r#  r  r  r+   r*   rL  r  )	r#  r$  r%  r0   r  changedr  r.  r  s	       r1   _strip_p_elz6strip_chart_placeholder_from_docx.<locals>._strip_p_elk  sx    wwDtyyE/CDDd"dCII&ffnn["-335		IIcNrO   r  r*  )r|  rk  r!  r  r  r  r"  r~  r  r#  r,  r   r   r`  r-  r  )r  r.  rk  r4  r#  rA  r   rO  rf  r  r3  r  r  s    `       @@@@r1   !strip_chart_placeholder_from_docxr5  `  s    !#1 9
CG
 
   %%bi0 Dzz /88 	/C		 / OO /D.//	//
  3  s   C 	CC)r/   r   r   r   )r/   r   r   r   )r<   r)   r   r)   )rS   Dict[str, Any]rT   r)   r   r   )rs   r)   r   zTuple[str, ...])r   r   )r   r)   r   r6  r   r   r   r+  )r   r6  r   r   r   r&   )r   z	List[Any]r   r   r   r&   )r   r   r   r   )r/   r   r   r   )ro   r   r   r   r   r   )r  r6  r   z%Optional[CognitiveQuantitativeParsed])r=   r   r   r)   )r  r   r   r)   )r%  r   r&  r)   r   zOptional[Any])rr  )r?  r   r@  r)   r   r+  )rq  )r?  r   rH  r'   r   r+  )D9E2F3)rO  r   rP  r)   r   r+  )
rO  r   rV  r&   rW  r(   rX  r&   r   r+  )r  r)   r  r   r   r&   )
r  r)   r&  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)   r'  r)   r.  r)   r   r&   )r  r)   r.  r)   r   r+  )2__doc__
__future__r   r8   r  r  rK   rC   dataclassesr   typingr   r   r   r   r	   r   r  r   CHART_PLACEHOLDERAC_CONTENT_CONTROL_HOLDr2   r?   rN   rX   rt   rx   r   r   r   r   r   r   r   r   r   r  r  r  r+  rF  rJ  rS  rh  r  r  r  r  r/  r5  rr   rO   r1   <module>r>     sx   #   	 	  ! 3 3a
I a8	 8 -  #  ,D,&C@24nHV<(   *		$.(,"
  (
( ( 	(
 ( 
($|H **	* *
 * 
*Z/_D `q 1h J[ rO   