
    7j                         d Z ddlZddlmZmZ 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ej                  dd      Zd Z	d Z
d  Zd! Zd" Zd# Zd$ Zd% Zy)&zDominio puro del modulo "Estequiometria" (4.1.5-4.1.7).

Sin dependencias de Flask. Define la clave de respuestas y la calificacion por
tema, con normalizacion de respuestas y descuento por incidencias.
    N)DESCUENTO_INCIDENTETEMASBACD)01234z1,3,2z4,3,2z1,5,3,4z2,2,2,1z1,2,1,1z1,1,1z2,7,4,6z	2,13,8,10)
r	   r
   r   r   r   56789r   117324r   z10.8z34.6z0.5z302.2z7.45)z4.1.54.1.64.1.7ACTu   áéíóúüñÁÉÍÓÚÜÑaeiouunAEIOUUNc                     t        | t              sy| j                  dd      j                  dd      }|j                  t              j                         }|j                         S )zENormaliza una respuesta: minusculas, sin acentos, sin espacios extra.  _)
isinstancestrreplace	translate_MAP_ACENTOSlowerstripvalortextos     L   /home/adonis/Público/Cursos/Quimica/estequiometria/estequiometria_grader.py
normalizarr(   1   sO    eS!MM#r"**33EOOL)//1E;;=    c                 @   t        | t              sy| j                         }|j                  dd      }|j                  dd      j                  dd      }|j                  dd      }t	        j
                  dd|      }|j                  d      }|j                         S )uR   Normaliza coeficientes: elimina espacios, paréntesis, guiones y consolidar comas.r   -,()r   z,+)r   r   r#   r   resubr"   r$   s     r'   normalizar_coeficientesr1   :   s    eS!KKMEMM#s#EMM#r"**33EMM#r"EFF5#u%EKKE;;=r)   c                     t        | t              sy| j                         }t        j                  dd|t        j
                        }|j                  dd      }|j                         S )z=Normaliza un resultado numerico: elimina espacios y unidades.r   z"\s*(g|mol|l|mL|kg|g/mol|mol/L)\s*$)flagsr,   .)r   r   r#   r/   r0   
IGNORECASEr   r$   s     r'   normalizar_numeror6   L   sO    eS!KKMEFF8"e2==YEMM#s#E;;=r)   c                     t         |    d   S )z'Puntos posibles del tema (segun TEMAS).   )r   )temas    r'   puntos_posiblesr:   W   s    ;q>r)   c                    | t         vrt        d|        t         |    }t        |       }d}|j                         D ]|  \  }}|j	                  |      }|| dk(  rt        |      t        |      k(  s7|dz  }=| dk(  rt        |      t        |      k(  sZ|dz  }`t        |      t        |      k(  sx|dz  }~ |rt        ||z  dz        nd}|||dS )z9Califica un tema y devuelve {puntos, posibles, nota_100}.zTema desconocido: r   r      r   d   )puntosposiblesnota_100)	CLAVE
ValueErrorr:   itemsgetr1   r6   r(   round)	r9   
respuestasclaver?   r>   indicecorrector%   r@   s	            r'   calificar_temarJ   \   s    5-dV455$KEt$HF!KKM v&=7?&u-1H1RR!W_ '+<X+FF!% Jx$88! 2:uVh&,-qH(IIr)   c                 .    t        d| t        |z  z
        S )zBAplica descuento por incidencias a una nota sobre 100 (piso en 0).r   )maxr   )r@   n_incidentess     r'   
nota_finalrN   t   s    q(0<??@@r)   c                     d}d}t         D ].  }t        || j                  |i             }||d   z  }||d   z  }0 |dk(  ryt        ||z  dz        }t	        ||      S )z7Calcula la nota final unificada del modulo (sobre 100).r   r>   r?   r=   )r   rJ   rD   rE   rN   )respuestas_por_temarM   total_puntostotal_posiblesr9   resumen
nota_brutas          r'   nota_modulorU   y   s    LN . ':'>'>tR'HI))'*--. |n4s:;Jj,//r)   c                     i }i }t         D ]8  }t        || j                  |i             }|d   ||<   t        |d   |      ||<   : t	        | |      }||||t
        |z  dS )z6Califica todos los temas y aplica el descuento global.r@   )rN   notasnotas_brutas
incidentesdescuento_total)r   rJ   rD   rN   rU   r   )rP   rM   rW   rX   r9   rS   nota_final_modulos          r'   calificar_examenr\      s    EL D ':'>'>tR'HI$Z0T !4lCdD $$7F'$".= r)   )__doc__r/   estequiometria_configr   r   rA   r   	maketransr!   r(   r1   r6   r:   rJ   rN   rU   r\    r)   r'   <module>ra      s    
 < Ss3?  3Ss=5	: }}"$4
$
J0A
0r)   