a
    5gh$                     @   s  d Z ddlmZmZ ddlZddlZddlmZm	Z	m
Z
 e  ed z0ddlZddlmZ ddlmZ dd	lmZ W n4 ey Z ze jd
7  _ W Y dZ[n
dZ[0 0 W d   n1 s0    Y  e	e
d eee	f edddZeedddZdS )z1Interactive fitting widget for Jupyter notebooks.   )_widget_guess_initial_step_make_finite    N)DictAnyCallableignore)show_inline_matplotlib_plots)clear_output)pyplotzJ

Please install ipywidgets, IPython, and matplotlib to enable interactive).N)minuitplotkwargsraise_on_exceptionc                    sx  j dd 	jdd fddfddG 
fddd  fdd	fd
d} 	fdd}G  fdddtjtdd jD fddjD tjdd}tjdd|d}| tj	dd|d}|
| tjdd|d}	|	| tjg dd|d tt|||	gtg}
t 
    t
|
gS )!z Make interactive fitting widget.Nc                    s   t  j}z>t " jfi   W d    n1 s<0    Y  W nJ ty   r\ dd l}t jdd|j	ddddddd	d
dd Y d S 0 | rj
jn
j}t jddd|d|dd | r|rt jddjrjrdnd |ddd d S )Nr   g      ?)limitZ	monospacezx-small)familysizecenterrwT)ZfontdictvacolorZbackgroundcolorwrapg?g?zFCN = z.3fzx-large)	transformfontsizegffffff?successFAILUREright)r   r   Zha)pltZgcaZ	transAxeswarningscatch_warningsZ	visualize	Exception	tracebackZfigtext
format_excZfminfvalZ_fcnvaluestextZvalidZaccurate)from_fitreport_successZtransr#   r%   )r   r   r   r    a/mounts/lovelace/software/anaconda3/envs/metaDMG/lib/python3.9/site-packages/iminuit/ipywidget.pyplot_with_frame%   sH    

4


z$make_widget.<locals>.plot_with_framec                      sJ    j dkr  n2 j dkr(  n j dkr>  dS dsFJ dS )NMigradScipySimplexFT)valueZmigradZscipyZsimplexr*   )algo_choicer   r*   r+   fitN   s    




zmake_widget.<locals>.fitc                       sB   e Zd Zd	edddZi feeef d fddZdS )
z&make_widget.<locals>.OnParameterChanger   skipc                 S   s
   || _ d S Nr3   )selfr4   r*   r*   r+   __init__a   s    z/make_widget.<locals>.OnParameterChange.__init__changec              	      s"  | j dkr|  j d8  _ d S |dd}|dd}|sXtD ]\}}|jjj|< q@tdd D rjd d  }tD ]\}}|jj j|< qd} d }|_\ t	dd	 || t
   t
d
 t  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r   r(   Fr)   c                 s   s   | ]}|j jV  qd S r5   )r2   r0   ).0xr*   r*   r+   	<genexpr>o       zBmake_widget.<locals>.OnParameterChange.__call__.<locals>.<genexpr>T)waitr   )r4   get	enumeratesliderr0   r&   anyfixedr2   r
   r    r!   simplefilterr	   )r6   r9   r(   r)   ir;   Zsaveddo_fitr   out
parametersr,   r*   r+   __call__d   s*    




z/make_widget.<locals>.OnParameterChange.__call__N)r   )	__name__
__module____qualname__intr7   r   strr   rJ   r*   rF   r*   r+   OnParameterChangeZ   s   rP   c                    sH    }t D ]\}}|j|  q| d u r4|S   d|d d S )NT)r(   r)   )r@   resetr&   )r9   r)   rE   r;   )rP   r2   r   rI   r*   r+   rG      s    zmake_widget.<locals>.do_fitc                    s    D ]}|j j |j _qd S r5   )rA   continuous_update)r9   r;   )rI   r*   r+   on_update_button_clicked   s    z-make_widget.<locals>.on_update_button_clickedc                    sJ      __tD ] \}}| j| j|  q    d S r5   )rQ   r&   limitsr@   )r9   rE   r;   )rP   r   original_limitsoriginal_valuesrI   r*   r+   on_reset_button_clicked   s    z,make_widget.<locals>.on_reset_button_clickedc                       s.   e Zd Z fddZdfdd	Z  ZS )zmake_widget.<locals>.Parameterc              
      s   j  } j \}}t|||}t|r2|n
