ó
    †ñ:iËd  ã            
      ó2  • S SK Jr  S SKrS SKrS SKrS SKJrJrJr  S SK	J
r  S SKr S SKJrJr  SrSSKJr  SS	KJr  SS
KJr  SSKJr  \(       a  S SKJr  SSSSSSS\R:                  SS4
                     SS jjrS rg! \ a    Sr Ncf = f)é    )ÚannotationsN)ÚTYPE_CHECKINGÚLiteralÚcast)ÚHTMLÚdisplayTFé   )ÚExplanation)Úordinal_str)Úkmeansé   )Úcolors)ÚColormapé   gš™™™™™É?c                ót  • [        U [        5      (       aÖ  U n[        UR                  5      S:X  aL  [	        S[        UR                  R                  S   5       Vs/ s H  oËR                  SU4   PM     sn5      n O<[        UR                  5      S:X  a  [	        SUR                  /5      n O[        S5      eUc  [	        SUR                  5      nUc  [	        S	UR                  5      nO&[        U[        R                  5      (       d   S
5       e[        U [        5      (       d  [	        SU /5      n [        U S   R                  5      S:X  aI  U  Vs/ s H  oÝR                  " S/UR                  Q76 PM!     n nUR                  " S/UR                  Q76 nUbF  [        U[        5      (       a  [        R                  " U5      nUR                  S[        U 5      5      nUc  0 OSU0nUn[        R                  " S[        U 5      S-   -  SUR                  S   S-   -  /5      nUS   U:”  a  UUUS   -  -  n[         R"                  " UR                  S   [        U 5      S-   USS9u  nn[        UR                  S   5       GH�  nUU   R%                  5       n[        UR                  5      S:X  a1  UR                  S   S:X  a  UR                  UR                  SS 5      n[        UR                  5      S:X  aF  UR                  S   S:X  a3  SUSS2SS2S4   -  SUSS2SS2S4   -  -   SUSS2SS2S4   -  -   nUnGOG[        UR                  5      S:X  Ga)  UR'                  S5      nUR                  UR                  S   UR                  S   -  UR                  S   /5      R(                  nUR(                  UR'                  S5      -
  R(                  n[+        USSS9R                  R(                  R                  UR                  S   UR                  S   S/5      nU[        R,                  " USS5      -
  [        R,                  " USS5      [        R,                  " USS5      -
  -  nSUUS:„  '   SUUS:  '   OUnUnUUS4   R/                  U[         R0                  " S5      S9  U(       a  UUS4   R2                  " UU   40 UD6  UUS4   R5                  S5        [        U S   U   R                  5      S:X  a_  [        R6                  " [        [        U 5      5       Vs/ s H  n[        R8                  " X   5      PM     snS5      R;                  5       nOm[        R6                  " [        [        U 5      5       Vs/ s H*  n[        R8                  " X   R=                  S5      5      PM,     snS5      R;                  5       nU	c  [        R>                  " US5      OU	n[        [        U 5      5       Hú  nUb9  UR                  S   S:”  d  US:X  a   UUUS-   4   R2                  " UUU4   40 UD6  [        X   U   R                  5      S:X  a  X   U   OX   U   R=                  S5      nUUUS-   4   R/                  U[         R0                  " S5      SSUR                  S   UR                  S   S4S9  UUUS-   4   R/                  UUU* US9nUUUS-   4   R5                  S5        Mü     GM„     US:X  a  URA                  5         OURC                  US 9  URE                  W[        RF                  " U5      RI                  5       S!S"US   U-  S#9nURJ                  RM                  S5        U
(       a  [         RN                  " 5         ggs  snf s  snf s  snf s  snf )$aZ  Plots SHAP values for image inputs.

Parameters
----------
shap_values : [numpy.array]
    List of arrays of SHAP values. Each array has the shape
    (# samples x width x height x channels), and the
    length of the list is equal to the number of model outputs that are being
    explained.

pixel_values : numpy.array
    Matrix of pixel values (# samples x width x height x channels) for each image.
    It should be the same
    shape as each array in the ``shap_values`` list of arrays.

labels : list or np.ndarray
    List or ``np.ndarray`` (# samples x top_k classes) of names for each of the
    model outputs that are being explained.

true_labels: list
    List of a true image labels to plot.

width : float
    The width of the produced matplotlib plot.

labelpad : float
    How much padding to use around the model output labels.

cmap: str or matplotlib.colors.Colormap
    Colormap to use when plotting the SHAP values.

vmax: Optional float
    Sets the colormap scale for SHAP values from ``-vmax`` to ``+vmax``.

show : bool
    Whether :external+mpl:func:`matplotlib.pyplot.show()` is called before returning.
    Setting this to ``False`` allows the plot
    to be customized further after it has been created.

Examples
--------
See `image plot examples <https://shap.readthedocs.io/en/latest/example_notebooks/api_examples/plots/image.html>`_.

r   zlist[np.ndarray]éÿÿÿÿ.r   zGNumber of outputs needs to have support added!! (probably a simple fix)Nz
np.ndarrayz	list[str]zWThe input pixel_values must be a numpy array or an Explanation object must be provided!é   Úpadg      @F)ÚnrowsÚncolsÚfigsizeÚsqueezer	   gÅ�1w-!Ó?gbX9´Èâ?gÉv¾Ÿ/½?)Úround_valuesç      à?)r   r   g     àX@Úgray)ÚcmapÚoffçš™™™™ùX@g333333Ã?)r   ÚalphaÚextent)r   ÚvminÚvmaxÚauto)Úhspacez
SHAP valueÚ
horizontal)ÚaxÚlabelÚorientationÚaspect)(Ú
isinstancer
   ÚlenÚoutput_dimsr   ÚrangeÚvaluesÚshapeÚ	ExceptionÚdataÚoutput_namesÚnpÚndarrayÚlistÚreshapeÚarrayÚpltÚsubplotsÚcopyÚmeanÚTr   Ú
percentileÚimshowÚget_cmapÚ	set_titleÚaxisÚstackÚabsÚflattenÚsumÚnanpercentileÚtight_layoutÚsubplots_adjustÚcolorbarÚravelÚtolistÚoutlineÚset_visibleÚshow)Úshap_valuesÚpixel_valuesÚlabelsÚtrue_labelsÚwidthr)   r$   Úlabelpadr   r"   rN   Úshap_expÚiÚvÚlabel_kwargsÚxÚfig_sizeÚfigÚaxesÚrowÚx_currÚx_curr_grayÚx_curr_dispÚ	flat_valsÚmeansÚabs_valsÚmax_valÚsvÚimÚcbs                                 ÚT/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/shap/plots/_image.pyÚimageri      s  € ôt �+œ{×+Ñ+Ø +ˆô ˆx×#Ñ#Ó$¨Ó)ÜÐ1ÔUZÐ[c×[jÑ[j×[pÑ[pÐqsÑ[tÔUuÓ3vÒUuÐPQ·O±OÀCÈÀFÔ4KÑUuÑ3vÓw‰KÜ�×%Ñ%Ó&¨!Ó+ÜÐ1°H·O±OÐ3DÓE‰KäÐeÓfÐfØÑÜ ¨h¯m©mÓ<ˆLØ‰>Ü˜+ x×'<Ñ'<Ó=ˆFøä˜,¬¯
©
×3Ñ3ð 	
Øeó	
Ð3ô
 �k¤4×(Ñ(äÐ-°¨}Ó=ˆä
ˆ;�q‰>×ÑÓ  AÓ%Ù7BÓC²{°!—y’y Ð- Q§W¡WÕ-±{ˆÐCØ#×+Ò+¨AÐC°×0BÑ0BÒCˆð ÑÜ�fœd×#Ñ#Ü—X’X˜fÓ%ˆFØ—‘ ¤C¨Ó$4Ó5ˆð "Ñ)‘2°°xÐ/@€Lð !€AÜ�xŠx˜œc +Ó.°Ñ2Ñ3°S¸A¿G¹GÀA¹JÈ¹NÑ5KÐLÓM€HØ��{�UÓØ�E˜H Q™KÑ'Ñ'ˆÜ—’ 1§7¡7¨1¡:´S¸Ó5EÈÑ5IÐS[ÐejÑk�I€CˆÜ�Q—W‘W˜Q‘Z× ˆØ�3‘—‘“ˆô ˆv�|‰|Ó Ó! f§l¡l°1¡o¸Ó&:Ø—^‘^ F§L¡L°°!Ð$4Ó5ˆFô ˆv�|‰|Ó Ó! f§l¡l°1¡o¸Ó&:Ø  6ª!ªQ°¨'¡?Ñ2°V¸fÂQÊÈ1ÀW¹oÑ5MÑMÐPVÐY_Ò`aÒcdÐfgÐ`gÑYhÑPhÑhˆKØ ŠKÜ�—‘Ó !Ô#Ø Ÿ+™+ a›.ˆKð Ÿ™¨¯©°Q©¸&¿,¹,Àq¹/Ñ(IÈ6Ï<É<ÐXYÉ?Ð'[Ó\×^Ñ^ˆIØ"Ÿ™ y§~¡~°aÓ'8Ñ8×;Ñ;ˆIÜ˜9 a°eÑ<×AÑA×CÑC×KÑKÈVÏ\É\ÐZ[É_Ð^d×^jÑ^jÐklÑ^mÐopÐLqÓrˆEØ ¤2§=¢=°¸¸VÓ#DÑDÜ—’˜e T¨6Ó2´R·]²]À5È!ÈVÓ5TÑTñˆKð ,-ˆK˜ a™Ñ(Ø+,ˆK˜ a™Ò(à ˆKØ ˆKàˆS�!ˆV‰×Ñ˜K¬c¯lªl¸6Ó.BÐÑCÞØ��a�‰L×"Ò" ;¨sÑ#3ÑD°|ÒDØˆS�!ˆV‰×Ñ˜%Ô Üˆ{˜1‰~˜cÑ"×(Ñ(Ó)¨QÓ.Ü—x’xÄÄsÈ;ÓGWÔAXÓ YÒAX¸A¤§¢¨©Ö!7ÑAXÑ YÐ[\Ó]×eÑeÓg‰Hä—x’xÌÌsÐS^ÓO_ÔI`Ó aÒI`ÀA¤§¢¨©×(:Ñ(:¸2Ó(>Ö!?ÑI`Ñ aÐcdÓe×mÑmÓoˆHà6:±l”"×"Ò" 8¨TÔ2Èˆä”s˜;Ó'Ö(ˆAØÑ!à—<‘< ‘? QÓ&¨#°«(Ø˜˜a !™e˜Ñ$×.Ò.¨v°c¸1°f©~ÑNÀÒNÜ(+¨K©N¸3Ñ,?×,EÑ,EÓ(FÈ!Ó(K�‘ Ò$ÐQ\ÑQ_Ð`cÑQd×QhÑQhÐikÓQlˆBØ��a˜!‘e�Ñ×#Ñ#Ø¤#§,¢,¨vÓ"6¸dÈBÐPR×PXÑPXÐYZÑP[Ð]_×]eÑ]eÐfgÑ]hÐjlÐKmð $ñ ð �c˜1˜q™5�jÑ!×(Ñ(¨°$¸g¸XÈGÐ(ÐTˆBØ��a˜!‘e�Ñ×!Ñ! %Ö(ô )ñS !ðh �ÓØ×ÑÕà×Ñ 6ÐÑ*Ø	�‰Ø
Œr�xŠx˜‹~×$Ñ$Ó&¨lÈÐ]eÐfgÑ]hÐkqÑ]qð 
ð 
€Bð ‡J�J×Ñ˜5Ô!ÞÜ�Š�
ð ùòW 4wùò( Dùò| !Zùâ as   Á^&
Å&^+Ô3"^0
Ö1^5
c                óÜ  • [         (       d  Sn[        U5      e[        U R                  R                  5      S:X  aX  [        U R                  R                  S   5       H1  n[        [        S[        U5       S35      5        [        X   5        M3     gSR                  [        R                  " [        R                  SS	95      nU R                  nSn[        UR                  S   5       Hy  nUS
U SU SU SU SU SU SU S3XB   R!                  SS5      R!                  SS5      R!                  SS5      R!                  SS5      R!                  SS5      -   S-   S-   -  nM{     U R"                  nUR                  S   nUR                  S   n[$        R&                  " XxS45      S-  S-  n	[$        R(                  " USS 9R+                  [,        5      U	SS2SS2S4'   U	SS2SS2S4   U	SS2SS2S4'   U	SS2SS2S4   U	SS2SS2S4'   U R                  SS2SS2SSS24   n
[$        R.                  " [$        R0                  " U R                  5      S!5      n0 n[        UR                  S   5       HW  n[2        R4                  " SSU
SS2SS2U4   -  U-  -   5      S-  R+                  [,        5      R7                  5       XÃ SU 3'   MY     [8        R:                  " U R"                  R+                  [,        5      R7                  5       5      n[8        R:                  " U5      n[8        R:                  " U	R+                  [,        5      R7                  5       5      nSR                  / S"PU PS#PU PS$PU PS%PU PS&PU PS'PU PS(PU PS)PU PS*PU PS+PU PS,PU PS-PU PS.PU PS/PU PS0PU PS1PU PS2PU PS3PU PS4PU PS5PU PS6PU PS7PU PS8P5      nSR                  / S9PU PS:PU PS;PU PS<PU PS=PU PS>PU PS<PU PS?PU PS@PU PS<PU PSAPU PSBPU PSCPU PSDPU PSEPU PSFPU PSGPU PSHPU PSIPU PSJPU PSKPU PSLPU PSMPU PSNPU PSMPU PSOPU PSMPU PSPPU PSMPU PSQPU PSRPU PSSPU PSTPU PSUPU PSVPU PSWPU PSXPU PSYPU PSZPU PSZPU PS[PU PS\PU PS]PU PS^PU PS_PU PS`PU PSaPU PSbPU PScPU PSdPU PSePU PS\PU PSfPU PSgPU PS\PU PShPU PSiPU PSjPU PSZPU PSZPU PSkPU PSlPU PSmPU PSnPU PSoPU PSpPU PS\PU PShPU PSiPU PSqPU PSrPU PSZPU PSZPU PSkPU PSlPU PSmPU PSsPU PStPU PSuPU PSvPU PSwPU PSxPU PSyPU PSzPU PS{PU PSvPU PSwPU PS|PU PS}PU PS~PU PSPU PS€PU PS�PU PS‚PU PSƒPU PS„PU PS…PU PS†PU PS‡PU PSˆPU PS„PU PS‰PU PSŠPU PS‹PU PSŒPU PS�PU PSŽPU PS�PU PS�PU PS‘PU PS’PU PS“PU PS”PU PS•PU PS–PU PS—PU PS˜PU PS™PU PSšPU PS›PU PSœPU PS�PU PSžP5      n[        [        UU-   5      5        g)ŸzöPlots SHAP values for image inputs with test outputs.

Parameters
----------
shap_values : [numpy.array]
    List of arrays of SHAP values. Each array has the shap (# width x height x channels x num output tokens). One array
    for each sample

z`IPython is required for this function but is not installed. Fix this with `pip install ipython`.é   r   z<br/><b>z instance:</b><br/>NÚ r   )Úkz9<div style='display:inline; text-align:center;'><div id='Ú_output_flat_value_label_zT'style='display:none;color: #999; padding-top: 0px; font-size:12px;'></div><div id='Ú_output_flat_token_z‘'style='display: inline; background:transparent; border-radius: 3px; padding: 0px;cursor: default;cursor: pointer;'onmouseover="onMouseHoverFlat_z&(this.id)" onmouseout="onMouseOutFlat_z%(this.id)" onclick="onMouseClickFlat_z(this.id)" >Ú<z&lt;Ú>z&gt;z ##u   â–�u   Ä z </div>z</div>r   é   éÿ   r   r	   )rA   r   z

        <div id="z_image_viz" class="z(_image_viz_content">
          <div id="a
  _image_viz_header" style="padding:15px;margin:5px;font-family:sans-serif;font-weight:bold;">
            <div style="display:inline">
              <span style="font-size: 20px;"> Input/Output - Heatmap </span>
            </div>
          </div>
          <div id="z@_image_viz_content" style="display:flex;">
            <div id="zo_image_viz_input_container" style="padding:15px;border-style:solid;margin:5px;flex:2;">
              <div id="z°_image_viz_input_header" style="margin:5px;font-weight:bold;font-family:sans-serif;margin-bottom:10px">
                Input Image
              </div>
              <div id="zd_image_viz_input_content" style="margin:5px;font-family:sans-serif;">
                  <canvas id="z“_image_canvas" style="cursor:grab;width:100%;max-height:500px;"></canvas>
                  <br>
                  <br>
                  <div id="z(_tools">
                      <div id="z‚_zoom">
                        <span style="font-size:12px;margin-right:15px;"> Zoom </span>
                        <button id="z,_minus_button" class="zoom-button" onclick="z†_zoom(-1)" style="background-color: #555555;color: white; border:none;font-size:15px;">-</button>
                        <button id="z+_plus_button" class="zoom-button" onclick="z…_zoom(1)" style="background-color: #555555;color: white; border:none;font-size:15px;">+</button>
                        <button id="z,_reset_button" class="zoom-button" onclick="z¾_reset()" style="background-color: #555555;color: white; border:none;font-size:15px;"> Reset </button>
                      </div>
                      <br>
                      <div id="zè_opacity" style="display:none">
                      <span style="font-size:12px;margin-right:15px;"> Shap-Overlay Opacity </span>
                      <input type="range" min="1" max="100" value="35" style="width:100px" oninput="zŽ_set_opacity(this.value)">
                      </div>
                  </div>
              </div>
            </div>
            <div id="zp_image_viz_output_container" style="padding:15px;border-style:solid;margin:5px;flex:1;">
              <div id="z±_image_viz_output_header" style="margin:5px;font-weight:bold;font-family:sans-serif;margin-bottom:10px">
                Output Text
              </div>
              <div id="zY_image_viz_output_content" style="margin:5px;font-family:sans-serif;">
                  zN
              </div>
            </div>
          </div>
        </div>

    z#
        <script>

            var z,_heatmap_flat_state = null;
            var z7_opacity = 0.35

            function onMouseHoverFlat_z(id) {
                if (z…_heatmap_flat_state === null) {
                    document.getElementById(id).style.backgroundColor  = "grey";
                    zd_update_image_and_overlay(id);
                }
            }

            function onMouseOutFlat_zŒ_heatmap_flat_state === null) {
                    document.getElementById(id).style.backgroundColor  = "transparent";
                    zh_update_image_and_overlay(null);
                }
            }

            function onMouseClickFlat_zž_heatmap_flat_state === null) {
                    document.getElementById(id).style.backgroundColor  = "grey";
                    document.getElementById('z9_opacity').style.display  = "block";
                    z3_update_image_and_overlay(id);
                    z[_heatmap_flat_state = id;
                }
                else {
                    if (z«_heatmap_flat_state === id) {
                        document.getElementById(id).style.backgroundColor  = "transparent";
                        document.getElementById('z<_opacity').style.display  = "none";
                        z9_update_image_and_overlay(null);
                        z}_heatmap_flat_state = null;
                    }
                    else {
                        document.getElementById(zª_heatmap_flat_state).style.backgroundColor  = "transparent";
                        document.getElementById(id).style.backgroundColor  = "grey";
                        z6_update_image_and_overlay(id)
                        zb_heatmap_flat_state = id
                    }
                }
            }

            const z_image_data_matrix = z;
            const z_image_data_gray_scale = z_image_height = z_image_width = z_shap_values_color_dict = z;

            z#_canvas = document.getElementById('z_image_canvas');
            z_context = z+_canvas.getContext('2d');

            var z_imageData = z_convert_image_matrix_to_data(z_image_data_matrix, z, z_context);
            var z_currImagData = z_imageData;


            z_trackTransforms(z7_context);
            initial_scale_factor = Math.min(z_canvas.height/z_image_height,z_canvas.width/z_image_width);
            zR_context.scale(initial_scale_factor, initial_scale_factor);

            function zh_update_image_and_overlay(selected_id) {
                if (selected_id == null) {
                    z _imageData;
                    zH_redraw();
                }
                else {
                    z_blend_image_shap_map(z_image_data_gray_scale, z&_shap_values_color_dict[selected_id], z
_opacity, z_context);
                    zA_redraw();
                }
            }

            function z&_set_opacity(value) {
                z+_opacity = value/100;

                if (z5_heatmap_flat_state !== null ) {
                    z_shap_values_color_dict[z_heatmap_flat_state], zQ_redraw() {

                // Clear the entire canvas
                var p1 = z:_context.transformedPoint(0, 0);
                var p2 = z_context.transformedPoint(z_canvas.width, z!_canvas.height);
                zK_context.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);

                z!_context.save();
                z9_context.setTransform(1, 0, 0, 1, 0, 0);
                z_context.clearRect(0, 0, z7_context.restore();

                createImageBitmap(zc_currImagData, { premultiplyAlpha: 'premultiply' }).then(function(imgBitmap) {
                    zS_context.drawImage(imgBitmap, 0, 0);
                });
            }
            z_redraw();
            z*_context.save();

            var lastX = z+_canvas.width / 2,
                lastY = zF_canvas.height / 2;

            var dragStart, dragged;

            zî_canvas.addEventListener('mousedown', function(evt) {
                document.body.style.mozUserSelect = document.body.style.webkitUserSelect = document.body.style.userSelect = 'none';
                lastX = evt.offsetX || (evt.pageX - zI_canvas.offsetLeft);
                lastY = evt.offsetY || (evt.pageY - z0_canvas.offsetTop);
                dragStart = zs_context.transformedPoint(lastX, lastY);
                dragged = false;
                document.getElementById('zO_image_canvas').style.cursor = 'grabbing';
            }, false);

            zj_canvas.addEventListener('mousemove', function(evt) {
                lastX = evt.offsetX || (evt.pageX - zr_canvas.offsetTop);
                dragged = true;
                if (dragStart) {
                    var pt = z=_context.transformedPoint(lastX, lastY);
                    zP_context.translate(pt.x - dragStart.x, pt.y - dragStart.y);
                    zA_redraw();
                }
            }, false);

            z_canvas.addEventListener('mouseup', function(evt) {
                dragStart = null;
                document.getElementById('zs_image_canvas').style.cursor = 'grab';
            }, false);

            var scaleFactor = 1.1;

            var z4_zoom = function(clicks) {
                var pt = z9_context.transformedPoint(lastX, lastY);
                zl_context.translate(pt.x, pt.y);
                var factor = Math.pow(scaleFactor, clicks);
                z0_context.scale(factor, factor);
                z2_context.translate(-pt.x, -pt.y);
                z*_redraw();
            }

            var z,_reset = function(clicks) {
                z$_context.restore();
                z_redraw();
                zË_context.save();
            }

            var handleScroll = function(evt) {
                var delta = evt.wheelDelta ? evt.wheelDelta / 40 : evt.detail ? -evt.detail : 0;
                if (delta) z__zoom(delta);
                return evt.preventDefault() && false;
            }

            zM_canvas.addEventListener('DOMMouseScroll', handleScroll, false);
            zU_canvas.addEventListener('mousewheel', handleScroll, false);



            function aï	  _trackTransforms(ctx) {
                var svg = document.createElementNS("http://www.w3.org/2000/svg", 'svg');
                var xform = svg.createSVGMatrix();
                ctx.getTransform = function() {
                    return xform;
                }

                var savedTransforms = [];
                var save = ctx.save;
                ctx.save = function() {
                    savedTransforms.push(xform.translate(0, 0));
                    return save.call(ctx);
                }

                var restore = ctx.restore;
                ctx.restore = function() {
                    xform = savedTransforms.pop();
                    return restore.call(ctx);
                }

                var scale = ctx.scale;
                ctx.scale = function(sx, sy) {
                    xform = xform.scaleNonUniform(sx, sy);
                    return scale.call(ctx, sx, sy);
                }

                var rotate = ctx.rotate;
                ctx.rotate = function(radians) {
                    xform = xform.rotate(radians * 180 / Math.PI);
                    return rotate.call(ctx, radians);
                }

                var translate = ctx.translate;
                ctx.translate = function(dx, dy) {
                    xform = xform.translate(dx, dy);
                    return translate.call(ctx, dx, dy);
                }

                var transform = ctx.transform;
                ctx.transform = function(a, b, c, d, e, f) {
                    var m2 = svg.createSVGMatrix();
                    m2.a = a;
                    m2.b = b;
                    m2.c = c;
                    m2.d = d;
                    m2.e = e;
                    m2.f = f;
                    xform = xform.multiply(m2);
                    return transform.call(ctx, a, b, c, d, e, f);
                }

                var setTransform = ctx.setTransform;
                ctx.setTransform = function(a, b, c, d, e, f) {
                    xform.a = a;
                    xform.b = b;
                    xform.c = c;
                    xform.d = d;
                    xform.e = e;
                    xform.f = f;
                    return setTransform.call(ctx, a, b, c, d, e, f);
                }

                var pt = svg.createSVGPoint();
                ctx.transformedPoint = function(x, y) {
                    pt.x = x;
                    pt.y = y;
                    return pt.matrixTransform(xform.inverse());
                }
            }


            function ae  _convert_image_matrix_to_data(image_data_matrix, image_height, image_width, context) {

                var imageData = context.createImageData(image_height, image_width);

                for(var row_index = 0; row_index < image_height; row_index++) {
                    for(var col_index = 0; col_index < image_width; col_index++) {

                        index = (row_index * image_width + col_index) * 4;

                        imageData.data[index + 0] = image_data_matrix[row_index][col_index][0];
                        imageData.data[index + 1] = image_data_matrix[row_index][col_index][1];
                        imageData.data[index + 2] = image_data_matrix[row_index][col_index][2];
                        imageData.data[index + 3] = 255;
                    }
                }

                return imageData;
            }

            function aÒ  _blend_image_shap_map(image_data_matrix, shap_color_map, image_height, image_width, alpha, context) {
                var blendedImageData = context.createImageData(image_height, image_width);

                for(var row_index = 0; row_index < image_height; row_index++) {

                    for(var col_index = 0; col_index < image_width; col_index++) {

                        index = (row_index * image_width + col_index) * 4;

                        blendedImageData.data[index + 0] = image_data_matrix[row_index][col_index][0] * alpha + (shap_color_map[row_index][col_index][0]) * ( 1 - alpha);
                        blendedImageData.data[index + 1] = image_data_matrix[row_index][col_index][1] * alpha + (shap_color_map[row_index][col_index][1]) * ( 1 - alpha);
                        blendedImageData.data[index + 2] = image_data_matrix[row_index][col_index][2] * alpha + (shap_color_map[row_index][col_index][2]) * ( 1 - alpha);
                        blendedImageData.data[index + 3] = image_data_matrix[row_index][col_index][3] * alpha + (shap_color_map[row_index][col_index][3]) * ( 1 - alpha);
                    }
                }

                return blendedImageData;
            }

        </script>
    )Úhave_ipythonÚImportErrorr+   r.   r/   r-   r   r   r   Úimage_to_textÚjoinÚrandomÚchoicesÚstringÚascii_lowercaser2   Úreplacer1   r3   Úonesr;   ÚastypeÚintrF   rC   r   Úred_transparent_bluerK   ÚjsonÚdumps)rO   ÚmsgrV   ÚuuidÚmodel_outputÚoutput_text_htmlÚ
image_dataÚimage_heightÚimage_widthÚimage_data_gray_scaleÚshap_values_color_mapsrd   Úshap_values_color_dictÚindexÚimage_data_jsonÚshap_values_color_dict_jsonÚimage_data_gray_scale_jsonÚimage_viz_htmlÚimage_viz_scripts                      rh   rv   rv   É   s2  € ÷ Š<ØpˆÜ˜#ÓÐä
ˆ;×Ñ×#Ñ#Ó$¨Ó)Ü�{×)Ñ)×/Ñ/°Ñ2Ö3ˆAÜ”D˜8¤K°£NÐ#3Ð3FÐGÓHÔIÜ˜+™.Ö)ñ 4ð 	à�7‰7”6—>’>¤&×"8Ñ"8¸BÑ?Ó@€Dð ×+Ñ+€LàÐä�<×%Ñ% aÑ(Ö)ˆØðØ�vÐ6°q°cð :ð �vÐ0°°ð 4-à-1¨Fð 3*Ø*.¨ð 0)Ø)-¨ð /ð	ð ‰oß‰W�S˜&Ó!ß‰W�S˜&Ó!ß‰W�U˜BÓß‰W�U˜BÓß‰W�T˜2Óñð  ñ!ð" ñ#ñ	
Òñ *ð. ×!Ñ!€JØ×#Ñ# AÑ&€LØ×"Ñ" 1Ñ%€Kô ŸGšG \ÀÐ$BÓCÀcÑIÈCÑOÐÜ%'§W¢W¨Z¸aÑ%@×%GÑ%GÌÓ%LÐš!šQ ˜'Ñ"Ø%:º1ºaÀ¸7Ñ%CÐš!šQ ˜'Ñ"Ø%:º1ºaÀ¸7Ñ%CÐš!šQ ˜'Ñ"ð )×/Ñ/²²1°aº°
Ñ;ÐÜ×ÒœrŸvšv k×&8Ñ&8Ó9¸4Ó@€GàÐä�|×)Ñ)¨!Ñ,Ö-ˆä×(Ò(¨¨sÐ5KÊAÊqÐRWÈKÑ5XÑ/XÐ[bÑ/bÑ)bÓcÐfiÑiß‰V”C‹[ß‰V‹Xð 	 Ð':¸5¸'ÐBÓCñ .ô —j’j ×!1Ñ!1×!8Ñ!8¼Ó!=×!DÑ!DÓ!FÓG€OÜ"&§*¢*Ð-CÓ"DÐÜ!%§¢Ð,A×,HÑ,HÌÓ,M×,TÑ,TÓ,VÓ!WÐ÷+ó +ð ð +à�ð+à*ð+à+/¨&ð+ð1ð+ð �6ð+ðð+ð �6ð+ðð+ð �Vð+ðð+ð �vð+ðð+ð �vð+ðð+ð  $˜fð+ð%ð+ð" !˜6ð#+ð"" ð#+ð$ !%˜vð%+ð$&%ð%+ð( &* Fð)+ð( +Wð)+ð( X\ÐV\ð)+ð(]%ð)+ð* &* Fð++ð* +Vð++ð* W[ÐU[ð++ð*\%ð++ð, &* Fð-+ð, +Wð-+ð, X\ÐV\ð-+ð,] ð-+ð2 !%˜vð3+ð2&eð3+ð6 fjÐdjð7+ð6kð7+ð@ �VðA+ð@ðA+ðB �vðC+ðBðC+ðH �vðI+ðHðI+ðJ $Ð$ðK+ðJ%ôK+€N÷ZKó Kð ð Kð �ðKððKð �ð	Kð'ð	Kð (, fðKð-ðKð �FðKððKð �FðKð%ðKð &* FðKð+ðKð �FðKððKð  �Fð!Kð 'ð!Kð( (, fð)Kð(-ð)Kð* �Fð+Kð*.ð+Kð. /3¨Vð/Kð.4ð/Kð0 �Fð1Kð0ð1Kð2 �Fð3Kð2ð3Kð8 ˜ð9Kð82ð9Kð< 37°ð=Kð<8ð=Kð> ˜ð?Kð>ð?Kð@ ˜ðAKð@1ðAKðF 26°ðGKðF7ðGKðJ ˜ðKKðJðKKðL ˜ðMKðLðMKðV �&ðWKðV .ðWKðV />Ð->ðWKðV?ðWKðX �&ðYKðX 2ðYKðX 3MÐ1MðYKðXNðYKðZ �&ð[KðZ )ð[KðZ *6¨ð[KðZ7ð[Kð\ �&ð]Kð\ (ð]Kð\ )4 }ð]Kð\5ð]Kð^ �&ð_Kð^ 3ð_Kð^ 4OÐ2Oð_Kð^Pð_Kðb ˆFðcKðb 6ðcKðb 7;°VðcKðb<ðcKðd ˆFðeKðd ðeKðd #˜VðeKðd$ðeKðh �ðiKðh $ðiKðh %) 6ðiKðh *HðiKðh IMÀvðiKðh NbðiKðh coÐaoðiKðh prðiKðh s~Ðq~ðiKðh AðiKðh BFð  AGðiKðhGðiKðj �ðkKðj 'ðkKðj (, fðkKðj-ðkKðp ˆFðqKðp $ðqKðp %) 6ðqKðp*-ðqKðr .2¨FðsKðr 3BðsKðr CGÀðsKðr HVðsKðr W[ÐU[ðsKðr \jðsKðr koÐioðsKðrpðsKðt ˆFðuKðtðuKðx �VðyKðxðyKð| �Fð}Kð| +ð}Kð| ,0¨&ð}Kð|1ð}Kð~ �FðKð~ðKðD �FðEKðD +ðEKðD ,0¨&ðEKðD 1GðEKðD HLÀfðEKðD MeðEKðD fjÐdjðEKðD kQðEKðD R^ð  Q_ðEKðD _aðEKðD bmð  anðEKðD npðEKðD quð  pvðEKðD v@ðEKðD AEð  @FðEKðDFðEKðF �FðGKðFðGKðN �VðOKðNðOKðP �ðQKðPðQKðT �FðUKðTðUKðV �FðWKðV +ðWKðV ,0¨&ðWKðV 1GðWKðV HLÀfðWKðV MeðWKðV fjÐdjðWKðV kCðWKðV DHð  CIðWKðV I_ðWKðV `lð  _mðWKðV moðWKðV p{ð  o|ðWKðV |~ðWKðV Cð  ~DðWKðV DNðWKðV OSð  NTðWKðVTðWKðX �FðYKðXðYKð` �VðaKð`ðaKðf ˜ðgKðf ðgKðh ˜ðiKðh  :ðiKðh ;?¸ðiKðh @OðiKðh PTÈfðiKðhUðiKðj �ðkKðjðkKðn �ðoKðnðoKðp �ðqKðpðqKðr �ðsKðr 0ðsKðr 15¨vðsKðr 6EðsKðr FJÀFðsKðrKðsKðt �ðuKðt#ðuKðx $( &ðyKðx)ðyKðz �Fð{Kðzð{Kð@ ˆFðAKð@ðAKðB ˆFðCKðBðCKðF ˜ðGKðFðGKðH ˜ðIKðHðIKðP ˆFðQKðP5ðQKðT 6:°FðUKðT;5ðUKðV 6:°FðWKðV;ðWKðX "˜FðYKðX#*ðYKð\ +/¨ð]Kð\0ð]Kðb ˆFðcKðb5ðcKðd 6:°FðeKðd;5ðeKðf 6:°FðgKðf;ðgKðl #˜VðmKðl$ðmKðn �FðoKðnðoKðp �FðqKðpðqKðx ˆFðyKðx*ðyKð| +/¨ð}Kð|0ð}KðF �ðGKðFðGKðH ˜ðIKðH ðIKðJ �ðKKðJðKKðN �ðOKðNðOKðP �ðQKðPðQKðR �ðSKðRðSKðX �ðYKðXðYKðZ �ð[KðZð[Kð\ �ð]Kð\ð]Kð^ �ð_Kð^ð_Kðh !˜6ðiKðh"ðiKðp ˆFðqKðpðqKðr ˆFðsKðrðsKðz �Vð{KðzGð{KðH �VðIKðHðIKðn �VðoKðnôoKÐôZ ŒD�Ð"2Ñ2Ó3Õ4ó    )rO   z+Explanation | np.ndarray | list[np.ndarray]rP   znp.ndarray | NonerQ   z/list[str] | list[list[str]] | np.ndarray | NonerR   zlist | NonerS   z
int | Noner)   úfloat | Noner$   zfloat | Literal['auto'] | NonerT   r”   r   zstr | Colormap | Noner"   r”   rN   zbool | None) Ú
__future__r   r�   rx   rz   Útypingr   r   r   Úmatplotlib.pyplotÚpyplotr8   Únumpyr3   ÚIPython.displayr   r   rt   ru   Ú_explanationr
   Úutilsr   Úutils._legacyr   rl   r   Úmatplotlib.colorsr   r€   ri   rv   © r“   rh   Ú<module>r       sý   ðÝ "ã Û Û ß /Ñ /å Û ðß-à€Lõ 'Ý Ý "Ý æÝ*ð
 '+Ø>BØ#ØØØ-0Ø!Ø"(×"=Ñ"=ØØðkØ<ðkà#ðkð <ðkð ð	kð
 ðkð ðkð +ðkð ðkð  ðkð ðkð õkó\L5øðu ó Ø‚Lðús   ¨
B ÂBÂB