ó
    †ñ:i8`  ã            	       ó$  • 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	  SSK
Jr  SSKJrJrJr  SSKJr   S SKrS SKJr  S S	KJr  0 rS
S
S
SSSSSS.rS rS rS r\4S jr\4S jrS rSS jr \" SSSSSS.5      r!S S jr"g! \ a     NFf = f)!é    N)ÚLinearSegmentedColormapé   )Ú__version__)Úcolorsé   )ÚmethodsÚmetricsÚmodels)Úrun_experiments)ÚHTMLz#1E88E5z#ff0d57z#13B755z#999999z#666666z#7C52FF)Ú	tree_shapÚ	deep_shapÚlinear_shap_corrÚlinear_shap_indÚcoefÚrandomÚconst_randomÚkernel_shap_1000_meanrefc                 óp  • [        [        U 5      R                  R                  S5       H‰  nUR	                  5       nUR                  S5      (       d  M+  UR                  S5      S   R	                  5       nUR                  S5      (       a$  [        R                  " [        USS 5      5      s  $ Us  $    g)	NÚ
zcolor = Ú=r   zred_blue_circle(é   éÿÿÿÿz#000000)	Úgetattrr   Ú__doc__ÚsplitÚstripÚ
startswithr   Úred_blue_circleÚfloat)ÚmethodÚlineÚvs      ÚW/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/shap/benchmark/plots.pyÚget_method_colorr%   ù   sŽ   € Üœ Ó(×0Ñ0×6Ñ6°tÖ<ˆØ�z‰z‹|ˆØ�?‰?˜:×&Ó&Ø—
‘
˜3“ Ñ"×(Ñ(Ó*ˆAØ�|‰|Ð.×/Ñ/Ü×-Ò-¬e°A°b¸°H«oÓ>Ò>à’ñ =ð ó    c                 óø   • [        [        U 5      R                  R                  S5       HM  nUR	                  5       nUR                  S5      (       d  M+  UR                  S5      S   R	                  5       s  $    g)Nr   zlinestyle = r   r   Úsolid)r   r   r   r   r   r   )r!   r"   s     r$   Úget_method_linestyler)     s_   € Üœ Ó(×0Ñ0×6Ñ6°tÖ<ˆØ�z‰z‹|ˆØ�?‰?˜>×*Ó*Ø—:‘:˜c“? 1Ñ%×+Ñ+Ó-Ò-ñ =ð r&   c                 ó†  • [        [        U 5      R                  R                  S5       H”  nUR	                  5       nUS-   nSnUR                  U5      (       a0  UR                  U5      (       a  U[        U5      [        U5      *  s  $ US-   nUR                  U5      (       d  M}  [        U[        U5      S  5      s  $    g)Nr   z = "Ú"z = Ú )	r   r	   r   r   r   r   ÚendswithÚlenr    )ÚmetricÚattrr"   ÚprefixÚsuffixs        r$   Úget_metric_attrr3     s¨   € Üœ Ó(×0Ñ0×6Ñ6°tÖ<ˆØ�z‰z‹|ˆð ˜‘ˆØˆØ�?‰?˜6×"Ñ" t§}¡}°V×'<Ñ'<Øœ˜F›¤s¨6£{ lÐ3Ò3ð ˜‘ˆØ�?‰?˜6×"Ó"Ü˜œc &›k˜mÐ,Ó-Ò-ñ =ð r&   c                 ó   • [        XUS9n[        R                  " 5         / nU Hg  u  nu  pxUu    pšn	[        US5      nUS:X  a  U* nOUS:X  a  SU-
  n[        R
                  R                  Xx5      US   -  nUR                  XÊU45        Mi     [        U5       Hz  u  pÊn[        [        U
5      R                  R                  S5      S   R                  5       nUS	 S
3U-   n[        R                  " WUS   -  UU[        U
5      S[!        U
5      S9  M|     [        [
        U5      R                  R                  S5      S   R                  5       n[        R"                  " [        US5      5        [        R$                  " [        US5      5        [        [&        U S-   U-   5      R                  R                  S5      S   R                  5       n[        R(                  " US
-   U-   5        [        R*                  " 5       R,                  R/                  S5        [        R*                  " 5       R0                  R/                  S5        [        R*                  " 5       R2                  S   R5                  S5        [        R*                  " 5       R2                  S   R5                  S5        [        R*                  " 5       R7                  5       u  nn[        R8                  " [;        U5      [;        U5      5        [        R<                  " 5       $ )N©ÚdatasetÚmodelr/   Ú	transformÚnegateÚ	one_minusr   r   r   r   z6.3fú - r   )ÚlabelÚcolorÚ	linewidthÚ	linestyleÚxlabelÚylabelÚ__ÚbottomÚleftÚrightFÚtop)r   ÚplÚfigurer3   Úsklearnr	   ÚaucÚappendÚsortedr   r   r   r   r   Úplotr%   r)   r@   rA   r
   ÚtitleÚgcaÚxaxisÚset_ticks_positionÚyaxisÚspinesÚset_visibleÚget_legend_handles_labelsÚlegendÚreversedÚgcf)r6   r7   r/   ÚcmapÚexperimentsÚ
method_arrÚnameÚfcountsÚscoresÚ_r!   r8   rJ   Úmethod_titler<   Úmetric_titleÚmodel_titleÚahandlesÚalabelss                      r$   Ú
plot_curvere     s]  € Ü!¨'ÀvÑN€KÜ‡I‚I„KØ€JÛ#.ÑˆÑˆwØ‰ˆˆ1�aÜ# F¨KÓ8ˆ	Ø˜Ó Ø�W‰FØ˜+Ó%Ø˜‘ZˆFÜ�o‰o×!Ñ! 'Ó2°W¸R±[Ñ@ˆØ×Ñ˜3¨Ð/Ö0ñ $/ô  & jÖ1Ñˆ�VÜœw¨Ó/×7Ñ7×=Ñ=¸dÓCÀAÑF×LÑLÓNˆØ�t�*˜CÐ  <Ñ/ˆÜ
�ŠØ�g˜b‘kÑ!ØØÜ" 6Ó*ØÜ*¨6Ó2ô	
ñ  2ô œ7 FÓ+×3Ñ3×9Ñ9¸$Ó?ÀÑB×HÑHÓJ€LÜ‡I‚IŒo˜f hÓ/Ô0Ü‡I‚IŒo˜f hÓ/Ô0Üœ& '¨D¡.°5Ñ"8Ó9×AÑA×GÑGÈÓMÈaÑP×VÑVÓX€KÜ‡H‚Hˆ\˜EÑ! KÑ/Ô0Ü‡F‚FƒH‡N�N×%Ñ% hÔ/Ü‡F‚FƒH‡N�N×%Ñ% fÔ-Ü‡F‚FƒH‡O�O�GÑ×(Ñ(¨Ô/Ü‡F‚FƒH‡O�O�EÑ×&Ñ& uÔ-ÜŸš›×:Ñ:Ó<Ñ€HˆgÜ‡I‚IŒh�xÓ ¤(¨7Ó"3Ô4Ü�6Š6‹8€Or&   c                 óä	  • [        XUS9n[        R                  " 5         / nU H[  u  nu  pxUu    pšn	[        R                  " [        R
                  " US   US   -
  5      5      nUR                  XºUS   US   45        M]     [        R                  " S5      nS[        U5      -  S-  nUS-  n[        R                  " XÅS   S   US	S
SS9  SnSSS.n[        U5       Hž  u  pºn	n[        [        U
5      R                  R                  S5      S   R                  5       nUS S3U-   n[        R                  " XÍU-  -   UR!                  5       UUS[#        U
5      UR%                  ['        U
5      S 5      S9  US-  nM      [        [(        U5      R                  R                  S5      S   R                  5       n[        R*                  " S5        [        R,                  " S5        [        [.        U S-   U-   5      R                  R                  S5      S   R                  5       n[        R0                  " US-   U-   5        [        R2                  " 5       R4                  R7                  S5        [        R2                  " 5       R8                  R7                  S5        [        R2                  " 5       R:                  S   R=                  S5        [        R2                  " 5       R:                  S   R=                  S5        [        R2                  " 5       R?                  5       u  nn[        R@                  " [        RB                  " / SQ5      XÞ-   S-  -
  / SQ5        [        R2                  " 5       R4                  RE                  [F        RH                  RK                  / SQ5      5        [        R2                  " 5       R4                  RM                  [F        RH                  RO                  / SQ5      5        [        R2                  " 5       RQ                  S SS!9  [        RR                  " SS"S#S$9  [        R2                  " 5       RU                  5       n[        R2                  " 5       RW                  URX                  URZ                  UR\                  S%-  -   UR^                  UR\                  S&-  /5        [        R2                  " 5       Ra                  UUS'S(SS)9  [        Rb                  " 5       $ )*Nr5   r   r   é   ç      ð?çš™™™™™é?gÍÌÌÌÌÌì?r   zHuman ConsensusÚblackÚwhite)r<   r=   Ú	edgecolorz///z...)ÚdashedÚdottedr   z.2fr;   )r<   rl   r=   ÚhatchzFeatures in the modelzFeature attribution valuerB   rC   rD   rE   FrF   )r   r   r   rg   )r,   r,   r,   r,   )gš™™™™™Ù?gffffffö?g333333@)ÚFeverÚCoughÚHeadacheÚminor)ÚwhichÚlengthz#aaaaaaç      à?)r=   r>   g333333Ó?gffffffæ?zupper center)rv   g333333Ã¿)ÚlocÚbbox_to_anchorÚncol)2r   rG   rH   ÚnpÚsumÚabsrK   Úaranger.   ÚbarrL   r   r   r   r   r   Úflattenr%   Úgetr)   r	   r@   rA   r
   rN   rO   rP   rQ   rR   rS   rT   rU   ÚxticksÚarrayÚset_minor_locatorÚ
matplotlibÚtickerÚFixedLocatorÚset_minor_formatterÚFixedFormatterÚtick_paramsÚaxhlineÚget_positionÚset_positionÚx0Úy0ÚheightÚwidthrV   rX   )r6   r7   r/   rY   rZ   r[   r\   r]   r^   r_   r!   Údiff_sumÚindsÚ	inc_widthr�   ÚiÚline_style_to_hatchÚmethods_attrsr`   r<   ra   rb   rc   rd   Úboxs                            r$   Ú
plot_humanr˜   D  s±  € Ü!¨'ÀvÑN€KÜ‡I‚I„KØ€JÛ#.ÑˆÑˆwØ‰ˆˆ1�aÜ—6’6œ"Ÿ&š& ¨¡¨V°A©YÑ!6Ó7Ó8ˆØ×Ñ˜8¨V°A©Y¸¸q¹	ÐBÖCñ $/ô
 �9Š9�Q‹<€DØ”s˜:“Ñ&¨#Ñ-€IØ˜‰O€EÜ‡F‚Fˆ4˜A‘˜qÑ! 5Ð0AÈÐ\cÒdØ	€AØ%*°eÑ<ÐÜ.4°ZÖ.@Ñ*ˆ˜!˜]Üœw¨Ó/×7Ñ7×=Ñ=¸dÓCÀAÑF×LÑLÓNˆØ˜C�. Ð$ |Ñ3ˆÜ