|d|  }t|rL|n
|d|  }tjtj ddd}	tjt	|t
||d||  tjdddtjt	||t
|d||  tjdddtj||||dd	tjd
dd_j d  fdd}
 fdd}|
d |d tj j ddtjddd_tjdddtjddd_ fdd}fdd}j|d j|d t |	jjjg d S )Nd   Zem)width)layoutg?z4.1em)minmaxsteprZ   Tz.3gz50%)	min_width)r[   r\   r]   rR   Zreadout_formatrZ   r0   c                    s:   | d j _| d _ j }j j|d f j< d S )Nnewr   )rA   r[   rT   r9   Zlim)r   parr6   tmaxr*   r+   on_min_change   s    

z>make_widget.<locals>.Parameter.__init__.<locals>.on_min_changec                    s:   | d j _| d _ j }|d j jf j< d S )Nr_   r   )rA   r\   rT   r`   )r   ra   r6   tminr*   r+   on_max_change   s    

z>make_widget.<locals>.Parameter.__init__.<locals>.on_max_changeZFixz3.1em)descriptionZtooltiprZ   FFitz3.5emc                    s"   | d  j < | d rdj_d S Nr_   F)rC   r2   r0   r8   )r   ra   r6   r*   r+   on_fix_toggled   s    z?make_widget.<locals>.Parameter.__init__.<locals>.on_fix_toggledc                    s(   | d j _| d rdj_    d S rh   )rA   disabledfixr0   r8   )rP   r6   r*   r+   on_fit_toggled   s    z?make_widget.<locals>.Parameter.__init__.<locals>.on_fit_toggled)r&   rT   r   npisfinitewidgetsLabelLayoutZBoundedFloatText_roundr   ZFloatSliderrA   observeToggleButtonrC   rk   r2   superr7   )r6   r   ra   valZvminZvmaxr]   Zvmin2Zvmax2Ztlabelrc   re   ri   rl   )rP   	__class__longest_par)r   ra   r6   rb   rd   r+   r7      sf    





	

z'make_widget.<locals>.Parameter.__init__Nc                    s>   | j d || j _|r(|\| j _| j _| j  dd d S )Nr0   r   )rA   Zunobserve_allr0   r[   r\   rs   )r6   r0   rT   )rP   r*   r+   rQ      s
    z$make_widget.<locals>.Parameter.reset)N)rK   rL   rM   r7   rQ   __classcell__r*   )rP   rx   )rw   r+   	Parameter   s   Prz   c                 s   s   | ]}t |V  qd S r5   )lenr:   ra   r*   r*   r+   r<      r=   zmake_widget.<locals>.<genexpr>c                    s   g | ]} |qS r*   r*   r|   )rz   r   r*   r+   
<listcomp>   r=   zmake_widget.<locals>.<listcomp>Z8em)	max_widthrg   primary)rf   Zbutton_stylerZ   TZ
Continuous)rf   rZ   ZResetZdanger)r-   r.   r/   r-   )optionsr0   rZ   )r&   rT   ro   ZHBoxr\   rI   rq   ZButtonZon_clickrt   rs   ZDropdownZVBoxOutput)r   r   r   r   rS   rW   Zbutton_layoutZ
fit_buttonZupdate_buttonZreset_buttonZuir*   )rP   rz   r1   rG   r2   r   rx   r   rU   rV   rH   rI   r   r,   r   r+   make_widget   sV    
)%Z


r   )r;   returnc                 C   s   t | dS )Nz.1g)float)r;   r*   r*   r+   rr     s    rr   )__doc__utilr   r   r    numpyrm   typingr   r   r   r!   rD   
ipywidgetsro   Zipywidgets.widgets.interactionr	   IPython.displayr
   Z
matplotlibr   r   ModuleNotFoundErroremsgrO   boolr   r   rr   r*   r*   r*   r+   <module>   s0   

6
  