�ŠØ˜q‘=Ñ Ø×!Ñ!Ó#ØØØÜ" 6Ó*Ø%×)Ñ)Ô*>¸vÓ*FÈÓMò	
ð 	
ˆQ‰Šñ /Aô œ7 FÓ+×3Ñ3×9Ñ9¸$Ó?ÀÑB×HÑHÓJ€LÜ‡I‚IÐ%Ô&Ü‡I‚IÐ)Ô*Üœ& '¨D¡.°5Ñ"8Ó9×AÑA×GÑGÈÓMÈaÑP×VÑVÓX€KÜ‡H‚Hˆ\˜EÑ! KÑ/Ô0Ü‡F‚FƒH‡N�N×%Ñ% hÔ/Ü‡F‚FƒH‡N�N×%Ñ% fÔ-Ü‡F‚FƒH‡O�O�GÑ×(Ñ(¨Ô/Ü‡F‚FƒH‡O�O�EÑ×&Ñ& uÔ-ÜŸš›×:Ñ:Ó<Ñ€Hˆgä‡I‚IŒb�hŠh’|Ó$¨	Ñ(9¸QÑ'>Ñ>Ò@PÔQä‡F‚FƒH‡N�N×$Ñ$¤Z×%6Ñ%6×%CÑ%CÂOÓ%TÔUÜ‡F‚FƒH‡N�N×&Ñ&¤z×'8Ñ'8×'GÑ'GÒHfÓ'gÔhÜ‡F‚FƒH×Ñ˜w¨qÐÑ1ä‡J‚Jˆq˜	¨SÒ1ä
�&Š&‹(×
Ñ
Ó
!€CÜ‡F‚FƒH×Ñ˜3Ÿ6™6 3§6¡6¨C¯J©J¸Ñ,<Ñ#<¸c¿i¹iÈÏÉÐVYÑIYÐZÔ[ô ‡F‚FƒH‡O�O�H˜g¨>È,Ð]^€OÑ_ä�6Š6‹8€Or&   c           	      óÈ   • S[        [        R                  " [        R                  " X-
  5      5      [        R                  " U 5      R                  5       S-   -  S5      -
  nU$ )zFConverts human agreement differences to numerical scores for coloring.r   rh   )Úminrz   r{   r|   )Úhuman_consensusr–   r#   s      r$   Ú_human_score_maprœ   |  sK   € à	ŒC”—’”r—v’v˜mÑ=Ó>Ó?Ä2Ç6Â6È/ÓCZ×C^ÑC^ÓC`ÐcdÑCdÑeÐgjÓkÑk€AØ€Hr&   c                 ó¤  ^^• 0 n0 n[        UU4S jU 5       H¶  u  u    pxn	u  p«[        U	S5      Xi'   X•;  a  0 XY'   U(       a?  [        U	S5      nUS:X  a  U* nO)US:X  a  SU-
  nOUS:X  a  [        R                  " U5      * nU
c	  XµU	   U'   Mu  U
S:X  a  [	        U6 XY   U'   MŠ  [
        R                  R                  X«5      U
S	   -  nXÕU	   U'   M¸     [        UR                  5       5      n[        U VVs1 s H  oõU   R                  5         H  nUiM     M!     snn5      nS
[        R                  " [        U5      [        U5      45      -  n[        [        U5      5       H0  n[        [        U5      5       H  nX^U      UU      UUU4'   M     M2     [        R                  " US
:H  5      S:X  d   S5       eU(       a;  UUR                  S5      -
  UR                  S5      UR                  S5      -
  S-   -  n[        R                   " UR#                  S5      * 5      nU Vs/ s H  nUU   PM
     nnUUS S 24   nUUU4$ s  snnf s  snf )Nc                 ó>   >• U S   S   T:H  =(       a    U S   S   T:H  $ )Nr   r   © )Úxr6   r7   s    €€r$   Ú<lambda>Úmake_grid.<locals>.<lambda>…  s.   ø€ ÀQÀqÁTÈ!ÁWÐPWÑEW×ElÐ\]Ð^_Ñ\`ÐabÑ\cÐglÑ\lÐElr&   Ú
sort_orderr8   r9   r:   r   Ú
negate_logÚhumanr   ii�ÿÿr   zThere are missing data values!g:Œ0âŽyE>)Úfilterr3   rz   Úlog10rœ   rI   r	   rJ   ÚlistÚkeysÚonesr.   Úranger{   rš   ÚmaxÚargsortÚmean)r^   r6   r7   Ú	normalizer8   Ú
color_valsÚmetric_sort_orderr_   r!   r/   r]   ÚscoreÚtransform_typerJ   Úcol_keysÚkr#   Úrow_keysÚdatar”   Újr’   s    ``                   r$   Ú	make_gridr¹   ‚  s=  ù€ Ø€JØÐÜ4:Õ;lÐntÖ4uÑ0ÑˆˆA�vÑ 0 Ü$3°F¸LÓ$IÐÑ!ØÓ#Ø!#ˆJÑæÜ,¨V°[ÓAˆNØ Ó)Ø˜‘Ø ;Ó.Ø˜E™	‘Ø <Ó/ÜŸš %›Ð(�à‰?Ø).�vÑ˜vÓ&Ø˜ÓÜ)9¸5Ð)AˆJÑ˜vÓ&ä—/‘/×%Ñ% gÓ5¸À¹ÑCˆCØ),�vÑ˜vÓ&ñ) 5vô0 �J—O‘OÓ%Ó&€HÜ¡ÔG¢˜1¸Q±-×2DÑ2D×2F¨Q“QÑ2F‘Q¡ÒGÓH€Hà”B—G’GœS ›]¬C°«MÐ:Ó;Ñ;€Dä”3�x“=Ö!ˆÜ”s˜8“}Ö%ˆAØ#¨Q¡KÑ0°¸!±Ñ=ˆD��A�‹Jó &ñ "ô �6Š6�$˜&‘.Ó! QÓ&ÐHÐ(HÓHÐ&æØ�t—x‘x “{Ñ" t§x¡x°£{°T·X±X¸a³[Ñ'@À4Ñ'GÑHˆô �:Š:�t—y‘y “|�mÓ$€DÙ%)Ó*¢T �˜”¡T€HÐ*Ø�’a�‰=€Dà�X˜tÐ#Ð#ùó% Hùò +s   Ã5&I
È(IÚred_blue_solid))ç        çÙØØØØØè?r¼   )rh   ç”?r½   ))r»   çÁ?r¾   )rh   r¼   r¼   ))r»   r½   r½   )rh   ç¸?r¿   ))r»   r   r   )rh   r   r   )ÚredÚgreenÚblueÚalphac                 ó  • Ub  [         R                  " U5        / nU H  nUR                  [        XS95        M     SnSnUS-  nUS-  n[	        U5       GH–  u  pt[        X0U5      u  p‰n
U	 GHP  nSnUR                  S5      (       a  [        XU5        SnOUS	;  a  [        XU5        SnU(       d  MH  [        R                  " 5       n[        R                  " 5       R                  S
S5        [        R                  " USSS9  Ub!  [        R                  " U SU  SU SU S3SS9  [        R                  " 5         UR!                  S5        ["        R$                  " UR'                  5       5      R)                  S5      R+                  SS5      nSU -   S-   U-   S-   U-   nUSU SU S3-  nUSU S3-  nUS-  nGMS     [-        [.        U S-   U-   5      R0                  R3                  S5      S   R5                  5       nUS:X  a{  US-  n[7        U
R8                  S   5       HK  n[-        [:        U	U   5      R0                  R3                  S5      S   R5                  5       nUS U-   S!-   -  nMM     US"-  nUS#-  nUS$-  nUS%U
R8                  S    S&U S'3-  n[7        U
R8                  S   5       GH  nUS(-  n[-        [<        UU   5      R0                  R3                  S5      S   R5                  5       nUS)U-   S*-   -  n[7        U
R8                  S   5       H¨  nSU -   S-   U-   S-   U	U   -   nUS+U S,3-  nUS-[?        S5      -   S.-   [?        [A        S/ [B        RD                  " S0U
UU4   S1-
  -  5      S S2  5       5      5      -   S3-   [?        S4U
UU4   -  5      -   S5-   [?        S4U
UU4   -  5      -   S6-   -  nUS*-  nMª     US"-  nGM     US7U
R8                  S   S-    S83-  nGM™     US9-  nUS:-  nUS;[F        -   S<-   -  nUS=-  nUS>U S?:X  a  S@OS-   SA-   -  nUSBU SC:X  a  S@OS-   SD-   -  nUSEU SF:X  a  S@OS-   SG-   -  nUSH-  nUSI-  nUSJ-  nUSK-  nSLn[7        USM-
  5       HŠ  nUS(-  nUSN-  nUU-
  S-
  US-
  -  nUSO[?        [A        SP [B        RD                  " S0US1-
  -  5       5       5      S S2 5      -   S3-   [?        S4U-  5      -   S5-   [?        S4U-  5      -   S6-   -  nUSQ-  nUS"-  nMŒ     USR-  nUSS-  nUb]  [I        UST-   SU5       nURK                  SV5        URK                  U5        URK                  U5        URK                  SW5        S S S 5        g [M        XV-   5      $ ! , (       d  f       g = f)XN)r6   r7   zR<style type='text/css'> .shap_benchmark__select:focus { outline-width: 0 }</style>r,   za<div style='position: fixed; left: 0px; top: 0px; right: 0px; height: 230px; background: #fff;'>
z‹<div style='position: absolute; bottom: 0px; left: 0px; right: 0px;' align='center'><table style='border-width: 1px; margin-right: 100px'>
FÚhuman_T)Úlocal_accuracyÚruntimeÚconsistency_guaranteesgÛ¶mÛ¶m@g·mÛ¶mÛ@Úpngé¯   )ÚformatÚdpiz/plot_r_   z.pdfÚpdf)rË   r   zutf-8r   Úplot__rB   z'<div onclick='document.getElementById("z¨").style.display = "none"' style='display: none; position: fixed; z-index: 10000; left: 0px; right: 0px; top: 0px; bottom: 0px; background: rgba(255,255,255,0.9);' id='z'>zÉ<img width='600' height='500' style='margin-left: auto; margin-right: auto; margin-top: 230px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);' src='data:image/png;base64,z</div>z9<tr><td style='background: #fff; width: 250px'></td></td>r   zð<td style='width: 40px; min-width: 40px; background: #fff; text-align: right;'><div style='margin-left: 10px; margin-bottom: -5px; white-space: nowrap; transform: rotate(-45deg); transform-origin: left top 0; width: 1.5em; margin-top: 8em'>z</div></td>z</tr>
z</table></div></div>
zK<table style='border-width: 1px; margin-right: 100px; margin-top: 230px;'>
z3<tr><td style='background: #fff'></td><td colspan='zU' style='background: #fff; font-weight: bold; text-align: center; margin-top: 10px;'>z</td></tr>
z<tr>ze<td style='background: #ffffff; text-align: right; width: 250px' title='shap.LinearExplainer(model)'>z</td>
z&<td onclick='document.getElementById("z¹").style.display = "block"' style='padding: 0px; padding-left: 0px; padding-right: 0px; border-left: 0px solid #999; width: 42px; min-width: 42px; height: 34px; background-color: #fff'>z<div style='opacity: z; background-color: rgbc              3   ó>   #   • U  H  n[        US -  5      v •  M     g7f©éÿ   N©Úint©Ú.0r#   s     r$   Ú	<genexpr>Úplot_grids.<locals>.<genexpr>  s   é € ÐmÒ6l°¤ A¨¡G§ Ò6lùó   ‚é   ri   r   z
; height: é   z1px; margin-left: auto; margin-right: auto; width:z
px'></div>z<tr><td colspan='z%' style='background: #fff'></td></tr>z</table>zs<div style='position: fixed; left: 0px; top: 0px; right: 0px; text-align: left; padding: 20px; text-align: right'>
z�<div style='float: left; font-weight: regular; font-size: 24px; color: #000;'>SHAP Benchmark <span style='font-size: 14px; color: #777777;'>vz</span></div>
a/  <select id='shap_benchmark__select' onchange="document.location = '../' + this.value + '/index.html'"dir='rtl' class='shap_benchmark__select' style='font-weight: normal; font-size: 20px; color: #000; padding: 10px; background: #fff; border: 1px solid #fff; -webkit-appearance: none; appearance: none;'>
z<option value='human' r¥   Úselectedz)>Agreement with Human Intuition</option>
z<option value='corrgroups60' Úcorrgroups60z'>Correlated Groups 60 Dataset</option>
z$<option value='independentlinear60' Úindependentlinear60z(>Independent Linear 60 Dataset</option>
z
</select>
z</div>
z€<table style='border-width: 0px; width: 100px; position: fixed; right: 50px; top: 200px; background: rgba(255, 255, 255, 0.9)'>
za<tr><td style='background: #fff; font-weight: normal; text-align: center'>Higher score</td></tr>
é   é	   zk<td style='padding: 0px; padding-left: 0px; padding-right: 0px; border-left: 0px solid #999; height: 34px'>z-<div style='opacity: 1; background-color: rgbc              3   ó>   #   • U  H  n[        US -  5      v •  M     g7frÐ   rÒ   rÔ   s     r$   rÖ   r×   O  s   é € ÐYÒ.X¨œ˜A ™GŸ˜Ò.XùrØ   z</td>z`<tr><td style='background: #fff; font-weight: normal; text-align: center'>Lower score</td></tr>
z	</table>
z/index.htmlÚwzh<html><body style='margin: 0px; font-size: 16px; font-family: "Myriad Pro", Arial, sans-serif;'><center>z</center></body></html>)'ÚosÚmkdirÚextendr   Ú	enumerater¹   r   r˜   re   ÚioÚBytesIOrG   rX   Úset_size_inchesÚsavefigÚcloseÚseekÚbase64Ú	b64encodeÚreadÚdecodeÚreplacer   r
   r   r   r   r«   Úshaper	   r   ÚstrÚtupler   Úred_blue_no_boundsr   ÚopenÚwriter   )r6   Úmodel_namesÚout_dirr^   r7   r1   ÚoutÚindr¶   r´   r·   r/   Ú	save_plotÚbufÚdata_uriÚplot_idrb   r¸   ra   r”   r`   Úlegend_sizeÚvalÚfs                           r$   Ú
plot_gridsr  ¾  s,  € ØÑÜ
�Š�Ôà€FÛˆØ�‰”o¨gÑCÖDñ ð b€FØ
€Cð ÐoÑo€CØð  Zñ  Z€CÜ ×,‰
ˆÜ#,¨V¸eÓ#DÑ ˆ˜Dô
 ˆFØˆIØ× Ñ  ×*Ñ*Ü˜7¨6Ô2Ø ‘	ØÐVÓVÜ˜7¨6Ô2Ø �	çˆyÜ—j’j“l�Ü—’“×(Ñ(¨°|ÔDÜ—
’
˜3 u°#Ò6ØÑ&Ü—J’J ' ¨&°°	¸¸5¸'ÀÀ6À(È$ÐOÐX]Ò^Ü—’”
Ø—‘˜”Ü!×+Ò+¨C¯H©H«JÓ7×>Ñ>¸wÓG×OÑOÐPTÐVXÓY�Ø" WÑ,¨tÑ3°eÑ;¸dÑBÀVÑK�ØÐDÀWÀIð  Nyð  zAð  yBð  BDð  Eñ  E�Øð  fð  goð  fpð  prð  sñ  s�Ø˜(Ñ"“ñ+ ô. œf g°¡n°uÑ&<Ó=×EÑE×KÑKÈDÓQÐRSÑT×ZÑZÓ\ˆà�!‹8ØÐNÑNˆCÜ˜4Ÿ:™: a™=Ö)�Ü&¤w°¸±Ó<×DÑD×JÑJÈ4ÓPÐQRÑS×YÑYÓ[�Øð GØ"ñ#à#ñ$ñ’ñ *ð �9ÑˆCØÐ+Ñ+ˆCØÐaÑaˆCØÐDÀTÇZÁZÐPQÁ]ÀOð  Tið  juð  ivð  vBð  Cñ  	CˆÜ�t—z‘z !‘}×%ˆAØ�6‰MˆCô #¤7¨H°Q©KÓ8×@Ñ@×FÑFÀtÓLÈQÑO×UÑUÓWˆLØØwØñàññˆCô
 ˜4Ÿ:™: a™=Ö)�Ø" WÑ,¨tÑ3°eÑ;¸dÑBÀXÈaÁ[ÑP�ØÐ@ÀÀ	ð  JFð  Gñ  G�àØ+Ü˜!“fñà/ñ0ô œ%Ñm´f×6OÒ6OÐPQÐUYÐZ[Ð]^ÐZ^ÑU_ÐbeÑUeÑPfÓ6gÐhkÐikÑ6lÓmÓmÓnñoð #ñ	#ô
 ˜"˜t A q D™z™/Ó*ñ+ð JñJô ˜"˜t A q D™z™/Ó*ñ+ð #ñ#ñ
�ð �yÑ ’ñ! *ð" �9Ñ‹Cñ7 &ð: 	Ð" 4§:¡:¨a¡=°1Ñ#4Ð"5Ð5ZÐ[Ñ[‹ñS -ðT ˆ:Ñ€Càð  Bñ  B€CØð 	XÜ
ñ	à
ñ	ñ€Cð& ð  @ñ  @€CØØ Ø  GÓ+‰:°ñ	5à
6ñ	7ñ€Cð
 Ø'Ø  NÓ2‰:¸ñ	<à
4ñ	5ñ€Cð
 Ø.Ø Ð$9Ó9‰:¸rñ	Cà
5ñ	6ñ€Cð ˆ=Ñ€Cð ˆ:Ñ€Cð ð  Oñ  O€CØÐoÑo€CØ€KÜ�; ‘?Ö#ˆØˆv‰ˆØÐ|Ñ|ˆØ˜Q‰ Ñ" {°Q¡Ñ7ˆØØ;Ü”%ÑY¬f×.GÒ.GÈÈSÐSVÉYÉÔ.XÓYÓYÐZ]Ð[]Ð^Ó_ñ`àñô �"�s‘(‹mñð Bñ	Bô
 �"�s‘(‹mñð ññ	
ˆð 	ˆw‰ˆØˆyÑŠñ $ð ÐnÑn€CØˆ<Ñ€CàÑÜ�'˜MÑ)¨3Ô/°1Ø�G‰GØ|ôð �G‰G�FŒOØ�G‰G�CŒLØ�G‰GÐ-Ô.÷ 0Ð/ô �F‘LÓ!Ð!÷ 0Õ/ús   ÔAU1Õ1
U?)TT)N)#rì   ræ   râ   Únumpyrz   rI   Úmatplotlib.colorsr   r,   r   Úplotsr   r   r	   r
   rZ   r   r„   Úmatplotlib.pyplotÚpyplotrG   ÚIPython.displayr   ÚImportErrorÚmetadataÚbenchmark_color_mapr%   r)   r3   re   r˜   rœ   r¹   rº   r  rŸ   r&   r$   Ú<module>r     sÌ   ðÛ Û 	Û 	ã Û Ý 5å Ý ß &Ñ &Ý (ð	ÛÝ"Ý$ð
D€ðN ØØ!Ø ØØØØ )ñ	Ð ò:	òòð" -@ô #ðL -@ô 5òpô.$ñb )ØàMØQØLØ+ñ	ó€õf"øðY ó 	Ùð	ús   ¸B ÂBÂB