diff --git a/Documentation/Tex/MiMeS.tex b/Documentation/Tex/MiMeS.tex index f0f83fd..b9b2bcb 100644 --- a/Documentation/Tex/MiMeS.tex +++ b/Documentation/Tex/MiMeS.tex @@ -1,1859 +1,1867 @@ \documentclass[11pt,a4paper]{article} \usepackage[utf8]{inputenc} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry} \usepackage{slashed} \usepackage{hyperref} \usepackage{graphicx} \usepackage{caption} \usepackage{float} \usepackage{subcaption} \usepackage{multirow} \usepackage[dvipsnames]{xcolor} \usepackage{multicol} \usepackage{authblk} \renewcommand{\theequation}{\arabic{section}.\arabic{equation}} \include{macros} %%%%%%%-----------------------Rules-----------------------%%%%%%% % 1. Put any new macros in macros.tex. % 2. Section should start with: %\section{This is a section}\label{sec:Intro} %\setcounter{equation}{0} % 3. labels for Figs should start with fig:, for equations should start with eq:, for sections with sec:, etc. %%%%%%%--------------------------------------------------%%%%%%% \author[ ]{Karamitros Dimitrios} \affil[ ]{\em School of Physics and Astronomy, The University of Manchester, Manchester M13 9PL, United Kingdom} \affil[ ]{\textit{E-mail: } \href{mailto:dimitrios.karamitros@manchester.ac.uk}{\color{blue}{dimitrios.karamitros@manchester.ac.uk}}} \title{{\tt MiMeS}: Misalignment Mechanism Solver} \begin{document} \maketitle \begin{abstract} We introduce a \CPP header-only library that solves the Axion equation of motion, \mimes. \mimes makes no assumptions regarding the cosmology and the thermal mass of the axion, which allows the user to consider various cosmological scenarios and axion-like models. \mimes also includes a convenient \PY interface, which allows the user to use it without writing any code \CPP. \end{abstract} \section{Introduction}\label{sec:intro} \setcounter{equation}{0} About the axion... \section{Physics background}\label{sec:abundance} \setcounter{equation}{0} % Although there are several works in the literature (such as~\cite{Chang:1998ys}) that can provide a insight on the solution of the axion equation of motion (EOM), in this section we define, derive, and discuss the various quantities we need, in order to understand how \mimes works in detail. \paragraph{The EOM} %The axion field is written as % %\begin{equation} % A \equiv \fa \ \theta, % \label{eq:fa_def} %\end{equation} %% %with $\fa$ the scale of the axion that determines the the scale at which the PQ symmetry breaks. % The EOM in terms of the axion angle, $\theta$, is % \begin{equation} \lrb{\dfrac{d^2}{d t^2} + 3 H(t) \ \dfrac{d}{d t} } \theta(t) + \maT^2(t) \ \sin \theta(t) = 0 \; , \label{eq:eom} \end{equation} % with $H(t)$ the Hubble parameter (determined by the cosmology), and $\maT(t)$ the time (temperature) dependent mass of the axion, with \begin{equation} \maT^2(T) = \dfrac{\chi(T)}{\fa^2}\;, \label{eq:axion_mass_def} \end{equation} % and $\chi$ a function of the temperature, and $\fa$ the scale at which the Peccei Quinn symmetry breaks \DK{ref??}. For the QCD axion, this has been calculated using lattice simulations in~\cite{Borsanyi:2016ksw}.~\footnote{The data provided by ref.~\cite{Borsanyi:2016ksw} are used by \mimes out-of-the-box. However, the user is free to change them.} \paragraph{Initial conditions} % \begin{figure}[h!] \includegraphics[width=1\textwidth]{figs/axion_mass.pdf} \caption{The mass of the axion as a function of the temperature for $\fa=10^{12}~\GeV$, using the data provided in ref.~\cite{Borsanyi:2016ksw}.} \label{fig:axion_mass} \end{figure} % Assuming that the PQ symmetry breaks before inflation, the initial conditions (\ie at some $t=0$, after inflation) for the EOM is random. However, we note that $\maT \to 0$ (see \Figs{fig:axion_mass}) -- \ie $\maT \ll H$ -- at very early times. Therefore, after inflation, the EOM is simply % \begin{equation} \lrb{\dfrac{d^2}{d t^2} + 3 H(t) \ \dfrac{d}{d t} } \theta(t) = 0 \; , \label{eq:massless_eom} \end{equation} % which is solved by $\theta = \thetai + C \dint_{0}^t d t' \ \lrb{ \dfrac{a(t'=0)}{a(t')} }^3$, with $\thetai$ a constant and $a$ the scale factor of the Universe. That is, as the Universe expands, $\theta \approx \thetai$. Since we would like to calculate the relic abundance of axions, we can integrate \eqs{eq:eom} from a time after inflation (call it $t = \ti$) such that $ \dot \theta |_{t=\ti} = 0$ and $\theta|_{t=\ti} \approx \thetai$. \subsection{The WKB approximation} % In order to solve analytically \eqs{eq:eom}, we assume $\theta \ll 1$, which results in the linearised EOM % \begin{equation} \lrb{\dfrac{d^2}{d t^2} + 3 H(t) \ \dfrac{d}{d t} + \maT^2(t) } \theta(t) = 0 \; . \label{eq:linear_eom} \end{equation} Using a trial solution $\theta_{\rm trial} = \exp\lrsb{ i \dint d t \ \lrBigb{u(t) +3/2 \ i \ H(t)} }$, and defining $\Omega^2 = \maT^2 - \dfrac{9}{4} H^2 - \dfrac{3}{2} \dot H $ we can transform the \eqs{eq:linear_eom} to % \begin{equation} u^2 = \Omega^2 + i \ \dot u \; , \label{eq:eom_of_u} \end{equation} % which has a formal solution $u = \pm \sqrt{\Omega^2 + i \dot u}$. Assuming that $\dot u \ll \Omega^2$ and $\dot \Omega \ll \Omega^2$, we can approximate $u$ as % \begin{equation} u \approx \pm \Omega + \dfrac{i}{2} \dfrac{d \log \Omega}{d t} \;, \label{eq:u_approx} \end{equation} % which results in the general solution of \eqs{eq:linear_eom} % \begin{equation} \theta \approx \dfrac{1}{\sqrt{\Omega}} \exp\lrb{-\dfrac{3}{2} \int d t \ H} \lrsb{ A \cos\lrb{ \int d t \ \Omega} + B \sin\lrb{ \int d t \ \Omega} } \;. \label{eq:general_solution_eom_approx} \end{equation} Applying, then, the initial conditions $ \dot \theta |_{t=\ti} = 0$ and $\theta|_{t=\ti} \approx \thetai$, we arrive at % \begin{equation} \theta(t) \approx \thetai \sqrt{ \dfrac{ \Omegai }{\Omega (t)} } \lrb{\dfrac{a}{\ai}}^{-3/2} \ \cos\lrb{ \int_{\ti}^t d t^\prime \ \Omega(t^\prime)} \;. \label{eq:solution_eom_approx} \end{equation} In order to further simplify this approximate result, we note that $\theta$ deviates from $\thetai$ close to $t=\tosc$ -- corresponding to $T = \Tosc$, the so-called ``oscillation temperature" -- $\maT|_{t = \tosc} = 3 H|_{t = \tosc}$, which is defined as the point at which the axion begins to oscillate. % This observation allows us to set $\ti = \tosc$. Moreover, at $t > \tosc$, we approximate $\Omega \approx \maT$, as $H^2$ and $\dot H$ become much smaller than $\maT^2$ quickly after $t=\tosc$. Finally, the axion angle takes the form % \begin{equation} \theta(t) \approx \thetaosc \lrb{\dfrac{3}{4}}^{1/4} \sqrt{ \dfrac{ \maT|_{t=\tosc} }{\maT (t)} } \lrb{\dfrac{a}{\aosc}}^{-3/2} \ \cos\lrb{ \int_{\tosc}^t d t^\prime \ \maT(t^\prime)} \;, \label{eq:solution_eom_approx_theta_osc} \end{equation} % where $\thetaosc = \theta|_{t=\tosc}$. This equation is further simplified if we assume that $\thetaosc \approx \thetai$, \ie % \begin{equation} \theta(t) \approx \thetai \lrb{\dfrac{3}{4}}^{1/4} \sqrt{ \dfrac{ \maT|_{t=\tosc} }{\maT (t)} } \lrb{\dfrac{a}{\aosc}}^{-3/2} \ \cos\lrb{ \int_{\tosc}^t d t^\prime \ \maT(t^\prime)} \;. \label{eq:solution_eom_approx_final} \end{equation} % It is worth mentioning that the accuracy of this approximation depends, in general, on $\Tosc$; it determines the difference between $\thetai$ and $\thetaosc$, the deviation of $\dot \theta|_{t=\tosc}$ from $0$, and whether $\dot \Omega \ll \Omega^2$. \paragraph{Axion energy density} % The energy density of the axion is % \begin{eqnarray} \rho_{a} = \dfrac{1}{2} \fa^2 \lrsb{ \dot{\theta}^2 + \maT^2 \theta^2 } \;. \label{eq:rho_a_def} \end{eqnarray} % For the relic abundance of axions, we need to calculate their energy density at very late times. That is, $\dot{\tilde{m}}_a = 0$, $\maT \gg H$ and $\dot H \ll H^2$. After some algebra, we obtain the approximate form of the energy density (as a function of the scale factor $a$) % \begin{eqnarray} \rho_{a} \approx \dfrac{\ma }{2} \ \fa^2 \ \thetai^2 \ \maT(\aosc) \ \lrb{\dfrac{\aosc}{a}}^3 \;, \label{eq:rho_a0} \end{eqnarray} % which shows that the energy density of axions at late times scales as the energy density of matter. If there is a period of entropy injection to the plasma for $T<\Tosc$, the axion energy density gets diluted, since % \begin{equation} a^3 \ s = \gamma \ \aosc^3 \ s_{\rm osc} \Rightarrow \lrb{\dfrac{\aosc}{a}}^3 = \gamma^{-1} \dfrac{s}{s_{\rm osc}} \;, \end{equation} % with $\gamma$ the amount of entropy injection to the plasma between $\tosc$ and $t$. Therefore, the present (at $T=T_0$) energy density of the axion, becomes % \begin{eqnarray} \rho_{a,0} = \gamma^{-1} \dfrac{s_0}{s_{\rm osc}} \ \dfrac{1 }{2} \ \fa^2 \ \ma \ \maT_{,{\rm osc}} \ \thetai^2 \;, \label{eq:rho_a_approx} \end{eqnarray} with $\ma$ the mass of the axion at $T=T_0$. Notice that the explicit dependence on $\fa$ cancels, since $\maT \sim 1/\fa$. That is, $\fa$ only affects the energy density of the axions through its impact on $\Tosc$. % \subsection{Notation}\label{sec:notation} % %The WKB approximation is very useful in order to understand the evolution of the axion field. However, it fails to explain how the oscillation begins before $\dot \Omega \ll \Omega^2$ is reached. In this section we will try to understand the evolution of the axion as generally as possible. % The EOM~(\ref{eq:eom}) depends on time, which is not very useful variable in a non-standard comsological setting. Therefore, we introduce % \begin{eqnarray} u = \log \dfrac{a}{\ai} \;, \label{eq:natation} \end{eqnarray} % which results in % \begin{eqnarray} &\dfrac{d F}{dt} &= H \dfrac{d F}{du} \nonumber \\ &\dfrac{d^2 F}{dt^2} &= H^2 \ \lrb{ \dfrac{d^2 F}{du^2} + \dfrac{1}{2} \dfrac{d \log H^2}{du} \dfrac{d F}{du} }\;. \label{eq:deriv_u} \end{eqnarray} The EOM in terms of $u$, then, becomes % \begin{equation} \dfrac{d^2 \theta}{du^2} + \lrsb{\dfrac{1}{2} \dfrac{d \log H^2}{du} + 3 } \dfrac{d \theta}{d u} + \ \lrb{\dfrac{\maT}{H}}^2 \ \sin \theta =0 \;. \label{eq:eom_u} \end{equation} Notice that in a radiation dominated Universe % $$ \dfrac{d \log H^2}{du} = -\lrb{ \dfrac{d \log \geff}{d \log T} +4 } \delta_h^{-1}\;, $$ with $ \delta_h = 1+ \dfrac{1}{3} \dfrac{d \log \heff}{d \log T} $. % In a general cosmological setting, the expansion rate is dominated by an energy density that scales as $\rho \sim a^{-c}$, which results in $\dfrac{d \log H^2}{du} = -c$. However, close to rapid particle annihilations and decays, the evolution of the energy densities change, and $\dfrac{d \log H^2}{du}$ can only be computed numerically. It is also worth mentioning that the EOM~\ref{eq:eom_u} with the initial condition $\theta(u=0)=\thetai$ and $d\theta/du (u=0)=0$ can be written as a system of first order % \begin{eqnarray} & \dfrac{d \zeta}{du} + \lrsb{\dfrac{1}{2} \dfrac{d \log H^2}{du} + 3 } \zeta + \ \lrb{\dfrac{\maT}{H}}^2 \ \sin \theta =0 \;. \\ \nonumber &\dfrac{d \theta}{d u} - \zeta=0 \;. \label{eq:eom_sys} \end{eqnarray} % This form of the EOM is suitable for integration via Runge-Kutta methods, which are briefly discussed in Appendix~\ref{app:RK}. \subsection{Beyond the WKB approximation}\label{sec:beyond_WKB} % \DK{This needs to be changed} The WKB approximation is very useful, as it helps us understand the evolution of the axion field after it begins to oscillate adiabatically. However, it fails to capture the dynamics before the adiabatic conditions are met, result in inaccurate axion relic abundance result. In this section, we examine the deviation of $\thetaosc$ from the initial value of $\theta$, as well how to treat cases where the EOM cannot be linearized. \subsubsection{Behaviour close to the initial condition}\label{sec:close_to_ini} % \DK{This subsection is not really correct. The WKB approximation {\bf underestimates} the relic for $\theta \gtrsim 1$, but the first approximation estimate is closer to the true relic. Maybe I should remove the discussion on $\thetaosc$ -- since it can be misleading, and replace it with deviation between numerical and WKB estimates.} % The accuracy of the approximate evolution of the axion angle given in \eqs{eq:solution_eom_approx_final} depends on the deviation between $\thetai$ and $\thetaosc$. In order to examine their deviation, we expand \eqs{eq:eom} at a time $t =\ti + \delta t$ with $\delta t \to 0$. That is, we use the following approximations % \begin{equation*} \ddot{\theta} \approx \dfrac{\dot \theta (\ti+ \delta t) - \dot \theta (\ti)}{ \delta t } = \dfrac{\dot \theta (\ti + \delta t) }{\delta t } \;, \qquad \dot \theta(\ti + \delta t) = \dfrac{\theta(\ti + \delta t) - \thetai}{\delta t} \;. \end{equation*} % and, solve the EOM~\ref{eq:eom} for $\theta(\ti + \delta t)$. This results in % \begin{equation} \theta(\ti + \delta t) \approx \thetai -\dfrac{\delta t^2}{1+3\ \delta t \ H(\ti + \delta t) } \ \maT^2(\ti + \delta t) \sin \theta(\ti + \delta t) \approx \thetai - \delta t^2 \ \maT^2(\ti) \ \sin \thetai \ + \mathcal{O}(\delta t^3)\;, \label{eq:theta_dt} \end{equation} % which indicates that the angle decreases (increases) as the temperature drops if $\thetai>0$ ($\thetai<0$). Using the notation introduced in section~\ref{sec:notation}, \eqs{eq:theta_dt} takes the form % \begin{eqnarray} \theta \approx \thetai - \delta u^2 \ \lrb{\dfrac{\maT}{H}}_{t=\ti}^2 \ \sin \thetai \;, \label{eq:theta_du} \end{eqnarray} % which can be used to estimate the angle at the oscillation temperature % \begin{eqnarray} \thetaosc \approx \thetai - \lrb{\dfrac{\maT}{H}}_{t=\ti}^2 \lrsb{1- \dfrac{\Ti}{\Tosc}\lrb{\dfrac{\heff_{,\rm ini}}{\heff_{,\rm osc}}\gamma_{\rm osc}}^{1/3}}^{2} \ \sin \thetai \;, \label{eq:theta_osc} \end{eqnarray} % where $\gamma_{\rm osc}$ is the entropy injection between $\Ti$ and $\Tosc$. Notice that in the derivation of \eqs{eq:solution_eom_approx_final} we used $\theta_{\rm osc} = \thetai$ as our first approximation. Thus, \eqs{eq:theta_osc} provides a correction that takes into account the deviation between $\theta_{\rm osc} $ and $ \thetai$, and \eqs{eq:rho_a_approx} becomes (for $\thetai \ll 1$) % \begin{eqnarray} \rho_{a,0} = \gamma^{-1} \dfrac{s_0}{s_{\rm osc}} \ \dfrac{1 }{2} \ \fa^2 \ \ma \ \maT_{,{\rm osc}} \ \thetai^2 \lrBiggcb{ 1 - \ \lrb{\dfrac{\maT}{H}}_{t=\ti}^2 \ \lrb{1- \dfrac{\Ti}{\Tosc}\lrb{\dfrac{\heff_{,\rm ini}}{\heff_{,\rm osc}}\gamma_{\rm osc}}^{1/3}}^{2} }^2 \;, \label{eq:rho_a_NLO} \end{eqnarray} % which implies that the WKB approximation overestimates the energy density of the axion, since $\gamma_{\rm osc}$, $H_{\rm ini}$, and $\Tosc$ can vary. \subsubsection{Example}\label{sec:comparison_between_WKB_approaches} In order to demonstrate the effect of the deviation between $\thetai$ and $\thetaosc$, we show \Figs{fig:WKB_diff_i,fig:WKB_diff_osc}, for different cosmological scenarios. In both figures, the red and black (dashed) lines correspond to standard cosmological scenario and early matter dominated (EMD) Universe, respectively.~\footnote{For the matter dominated case (following the notation of refs.~\cite{Arias:2019uol,Arias:2020qty}), we have used $T_{\rm end}=10^{-2} ~\GeV,\; c=3, \; T_{\rm ini}=10^{12} ~\GeV, \; \text{and}\; r=0.1$.} For the matter dominated case, entropy is injected to the plasma both before and after $\Tosc$. The entropy injection factor, $\gamma_{\rm osc}$, as a function of $\fa$ is shown in \Figs{fig:gamma_osc}. In \Figs{fig:WKB_diff_i} we show the relative difference between $\Omega h^2$ using \eqs{eq:solution_eom_approx_final} and the result obtained from \mimes. It should be apparent that the accuracy of the estimate based on \eqs{eq:solution_eom_approx_final} depends of $\fa$, since for high values of $\fa$, $\Tosc$ is low. That is, the deviation between $\thetai$ and $\thetaosc$ is greater than the corresponding difference for lower $\fa$, especially for the matter dominated case, where the entropy injection is great (see \Figs{fig:gamma_osc}). In \Figs{fig:WKB_diff_osc} we show the relative difference between $\Omega h^2$ obtained by integrating numerically \eqs{eq:eom_u} and using \eqs{eq:solution_eom_approx_theta_osc} with \eqs{eq:theta_osc}. The relative difference between the two estimates, once again, depends $\fa$. It should be noted that the estimate for $\thetaosc$ depends on the choice of $\Ti$. For \Figs{fig:WKB_diff_osc}, we define $\Ti$ as the temperature at which $3H/\maT = 2$. We note that this estimate is more accurate, its accuracy still depends on whether the axion evolves adiabatically at $T<\Tosc$. Moreover, an increase of $\gamma_{\rm osc}$ invalidates the estimate of $\thetaosc$; higher powers of $\delta u$ may be needed. % \begin{figure}[t] \begin{subfigure}[]{0.5\textwidth} \includegraphics[width=1\textwidth]{figs/WKB_diff_i.pdf} \caption{} \label{fig:WKB_diff_i} \end{subfigure} \begin{subfigure}[]{0.5\textwidth} \includegraphics[width=1\textwidth]{figs/WKB_diff_osc.pdf} \caption{} \label{fig:WKB_diff_osc} \end{subfigure} \begin{center} \begin{subfigure}[]{0.5\textwidth} \includegraphics[width=1\textwidth]{figs/gamma_osc.pdf} \caption{} \label{fig:gamma_osc} \end{subfigure} \end{center} \caption{...} \label{fig:WKB_diff} \end{figure} % Nevertheless, neither estimates based on \eqs{eq:solution_eom_approx_theta_osc,eq:solution_eom_approx_final} seem to provide a result comparable to numerically integrating \eqs{eq:eom_u}. Therefore, numerical integration should be preferred. \subsubsection{Adiabatic invariant and the anharmonic factor}\label{sec:an_fac} % In oscillatory systems with varying period, the energy is not conserved, and it is usually useful to define an ``adiabatic invariant", which is an approximate constant of motion. \paragraph{Definition of the adiabatic invariant} % Given a system with Hamiltonian $\mathcal{H}(\theta,p;t)$, the equations of motion are % \begin{equation} \dot p = - \dfrac{\partial \mathcal{H}}{\partial \theta} \;, \;\; \dot \theta = \dfrac{\partial \mathcal{H}}{\partial p} \;. \label{eq:hamiltonian_eoms} \end{equation} Moreover, we note that % \begin{equation} d \Ham = \dot \theta \ d p - \dot p \ d \theta + \dfrac{\partial \Ham}{\partial t} \ d t \;. \label{eq:total_dH} \end{equation} If this system exhibits closed orbits (\eg if it oscillates), we define % \begin{equation} J \equiv C \ \oint p \ d \theta \;, \label{eq:adiabatic_inv_def} \end{equation} % where the integral is over a closed path (\eg a period, $T$), and $C$ indicates that $J$ can always be rescaled with a constant. This quantity is the adiabatic invariant of the system, if the Hamiltonian varies slowly during a cycle. That is, % \[ \dfrac{d J}{d t} = C \ \oint \lrBigb{\dot p \ d \theta + p \ d \dot \theta} = C \ \dint_{t}^{t+T} \dfrac{\partial \Ham}{\partial t^\prime} \ d t^\prime \approx T \ \dfrac{\partial \Ham(t^{\prime})}{\partial t^{\prime}}\Big|_{t^{\prime}=t} \approx 0 \;. \] % \paragraph{Application to the axion} % The Hamiltonian that results in the EOM of \eqs{eq:eom} is % \begin{equation} \Ham = \dfrac{1}{2} \dfrac{p^2}{\fa^2 \ a^3} + V(\theta) \ a^3\;, \label{eq:axion_H} \end{equation} % with % \begin{eqnarray} & p = \fa^2 \ a^3 \ \dot \theta \\ \label{eq:momentum} & V(\theta) = \maT^2 \fa^2 (1-\cos \theta) \;. \label{eq:potential} \end{eqnarray} Notice that the Hamiltonian varies slowly if $\dot \maT/\maT \ll \maT$ and $H \ll \maT$, which are the adiabatic conditions. When these conditions are met, the adiabatic invariant for this system becomes % \begin{equation} J = \dfrac{\oint p \ d \theta}{\pi \fa^2} = \dfrac{1}{\pi \fa^2} \oint \sqrt{ 2\lrb{ \Ham(\theta) - V(\theta) \ a^3} \ \fa^2 a^3 \ } \ d \theta = \dfrac{2}{\pi \fa^2} \int_{-\thetamax}^{\thetamax} \sqrt{ 2\lrb{ \Ham(\thetamax) - V(\theta) \ a^3} \ \fa^2 a^3 \ } d \theta \;, \label{eq:J_axion_definition} \end{equation} % where we note that $\thetamax$ denotes the maximum of $\theta$ -- the peak of the oscillation, which corresponds to $p=0$. That is, $\Ham(\thetamax) = V(\thetamax) \ a^3$. Therefore, the adiabatic invariant, takes the form \begin{eqnarray} J=& \dfrac{2 \sqrt{2} }{\pi \fa} \int_{- \thetamax} ^{\thetamax} \sqrt{ V(\thetamax) - V(\theta) } a^{3} d \theta = \dfrac{2 \sqrt{2} }{\pi} \ \maT \, a^3 \ \dint_{- \thetamax}^{\thetamax} \sqrt{\cos \theta - \cos \thetamax} \ d \theta \;, \label{eq:J_axion_derivation} \end{eqnarray} % where, for the last equality. we have used the adiabatic conditions, \ie negligible change of $\maT$ and $a$ during one period. Usually, the adiabatic invariant is written as~\cite{Lyth:1991ub,Bae:2008ue} % \begin{equation} J = a^3 \ \maT \ \thetamax^2 \, f(\thetamax) \;, \label{eq:J_axion_final_form} \end{equation} % where \begin{equation} f(\thetamax) =\dfrac{ 2 \sqrt{2}}{\pi \thetamax^2 } \dint_{- \thetamax}^{\thetamax} d \theta \sqrt{ \cos \theta - \cos \thetamax } \;, \label{eq:anharmonic_f} \end{equation} % is called the anharmonic factor, with $ 0.5 \lesssim f(\thetamax) \leq 1$ (see \Figs{fig:anharmonic_factor}). \begin{figure}[t] \includegraphics[width=1\textwidth]{figs/anharmonic_factor.pdf} \caption{The anharmonic factor for $0 \leq \thetamax < \pi $.} \label{fig:anharmonic_factor} \end{figure} \paragraph{The role of the adiabatic invariant in the axion relic energy density} % The adiabatic invariant allows us to calculate the maximum value of the angle $\theta$ at late times from its corresponding value at some point after the adiabatic conditions where met. It allows us to calculate the energy density of the axions field for $\theta \gtrsim 1$ since we have taken into account the exact potential. In order to do this, we can numerically integrate \eqs{eq:eom}, and identify the maxima of $\theta$. Once the adiabatic conditions are fulfilled, we can stop the integration at a peak, $\thetamax_{,*}$ -- which corresponds to $T=T_{*}$ and $a=a_{*}$. Then, the value of the maximum angle today ($\thetamax_{,0} \ll 1$) is related to $\thetamax_{,*}$ via % \begin{eqnarray} \thetamax_{,0}^2 &= \lrb{\dfrac{a_*}{a_0}}^3 \ \dfrac{\maT_{,*}}{\ma} \ f(\thetamax_{,*}) \ \thetamax_{,*}^2 = \gamma^{-1} \ \dfrac{s_0}{s_*} \ \dfrac{\maT_{,*}}{\ma} \ f(\thetamax_{,*}) \ \thetamax_{,*}^2 \; . \label{eq:theta_relation} \end{eqnarray} % Using this, and since we evaluate the energy density at the maximum of $\theta$ (\ie $\dot \theta = 0$), we can determine the energy density of axions today from \eqs{eq:rho_a_def}. That is, % \begin{equation} \rho_{a,0} = \gamma^{-1} \ \dfrac{s_0}{s_*} \ \ma \ \maT_{,*} \ \dfrac{1}{2} \ \fa^2 \ \thetamax_{,*}^2 \; \ f(\thetamax_{,*}) \;, \label{eq:rho_axion_exact} \end{equation} % where $\gamma$ is the entropy injection coefficient between $T_{*}$ and $T_0$, defined from % \begin{equation} a^3(T_0) \ s(T_0) = \gamma \ a^3(T_*) \ s(T_*) \; \label{eq:entropy_injection_gamma} \end{equation} Notice that \eqs{eq:rho_axion_exact} is similar to the corresponding WKB result~(\ref{eq:rho_a_approx}) at $\tosc \to t_*$, multiplied by the anharmonic factor $f(\thetamax_{,*})$. That is, if the axion starts to evolve adiabatically close to $t=\tosc$, and $\thetaosc \ll 1$, the WKB approximation is valid. \section{First steps with \mimes}\label{sec:first_steps} \setcounter{equation}{0} % \begin{lstlisting}[caption={Commands in order to download \mimes, the differential equation solvers, and the interpolation libraries.},captionpos=b, label=list:git_download] git clone git@github.com:dkaramit/MiMeS.git cd MiMeS git submodule init git submodule update --remote \end{lstlisting} % The library can downloaded from \href{https:/github.com/dkaramit/MiMeS}{github.com/dkaramit/MiMeS}. Since the library depends on {\tt NaBBODES}~\cite{NaBBODES} {\tt SpleSplines}~\cite{SimpleSplines}, one has to download the, too. However, in order to get \mimes ready, one can run the commands shown in listing~\ref{list:git_download}. Although this method should be preferred in order to get the latest version, \mimes can also be downloaded from \href{https:/mimes.hepforge.org/downloads/}{mimes.hepforge.org/downloads}. Once everything is downloaded successfully, we can go inside the \mimes directory, and run \run{bash configure.sh}~\footnote{It is recommended to use {\tt bash}.} and \run{make}. The {\tt bash} script {\tt configure.sh}, just writes some paths to some files, formats the data files provided in an acceptable format (in section~\ref{sec:input} the format is explained), and makes some directories. % The {\tt makefile} is responsible for compiling some examples and checks, as well as the shared libraries that needed for the \PY interface. If everything runs successfully, there should be two new directories {\tt exec} and {\tt lib}. Inside {\tt exec}, there are several executables that ready to run, in order to ensure that the code runs (\eg no segmentation fault occurs). For example, {\tt exec/AxionSolve\_check.run}, should print the values of the parameters $\thetai$ and $\fa$, the oscillation temperature and the corresponding value of $\theta$, the evolution of the axion (\eg temperature, $\theta$, $\rho_{a}$, etc.), and the values of various quantities on the peaks of the oscillation. In the directory {\tt lib}, there are several shared libraries for the \PY interface. Although there are various options available at compile-time, we first discuss how \mimes can be used, in order for the role of these options to be clear. \subsection{First examples}\label{sec:First_examples} % There are several examples in \CPP ({\tt MiMeS/UserSpace/Cpp}) and \PY ({\tt MiMeS/UserSpace/Python}), as well as \JUPY notebooks ({\tt MiMeS/UserSpace/JupyterNotebooks}), that show in detail how \mimes can be used. \subsubsection{Using \mimes in \CPP}\label{sec:cpp_first_example} % The class that is responsible for the solution of the EOM is \cppin{mimes::Axion<LD,Solver,Method>}, located in {\tt MiMeS/src/Axion}. However, in order to use it, we have to define the mass of the axion as a function of the temperature and $\fa$. The axion mass is defined as an instance of the \cppin{mimes::AxionMass<LD>}, which is defined in the header file {\tt \mimes/src/AxionMass/AxionMass.hpp}. We should note that {\tt LD} is the numerical type we use (\eg { \tt long double}). The other template arguments are related to the differential equation solver, and their role will be explained in later sections. Therefore, at the top of the main {\tt .cpp} file, we need to include % \begin{cpp} #include "MiMeS/src/AxionMass/AxionMass.hpp" #include "MiMeS/src/Axion/AxionSolve.hpp" \end{cpp} % Notice that if the this {\tt .cpp} file is not in the root directory of \mimes, we need to compile it using the flag {\tt -Ipath-to-root}, "path-to-root" the relative path to the root directory of \mimes; \eg if the {\tt .cpp} is in the {\tt MiMeS/UserSpace/Cpp/Axion} directory, this flag should be {\tt -I../../../}. The mass of the axion can be defined in two ways; either via a data file or by a user defined function. \paragraph{Axion mass form data file} In many cases, axion mass cannot be written in a closed form. In these cases, the user may provide a data file. Then, the axion mass can be defined via this file as % \begin{cpp} mimes::AxionMass<LD> axionMass(chi_PATH, minT, maxT); \end{cpp} % Here {\tt chi\_PATH} is a (relative or absolute) path to a file with two columns; $T$ (in $\GeV$) and $\chi$ (in $\GeV^4$), with increasing $T$. In this case, the axion mass is interpolated between the temperatures {\tt minT} and {\tt maxT}. These two parameters are just suggestions, and the actual interpolation limits, {\tt TMin} and {\tt TMax}, are chosen as the closest temperatures in the data file. That is, in general, {\tt TMin} $\geq$ {\tt minT} and {\tt TMax} $\leq$ {\tt maxT}. Beyond these limits, the mass is assumed to constant by default. However, one can change this by using % \begin{cpp} axionMass.set_ma2_MAX(ma2_MAX); axionMass.set_ma2_MIN(ma2_MIN); \end{cpp} % with {\tt ma2\_MAX} and {\tt ma2\_MIN} the axion mass squared as functions (or any other callable objects) with signatures {\tt LD ma2\_MAX(LD T, LD fa)} and {\tt LD ma2\_MIN(LD T, LD fa)}. These functions are called for $T\geq${\tt TMax} and $T\leq${\tt TMin}, respectively. Usually, in order to ensure continuity of the axion mass, one needs to know {\tt TMin}, {\tt TMax}, $\chi(${\tt TMin}$)$, and $\chi(${\tt TMax}$)$; which can be found by calling {\tt axionMass.getTMin()}, {\tt axionMass.getTMax()}, {\tt axionMass.getChiMin()}, and {\tt axionMass.getChiMax()}, respectively. \paragraph{Axion mass function} In some cases, the dependence of the axion mass on the temperature is known. If this is the case, the user can define the axion mass via % \begin{cpp} mimes::AxionMass<LD> axionMass(ma2); \end{cpp} % with {\tt ma2} the axion mass squared as a callable object with signature {\tt LD ma2(LD T, LD fa)}. \paragraph{The EOM solver} Once the axion mass is defined, we can declare a variable that will be used to solve the EOM, as % \begin{cpp} mimes::Axion<LD,Solver,Method> ax(theta_i, fa, umax, TSTOP, ratio_ini, N_convergence_max, convergence_lim, inputFile, &axionMass, initial_step_size, minimum_step_size, maximum_step_size, absolute_tolerance, relative_tolerance, beta, fac_max, fac_min, maximum_No_steps); \end{cpp} % Here, {\tt LD} should be the desirable numeric type to be used; it is recommended to use {\tt long double}, but other choices are also available as we discuss later. Moreover {\tt Solver} and {\tt Method} depend on the type of Runge-Kutta the user chooses (see section~\ref{sec:options} as well as the Appendices~\refs{app:RK,app:usr_input} for more details). The various parameters are as follows: % \begin{enumerate} \item {\tt theta\_i}: initial angle. \item {\tt fa}: the PQ scale. \item {\tt umax }: if $u>${\tt umax} the integration stops (remember that $u=\log(a/a_i)$). Typically, this should be a large number ($\sim 1000$), in order to avoid stopping the integration before the axion begins to evolve adiabatically. \item {\tt TSTOP}: if the temperature drops below this, integration stops. In most cases this should be around $10^{-4}~\GeV$, in order to be sure that any entropy injection has stopped before integration stops (since BBN bounds~\cite{Kolb:206230,Peebles:1993} should not be violated). \item {\tt ratio\_ini}: integration starts when $3H/\maT \approx${\tt ratio\_ini} (the exact point depends on the file ``{\tt inputFile}", which we will see later). \item {\tt N\_convergence\_max} and {\tt convergence\_lim}: integration stops when the relative difference between two consecutive peaks is less than {\tt convergence\_lim} for {\tt N\_convergence\_max} consecutive peaks. \item {\tt inputFile}: relative (or absolute) path to a file that describes the cosmology. the columns should be: $u$ $T ~[\GeV]$ $\log H$, sorted so that $u$ increases.~\footnote{One can run \run{bash MiMeS/src/FormatFile.sh inputFile} in order to sort it and remove any unwanted duplicates. See Appendix~\ref{app:util} for details of {\tt MiMeS/src/FormatFile.sh}.} % It is important to remember that \mimes assumes that the entropy injection has stopped before the lowest temperature of given in {\tt inputFile}. Since \mimes is unable to guess the cosmology beyond what is given in this file, the user has to make sure that there are data between the initial temperature (which corresponds to {\tt ratio\_ini}, and {\tt TSTOP}). \item {\tt axionMass}: an instance of the \cppin{mimes::AxionMass<LD>} class, passed by pointer. \item {\tt initial\_stepsize} (optional): initial step the solver takes. \item {\tt maximum\_stepsize} (optional): This limits the step-size to an upper limit. \item {\tt minimum\_stepsize} (optional): This limits the step-size to a lower limit. \item {\tt absolute\_tolerance} (optional): absolute tolerance of the RK solver \item {\tt relative\_tolerance} (optional): relative tolerance of the RK solver. % Generally, both absolute and relative tolerances should be $10^{-8}$. In some cases, however, one may need more accurate result (\eg if {\tt f\_a} is extremely high, the oscillations happen violently, and the system destabilizes). Whatever the case, if the tolerances are below $10^{-8}$, long doubles have be used. \mimes by default uses {long double} variables, in order to change it see the options available in section~\ref{sec:input}. \item {\tt beta} (optional): controls how agreesive the adaptation is. Generally, it should be around but less than 1. \item {\tt fac\_max}, {\tt fac\_min} (optional): the stepsize does not increase more than fac\_max, and less than fac\_min. This ensures a better stability. Ideally, {\tt fac\_max}$=\infty$ and {\tt fac\_min}$=0$, but in reality one must tweak them in order to avoid instabilities. \item {\tt maximum\_No\_steps} (optional): maximum steps the solver can take Quits if this number is reached even if integration is not finished. \end{enumerate} % in order to understand the usage of the optional parameters, some basic techniques of Runge-Kutta methods are discussed in Appendix~\ref{app:RK}. The EOM~(\ref{eq:eom_u}), then can be solved using % \begin{cpp} ax.solveAxion(); \end{cpp} % Once the EOM is solved, we can access $\Tosc$, $\thetaosc$, and $\Omega h^2$ via {\tt ax.T\_osc}, {\tt ax.theta\_osc}, and {\tt ax.relic}. The entire evolution (the points the integrator took) of the axion angle is stored in {\tt ax.points}, which is a two-dimensional {\tt std::vector}, with the columns corresponding to $a$, $T~[\GeV]$, $\theta$, $d\theta/du$, $\rho_a$. Moreover, the peaks of he oscillation are stored in another two-dimensional {\tt std::vector}, with the columns corresponding to $a$, $T~[\GeV]$, $\thetamax$, $d\theta/du=0$, $\rho_a$, $J$. We should note that the peaks are identified using linear interpolation between integration points, in order to ensure that $d\theta/du = 0$. That is, the values stored in {\tt ax.peaks} do not exist in {\tt ax.points}. Finally, the local errors (see Appendix~\ref{app:RK}) of the integration points of $\theta$ and $\zeta$ are stored in {\tt ax.dtheta} and {\tt ax.dzeta}. \paragraph{Changing axion mass definition} % The axion mass definiton can change at any time by changing the data file (or {\tt ma2\_MIN} and {\tt ma2\_MAX}) or using using % \begin{cpp} ax.set_ma2(ma2); \end{cpp} % with {\tt ma2} a callable object with signature {\tt LD ma2(LD T, LD fa)}. However, since integration starts at a temperature determined by {\tt ratio\_ini}, if the mass changes (including the definitions beyond the interpolation limits), we have to remake the interpolation of the underlying cosmology described by the parameter {\tt inputFile}. Thus, if we change the definition of the mass, we need to call % \begin{cpp} ax.restart(); \end{cpp} % This function remakes the interpolations, clears all vector, and sets all variable to $0$. \paragraph{Changing initial condition} % The final member function is \cppin{mimes::Axion::setTheta\_i}, which allows the user to set a different $\thetai$ without generating another instance.~\footnote{Since the interpolations of the data of {\tt inputFile} are made inside the constructor of the \cppin{mimes::Axion<LD,Solver,Method>} class, \cppin{mimes::Axion<LD,Solver,Method>::setTheta\_i} is a faster choice if ones needs to solve the EOM for a different initial condition.} This function is used as % \begin{cpp} ax.setTeta_i(new_theta_ini); \end{cpp} % where {\tt new\_theta\_ini} is the new value of $\thetai$. Running this function resets all variables to $0$ (except {\tt T\_osc} and {\tt a\_osc}, since they should not change), and clears all {\tt std::vector} variables, which allows the user to simply run \run{ax.solveAxion();} as if {\tt ax} was a freshly defined instance. \subsubsection{Using \mimes in \PY}\label{sec:begin_py} % The modules for the \PY interface are located in {\tt MiMeS/src/interfacePy}. Although the usage of the {\tt AxionMass} and {\tt Axion} classes is similar to the \CPP case, it is worth showing explicitly how the \PY interface works. The two classes the modules {\tt interfacePy.AxionMass} and {\tt interfacePy.Axion}, and can be loaded in a \PY script as % \begin{py} from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), 'path_to_src')) from interfacePy.AxionMass import AxionMass from interfacePy.Axion import Axion \end{py} % It is important that {\tt 'path\_to\_src'} provides the relative path to the {\tt MiMeS/src} directory. For example, if the script is located in {\tt MiMeS/UserSpace/Python}, {\tt 'path\_to\_src'} should be {\tt '../../src'}. \paragraph{Axion mass definition via a data file} As before, we first need to define the axion mass. Similarly to the previous case, in order to define the axion mass via a file In many cases, axion mass cannot be written in a closed form. In these cases, the user may provide a data file. Then, the axion mass can be defined via this file as % \begin{py} AxionMass axionMass(chi_PATH, minT, maxT) \end{py} % Here, the constructor requires the same parameters as in \CPP. Moreover, the axion mass beyond the interpolation limits can be changed via % \begin{py} axionMass.set_ma2_MAX(ma2_MAX) axionMass.set_ma2_MIN(ma2_MIN) \end{py} % Although the naming is the same as in the \CPP case, there on important difference. Namely, {\tt ma2\_MAX} and {\tt ma2\_MIN} have to be functions (that take $T$ and $\fa$ as arguments and return $\maT^2$), and cannot be any other callable object. The reason is that \mimes uses the {\tt ctypes} module, which only works with objects compatible with {\tt C}. % Moreover, the values of {\tt TMin}, {\tt TMax}, $\chi(${\tt TMin}$)$, and $\chi(${\tt TMax}$)$ can be obtained by {\tt axionMass.getTMin()}, {\tt axionMass.getTMax()}, {\tt axionMass.getChiMin()}, and {\tt axionMass.getChiMax()}, respectively. \paragraph{Axion mass definition via a function} % Again this can be done as % \begin{py} AxionMass axionMass(ma2) \end{py} % with {\tt ma2} the axion mass squared, which should be a function (not any callable object) of $T$ and $\fa$. \paragraph{The EOM solver} % We can define an {\tt Axion} instance as follows % \begin{py} ax=Axion(theta_i, fa, umax, TSTOP, ratio_ini, N_convergence_max, convergence_lim, inputFile, axionMass, initial_step_size, minimum_step_size, maximum_step_size, absolute_tolerance, relative_tolerance, beta, fac_max, fac_min, maximum_No_steps) \end{py} % Here the input parameters are the same as in the \CPP case (the usage of the class can be found by running {\tt ?Axion} after loading the module). The only slight difference is that the {\tt axionMass} is not passed as a pointer; which is done internally using {\tt ctypes}. Using the defined variable ({\tt ax} in this example), we can simply run % \begin{py} ax.solveAxion() \end{py} % in order to solve the EOM of the axion. In contrast to the \CPP implementation, this only gives us access to $\Tosc$, $\thetaosc$, and $\Omega h^2$; the corresponding variables are {\tt ax.T\_osc}, {\tt ax.theta\_osc}, and {\tt ax.relic}. In order to get the evolution of the axion field, we need to run % \begin{py} ax.getPoints() \end{py} % This will make {\tt numpy} arrays that contain the scale factor ({\tt ax.a}), temperature ({\tt ax.T}), $\theta$ ({\tt ax.theta}), its derivative with respect to $u$ ({\tt ax.zeta}), and the energy density of the axion ({\tt ax.rho\_axion}). Moreover, in order to get the various quantities on the peaks of the oscillation, we can run % \begin{py} ax.getPeaks() \end{py} % This makes {\tt numpy} arrays that contain the scale factor ({\tt ax.a\_peak}), temperature ({\tt ax.T\_peak}), $\theta$ ({\tt ax.theta\_peak}), its derivative with respect to $u$ ({\tt ax.zeta\_peak}, which should be equal to $0$), the energy density of the axion ({\tt ax.rho\_axion\_peak}), and the values of the adiabatic invariant on the peaks ({\tt ax.adiabatic\_invariant}). Moreover, we can run the following % \begin{py} ax.getErrors() \end{py} % in order to store the local errors (see Appendix~\ref{app:RK}) of $\theta$ and $\zeta$ in {\tt ax.dtheta} and {\tt ax.dzeta}, respectively. \paragraph{Changing axion mass definition} % We can change the axion mass by changing the file, {\tt ma2\_MIN} and {\tt ma2\_MAX}, or using % \begin{cpp} ax.set_ma2(ma2) \end{cpp} % with {\tt ma2} a function that takes $T$ and $\fa$, and returns the $\maT^2$. As in the \CPP case, if the definition of the mass of the axion changes (including the definitions beyond the interpolation limits), we have to call % \begin{cpp} ax.restart() \end{cpp} % in order to remake the interpolation of cosmological quantities and reset the various variables.x \paragraph{Changing the initial condition} % The initial condition $\thetai$ can be changed using % \begin{py} ax.setTeta_i(new_theta_ini) \end{py} % which is faster than running the constructor again, since all the interpolations are reused. However, running this function, erases all the arrays, and resets all variables to $0$ (except {\tt T\_osc} and {\tt a\_osc}, as they should not change). \paragraph{Importand note} The {\tt Axion} class constructs a pointer to an instance of the underlying \cppin{mimes::Axion} class, which has to be manually deleted. Therefore, once {\tt ax} is used it must be deleted, \ie we need to run % \begin{py} del ax \end{py} % We should note that this must run even if we assign another instance to the same variable {\tt ax}, otherwise we risk running out of memory. \section{Assumptions and user input}\label{sec:assumptions} \setcounter{equation}{0} % \mimes only makes a few, fairly general, assumptions. First of all, it is assumed that the axion energy density is always subdominant compared to radiation or any other component of the Universe, and that decays and annihilations of particles have a negligible effect on the axion energy density. Moreover, the initial condition is always assumed to be $\theta_{t=\ti} = \thetai$ and $\dot \theta|_{t=\ti}=0$. % Furthermore, it is also assumed that $3H/\maT$ increases monotonically at high temperatures. % Also, it is assumed that the entropy is resumes its conserved status at a temperature higher than the minimum temperature of {\tt inputFile} (which is required by the constructor of the \cppin{mimes::Axion<LD,Solver,Method>} class). % Finally, \mimes does not try to predict anything regarding the cosmology. Therefore, the temperatures in {\tt inputFile} {\em must} cover the entire region of integration; \ie the maximum temperature has to be larger than the one required to reach {\tt ratio\_ini}, while the minimum one should be lower than {\tt TSTOP}. \subsection{Options at Compile-time}\label{sec:options} % The user has a number of options regarding different aspects for the code. The various choices for the shared libraries used by the \PY interface are given in {\tt \mimes/Definitions.mk}. while the corresponding options for the \CPP examples are in the {\tt Definitions.mk} files in the directories inside {\tt \mimes/UserSpace/Cpp}. The options correspond to different variables, which are % \begin{enumerate} \item {\tt rootDir}: the relative path of root directory of \mimes. % \item {\tt LONG}: this should be either {\tt long} or omitted. If omitted, the type of the numeric values is {\tt double} (double precision). On the other hand, if {\tt LONG=long}, the type is {\tt long double}. Generally, using {\tt double} should enough. For the sake of numerical stability, then, it is advised to always use {\tt LONG=long}, as it a safer option. The reason is that the axion angle redshifts, and can become very small, which introduces ``rounding errors". Moreover, if the parameters {\tt absolute\_tolerance} or {\tt absolute\_tolerance} are chosen to be below $\sim 10^{-8}$, then double precision numbers may not be enough, and {\tt LONG=long} is preferable. This choice comes at the cost of speed; double precision operations are usually preformed much faster. It is important to note that {\tt LONG} defines a macro with the same name, which then defines the macro {\tt LD} (in all the {\tt .cpp} files) as {\tt \#define LD LONG double}. % \item {\tt LONGpy}: the same as {\tt LONG}, but for the \PY interface. % \item {\tt SOLVER}: \mimes uses the ordinary differential equation (ODE) integrators of ref.~\cite{NaBBODES}. Currently, there are two available choices; {\tt Rosenbrock} and {\tt RKF}. The former is a general embedded Rosenbrock implementation and it is used if {\tt Solver=1}, while the latter is a general explicit embedded Runge-Kutta implementation and can be chose by using {\tt SOLVER=2} (a brief description of how these algorithms are implemented can be found in Appendix~\ref{app:RK}). The default option for that \mimes uses is {\tt SOLVER=1}, because the axion EOM tends to oscillate rapidly. However, in some cases, a high order explicit method may also work. This variable, is used to define a macro with the same name and value in {\tt \mimes/src/Axion/AxionSolve.hpp}. % \item {\tt METHOD}: Depending on the type of solver is chosen, there are some available methods.~\footnote{It is worth mentioning that {\tt NaBBODES} is built in order to be a template for all possible Rosenbrock and explicit Runge-Kutta embedded methods, and one can provide their own Butcher tableau if they want to use another method, as shown in Appendix~\ref{app:RK}. This variable, is used to define a macro with the same name and value in {\tt \mimes/src/Axion/AxionSolve.hpp}.} \begin{itemize} \item For {\tt SOLVER=1}, the available methods are {\tt METHOD=RODASPR2} and {\tt METHOD=ROS34PW2}. The {\tt RODASPR2} choice is a fourth order Rosenbrock-Wanner method (more information can be found in ref.~\cite{RANG2015128}). The {ROS34PW2} choice corresponds to a third order Rosenbrock-Wanner method~\cite{RangAngermann2005}. % \item For {\tt SOLVER=2}, the only reliable method available in {\tt NaBBODES} is the Dormand-Prince~\cite{DORMAND198019} chosen if {\tt METHOD=DormandPrince}, which is an explicit Runge-Kutta method of seventh order. \end{itemize} % \item {\tt CC}: the \CPP compiler that one chooses to use. The default option is {\tt CC=g++}, which is the {\tt GNU} \CPP compiler, and is available for all systems. Another option is to use the {\tt clang} compiler, which is chosen by {\tt CC=clang -lstdc++}. \mimes is mostly tested using {\tt g++}, but {\tt clang} also seems to work (and the resulting executables are sometimes faster), but the user has to make sure that their version of the compiler of choice supports the \CPP17 standard, otherwise \mimes probably will not work. % \item {\tt OPT}: Optimization level of the compiler. By default, this is {\tt OPT=O3}, which produces executables that are marginally faster than {\tt OPT=O1} and {\tt OPT=O2}, but significantly faster than {\tt OPT=O0}. There is another choice, {\tt OPT=Ofast}, but it can cause various numerical instabilities, and is generally considered dangerous -- although we have not observed any problems when running \mimes. \end{enumerate} % These options can only be used when the compilation is done using the various {\tt makefile} files. For compilation of a user provided {\tt .cpp} file, these have to be define by the user inside this file. If one compiles the examples without {\tt makefile}, the variables {\tt LONG}, {\tt LONGpy}, {\tt SOLVER}, and {\tt METHOD} correspond to macros with the same name.~\footnote{Macros can be defined using the {\tt -D} flag in the compiler. For example {\tt METHOD=DormandPrince} is the same as passing {\tt -DMETHOD=DormandPrince} to the compiler.} It should be pointed-out that, in the examples, {\tt LONG} is used to define a macro {\tt LD} which becomes {\tt double} or {\tt long double} accordingly. the actual choice of numeric type is passed as a template parameter in all classes. \subsection{User input}\label{sec:input} % \subsubsection{Compile-time input}\label{sec:compile_time_input} % \paragraph{Files} \mimes requires files that provide data for the relativistic degrees of freedom (RDOF) of the plasma, and the anharmonic factor. Although \mimes is shipped with the standard model RDOF found in~\cite{Saikawa:2020swg}, and a few points for $f(\thetamax)$ introduced in \eqs{eq:anharmonic_f}, the user is free change them via the corresponding variables in {\tt Paths.mk} (in the root directory of \mimes). Moreover, there is a set of data for the QCD axion mass as calculated in ref.\cite{Borsanyi:2016ksw}. % The variables pointing to these data files are {\tt cosmoDat}, {\tt axMDat}, and {\tt anFDat}, for the RDOF, axion mass, and the anharmonic factor; respectively. The format of the files has to be the following: % \begin{itemize} \item The RDOF data must be given in three columns; $T$ (in $\GeV$), $\heff$, and $\geff$. % \item The axion mass data must be given in two columns; $T$ (in $\GeV$), $\chi$ (in $\GeV^4$). Here, $\chi$ is defined as in \eqs{eq:axion_mass_def}. The user can provide a function instead of data for the axion mass, by leaving the {\tt axMDat} variable empty. % \item The data for the anharmonic factor must be give in two columns $\thetamax$ $f(\thetamax)$; with increasing $\thetamax$. \end{itemize} % The paths to these files should be given at compile time. That is, once {\tt Paths.mk} changes, \run{bash configure.sh} and then \run{\tt make} must be ran. The user can change the content of the data files (without changing their paths), in order to use them without compiling \mimes again. However, the user has to make sure that all the files are sorted so that the values of first column increase (with no duplicates or empty lines). In order to ensure this, it is advised to run \run{bash FormatFile.sh path-to-file} (in Appendix~\ref{app:util} there are some details on {\tt MiMeS/src/FormatFile.sh}), in order to format the file (that should exist in \run{path-to-file}) complies with the requirements of \mimes. These paths are stored as strings in {\tt \mimes/src/misc\_dir/path.hpp} at compile-time (they are defined as {\tt constexpr}), and can be accessed once this header file is included. The corresponding variables are {\tt cosmo\_PATH}, {\tt chi\_PATH}, and {\tt anharmonic\_PATH}, for the path to data file of the plasma quantities, $\chi(T)$, and $f(\thetamax)$; respectively. Although, the axion mass data file may be omitted -- since the axion mass is defined by the user, the variable {\tt chi\_PATH} is still useful if the axion mass is defined via a data file, as it is automatically converted to an absolute path.~\footnote{Absolute paths have the advantage to be accessible from everywhere else in the system. Thus, executables that seek the corresponding files can be called and copied easily.} \subsubsection{Run-time input}\label{sec:run_time_input} % The run-time user input is described in sec.~\ref{sec:first_steps}. The user has to provide at least the parameters that describe the axion evolution, $\thetai$ and $\fa$. Moreover, the maximum allowed value of $u$ and the minimum value of $T$, allow the user to decide when the integration has to stop even if the axion has not reached its adiabatic evolution. Ideally, {\tt umax}$=\infty$ and {\tt TSTOP}$=0$, but \mimes is designed to be as general as possible and there may be cases where one needs to stop the integration abruptly.~\footnote{These two variables are not optional, because the user must be aware of them, in order to choose them according to their needs.} Furthermore, {\tt ratio\_ini} allows the user to choose a desired point at which the interpolation of the data in {\tt inputFile} begins. This can save valuable computation time as well as memory, as only the necessary data are stored and searched. Generally, for {\tt ratio\_ini}$>10^{3}$, the relic abundance becomes independent from {\tt ratio\_ini}, but one has to choose it carefully, in order to find a balance between accuracy and computation time. Finally, the convergence conditions -- \ie~{\tt N\_convergence\_max} and {\tt convergence\_lim} -- allow the user to decide when the adiabatic evolution of the axion begins. Generally, the relic abundance does not have a strong dependence on these parameters as log as they are {\tt N\_convergence\_max}$>3$ and {\tt convergence\_lim}$<10^{-1}$ (\ie the adiabatic invariant does not vary more that $10\%$ for three consecutive peaks of the oscillation). % However, we should note that greedy choices (\eg~{\tt N\_convergence\_max}$=100$ and {\tt convergence\_lim}$=10^{-5}$) are dangerous, as $\theta$ tends to oscillate rapidly and destabilize the differential equation solver. Therefore, these parameters should be chosen carefully, in order to ensure that integration stops when axion has reached its adiabatic evolution, without destabilising the EOM. \subsection{Complete Examples}\label{sec:complete_examples} % Although one can modify the examples provided in {\tt \mimes/UserSpace}, in this section we show a complete example in both \CPP and \PY. % The underlying cosmology is assumed to be an EMD scenario. In terms of the parametrisation of ref.~\cite{Arias:2020qty}, it is defined through the same parameters as in the example shown in section~\ref{sec:comparison_between_WKB_approaches}. % and the evolution of the energy densities of the plasma and a fluid $\Phi$ is shown in \Figs{fig:energy_densities}. % \begin{figure}[t] \includegraphics[width=1\textwidth]{figs/energy_densities.pdf} \caption{The energy densities of the plasma and a hypothetical decaying fluid. The parameters of the cosmological scenario $T_{\rm END}=10^{-2}~\GeV$, $c=3$, $T_{\rm ini}=10^{12}~\GeV$, and $r=0.1$; the parameters follow the definitions in ref.~\cite{Arias:2020qty}. } \label{fig:energy_densities} \end{figure} % The various regime changes are indicated as $T_{{\rm E}_{1,2}}$ -- corresponding to the first and second time where $\rho_{\Phi} = \rho_{\rm R}$, and $T_{{\rm D}_{1,2}}$ -- which correspond to the start and end of entropy injection (for more precise definition see~\cite{Arias:2020qty}). Regarding the axion, this cosmological scenario alters it evolution, since both the Hubble parameter and the entropy of the plasma change significantly. This results in a shift in the oscillation temperature, and the dilution of the axion energy density. Moreover, we will use the QCD axion mass of ref.~\cite{Borsanyi:2016ksw}. For the axion mass beyond the minimum and maximum temperatures, $T_{\rm min, \, max}$, in the corresponding data file, we will take % \begin{equation} \maT = \Bigg\{ \begin{matrix} \dfrac{\chi(T_{\rm min})}{\fa^2} & \text{for } T<T_{\rm min} \\ \\ \dfrac{\chi(T_{\rm max})}{\fa^2} \lrb{\dfrac{T}{T_{\rm max}}}^{-8.16} & \text{for } T>T_{\rm max} \end{matrix} \;. \label{eq:axM-limits} \end{equation} \subsubsection{complete example in \CPP}\label{sec:cpp_example} % In order to write a \CPP program that uses \mimes in order to solve the EOM~\ref{eq:eom_sys}, we must include the header files {\tt src/AxionMass/AxionMss.hpp} and {\tt src/Axion/AxionSolve.hpp}. In the example at hand, the {\tt main} function should contain the definition of the axion mass % \begin{cpp} // use chi_PATH to interpolate the axion mass. mimes::AxionMass<LD> axionMass(chi_PATH,0,mimes::Cosmo<LD>::mP); /* This is the axion mass squared beyond the interpolation limits for the current data. If you don't specify them, the axion mass is taken to be constant beyond these limits */ /*set ma2 for T>TMax*/ long double TMax=axionMass.getTMax(); long double chiMax=axionMass.getChiMax(); axionMass.set_ma2_MAX( [&chiMax,&TMax](long double T, long double fa){ return chiMax/fa/fa*std::pow(T/TMax,-8.16); } ); /*set ma2 for T<TMin*/ long double TMin=axionMass.getTMin(); long double chiMin=axionMass.getChiMin(); axionMass.set_ma2_MIN( [&chiMin,&TMin](long double T, long double fa){ return chiMin/fa/fa; } ); \end{cpp} % It should be noted that, since we have used {\tt chi\_PATH}, we need to include the {\tt path.hpp} header file from {\tt \mimes/src/misc\_dir}. Moreover, we note that we have used as parameter \cppin{mimes::Cosmo<LD>::mP}, which is the Planck mass, as a static member of the {\tt Cosmo} class (described in Appendix~\ref{app:classes}), in order to interpolate the mass up to $T=m_P$, \ie the entire possible mass range. Following, the axion EOM can be solve as % \begin{cpp} std::string inputFile = std::string(rootDir)+ std::string("/UserSpace/InputExamples/MatterInput.dat"); mimes::Axion<long double, 1, RODASPR2<long double> > ax(0.1, 1e16, 500, 1e-4, 1e3, 15, 1e-2, inputFile, &axionMAss, 1e-1, 1e-8, 1e-1, 1e-11, 1e-11, 0.9, 1.2, 0.8, int(1e7)); ax.solveAxion(); \end{cpp} % This program should solve the axion EOM. However, one needs to print anything that they need. For example, the relic abundance is printed by adding {\tt std::cout<<ax.relic<<"\\n";} after {\tt ax.solveAxion();}. It should be noted that, in order to make sure that the code is compiled successfully, one should add at the top of the file any other header they need. In particular, in this case, we need to add {\tt \#include<iostream>}, in order to be able to use {\tt std::cout}. \paragraph{Parameter choice} % It should be noted that the string that is assigned to the variable {\tt inputFile}, is the path of file that exists in {\tt \mimes/UserSpace/InputExamples/MatterInput.dat}. Also, {\tt rootDir} is a constant static ({\tt char[]}) variable that is defined in {\tt \mimes/src/path.hpp} that , and it is automatically generated when {\tt bash configure.sh} is executed. Moreover, the other parameters used in the constructor are: % \begin{itemize} \begin{minipage}{0.3\linewidth} \item {\tt theta\_i}$=0.1$ \item {\tt fa}$=10^{16}~\GeV$ \item {\tt umax }$=500$ \item {\tt TSTOP}$=10^{-4}~\GeV$ \item {\tt ratio\_ini}$=10^3$ \item {\tt N\_convergence\_max}$=15$ \end{minipage} \begin{minipage}{0.35\linewidth} \item {\tt convergence\_lim}$=10^{-2}$ \item {\tt initial\_stepsize}$=10^{-1}$ \item {\tt maximum\_stepsize}$=10^{-1}$ \item {\tt minimum\_stepsize}$=10^{-8}$ \item {\tt absolute\_tolerance}$=10^{-11}$ \item {\tt relative\_tolerance}$=10^{-11}$ \end{minipage} \begin{minipage}{0.3\linewidth} \item {\tt beta}$=0.9$ \item {\tt fac\_max}$=1.2$ \item {\tt fac\_min}$=0.8$ \item {\tt maximum\_No\_steps}$=10^7$ \item[]{\vfill} \item[]{\vfill} \item[]{\vfill} \end{minipage} \end{itemize} \paragraph{Template arguments} % Furthermore, The first template parameter is {\tt long double}, which means that all the numeric types (apart from integers like {\tt maximum\_No\_steps}) have ``long double" precision. which is useful when considering low tolerances as in this example. The second and third template parameters are responsible for the Runge-Kutta method we use. That is, n this case, the second template parameter -- $1$ -- means that we use a Rosenbrock method, with the method being {\tt RODASPR2}. Notice that the method also needs a template parameter that declares all member variables of the {\tt RODASPR2} class. \paragraph{Compilation} % Assuming that we have already executed {\tt bash configure.sh}, compilation of the above example is trivial. Assuming that we name the file that contains the code {\tt axionExample.cpp}, and it is located in {\tt \mimes/UserSpace}, the only thing we need to do is run % \begin{pseudo} g++ -O3 -std=c++17 -lm -I../ -o axion axionExample.cpp \end{pseudo} % or % \begin{pseudo} clang -lstdc++ -O3 -std=c++17 -lm -I../ -o axion axionExample.cpp \end{pseudo} Both of these commands should create an executable that solves the axion EOM. That is, assuming we have a terminal open in {\tt \mimes/UserSpace}, we can run {\tt ./axion}, and get the results we chose. It should be noted that all paths that \mimes uses by default are written as absolute paths when we run {bash ./configure.sh}. Therefore, if the {\tt inputFile} variable is also an absolute path, the executable can be copied and used in any other directory of the same system. However, it should be preferred that executables are kept under the \mimes directory, in order to be able to compile them with different data file paths if needed. \paragraph{The entire code} % This example consists of only a few lines of code, which, including the change in the axion mass beyond the interpolation limit, is % \begin{cpp} #include<iostream> //include everything you need from \mimes #include"src/Axion/AxionSolve.hpp" #include"src/AxionMass/AxionMass.hpp" #include"src/Cosmo/Cosmo.hpp" #include"src/misc_dir/path.hpp" int main(){ // use chi_PATH to interpolate the axion mass. mimes::AxionMass<LD> axionMass(chi_PATH,0,mimes::Cosmo<LD>::mP); /*set ?$\maT^2$? for ?$T\geq T_{\rm max}$?*/ long double TMax=axionMass.getTMax(); long double chiMax=axionMass.getChiMax(); axionMass.set_ma2_MAX( [&chiMax,&TMax](long double T, long double fa){ return chiMax/fa/fa*std::pow(T/TMax,-8.16); } ); /*set ?$\maT^2$? for ?$T\leq T_{\rm min}$?*/ long double TMin=axionMass.getTMin(); long double chiMin=axionMass.getChiMin(); axionMass.set_ma2_MIN( [&chiMin,&TMin](long double T, long double fa){ return chiMin/fa/fa; } ); std::string inputFile = std::string(rootDir)+ std::string("/UserSpace/InputExamples/MatterInput.dat"); mimes::Axion<long double, 1, RODASPR2<long double> > ax(0.1, 1e16, 500, 1e-4, 1e3, 15, 1e-2, inputFile, &axionMass, 1e-1, 1e-8, 1e-1, 1e-11, 1e-11, 0.9, 1.2, 0.8, int(1e7)); ax.solveAxion(); std::cout<<ax.relic<<"\n"; return 0; } \end{cpp} % % We should point out that another example is given in {\tt \mimes/UserSpace/Cpp/Axion}, where all parameters are taken as command-line inputs, the various compilation-time options can be given {\tt \mimes/UserSpace/Cpp/Axion/Definitions.mk}, and then compiled using {\tt make}. Therefore, the user can just modify this code in order to meet their needs. That is, using this example, one only needs to add their preferred definition of {\tt ma2\_MAX} and {\tt ma2\_MIN} -- or change the {\tt axionMass} variable (in {\tt \mimes/src/static.hpp}) using a function as mentioned in section~\ref{sec:compile_time_input} without writing the entire program themselves. \paragraph{Alternative axion mass definition} % For this particular example, we could have used the approximate definition of the axion mass % \begin{equation} \maT^2 \approx \ma^2 \times \Bigg\{ \begin{matrix} \lrb{\dfrac{T_{\rm QCD}}{T}}^{8.16} & \quad \text{for } T\geq T_{\rm QCD} \\ \\ 1 & \quad \text{for } T\leq T_{\rm QCD} \end{matrix} \;, \label{eq:axM_approx} \end{equation} % where $T_{\rm QCD} \approx 150~\MeV$ and $\ma=\dfrac{3.2 \times 10^{-5} ~\GeV^4}{\fa^2}$. This can be done by substituting the {\tt axionMass} definition (lines $9$-$28$) with % \begin{cpp} auto ma2 = [](long double T,long double fa){ long double TQCD=150*1e-3; long double ma20=3.1575e-05/fa/fa; if(T<=TQCD){return ma20;} else{return ma20*std::pow((TQCD/T),8.16);} }; mimes::AxionMass<LD> axionMass(ma2); \end{cpp} \subsubsection{complete example in \PY} % In order to be able use the {\tt AxionMass} and {\tt Axion} classes in \PY, we need to import the corresponding module from {\tt \mimes/src/interfacePy}. That is, assuming that the script from which we intend to import {\tt \mimes/src/interfacePy/Axion/Axion.py} is in {\tt \mimes/UserSpace}, we can import the {\tt Axion} class by writing the following % \begin{py} #add the relative path for MiMeS/src from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), '../src')) from interfacePy.AxionMass import AxionMass #import the AxionMass class from interfacePy.Axion import Axion #import the Axion class from interfacePy.Cosmo import mP #import the Planck mass \end{py} % Once everything we need is imported, we can simply follow the steps outlined in section~\ref{sec:begin_py}. For the example at hand, we can create an instance of the {\tt AxionMAss} class as % \begin{py} # AxionMass instance axionMass = AxionMass(r'../src/data/chi.dat',0,mP) # This is the axion mass squared beyond the interpolation limits for the current data. # If you don't specify them, the axion mass is taken to be constant beyond these limits TMax=axionMass.getTMax() chiMax=axionMass.getChiMax() TMin=axionMass.getTMin() chiMin=axionMass.getChiMin() axionMass.set_ma2_MAX( lambda T,fa: chiMax/fa/fa*pow(T/TMax,-8.16) ) axionMass.set_ma2_MIN( lambda T,fa: chiMin/fa/fa ) \end{py} % Then we can simply create an instance of the {\tt Axion} class as % \begin{py} #in python it is more convenient to use relative paths inputFile = inputFile="./InputExamples/MatterInput.dat" ax = Axion(0.1, 1e16, 500, 1e-4, 1e3, 15, 1e-2, inputFile, axionMass, 1e-1, 1e-8, 1e-1, 1e-11, 1e-11, 0.9, 1.2, 0.8, int(1e7)) \end{py} % Again, the parameters for the constructor are the same as in the \CPP example. The axion EOM, then, is solved using % \begin{py} ax.solveAxion() \end{py} % In contrast to the \CPP usage of this function, this only stores the $\thetai$, $\fa$, $\thetaosc$, $\Tosc$, and $\Omega h^2$ in the variables {\tt ax.theta\_i}, {\tt ax.fa}, {\tt ax.theta\_osc}, {\tt ax.T\_osc}, and {\tt ax.relic}; respectively. Therefore, we can print the relic abundance by calling \run{print(ax.relic)}. In order to get the integration points (\ie the evolution of the angle and the other quantities), the quantities at the peaks, and the local integration errors, we need to call % \begin{py} #this gives you all the points of integration ax.getPoints() #this gives you the peaks of the oscillation ax.getPeaks() #this gives you local integration errors ax.getErrors() \end{py} % The documentation of any \PY function can be read directly inside the script using {\tt ?} as a prefix. For example, in order to see what the functionality and usage of the {\tt getPeaks} function, we can call \run{?ax.getPeaks}, and its documentation will be printed. As already mentioned, it is important to always delete any instance of the {\tt Axion} class that is not going to be used. In this case this is done by calling % \begin{py} del ax \end{py} \paragraph{Compilation of the shared library} % As described in section~\ref{sec:compile_time_input}, we may need to change the default data file paths, or the various compilation options. This is done through the variables in {\tt \mimes/Definitions.mk} and {\tt \mimes/Paths.mk} described in section~\ref{sec:options}. Once we have chosen everything according to our needs, the library can be created by opening a terminal inside the root directory of \mimes and running % \begin{py} bash configure.sh make lib/Axion_py.so \end{py} % \paragraph{The entire code} % As in the \CPP example, this example consists of only a few lines of code. The script we described here is % \begin{py} #add the relative path for MiMeS/src from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), '../src')) from interfacePy.AxionMass import AxionMass #import the AxionMass class from interfacePy.Axion import Axion #import the Axion class from interfacePy.Cosmo import mP #import the Planck mass # AxionMass instance axionMass = AxionMass(r'../src/data/chi.dat',0,mP) # define ?$\maT^2$? for ?$T\leq T_{\rm min}$? TMin=axionMass.getTMin() chiMin=axionMass.getChiMin() axionMass.set_ma2_MIN( lambda T,fa: chiMin/fa/fa ) # define ?$\maT^2$? for ?$T\geq T_{\rm max}$? TMax=axionMass.getTMax() chiMax=axionMass.getChiMax() axionMass.set_ma2_MAX( lambda T,fa: chiMax/fa/fa*pow(TMax/T),8.16) ) #in python it is more convenient to use relative paths inputFile = inputFile="./InputExamples/MatterInput.dat" ax = Axion(0.1, 1e16, 500, 1e-4, 1e3, 15, 1e-2, inputFile, axionMass, 1e-1, 1e-8, 1e-1, 1e-11, 1e-11, 0.9, 1.2, 0.8, int(1e7)) ax.solveAxion() print(ax.relic) #once we are done we should run the destructor del ax \end{py} One can find a complete example, including the option to create several plots, in the script {\tt \mimes/UserSpace/Python/Axion.py}. Also, the same example can be used interactively, in jupyter notebook environment, that can be found in {\tt \mimes/UserSpace/JupyterNotebooks/Axion.ipynb}. One can read the comments, and change all different parameters, in order to examine how the results are affected. \paragraph{Alternative axion mass definition} % In order to use the approximate axion mass as defined in \eqs{eq:axM_approx}, we could replace the definition of the {\tt axionMass} variable (lines $10$-$21$) with % \begin{py} def ma2(T,fa): TQCD=150*1e-3 ma20=3.1575e-05/fa/fa if T<=TQCD: return ma20; return ma20*(TQCD/T)**8.16 axionMass = AxionMass(ma2) \end{py} \subsubsection{Results} % In both \CPP and \PY one should get the same results (if the same numeric type, and RK parameters and method are used), which should be similar to \Figs{fig:theta_evolution-EMD}. % It should be noted that this particular example is chosen such that the axion relic abundance is close to its observed value~\cite{Planck:2018vyg} ($\Omega h^2 \approx 0.12$), and is indicative of the features one can expect if entropy is injected to the plasma for $T \ll \Tosc$. % \begin{figure}[h] \begin{subfigure}[]{0.5\textwidth} \includegraphics[width=1\textwidth]{figs/theta_evolution-EMD.pdf} \caption{} \label{fig:theta_evolution-EMD} \end{subfigure} \begin{subfigure}[]{0.5\textwidth} \includegraphics[width=1\textwidth]{figs/theta_evolution-RD.pdf} \caption{} \label{fig:theta_evolution-RD} \end{subfigure} \caption{...} \label{fig:results} \end{figure} % In \Figs{fig:theta_evolution-EMD} we show the evolution of $\theta$ for temperatures $T \in [0.025,0.15]~\GeV$, where the vertical line indicates $\Tosc$, while the horizontal one the corresponding value of $\theta$, $\thetaosc$. Also, the blue curve connects the peaks of the oscillation. For comparison, in \Figs{fig:theta_evolution-RD} we also show the evolution of the angle in a radiation dominated Universe with constant entropy (\ie standard cosmological scenario). From these figures, we can see that the effect of an early matter domination reduces the amplitude of oscillation -- due to the injection of entropy -- as well the oscillation temperature -- due to the increase of the Hubble parameter. Furthermore, as expected from \eqs{eq:theta_osc}, the angle at $T=\Tosc$ in the EMD scenario is much smaller that the corresponding value in the standard cosmological case. This shows again that approximating $\thetaosc \approx \thetai$ results in an inaccurate result, especially in cases where entropy is injected to the plasma (as expected by \eqs{eq:theta_osc}). % Moreover, in \Figs{fig:RK_response}, we show the relative local error of integration as well as a histogram of the number of integration steps for $0.025~\GeV < T < 0.15 ~\GeV$. % \begin{figure}[h] \begin{subfigure}[]{0.5\textwidth} \includegraphics[width=1\textwidth]{figs/local_errors-EMD.pdf} \caption{} \label{fig:local_errors-EMD} \end{subfigure} \begin{subfigure}[]{0.5\textwidth} \includegraphics[width=1\textwidth]{figs/histogram-EMD.pdf} \caption{} \label{fig:histogram-EMD} \end{subfigure} \caption{...} \label{fig:RK_response} \end{figure} % The local relative errors, defined in Appendix~\ref{app:RK}, are shown in \Figs{fig:local_errors-EMD}. The black and red lines correspond to $\delta \theta/\theta$ and $\delta \zeta/\zeta$, respectively. This figure indicates that the local errors are relatively well behaved for $T>\Tosc$, and they only start to oscillate violently once the oscillations start. However, the adaptation of the integration step seems to work, as the errors are kept below $\sim 10^{-7}$ (the relative error of $zeta$ is large because $\zeta \approx 0$ before the $\Tosc$). In order to examine how the step-size is adapted to the difficulty of the problem, we also show a histogram which show how many integration steps are taken for fixed temperature intervals.~\footnote{More precisely, the histogram is made by dividing the the temperature range $0.025~\GeV\lesssim T\lesssim 0.15~\GeV$ to $30$ bins of equal size.} % In this figure, we see that the number of integration steps increases rapidly for temperatures below the oscillation temperature. % This is expected, since integration becomes more difficult as the frequency of the oscillation increases -- $\maT/H$ increases rapidly for $T<\Tosc$. That is, the local integration error tends to increase. Thus, in order to reduce the local error, the embedded RK method we employ, reduces the step-size. This means that for $T \lesssim \Tosc$ the number of integration steps increase drastically. % This is the general picture of how adaptation happens. However, one has to experiment with all the available parameters, in order to solve the axion EOM as accurately and fast as possible. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % APPENDICES \pagebreak %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \setcounter{section}{0} \section*{Appendix} \appendix \renewcommand{\theequation}{\Alph{section}.\arabic{equation}} \setcounter{equation}{0} % reset counter %%%%%%%%%%%%%%%%%%%%%%% \section{Basics of embedded Runge-Kutta Mehtods}\label{app:RK} \setcounter{equation}{0} % Runge-Kutta (RK) methods are employed in order to solve an ordinary differential equation (ODE), or a system of ODEs of first order.~\footnote{Boundary value problems, and higher order differential equations are expressed as first order ODEs, and then solved. Similarly to \eqs{eq:eom_sys}.} Although there are some very insightful sources in the literature (\eg~\cite{Hairer,hairer2010solving,10.5555/1403886}) we give a brief overview of them in order to help the user to make appropriate decisions when using \mimes. The general form of a system of first order of ODEs is % \begin{equation} \dfrac{d\vec{y}}{dt}=\vec{f}(\vec{y},t) \;, \label{eq:ODE_definition} \end{equation} % with given initial condition $\vec{y}(0)$. Also, the components of $\vec{y}$ denote the unknown functions. Note that we can always shift $t$ to start at $0$, which simplifies the notation. In order to solve the the system of \eqs{eq:ODE_definition}, an RK method uses an iteration of the form % \begin{equation} \vec{y}_{n+1}=\vec{y}_{n}+ h\sum_{i=1}^{s} b_i \ \vec{k}_i \;, \label{eq:RK_iter} \end{equation} % with $n$ denoting the iteration number, $h$ the ``step-size" that is used to progress $t$; $t_{n+1}=t_{n}+h$. Moreover, $s$, $b_i$ and $\vec{k}_i$ define the corresponding RK method. For example, the classic Euler method is an RK method with $s=1$, $b=1$, and $\vec{k}_1 = \vec{f}(\vec{y_n , t_n})$. Methods with $\vec{k}$ that depends on previous step (\ie $\vec{k} =\vec{k}\lrsb{y_{n},t_{n}}$), are called explicit, while the ones that try to also predict next step (\ie $\vec{k} =\vec{k}\lrsb{y_{n},t_{n}; y_{n+1},t_{n+1}}$) are called implicit.~\footnote{Generally, by substituting implicit methods $y_{n+1}$ as in \eqs{eq:RK_iter}, we end up with a system of equations that need to be solved in order to compute $\vec{k}$.} \subsection{Embedded RK methods} % A large category of RK methods are the so-called embedded RK methods. These methods make two estimates for the same step simultaneously -- without evaluating $\vec{k}$ many times within the same iteration. Therefore, together with the iteration of \eqs{eq:RK_iter}, a second estimate is given by % \begin{equation} \vec{y}_{n+1}^{(*)}=\vec{y}_{n}+ h\sum_{i=1}^{s} b_i^{(*)} \vec{k}_i \;, \label{eq:RK_Embedded_iter} \end{equation} % with $b_i^{(*)}$ is an extra parameter that characterise the ``embedded" method of different order (typically, one order higher that the estimate~\ref{eq:RK_iter}). The local (for the step $t_{n+1}$) error divided by the scale of the solution, then, estimated as % \begin{equation} \Delta \equiv \sqrt{\frac{1}{N}\sum_{d=1}^{N}\lrb{\frac{y_{n+1 ,d}-y^{*}_{n+1,d}}{ \Lambda_d }}^{2}} \;, \label{eq:error_estimate} \end{equation} % where $n$ the iteration number, $N$ the number of ODEs, $d$ the component of $\vec{y}$, and $\Lambda_d$ defined as % \begin{equation} \Lambda_d = {\tt Atol} + \max\lrb{|y_{n+1, d}|,|y^{*}_{n+1 ,d}|} \; {\tt Rtol} \;, \label{eq:RK_scale} \end{equation} % with {\tt Atol} and {\tt Rtol} the absolute and relative tolerances that characterise the desirable accuracy we want to achieve; user defined values, typically {\tt Atol}$=${\tt Rtol}$\ll 1$. With these definitions, the desirable error is reached when $\Delta \lesssim 1$. \paragraph{Step-control} The definition~\ref{eq:error_estimate}, allows us to adjust the step-size $h$ in such way that $\Delta \approx 1$. That is, we take trial steps, and $h$ is adapted until $\Delta \approx 1$. A simple adaptive strategy adjusts step-size, using % \begin{eqnarray} h \to \beta \; h \; {\rm max} \lrsb{f_{\rm min}, {\rm min} \lrb{\Delta^{-\frac{1}{p+1}}, f_{\rm max}}} \;, \label{eq:step-control} \end{eqnarray} % with $p$ the order of the RK method ($p+1$ is the order of the embedded one), $\beta$ a bias factor of the adaptive strategy (typically $\beta$ is close but below $1$), used to adjust the tendency of $h$ to be somewhat smaller than what the step-control predicts. Also, $f_{min}$ and $f_{max}$ are the minimum and maximum allowed factors, respectively, that can multiply $\beta \ h$, used in order to avoid large fluctuations that can destabilise the process. All these parameters are chosen by the user, in order to make the step-control process as aggressive or safe as needed. \paragraph{Correspondence between \mimes parameters and RK ones} % The various parameters that \mimes are described in section~\ref{sec:input}. The correspondence between them and the RK parameters is given in table~\ref{tab:RK_mimes_params}. % \begin{table}[t!] \centering \begin{tabular}{|c|c|} \mimes & Runge-Kutta \\ \hline {\tt absolute\_tolerance } & {\tt Atol} \\ \hline {\tt relative\_tolerance } & {\tt Rtol} \\ \hline {\tt b} & $\beta$ \\ \hline {\tt fac\_min} & $f_{\rm min}$ \\ \hline {\tt fac\_max} & $f_{\rm max}$ \\ \hline \end{tabular} \caption{Correspondence between the user \mimes user input and the RK parameters described in the text.} \label{tab:RK_mimes_params} \end{table} \subsection{Explicit embedded RK methods} % Explicit methods use only the information of the previous step in order to compute $\vec{k}_i$ from % \begin{equation} \vec{k}_{i}=\vec f\lrBiggb{ \vec{y}_{n}+h \lrBigb{ \sum_{j=1}^{i-1}a_{ij}\vec{k}_{j} }, t_{n}+ c_{i} \; h}\;, \quad \forall i=1,2,\dots, s\;, \label{eq:explicit_RK_k} \end{equation} % with $a_{ij}$, $c_i$, together with $b_i$ and $b_i^{(*)}$, consist the so-called Butcher tableau of teh corresponding method. For explicit methods this is usually presented as % \begin{equation} \begin{array}{c|cccccc} 0 & 0 & 0 & 0& \dots & 0& 0\\ c_2 & a_{21} & 0 & 0 & \dots & 0& 0\\ c_3 & a_{31} & a_{32}& 0& \dots & 0& 0\\ \vdots & \vdots & \vdots& \vdots&\ddots &\ddots& \vdots\\ c_s & a_{s1} & a_{s2}& a_{s3}& \dots & a_{s s-1}& 0 \\ \hline p & b_1 & b_2 & b_3 & \dots & b_{s-1} & b_s \\ p+1 & b_1^{\star} & b_2^{\star} & b_3^{\star} & \dots & b_{s-1}^{\star} & b_s^{\star} \end{array} \label{eq:Butcher} \end{equation} % It should be noted that $c_i = \displaystyle\sum_{j=1}^{s} a_{ij} $. \subsection{Rosenbrock methods} % Explicit RK methods, encounter instabilities when a system is ``stiff"~\footnote{A definition of stiffness can be found in~\cite{hairer2010solving,Hairer}.}; when is oscillates rapidly, or has different elements at different scales. This problems are somewhat resolved by trying to predict the next step inside $\vec{k}$; \ie in implicit methods. However, then one has to solve a non-linear set of equations in order to compute $\vec{y}_{n+1}$, which is generally a slow process, as the Newton method (or some variation) needs to be applied. However, there exist another way, a compromise between explicit and implicit methods. Linearly implicit RK methods, usually called Rosenbrock methods -- with popular improvements as Rosenbrock-Wanner methods, introduce parameters in the diagonal of the Butcher tableau~\ref{eq:Butcher} and linearise the system of non-linear equations (for details, see~\cite{hairer2010solving}). In these methods, $\vec{k}$ is determined by % \begin{equation} \left(\hat I - \gamma h \hat{J}\right)\cdot \vec{k}_{i}= h \vec{f}\Big(\vec{y}_n+\sum_{j=1}^{i-1}a_{ij}\vec{k}_{j},t_n + c_{i}h \Big)+ h^2 \left(\gamma + \sum_{j=1}^{i-1}\gamma_{ij}\right)\dfrac{\partial \vec{f} }{\partial t}+ h \hat J \cdot \sum_{j=1}^{i-1}\gamma_{ij} \vec{k}_{j}\; , \label{eq:Ros_k} \end{equation} % which is written in such a way that everything is evaluated at $t = t_{n}$. In \eqs{eq:Ros_k}, $\hat J = \dfrac{\partial \vec f}{ \partial \vec y}$ the Jacobian of the system of ODEs, $\hat I$ the unit matrix with dimension equal to the number of ODEs. Moreover, $\gamma$ and $\gamma_{ij}$ are parameters that characterise the method (along with $a_{ij}$, $c_i$, $b_i$, and $b_i^{(*)}$). \paragraph{Implementing a new Butcher tableau in {\tt NaBBODES}} As already mentioned, \mimes uses {\tt NaBBODES}, which supports the implementation of new Butcher tableaux. This is done by adding a new class (or struct) inside the header file {\tt METHOD.hpp} that can be found in {\tt \mimes/src/NaBBODES/RKF} for the explicit RK and {\tt \mimes/src/NaBBODES/Rosenbrock} for the Rosenbrock embedded methods. All the new parameters must be {\tt public}, {\tt constexpr static} variables, of a type that is the template parameter of the method. For example, the Heun-Euler method can be implemented, adding the following code in {\tt \mimes/src/NaBBODES/RKF/METHOD.hpp} % \begin{cpp} /*-----Implementation of the Heun-Euler method-----*/ /*-----It shouldn't be used for MiMeS, since it is likely to fail-----*/ //LD is the numeric type (\ie double, or long double). template<class LD> //use struct because its variables are public by default. struct HeunEuler{ static constexpr unsigned int s=2; // HeunEuler is a 2-stage RK static constexpr unsigned int p=1; // first order, with embedded ?$p+1=2$? //these are aliases for the arrays using arr=std::array<LD,s>; using arr2=std::array<std::array<LD,s>,s>; static constexpr arr b={0.5,0.5}; // this is ?$b_i$? static constexpr arr bstar={0.5,0.5}; // this is ?$b_i^{(*)}$? static constexpr arr c={0,1}; // remember that ?$c_i = \displaystyle\sum_{j=1}^{s} a_{ij}$? // this is ?$a_{ij}$? static constexpr arr2 a={ arr{0,0}, arr{1,0} }; }; \end{cpp} In order to implement the ROS3w~\cite{RangAngermann2005} method, one can add the following code in the header file {\tt \mimes/src/NaBBODES/Rosenbrock/METHOD.hpp} % \begin{cpp} /*-----Implementation of the ROS3w method-----*/ /*-----It shouldn't be used for MiMeS, since it is likely to fail-----*/ //LD is the numeric type (?\ie? double, or long double). template<class LD> struct ROS3w{ static constexpr unsigned int s=3; // 3-stage static constexpr unsigned int p=2; // second order (embedded order is ?$p+1$?) //aliases for the arrays using arr=std::array<LD,s>; using arr2=std::array<std::array<LD,s>,s>; static constexpr arr b={0.25,0.25,0.5 }; // this is ?$b_i$? // this is ?$b_i^{(*)}$? static constexpr arr bstar={ 0.746704703274,0.1144064078371,0.1388888888888}; static constexpr arr c={0,2/3.,4/3.}; // remember that ?$c_i = \displaystyle\sum_{j=1}^{s} a_{ij}$? static constexpr LD gamma=0.4358665215084; // this is ?$\gamma$? // this is ?$a_{ij}$? static constexpr arr2 a={ arr{0,0,0}, arr{2/3.,0,0}, arr{2/3.,2/3.,0} }; // this is ?$\gamma_{ij}$? static constexpr arr2 g={ arr{0,0,0}, arr{0.3635068368900,0,0}, arr{-0.8996866791992,-0.1537997822626,0} }; }; \end{cpp} \paragraph{How to compile \mimes in order to use the newly implemented method} One a new Butcher tableau is implemented, the \cppin{mimes::Axion} class can use it. This class, needs the name of method assigned to the macro {\tt METHOD}. That is, before you include the header file {\tt src/Axion/AxionSolve.hpp}, this macro needs to be defined. A convenient way to do this, is to define the macro using the {\tt -D} flag of the compiler; \eg in order to use the ROS3w method, this definition ca be done by adding {\tt -DMETHOD=ROS3w} when compiling the code. Alternatively, if one uses the {\tt makefile} files, a method can be chosen by adding it in the corresponding {\tt Definitions.mk} file as {\tt METHOD=ROS3w}.~\footnote{One make sure to use the correct {\tt SOLVER} macro -- {\tt SOLVER=1} for Rosenbrock method and {\tt SOLVER=2} for explicit RK method-- otherwise the compilation will fail.} \section{\CPP classes}\label{app:classes} \setcounter{equation}{0} % \mimes is designed as an object-oriented header-only library. That is, all the basic components of the library are defined in classes in header files. All the classes relevant to the use of \mimes are under the namespace {\tt mimies}. \subsection{{\tt Cosmo} class} % The {\tt Cosmo<LD>} class is responsible for interpolation of the various quantities of the plasma. Its header file is {\tt \mimes.src/Cosmo/Cosmo.hpp}, and needs to be included in order to use this class. The template parameter {\tt LD} is the numeric type that will be used, \eg {\tt double}. The constructor of this class is % \begin{cpp} template<class LD> mimes::Cosmo<LD>(std::string cosmo_PATH, LD minT=0, LD maxT=mimes::Cosmo<LD>::mP) \end{cpp} % The argument {\tt cosmo\_PATH} is the path of the data file that contains $T$ (in $\GeV$), $\heff$, $\geff$, with increasing $T$. The parameters {\tt minT} and {\tt maxT} are minimum and maximum interpolation temperatures. These temperatures are just limits, and the action interpolation is done between the closest temperatures in the data file. Moreover, beyond the interpolation temperatures, both $\heff$ and $\geff$ are assumed to be constants. Interpolation of the RDOF, allows us to define various quantities related to the plasma; \eg the entropy density is defined as $s = \dfrac{2\pi^2}{45} \heff T^3$. These quantities are given as the member functions: % \begin{itemize} \item \cppin{ template<class LD> LD mimes::Cosmo<LD>::heff(LD T)}: $\heff$ as a function of $T$. \item \cppin{ template<class LD> LD mimes::Cosmo<LD>::geff(LD T)}: $\geff$ as a function of $T$. % \item \cppin{ template<class LD> LD mimes::Cosmo<LD>::dheffdT(LD T)}: $d\heff/dT$ as a function of $T$. \item \cppin{ template<class LD> LD mimes::Cosmo<LD>::dgeffdT(LD T)}: $d\geff/dT$ as a function of $T$. % \item \cppin{ template<class LD> LD mimes::Cosmo<LD>::dh(LD T)}: $\delta_h = 1 + \frac{1}{3} \frac{d\log \heff}{d\log T}$ as a function of $T$. % \item \cppin{ template<class LD> LD mimes::Cosmo<LD>::s(LD T)}: The entropy density of the plasma as a function of $T$. \item \cppin{ template<class LD> LD mimes::Cosmo<LD>::rhoR(LD T)}: The energy density of the plasma as a function of $T$. \item \cppin{ template<class LD> LD mimes::Cosmo<LD>::Hubble(LD T)}: The Hubble parameter assuming radiation dominated expansion as a function of $T$. \end{itemize} Moreover, there are several cosmological quantities are given as members variables: % \begin{itemize} \item \cppin{template<class LD> constexpr static LD mimes::Cosmo<LD>::T0}: CMB temperature today~\cite{Zyla:2020zbs} in $\GeV$. \item \cppin{ template<class LD> constexpr static LD mimes::Cosmo<LD>::h\_hub}: Dimensionless Hubble constant~\cite{Zyla:2020zbs}. - \item \cppin{ template<class LD> constexpr static LD mimes::Cosmo<LD>::rho\_crit}: Critical density~\cite{Zyla:2020zbs}. + \item \cppin{ template<class LD> constexpr static LD mimes::Cosmo<LD>::rho\_crit}: Critical density~\cite{Zyla:2020zbs} in $\GeV^3$. \item \cppin{ template<class LD> constexpr static LD mimes::Cosmo<LD>::relicDM\_obs}: Central value of the measured DM relic abundance~\cite{Planck:2018vyg}. \item \cppin{ template<class LD> constexpr static LD mimes::Cosmo<LD>::mP}: Planck mass~\cite{Zyla:2020zbs} in $\GeV$. \end{itemize} \subsection{{\tt AnharmonicFactor} class} % The class \cppin{mimes::AnharmonicFactor<LD>} is responsible interpolating the anharmonic factor as defined in \eqs{eq:anharmonic_f}. The corresponding header file is {\tt \mimes/src/AnharmonicFactor/AnharmonicFactor.hpp}. The constructor of this class is % \begin{cpp} template<class LD> mimes::AnharmonicFactor<LD>(std::string anharmonic_PATH) \end{cpp} % Again, the template argument {\tt LD} is a numeric type, and the {\tt anharmonic\_PATH} string is the path of the data file with data for $\thetamax$ (which should be in increasing order) and $f(\thetamax)$. The member function that \mimes uses is the overloaded call operator % \begin{cpp} template<class LD> LD mimes::AnharmonicFactor<LD>::operator()(LD theta_peak) \end{cpp} % This function returns the value of the anharmonic factor at $\thetamax=${\tt theta\_peak}. Although, there is no need to call this function beyond the interpolation limits (as long as the data file contains $0\leq \thetamax \leq \pi$), it is important to note that the anharmonic factor is taken to be constant beyond these limits. \subsection{{\tt AxionMass} class} % The \cppin{mimes::AxionMass<LD>} class is responsible for the definition of the axion mass. The header file of this class is {\tt \mimes/src/AxionMass/AxionMass.hpp}. Its usage and member functions are described in the examples given in sections~\refs{sec:First_examples,sec:complete_examples}. However, it would be helpful to outline them here. The class has two constructors. The first one is % \begin{cpp} template<class LD> mimes::AxionMass<LD>(std::string chi_PATH, LD minT=0, LD maxT=mimes::Cosmo::mP) \end{cpp} % The first argument, {\tt chi\_PATH}, is the path to a data file that contains two columns; $T$ (in $\GeV$) and $chi$ (in $\GeV^4$), with increasing $T$. The arguments {\tt minT} and {\tt maxT} are the interpolation limits. These limits are used in order to stop the interpolation in the closest temperatures that exist in the data file. That is the actual interpolation limits are $T_{\min}\geq${\tt minT} and $T_{\max}\leq${\tt maxT}. Beyond these limits, by default, the axion mass is assumed to be constant. However, this can be changed by using the member functions % \begin{cpp} void set_ma2_MIN(std::function<LD(LD,LD)> ma2_MIN) void set_ma2_MAX(std::function<LD(LD,LD)> ma2_MAX) \end{cpp} % Here, {\tt ma2\_MIN} and {\tt ma2\_MAX} are functors that define the axion mass squared beyond the interpolation limits. In order to ensure that the axion mass is continues, usually we need $T_{\min}$, $T_{\max}$, $\chi(T_{\rm min})$, and $\chi(T_{\rm max})$. These values can be obtained using the member functions % \begin{itemize} \item \cppin{template<class LD> LD mimes::AxionMass<LD>::getTMin()}: This function returns the minimum interpolation temperature, $T_{\rm min}$. \item \cppin{template<class LD> LD mimes::AxionMass<LD>::getTMax()}: This function returns the maximum interpolation temperature, $T_{\rm max}$. \item \cppin{template<class LD> LD mimes::AxionMass<LD>::getChiMin()}: This function returns $\chi(T_{\rm min})$. \item \cppin{template<class LD> LD mimes::AxionMass<LD>::getChiMax()}: This function returns $\chi(T_{\rm max})$. \end{itemize} An alternative way to define the axion mass is via the constructor % \begin{cpp} template<class LD> mimes::AxionMass<LD>(std::function<LD(LD,LD)> ma2) \end{cpp} % Here, the only argument is the axion mass squared, $\maT$, defined as a callable object. Once an instance of the class is defined, we can get $\maT^2$ using the member function % \begin{cpp} template<class LD> LD mimes::AxionMass<LD>::ma2(LD T, LD fa) \end{cpp} % We should note that {\tt ma2} is a public {\tt std::function<LD(LD,LD)>} member variable. Therefore, it can be assigned using the assignment operator. However, in order to change its definition, we can use the following member function: % \begin{cpp} template<class LD> void mimes::AxionMass<LD>::set_ma2(std::function<LD(LD,LD)> ma2) \end{cpp} \subsection{{\tt AxionEOM} class} % The \cppin{mimes::AxionEOM<LD>} class is not useful for the user. However, it is responsible for the interpolation of the underlying cosmology, and the definition of the axion EOM~\ref{eq:eom_sys}, which is passed to the ODE solver of {\tt NaBBODES}. The constructor of the class is % \begin{cpp} template<class LD> mimes::AxionEOM<LD>(LD fa, LD ratio_ini, std::string inputFile, AxionMass<LD> *axionMass) \end{cpp} % The role of the arguments are discussed in section~\refs{sec:cpp_first_example,sec:run_time_input} as well as in table~\ref{tab:run_time-input}. One the instance is created, we the interpolations are constructed by calling the member function % \begin{cpp} template<class LD> void mimes::AxionMass<LD>::makeInt() \end{cpp} % Then, the temperature as a function of $u=\log a/\ai$, is given via the member function % \begin{cpp} template<class LD> LD mimes::AxionMass<LD>::Temperature(LD u) \end{cpp} % Another useful member function is % \begin{cpp} template<class LD> LD mimes::AxionMass<LD>::logH2(LD u) \end{cpp} % This function returns $\log H^2$ as a function of $u$. Moreover, its derivative, $\frac{d \log H^2}{du}$, is computed using % \begin{cpp} template<class LD> LD mimes::AxionMass<LD>::dlogH2du(LD u) \end{cpp} % It should be noted that the highest interpolation temperature is determined by {\tt ratio\_ini} while the lower interpolation temperature is the one given in the data file {\tt inputFile}. Beyond these limits, all functions are assumed to be constant. Therefore, one should be careful, and choose an appropriate {\tt ratio\_ini}, and provide a lower temperature at which any entropy injection has stopped and the axion has reached its adiabatic evolution. Finally, the actual EOM is given an overloaded call operator % \begin{cpp} template<class LD> void mimes::AxionMass<LD>::operator()(std::array<LD,2> &lhs, std::array<LD,2> &y, LD u) \end{cpp} % Here, the inputs are $u=\log a/\ai$, {\tt y[0]}$=\theta$, and {\tt y[1]}$=\zeta$; which are used to calculate the components of the EOM, with {\tt lhs[0]}$=\frac{d \theta}{d u}$ and {\tt lhs[1]}$=\frac{d \zeta}{d u}$. \subsection{{\tt Axion} class} % The \cppin{mimes::Axion<LD,Solver,Method>} class is the class that combines all the others, and actually solves the axion EOM~\ref{eq:eom_sys}. Its header file is {\tt \mimes/src/Axion/AxionSolve.hpp}, and its constructor is % \begin{cpp} template<class LD, const int Solver, class Method> mimes::Axion< LD, Solver, Method<LD> >(LD theta_i, LD fa, LD umax, LD TSTOP, LD ratio_ini, unsigned int N_convergence_max, LD convergence_lim, std::string inputFile, AxionMass<LD> *axionMass, LD initial_step_size=1e-2, LD minimum_step_size=1e-8, LD maximum_step_size=1e-2, LD absolute_tolerance=1e-8, LD relative_tolerance=1e-8, LD beta=0.9, LD fac_max=1.2, LD fac_min=0.8, unsigned int maximum_No_steps=10000000) \end{cpp} % The various arguments are discussed in section~\refs{sec:cpp_first_example,sec:run_time_input}; and outlined in table~\ref{tab:run_time-input}. % The member function responsible for solving the EOM is % \begin{cpp} template<class LD, const int Solver, class Method> void mimes::Axion< LD, Solver, Method<LD> >::solveAxion() \end{cpp} % Once this function finishes, the results are stored in several member variables. The quantities $a/\ai, \ T, \ \theta, \ \zeta, \rho_a$, at the integration steps are stored in % \begin{cpp} template<class LD, const int Solver, class Method> std::vector< std::vector<LD> > mimes::Axion< LD, Solver, Method<LD> >::points \end{cpp} % The quantities $a/\ai, \ T, \ \theta, \ \zeta, \rho_a, \ J$, at the peaks of the oscillation are stored in % \begin{cpp} template<class LD, const int Solver, class Method> std::vector< std::vector<LD> > mimes::Axion< LD, Solver, Method<LD> >::peaks \end{cpp} % Note that these points are computed using linear interpolation between two integration points with a change in teh sign of $\zeta$. The local integration errors for $\theta$ and $\zeta$ are stored in % \begin{cpp} template<class LD, const int Solver, class Method> std::vector<LD> mimes::Axion< LD, Solver, Method<LD> >::dtheta template<class LD, const int Solver, class Method> std::vector<LD> mimes::Axion< LD, Solver, Method<LD> >::dzeta \end{cpp} % Moreover, the oscillation temperature, $\Tosc$, and the corresponding values of $a/\ai$ and $\theta$ are given in % \begin{cpp} template<class LD, const int Solver, class Method> LD mimes::Axion< LD, Solver, Method<LD> >::T_osc template<class LD, const int Solver, class Method> LD mimes::Axion< LD, Solver, Method<LD> >::a_osc template<class LD, const int Solver, class Method> LD mimes::Axion< LD, Solver, Method<LD> >::theta_osc \end{cpp} % Also, the entropy injection between the last peak ($T=T_{\rm peak}$) and today ($T=T_0$), $\gamma$ (defined as in \eqs{eq:entropy_injection_gamma}), is given in % \begin{cpp} template<class LD, const int Solver, class Method> LD mimes::Axion< LD, Solver, Method<LD> >::gamma \end{cpp} We can set another initial condition, $\thetai$, using % \begin{cpp} template<class LD, const int Solver, class Method> void mimes::Axion< LD, Solver, Method<LD> >::setTheta_i(LD theta_i) \end{cpp} % We should note that running this function all variables are cleared. So we lose all information about the last time {\tt axionSolve()} ran. In case the mass of the axion is changed, we also need to remake the interpolation (\ie run \cppin{mimes::AxionEOM::makeInt()}). This is done using % \begin{cpp} template<class LD, const int Solver, class Method> void mimes::Axion< LD, Solver, Method<LD> >::restart() \end{cpp} % Again, this function clears all member variables. So it should be used with caution. Finally, there is static \cppin{mimes::Cosmo<LD>} member variable % \begin{cpp} template<class LD, const int Solver, class Method> static mimes::Cosmo<LD> mimes::Axion< LD, Solver, Method<LD> >::plasma \end{cpp} % This variable can be used without an instance of the \cppin{mimes::Axion<LD,Solver,Method>} class. \section{\PY modules}\label{app:modules} \setcounter{equation}{0} -\DK{Describe the modules.} + +The various \PY modules, classes, and functions are designed to work exactly in the same way as the ones in \CPP. All the modules are located in \pyin{src/interfacePY}, so it is helpful to add {\pyin src} path to the system path at the top of every script calling \mimes. This is done by adding +% +\begin{py} + from sys import path as sysPath + sysPath.append('path_to_src') +\end{py} +% +After this line, the others can be included. \section{Utilities}\label{app:util} \setcounter{equation}{0} \DK{Describe {\tt FormatFile.sh} and {\tt timeit.sh}.} \section{Quick guide to user input}\label{app:usr_input} \setcounter{equation}{0} In table~\ref{tab:input}, we provide a reference for all the user input, and compile-time options. % \begin{table}[h!] \centering \begin{tabular}{l l} \hline\\[-0.4cm] \multicolumn{2}{c}{\bf User run-time input} \\ \hline\\[-0.4cm] {\tt theta\_i} & initial angle. \\ \hline\\[-0.4cm] {\tt fa} & the PQ scale.\\ \hline\\[-0.4cm] {\tt umax } & Once $u=\log a/a_i>${\tt umax}, the integration stops. Typical value: $\sim 500$.\\ \hline\\[-0.4cm] {\tt TSTOP} & Once $T<${\tt TSTOP}, integration stops. Typical value: $10^{-4}~\GeV$.\\ \hline\\[-0.4cm] {\tt ratio\_ini}& Integration starts at $u$ with $3H/\maT \approx${\tt ratio\_ini}. Typical value: $\sim 10^{3}$.\\ \hline\\[-0.4cm] \multirow{1}{4cm}{{\tt N\_convergence\_max} {\tt convergence\_lim}} & \multirow{1}{12cm}{Integration stops when the relative difference between two consecutive peaks is less than {\tt convergence\_lim} for {\tt N\_convergence\_max} consecutive peaks. } \\ \\ \\ \hline\\[-0.4cm] {\tt inputFile} & \multirow{1}{12cm}{Relative (or absolute) path to a file that describes the cosmology. The columns should be: $u$ $T ~[\GeV]$ $\log H$, with acceding $u$. Entropy injection should have stopped before the lowest temperature of given in {\tt inputFile}.} \\ \\ \\ \\ \hline\\[-0.4cm] {\tt axionMass} & \multirow{1}{12cm}{ Instance of \cppin{mimes::AxionMass<LD>} class. In \CPP this instance is passed as a pointer to the constructor of the \cppin{mimes::Axion<LD,Solver,Method>} class, while in \PY it is simply passed as a variable.}\\ \\ \\ \\ \hline\\[-0.4cm] {\tt initial\_stepsize} & Initial step-size of the solver. Default value: $10^{-2}$.\\ \hline\\[-0.4cm] {\tt minimum\_stepsize} & Lower limit of the step-size. Default value: $10^{-8}$.\\ \hline\\[-0.4cm] {\tt maximum\_stepsize} & Upper limit of the step-size. Default value: $10^{-2}$.\\ \hline\\[-0.4cm] {\tt absolute\_tolerance} & \multirow{1}{12cm}{Absolute tolerance of the RK solver (see also table~\ref{tab:RK_mimes_params}). Default value: $10^{-8}$.}\\\\ \hline\\[-0.4cm] {\tt relative\_tolerance} & \multirow{1}{12cm}{Relative tolerance of the RK solver (see also table~\ref{tab:RK_mimes_params}). Default value: $10^{-8}$.}\\\\ \hline\\[-0.4cm] {\tt beta} & \multirow{1}{12cm}{Aggressiveness of the adaptation strategy (see also table~\ref{tab:RK_mimes_params}). Default value: $0.9$.}\\\\ \hline\\[-0.4cm] {\tt fac\_max}, {\tt fac\_min} &\multirow{1}{12cm}{The step-size does not change more than {\tt fac\_max} and less than {\tt fac\_min} within a trial step (see also table~\ref{tab:RK_mimes_params}). Default values: $1.2$ and $0.8$, respectively.} \\ \\ \\ \hline\\[-0.4cm] {\tt maximum\_No\_steps} & \multirow{1}{12cm}{If integration needs more than {\tt maximum\_No\_steps} integration stops. Default value: $10^7$.}\\\\ \hline\\[-0.4cm] \end{tabular} \caption{Table of run-time user input.} \label{tab:run_time-input} \end{table} \begin{table}[h!] \centering \begin{tabular}{l l} \multicolumn{2}{c}{\bf Required data files, with corresponding variables in {\tt \mimes/Paths.mk}} \\ \hline\\[-0.4cm] {\tt cosmoDat}& \multirow{1}{12cm}{Relative path to data file with $T$ (in $\GeV$), $\heff$, $\geff$. If the path changes one must run {\tt bash configure.sh} and {\tt make}.}\\\\ \hline\\[-0.4cm] {\tt axMDat}& \multirow{1}{12cm}{Relative path to data file with $T$ (in $\GeV$), $\chi$ (defined from \eqs{eq:axion_mass_def}). If the path changes one must run {\tt bash configure.sh} and {\tt make}. This variable can be omitted, since the user has to define an AxionMass instance.}\\\\\\\\ \hline\\[-0.4cm] {\tt anFDat}& \multirow{1}{12cm}{Relative path to data file with $\thetamax$, $f(\thetamax)$. If the path changes one must run {\tt bash configure.sh} and {\tt make}.}\\\\ \hline\\[-0.4cm] \end{tabular} \caption{Paths to the required data files.} \label{tab:input} \end{table} \begin{table}[h!] \centering \begin{tabular}{l l} \multicolumn{2}{c}{\bf User compile-time input} \\ \hline\\[-0.4cm] {\tt rootDir}& \multirow{1}{12cm}{The relative path of root directory of \mimes. Relevant only when compiling using {\tt make}. Available in all {\tt Definitions.mk}.}\\\\ \hline\\[-0.4cm] {\tt LONG}& \multirow{1}{12cm}{{\tt long} for {\tt long double }or empty for {\tt double}. This should be a macro at the top of the {\tt .cpp} file. Available in all {\tt Definitions.mk}.}\\\\ \hline\\[-0.4cm] {\tt LONGpy}& \multirow{1}{12cm}{{\tt long} or empty. Same as {\tt LONG}, applies in the python modules. Available in {\tt \mimes/Definitions.mk}.}\\\\ \hline\\[-0.4cm] {\tt SOLVER}& \multirow{1}{12cm}{In order to use a Rosenbrock method {\tt SOLVER}=$1$. For explicit RK method, {\tt SOLVER}=$1$. This should be a macro defined before we include {\tt \mimes/src/Axion/AxionSolve.hpp}. Therefore it is preferable to define it with the compiler flag {\tt -DSOLVER=}$1$ or $2$. The corresponding variable in {\tt \mimes/Definitions.mk} applies to the python modules. The variable in {\tt \mimes/UserSpace/Cpp/Axion/Definitions.mk} applies to the example in the same directory.}\\\\\\\\\\\\\\ \hline\\[-0.4cm] {\tt METHOD}& \multirow{1}{12cm}{Depending of the solver, this macro should name one of its available methods. For {\tt SOLVER}=$1$, {\tt METHOD}=RODASPR2 (fourth order) or ROS34PW2 (third order). For {\tt SOLVER}=$1$, {\tt METHOD}=DormandPrince (seventh order). This should be a macro defined before we include {\tt \mimes/src/Axion/AxionSolve.hpp}. Therefore it is preferable to define it with the compiler flag {\tt -DMETHOD=}RODASPR2, ROS34PW2, or DormandPrince. The corresponding variable in {\tt \mimes/Definitions.mk} applies to the python modules. The variable in {\tt \mimes/UserSpace/Cpp/Axion/Definitions.mk} applies to the example in the same directory.}\\\\\\\\\\\\\\\\\\\\ \hline\\[-0.4cm] \multicolumn{2}{c}{\bf Compiler options} \\ \hline\\[-0.4cm] {\tt CC} & \multirow{1}{12cm}{The preferred \CPP compiler ({\tt g++} by default). Corresponding variable in all {\tt Definitions.mk} files.} \\\\ \hline\\[-0.4cm] {\tt OPT} & \multirow{1}{12cm}{Optimization level of the compiler. Available options {\tt OPT}={\tt O1}, {\tt O2}, {\tt O3} (be default). By Corresponding variable in all {\tt Definitions.mk} files.} \\\\ \hline\\[-0.4cm] \end{tabular} \caption{User compile-time input. These are available in the various {\tt Definitions.mk} files, which are used when compiling using {\tt make}.} \label{tab:compile_time-input} \end{table} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \bibliography{refs}{} \bibliographystyle{JHEP} \end{document} diff --git a/UserSpace/JupyterNotebooks/AnharmonicFactor.ipynb b/UserSpace/JupyterNotebooks/AnharmonicFactor.ipynb index ceb2dfd..8293f86 100755 --- a/UserSpace/JupyterNotebooks/AnharmonicFactor.ipynb +++ b/UserSpace/JupyterNotebooks/AnharmonicFactor.ipynb @@ -1,1091 +1,1108 @@ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np#you usually need numpy\n", "\n", "#---these are for plots---#\n", "import matplotlib\n", "matplotlib.use('nbAgg')\n", "import matplotlib.pyplot as plt\n", "\n", "plt.rcParams['font.size']=16\n", "plt.rcParams['font.family']='dejavu sans'\n", "\n", "plt.rcParams['mathtext.fontset']='stix'\n", "plt.rcParams['mathtext.rm']='custom'\n", "plt.rcParams['mathtext.it']='stix:italic'\n", "plt.rcParams['mathtext.bf']='stix:bold'\n", "#-------------------------#" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#load the module\n", "from sys import path as sysPath\n", - "from os import path as osPath\n", - "sysPath.append(osPath.join(osPath.dirname('./'), '../../src'))\n", + "sysPath.append('../../src')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "#load the module\n", + "from sys import path as sysPath\n", + "sysPath.append('../../src')\n", "\n", "from interfacePy.AnharmonicFactor import anharmonicFactor #load the anharmonicFactor function form the AnharmonicFactor module\n", "from interfacePy.FT import FT #easy tick formatting\n", "\n" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<img src=\"data:image/png;base64,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V+6G5TAkJERNmzbVlClTtG/fPj49BADgNpBFrUMhhCmWELgxl8ulffv2afr06Xr88cezvb1F5cqVNWzYMH3//fdcuRQAgBwii1qHQghTLCGQc9euXdO//vUvDR06VFWqVLlhOYyIiFD37t312Wef6dy5c3aPDQCA1yKLWodCCFMsIXD7Dhw4oKlTp+rhhx9WSEiIaTkMDg7WX//6V73zzjvau3cvXy0FAOA/kEWtQyGEKZYQuDsuXLighQsXqkePHipSpMgNPz2sVKmSRowYoZ9++klOp9PusQEAsBVZ1DoUQphiCYG7LzMzU+vXr9eIESN0//3337Ac3nPPPRo0aJC+++47paen2z02AACWI4tah0IIUywhkPsOHDigd999V82aNbvhV0sjIiLUq1cvLV++XMnJyXaPDACAJcii1qEQwhRLCFjr3Llzmjdvnjp06KD8+fOblsMCBQqoY8eO+uSTT3ThwgW7RwYAINeQRa1DIYQplhCwz9WrV7Vs2TL17NlT4eHhpuUwT548at68uT744AOdOnXK7pEBALiryKLWoRDCFEsIeIf09HT961//0sCBA1WyZMkbXrH00Ucf1axZs3TmzBm7RwYA4I6RRa1DIYQplhDwPg6HQxs3btSwYcNUoUIF03IYEhKiFi1aaM6cOdzrEADgs8ii1qEQwhRLCHg3l8ulHTt26JVXXlGlSpVu+LXSxx9/XB9//DHnHAIAfApZ1DoUQphiCQHf4XK5tH37dr388suqWLGiaTnMmzev2rRpo3nz5unixYt2jwwAQLbIotahEMIUSwj4JpfLpa1bt2rkyJEqV66caTnMly+fOnTooMWLF+vatWt2jwwAQBZkUetQCGGKJQR8n8vl0i+//KLhw4erbNmypuUwLCxMzzzzjFavXq3MzEy7RwYAQBJZ1EoUQphiCQH/4nQ69dNPP2no0KEqU6aMaTksVaqUXnzxRW3ZskUul8vukQEAAYwsah0KIUyxhID/cjgcWrdunZ577jlFRESYlsPKlStr7NixOnDggN3jAgACEFnUOhRCmGIJgcCQmpqq5cuXq3PnzsqXL59pOWzQoIGmT5+uP//80+5xAQABgixqHQohTLGEQOC5ePGiPvzwQz3yyCMKCgrKUgyDg4PVsmVLLViwgIvRAAByFVnUOhRCmGIJgcCWlJSkKVOmqE6dOqafGoaH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\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot data alongsode the interpolation (if there are large differences there is something wrong)\n", "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0)\n", " sub = fig.add_subplot(1,1,1)\n", " \n", " \n", " Y=[]\n", " T=np.linspace(0,np.pi,50)\n", " for t in T:\n", " Y.append(anharmonicFactor(t))\n", " sub.plot(T,Y,linestyle='-',linewidth=2,alpha=1,c='xkcd:black')\n", " \n", " \n", " sub.set_xlabel(r'$\\theta_{\\rm peak}$')\n", " sub.xaxis.set_label_coords(0.5, -0.1) \n", "# sub.set_ylabel(r'$ \\dfrac{2\\sqrt{2}}{\\pi \\ \\theta_{\\rm max}^2} \\ \\int_{-\\theta_{\\rm max}}^{\\theta_{\\rm max}} d\\theta \\ \\sqrt{ \\cos(\\theta) - \\cos(\\theta_{\\rm max}) }$')\n", " sub.set_ylabel(r'$ f\\left( \\theta_{\\rm peak} \\right)$')\n", " sub.yaxis.set_label_coords(-0.1,0.5) \n", " #set major ticks\n", " _M_xticks=[ 0,0.5,1,1.5,2,2.5,3]\n", " _M_yticks=[ 0.5,0.6,0.7,0.8,0.9,1 ]\n", "\n", " #set major ticks that will not have a label\n", " _M_xticks_exception=[]\n", " _M_yticks_exception=[]\n", "\n", " _m_xticks=[np.pi]\n", " _m_yticks=[] \n", " ft=FT(_M_xticks,_M_yticks,\n", " _M_xticks_exception,_M_yticks_exception,\n", " _m_xticks,_m_yticks,\n", " xmin=0,xmax=np.pi,ymin=0.5,ymax=1.005,xscale='linear',yscale='linear')\n", "\n", " ft.format_ticks(plt,sub) \n", " \n", " sub.text(np.pi*0.99,0.46,r'$\\pi$')\n", "\n", " \n", - " fig.savefig('anharmonic_factor.pdf',bbox_inches='tight')\n", + "# fig.savefig('anharmonic_factor.pdf',bbox_inches='tight')\n", " fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.5" } }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/UserSpace/JupyterNotebooks/Axion.ipynb b/UserSpace/JupyterNotebooks/Axion.ipynb index 48d6248..8e03150 100755 --- a/UserSpace/JupyterNotebooks/Axion.ipynb +++ b/UserSpace/JupyterNotebooks/Axion.ipynb @@ -1,5361 +1,5362 @@ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np#you usually need numpy\n", "\n", "#---these are for plots---#\n", "import matplotlib\n", "matplotlib.use('nbAgg')\n", "import matplotlib.pyplot as plt\n", "\n", "plt.rcParams['font.size']=16\n", "plt.rcParams['font.family']='dejavu sans'\n", "\n", "plt.rcParams['mathtext.fontset']='stix'\n", "plt.rcParams['mathtext.rm']='custom'\n", "plt.rcParams['mathtext.it']='stix:italic'\n", "plt.rcParams['mathtext.bf']='stix:bold'\n", "#-------------------------#" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#load the module\n", "from sys import path as sysPath\n", - "from os import path as osPath\n", - "sysPath.append(osPath.join(osPath.dirname('./'), '../../src'))\n", + "sysPath.append('../../src')\n", "\n", "from interfacePy.Axion import Axion \n", "from interfacePy.AxionMass import AxionMass\n", "\n", - "from interfacePy.Cosmo import Hubble,rho_crit,h_hub\n", + "from interfacePy.Cosmo import Cosmo\n", "from interfacePy.FT import FT #easy tick formatting\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "theta_i, fa=0.94435, 1e12\n", "# theta_i, fa=np.pi, 1e12\n", "# theta_i, fa=1e-3, 1e5\n", "\n", "umax=500\n", "TSTOP=1e-4\n", "ratio_ini=1e3\n", "\n", "N_convergence_max, convergence_lim=5, 1e-2 #this is fine, but you can experiment a bit. \n", "\n", "#radiation dominated example\n", "inputFile=\"../InputExamples/RDinput.dat\" \n", "\n", "# Matter domination example. \n", "# the NSC parameters (using the notation of 2012.07202) are:\n", "# T_end=1e-2 (GeV), c=3, T_ini=1e12 (GeV), and r=1e-1\n", "# inputFile=\"../InputExamples/MatterInput.dat\" \n", "\n", "\n", "# Kination domination example. \n", "# the NSC parameters (using the notation of 2012.07202) are:\n", "# T_end=0, c=6, T_ini=1e3 (GeV), and r=1e10\n", "# inputFile=\"../InputExamples/KinationInput.dat\" \n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#you can define the axion mass using a data file\n", "axionMass = AxionMass(r'../../src/data/chi.dat',0,1e5)\n", "\n", "#you can define the axion mass via a function\n", "# def ma2(T,fa):\n", "# TQCD=150*1e-3;\n", "# ma20=3.1575e-05/fa/fa;\n", "# if T<=TQCD:\n", "# return ma20;\n", "# return ma20*pow((TQCD/T),8.16)\n", "\n", "# axionMass = AxionMass(ma2)\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# options for the solver\n", "# These variables are optional. Yoou can use the Axion class without them.\n", "initial_step_size=1e-2; #initial step the solver takes. \n", "minimum_step_size=1e-8; #This limits the sepsize to an upper limit. \n", "maximum_step_size=1e-2; #This limits the sepsize to a lower limit.\n", "absolute_tolerance=1e-8; #absolute tolerance of the RK solver\n", "relative_tolerance=1e-8; #relative tolerance of the RK solver\n", "beta=0.9; #controls how agreesive the adaptation is. Generally, it should be around but less than 1.\n", "\n", "#The stepsize does not increase more than fac_max, and less than fac_min. \n", "#This ensures a better stability. Ideally, fac_max=inf and fac_min=0, but in reality one must \n", "#tweak them in order to avoid instabilities.\n", "fac_max=1.2; \n", "fac_min=0.8;\n", "maximum_No_steps=int(1e7); #maximum steps the solver can take Quits if this number is reached even if integration is not finished.\n", "\n", "\n", "# Axion instance\n", "ax=Axion(theta_i, fa, umax, TSTOP, ratio_ini, N_convergence_max, convergence_lim, inputFile,axionMass,\n", " initial_step_size,minimum_step_size, maximum_step_size, absolute_tolerance, \n", " relative_tolerance, beta, fac_max, fac_min, maximum_No_steps)\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Axion instance\n", "# you can always run Axion with the default parameters for the solver\n", "# ax=Axion(theta_i, fa, umax, TSTOP, ratio_ini, N_convergence_max, convergence_lim, inputFile)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.019005775451660156" + "0.018198728561401367" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# solve the EOM (this only gives you the relic, T_osc, theta_osc, and a_osc)\n", "ax.solveAxion()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(0.11935020970232879, 0.9785452023797905, 0.8975109868818929)" + "(0.11934766380256942, 0.978544806529701, 0.8975020887699964)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ax.relic, ax.T_osc, ax.theta_osc" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "ax.getPeaks()#this gives you the peaks of the oscillation\n", "ax.getPoints()#this gives you all the points of integration\n", "ax.getErrors()#this gives you local errors of integration" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nOzdeXhM1/8H8DMRe2wl1rZK6YJS1L6l9qWiVaIqllClJVVr0YrQVpGiRQlRSxWlllpavmonNFSJJYgSFbGGiGyT2d6/P/LLaaa5iUwi987yfj3PeR6599w7n5nJGeede+deASIiIiIiInJJQusCiIiIiIiISBsMhERERERERC6KgZCIiIiIiMhFMRASERERERG5KAZCIiIiIiIiF8VASERERERE5KIYCImIiIiIiFwUAyEREREREZGLYiAkIiIiIiJyUQyERERERERELoqBkIiIiIiIyEUxEBIREREREbkoBkIiIiIiIiIXxUDo5MxmM9atW4egoCCtSyEiIiIiIjvDQOikLBYL1q9fj1q1akEIgYEDB2pdEhERERER2RkGQid19uxZXL58GcuWLWMgJCIiIiIiRQyETm7//v0MhEREREREpIiB0MkxEBIRERERUVYYCJ1cTgOhXq9HfHy8bHFxcbhy5QoePnxotZyNjY2NjY2NjY0tv9vDhw8RHR0Ns9mszqTZhTEQOrmcBsKpU6dCCMHGxsbGxsbGxsZmNy06OlqdSbMLYyB0crk9Qnj9+nU5CLX+CxEbGxsbGxsbG5trtejoaAgh8PDhQ3UmzS6MgdDJ5fY7hPHx8RBCID4+Pn8KIyIiIiLKAuei6mEgdHIMhETOwWAwYMUPy7Hih+UwGAxal0NERJSvOBdVDwOhk2MgJHIOBoMB87/7FvO/+5aBkIiInB7nouphIHRyDIREzoGBkIiIXAnnouphIHRyDIREzoGBkIiIXAnnouphIHRy69atgxACvXv3tmk7DkIi+8JASEREroRzUfUwEDqpq1evYu7cuahatSqEEChSpAimTp2K3bt352h7DkIi+8JASEREroRzUfUwEJIiDkIi+8JASEREroRzUfUwEJIiDkIi+2IwGPDj2tX4ce1qBkIiInJ6nIuqh4GQFHEQEhE9GRaLBSaTCampqUhOTkZCQgLi4+Px4MED3Lt3D7dv30ZMTAyuX7+OqKgo/P3337h06RIiIiJw7tw5hIeH46+//sKJEyfwxx9/IDQ0FIcOHcL+/fuxZ88e/O9//8POnTuxY8cObN26FZs3b8bPP/+M9evX46effsK6deuwdu1arFmzBj/++CNWr16N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3BcGQiIisoaBkIiIvM7169dRpkwZiEiRYwWqsRYIdTodevfuDRFBeHg4rl27ZrGcewPh5cuXERAQAH9/f2zYsMFk2cOHDyM2NtZqvQy9iooIkpKSbNoXBkIiIrKGgZCIiLzOjBkzlG/SisNaIAQArVaLt99+G+XKlUPdunWxYMECk94/8/LysGTJEpQpUwbVq1fH0aNHlXmpqakQEZQpUwa9evXCmDFj0L9/f4SGhuLw4cNF1m306NHw8/PDsWPHbNoXBkIiIrKGgZCIiLzGzp078cILL6B8+fJK5y+vvPIKli1bZlc5RQVCgwsXLmDChAno3Lkz7r//foSFhaFZs2Zo0qQJYmNj8emnn+L69etm682dOxctW7ZEuXLlEBYWhkGDBuH06dM21e3PP/9Er169bN4XBkIiIrKGgZCIiOgetgbC0oCBkIiIrGEgJCIiugcDIRER+QoGQiIionuICJo2bQq9Xu/uqjhszZo1DIRERGQRAyEREdE9oqKiEBUVhcTERIwePRrz5s1zd5Xscvr0aYwePRrJycl4+umnERUVhS+++MLd1SIiIg/EQEhEREREROSjGAiJiIiIiIh8FAMhERERERGRj2IgJCIiIiIi8lEMhERERERERD6KgZCIiIiIiMhHMRASERERERH5qP8Hk/GP4gxOueUAAAAASUVORK5CYII=\" width=\"900\">" + "<img src=\"data:image/png;base64,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\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0)\n", " sub = fig.add_subplot(1,1,1)\n", " \n", " #this plot shows the peaks of the oscillation\n", " sub.plot(ax.T_peak,ax.theta_peak,linestyle=':',marker='+',color='xkcd:blue',linewidth=2)\n", "\n", " #this plot shows all the points\n", " sub.plot(ax.T,ax.theta,linestyle='-',linewidth=2,alpha=1,c='xkcd:black')\n", "\n", " \n", " \n", " sub.set_xlabel(r'$T ~[{\\rm GeV}]$')\n", " sub.xaxis.set_label_coords(0.5, -0.1) \n", " sub.set_ylabel(r'$\\theta$')\n", " sub.yaxis.set_label_coords(-0.1,0.5) \n", "\n", " sub.axhline(ax.theta_osc,linestyle=':',color='xkcd:red',linewidth=1.5)\n", " sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5)\n", " \n", " \n", " \n", " #set major ticks\n", " _M_xticks=[ round(0.45+i*0.15,4) for i in range(0,15) ]\n", " _M_yticks=[ round(-0.4+i*0.1,3) for i in range(0,20,2) ]\n", "\n", " #set major ticks that will not have a label\n", " _M_xticks_exception=[]\n", " _M_yticks_exception=[]\n", "\n", " _m_xticks=[]\n", " _m_yticks=[] \n", " ft=FT(_M_xticks,_M_yticks,\n", " _M_xticks_exception,_M_yticks_exception,\n", " _m_xticks,_m_yticks,\n", " xmin=0.45,xmax=2,ymin=-0.4,ymax=1,xscale='linear',yscale='linear')\n", "\n", " ft.format_ticks(plt,sub) \n", "\n", " \n", " sub.text(x=0.92,y=0.1, s=r'$T_{\\rm osc}$',rotation=90)\n", " sub.text(x=1.5,y=0.8, s=r'$\\theta_{\\rm osc}$')\n", " \n", " sub.text(x=0.5,y=0.2, s=r'$\\theta_{\\rm max}$',rotation=20)\n", " \n", " sub.text(x=1.6,y=-0.3,\n", " s=r'$f_{a}=10^{12}~{\\rm GeV}$'+'\\n'+ r'$\\theta_i = 0.94435$')\n", " \n", "# fig.savefig('theta_evolution.pdf',bbox_inches='tight')\n", "\n", " fig.show()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nOzddXgUR+MH8EmCluAEaZBCi0Mp7tbgwR2KFChWtECBQgkpEjwpbsXdihZocIciRYoFCIXgUjx6ue/vD3437212k+xdkoXkvp/n2ee5m5nd2b2+0+b77u6MABERERERETkk8aFPgIiIiIiIiD4MBkIiIiIiIiIHxUBIRERERETkoBgIiYiIiIiIHBQDIRERERERkYNiICQiIiIiInJQDIREREREREQOioGQiIiIiIjIQTEQEhEREREROSgGQiIiIiIiIgfFQEhEREREROSgGAiJiIiIiIgcFAMhERERERGRg2IgJCIiIiIiclAMhERERERERA6KgZCIiIiIiMhBMRASERERERE5KAZCIiIiIiIiB8VASERERERE5KAYCImIiIiIiBwUAyEREREREZGDYiAkIiIiIiJyUAyEREREREREDoqBkIiIiIiIyEExEBIRERERETkoBkIiIiIiIiIHxUBIRERERETkoBgIiYiIiIiIHBQDIRERERERkYNiICQiIiIiInJQDIREREREREQOioGQiIiIiIjIQTEQEhEREREROSgGQiIiIiIiIgfFQJgIXL16FS1btkSmTJmQPHlyFChQABMnTkRERISqbVhYGKZMmYLWrVtjwIABqFOnDry9vREeHv4BzpyIiIiIiD5mDIQfuX///RcZM2ZE1apV0b59e5QtWxZCCAgh0KFDB0Xb8PBw1K5dG+XLl0doaCgA4N27dyhZsiTq168Pk8n0IS6BiIiIiIg+UgyEHzlPT09s375dUbZp0yY4OTlBCIELFy7Icm9vbwgh4O/vr2i/Y8cOCCHg5+dnyDkTEREREVHiwED4EXv06BEGDBigWdekSRMIIbBmzRoAQGhoKDJkyIA0adKo7gSGh4cjderUcHd3R2RkZIKfNxERERERJQ4MhB+x169f4+XLl5p1Q4cOhRAChw8fBgAcOXIEQgiUK1dOs33p0qUhhMCpU6c060NDQ/Hq1Su5vXjxArdu3cLLly8V5dy4cePGjRs3bty4JfT28uVLBAUF8WaGARgIE6lOnTohZ86ccmKZefPmQQiBZs2aabZv3LgxhBBYuHChZv3o0aPlu4ncuHHjxo0bN27cuH0MW1BQUIL9PU3vMRAmQuHh4ciaNSuWLVsm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y5Yt7d5ORkpOTkbJkiXlY6zR0dGubpJhv/zyi+xYyPquYGxsrKubZjoGQiIi8iQMhOZhICRdRk5Cpet/68f6lDtUVapUgRAChQoVwqZNm2T5hAkT5PL169dXPa755MkT+fNrr72m2d7t27dVHYpYsw5qb775pt370LdvX7nc6dOn06x/9uxZWb9Xr152byejDRo0SLZrxYoVrm6Ow2JiYjB48GDVXUE/Pz+XD+vhSgyERETkSRgIzcNASLqMnIRK76LKI5RCCLRt2xYAUL16dQghkD9/fqxfv16Wf/7553L5Ro0ayflxcXGyDdad01i7f/++5l1FxbVr11K9e2jLRx99JJf7448/0qz/+++/674P6WrW7erQoYOrm+OQiIgI+T6p9f/hv//+6+qmuVRSUhL27tuLvfv2IikpydXNISIiylAMhOZhICRdRk5CpSfRlBfywH89cebNmxdr166V5V988YVc/vXXX5fzHz9+jLt379p8HPPx48eyXBnvUPHnn3/Ksu7du9u9D+PHj5fL/fbbb2nWDw0NlfW//vpru7eT0RITE+WwG3nz5sXjx49d3SS7bN26VfWIaO7cuTF//ny36L2ViIiIzMNAaB4GQtJl5CS0HpBemTp27AgAePHFF+U7batXr5blU6dOlcs3b95czn/48CFu3bpls3MUW+8YnjhxQpYNGDDA7n2YPn26XC40NDTN+t98842sv3TpUru3Y4b+/fvLtv3000+ubo5NFosFkydPhpeXl2xzpUqVcObMGVc3jYiIiFyAgdA8DIQeIiEhwaH3r4ychMqg7tbTO++8AwDw9/eHEAI5cuTAihUrZPn06dPl8kFBQXL+vXv3VJ3GvP3225rtWfdCGhgYqCrbv3+/LBs6dKjd+/D999/L5ebPn59m/U8++UTW37p1q93bMcOePXtk25o1a+bq5qQqOjoa7dq1U31uWrdujQcPHri6aW7FYrHg4cOHePjwIe+YEhFRlsdAaB4Gwixo3bp1mmAmhGNj0hk5CStWrKjZpjIchDKkRLZs2bBs2TJZ/s0338jlW7duLeffvn0bERERmmCZktKBTa1atVTzrd+hGzVqlN37sGrVKrnctGnT0qxvfRfu5MmTdm/HDBaLRQ734eXlhcjISFc3SePSpUvy/VJlmjBhApKTk13dNLfDTmWIiMiTMBCah4EwCwoICECz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2bMnevfujW7duuHy5ctm7obdnPFZiI2NRcGCBVN9PyizfhbSw2Kx4NixYxgwYABq1aqFJUuWGHrn0Ezp/dK357OUGT8LRo9LREQESpQoYfN9608++cQVu2ST0f21WCzo0aMHChcujBw5ciAwMBB9+/bFzJkzNb9PMuPnADB+bDxtfxX2fB966rG5cuUK+vXrhyZNmqBv377o378/OnfujDNnzpi5GxkuM34XkhYDIRGRAT/99BOWLVuGiIgIVzeFiIjIJfhdmDUwEBIREREREXkoBkIiIiIiIiIPxUBIRERERETkoRgIiYiIiIiIPBQDIRERERERkYdiICQiIiIiIvJQDIREREREREQeioGQiIiIiIjIQzEQEhEREREReSgGQiIiIiIiIg/FQEhEREREROShGAiJiIiIiIg8FAMhERERERGRh2IgJCIiIiIi8lAMhERERERERB6KgZCIiIiIiMhDMRASEREREf1/+3UgAAAAACDI33qQyyKYEkIAAIApIQQAAJgSQgAAgCkhBAAAmBJCAACAKSEEAACYEkIAAIApIQQAAJgSQgAAgCkhBAAAmBJCAACAKSEEAACYEkIAAIApIQQAAJgK9sI8hDhWv3gAAAAASUVORK5CYII=\" width=\"900\">" + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nOzdd3gUReMH8EkiTUInFEMRlA4ivTfpBEKRLkU6KEUBASkh0msivffepAoYegcpUqQFDELoRXrq3X1/f/C7eW+zm2Tvkiwk9/08zz7P3c7szO7p+Ob77u6MABERERERETkl8b5PgIiIiIiIiN4PBkIiIiIiIiInxUBIRERERETkpBgIiYiIiIiInBQDIRERERERkZNiICQiIiIiInJSDIREREREREROioGQiIiIiIjISTEQEhEREREROSkGQiIiIiIiIifFQEhEREREROSkGAiJiIiIiIicFAMhERERERGRk2IgJCIiIiIiclIMhERERERERE6KgZCIiIiIiMhJMRASERERERE5KQZCIiIiIiIiJ8VASERERERE5KQYCImIiIiIiJwUAyEREREREZGTYiAkIiIiIiJyUgyEREREREREToqBkIiIiIiIyEkxEBIRERERETkpBkIiIiIiIiInxUBIRERERETkpBgIiYiIiIiInBQDIRERERERkZNiICQiIiIiInJSDIREREREREROioGQiIiIiIjISTEQEhEREREROSkGQiIiIiIiIifFQJgIXL16Fc2bN0fGjBmRLFky5M+fHxMmTEBkZKSqbnh4OCZPnoyWLVuiX79+qFOnDnx9fREREfEezpyIiIiIiD5kDIQfuH///RcZMmRAlSpV0LZtW5QpUwZCCAgh0K5dO0XdiIgI1K5dG+XKlUNYWBgA4O3btyhRogTq168Pk8n0Pi6BiIiIiIg+UAyEHzgvLy9s375dsW/Tpk1wcXGBEAIXLlyQ+319fSGEQEBAgKL+jh07IISAv7+/IedMRERERESJAwPhB+zhw4fo16+fZlnjxo0hhMCaNWsAAGFhYUifPj1Sp06tuhMYERGBVKlSwdPTE2azOcHPm4iIiIiIEgcGwg/Yq1ev8OLFC82yQYMGQQiBw4cPAwCOHDkCIQTKli2rWb9UqVIQQuDUqVOa5WFhYXj58qXcnj9/jn/++QcvXrxQ7OfGjRs3bty4cePGLaG3Fy9eIDg4mDczDMBAmEh16NABOXLkkBPLzJ07F0IING3aVLO+t7c3hBBYsGCBZvnIkSPlu4ncuHHjxo0bN27cuH0IW3BwcIL9PU3vMBAmQhEREciSJQuWLVsm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unVDjx490LlzZ1y6dMnM3bCbKz4LMTExyJs3b4rvB6XXz4IzLBYLjhw5gr59+6JatWpYtGiRoXcOzeTsl749n6X0+FkwelwiIyPh7+9v833rTz/91B27ZJPR/bVYLOjatSvy58+PLFmyIDg4GL169cL06dM1v0/S4+cAMH5svG1/FfZ8H3rrsbl8+TJ69+6Nhg0bolevXujTpw86dOiAU6dOmbkbaS49fheSFgMhEZEBP/30E5YsWYLIyEh3N4WIiMgt+F2YMTAQEhEREREReSkGQiIiIiIiIi/FQEhEREREROSlGAiJiIiIiIi8FAMhERERERGRl2IgJCIiIiIi8lIMhERERERERF6KgZCIiIiIiMhLMRASERERERF5KQZCIiIiIiIiL8VASERERERE5KUYCImIiIiIiLwUAyEREREREZGXYiAkIiIiIiLyUgyEREREREREXoqBkIiIiIiIyEsxEP5/+3UgAAAAACDI33qQyyIAAIApIQQAAJgSQgAAgCkhBAAAmBJCAACAKSEEAACYEkIAAIApIQQAAJgSQgAAgCkhBAAAmBJCAACAKSEEAACYEkIAAIApIQQAAJgSQgAAgKkAF4A8szcl8lgAAAAASUVORK5CYII=\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.9, right=0.9,wspace=0.0,hspace=0.25)\n", " sub = fig.add_subplot(1,1,1)\n", " \n", " sub.plot(ax.T,ax.zeta,linestyle='-',linewidth=2,alpha=1,c='xkcd:black')\n", " sub.plot(ax.T_peak,ax.zeta_peak,linestyle=':',marker='+',color='xkcd:blue',linewidth=2)\n", " \n", " sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5)\n", "\n", " \n", " #set major ticks\n", " _M_xticks=[ round(0.45+i*0.15,4) for i in range(0,15) ]\n", " _M_yticks=[ round(-20+i*5,3) for i in range(0,20,1) ]\n", "\n", " #set major ticks that will not have a label\n", " _M_xticks_exception=[]\n", " _M_yticks_exception=[]\n", "\n", " _m_xticks=[]\n", " _m_yticks=[] \n", " ft=FT(_M_xticks,_M_yticks,\n", " _M_xticks_exception,_M_yticks_exception,\n", " _m_xticks,_m_yticks,\n", " xmin=0.45,xmax=2,ymin=-20,ymax=20,xscale='linear',yscale='linear')\n", "\n", " ft.format_ticks(plt,sub) \n", "\n", " \n", " sub.text(x=0.92,y=10, s=r'$T_{\\rm osc}$',rotation=90)\n", " \n", " \n", " sub.text(x=1.6,y=-15,\n", " s=r'$f_{a}=10^{12}~{\\rm GeV}$'+'\\n'+ r'$\\theta_i = 0.94435$')\n", "\n", " \n", "# fig.savefig('zeta_evolution.pdf',bbox_inches='tight')\n", "\n", " fig.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "<ipython-input-12-b569a0ff9cd6>:7: RuntimeWarning: invalid value encountered in true_divide\n", " sub.plot(ax.T,np.abs(ax.dzeta/ax.zeta),linestyle='-',linewidth=2,alpha=1,c='xkcd:red',label=r'$\\dfrac{\\delta \\zeta}{\\zeta}$')\n" ] }, { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nOzde5xM9f8H8M/MYtd9S0JEviGRXNb9TlG+4ouSSESRr5JEboUNLVoWSRSlwncpiXLdr2uILfzk1ldiae39fpnZ2bmc1++PbceencvOzM6cmdl9PR+P83jYM+ecz3tm96zPa885n48AERERERERlUvC2wUQERERERGRdzAQEhERERERlVMMhEREREREROUUAyEREREREVE5xUBIRERERERUTjEQEhERERERlVMMhEREREREROUUAyEREREREVE5xUBIRERERERUTjEQEhERERERlVMMhEREREREROUUAyEREREREVE5xUBIRERERERUTjEQEhERERERlVMMhEREREREROUUAyEREREREVE5xUBIRERERERUTjEQEhERERERlVMMhEREREREROUUAyEREREREVE5xUBIRERERERUTjEQEhERERERlVMMhEREREREROUUAyEREREREVE5xUBIRERERERUTjEQEhERERERlVMMhEREREREROUUAyEREREREVE5xUBIRERERERUTjEQlgNff/01evfu7e0yiIiIiIjIxzAQlnHR0dFo06YNevXq5e1SiIiIiIjIxzAQlmFxcXFYtGgRFixYwEBIREREREQWGAg9zGQyITIyEuHh4Yq2q9PpMGPGDOj1egZCIiIiIiKyioHQQyRJwvbt29GiRQsIITB27Fib2+bn5yM8PBzPP/88pk6div79+yM0NBR6vd7l9ufOnYukpCQAYCAkIiIiIiKrGAg95NKlS7h+/To2btxoNxDq9Xr069cPnTp1gk6nAwBoNBq0bdsWAwYMgNFoNG9rMBjsLiaTCQDw8ccf4+zZs+b9GAiJiIiIiMgaBkIPO3r0qN1AGBoaCiEEoqKiZOv37NkDIQRWrlxpXieEsLuMGDECANCkSRMEBgaal4CAAKhUKgQGBuKbb77x2HslIiIiIiL/wkDoYfYCoU6nQ3BwMKpWrSq7EggUXDmsXLky6tevb77y5ypeISQiIiIiImsYCD3MXiA8ceIEhBDo2LGj1X1DQkIghEB0dHSpamAgJCIiIiIiaxgIPcxeIFy/fj2EEBg6dKjVfQcPHgwhBDZs2FCqGhwJhDqdDllZWeYlIyMDN27cQGZmpmw9Fy5cuHDhwoULFy6e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fz9Gjx6N+fPnIyMjAzdu3LB3NzTHuajtMBCSIh6ERI6FdxklInJ9paWlOHjwIJKTk/HCCy8gJCQEDRo0qFVIbNeuHUaNGoW33noL6enpTn/TNc5FbYeBkBTxICRyLAyERETuqaysDEeOHMGHH36Il156Cf369UOjRo1qFRLbtm2LP//5z5g3bx62b9/uVI8H41zUdhgISREPQiLHwkBIREQG5eXlyM7Oxr///W+88sorCA0NrfFaRMMSGBiI8PBwvPHGG/jss89w6dIle3dHEeeitsNASIp4EBI5FgZCIiIyp6KiAseOHcP69evx17/+FQMGDIC3t3etQmLLli3xxBNPYMaMGUhJScHhw4dRUlJi1/5wLmo7DISkiAchkWNhICQiIkvpdDqcOHECGzZswN/+9jc88sgjaNq0aa1CYv369dGtWzc8/fTTePvtt7F//37odDqbtZ1zUdthICRFPAiJHAsDIRERaUGn0+HUqVPYvHkzXn31VTz22GPw8/OrVUi8++67MXbsWKSkpFj9ekTORW2HgZAU8SAkcixlZWVY88FqrPlgNQMhERFpSq/X48KFC9ixYwcWLFiAmJgYdO/eHZ6enmYDYnBwMF577TXs2bNH80cicS5qOwyEpIgHIREREZF7Ky0tRXZ2NlavXo3IyEj4+PhUGw59fX0xatQorF27Frm5uap/NueitsNASIp4EBIRERFRZWVlZdi9ezdmz56NHj16mP30sFu3bpg+fTp27txZpxvUcC5qOwyEpIgHIRERERGZc/nyZaxbtw7R0dHw9/evNhw2btwYI0aMwNq1a3H58uVavTfnorbDQEiKeBASOZby8nJsS92KbalbNb9Og4iISK2Kigrs27cPc+bMQd++feHh4VFtQAwJCcGbb76JI0eOQK/XK74f56K2w0BIingQEjkW3mWUiIicyfXr17F582ZMnDgRLVq0qDYcBgUF4eWXX8bOnTtN/uDJuajtMBCSIh6ERI6FgZCIiJyVTqdDVlYW/vGPf6B79+7VhsOWLVti2rRp+P7773Hz5k3ORW2EgZAUMRASORYGQiIichXnzp3D8uXLMXTo0GofbdGxY0fORW2EgZAUMRASORYGQiIickX5+fnYsmULIiMj4eXlVSUYci5qfQyEpIiBkMixMBASEZGry8vLw5o1azBw4EAGQhtiICRFDIREjoWB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VlaGtm3bVrnWcd68eRCRau96unLlSogIfHx8jHdKBYCFCxciIiLCbF8YCImIyBwGQiIickkFBQXw8vKCiODYsWMW7VtdINy3b58xEKanp1e7/7lz55CcnGx8bWxsLH7++Wekp6dDRDBkyBCMHDnSuDz22GPo1KkTRowYofh+JSUlaNWqFUQEc+fOBQDodDq0a9cOX375pdm+MBASEZE5DIREROSSduzYARFBmzZtLN63ukCYm5trDHn/+te/anyfe+65ByKCjIwMAMDixYshIjh58qTFbTLse/fdd6OwsBBpaWno2rVrjfsxEBIRkTkMhERE5JJmzJhh/HTOUuZuKmN4NuC4ceNqfJ+goCCIiPGGMUlJSSb/tkRBQQGaN28OEcE777yDwYMH4/33369xPwZCIiIyh4GQiIhcUo8ePSAi2Lhxo8X7mguEK1asMN7189y5c2bf585AmJKSAhHBSy+9pPj6vXv3mv300HCTnObNm8PX1xe3b9+usS8MhEREZA4DIRERuZwbN26gXr16EJEanxWoxFwg1Ol0iIiIgIggODgY169fr/Z97gyEly9fhqenJ+666y5s377d5LVHjx7FsGHDzLbLcFdREcGUKVNq1RcGQiIiMoeBkIiIXM6yZcuMn6TVhblACAAVFRV47bXX4OXlhbZt2yI5Odnk7p/FxcVYv3496tWrB39/fxw/fty4bc6cORAR1KtXDyNHjsSsWbMQHR2NwMBAHD16tMa2zZw5Ex4eHjhx4kSt+sJASERE5jAQEhGRy/jmm2/w/PPPo0GDBsabv7z44ovYsGGDRe9TUyA0uHDhAubOnYuBAweiZcuWaNOmDTp37oyOHTti2LBhePfdd3Hjxo0FqC3dAAAA+UlEQVQq+61atQrdunWDl5cX2rRpg3HjxuHs2bO1atvVq1cxcuTIWveFgZCIiMxhICQiIrpDbQOhM2AgJCIicxgIiYiI7sBASERE7oKBkIiI6A4igk6dOkGv19u7KaqlpaUxEBIRUbUYCImIiO4QGhqK0NBQxMbGYubMmVi9erW9m2SRs2fPYubMmYiPj8ef/vQnhIaG4oMPPrB3s4iIyAExEBIREREREbkpBkIiIiIiIiI3xUBIRERERETkphgIiYiIiIiI3BQDIRERERERkZtiICQiIiIiInJTDIRERERERERuioGQiIiIiIjITTEQEhERERERuan/AygVBcxBRQIcAAAAAElFTkSuQmCC\" width=\"900\">" + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nOzdeXgT1f4G8JMULDv9gQgKgigKorKVHWTRC4gICrKIckFQEBBEL8jmlVZEBAsURAQVRTYLXhRkE3pRwApYBS4KiIiyWLrvS9I0y7y/P2qHTrM0SZNJ0ryf55nnoZOZOd+knXLezsw5AkRERERERBSUhK8LICIiIiIiIt9gICQiIiIiIgpSDIRERERERERBioGQiIiIiIgoSDEQEhERERERBSkGQiIiIiIioiDFQEhERERERBSkGAiJiIiIiIiCFAMhERERERFRkGIgJCIiIiIiClIMhEREREREREGKgZCIiIiIiChIMRASEREREREFKQZCIiIiIiKiIMVASEREREREFKQYCImIiIiIiIIUAyEREREREVGQYiAkIiIiIiIKUgyEREREREREQYqBkIiIiIiIKEgxEBIREREREQUpBkIiIiIiIqIgxUBIREREREQUpBgIiYiIiIiIghQDIRERERERUZBiICQiIiIiIgpSDIRERERERERBioGQiIiIiIgoSDEQEhERERERBSkGwiCwadMm9OnTx9dlEBERERGRn2EgrOTi4+PRrl079O7d29elEBERERGRn2EgrMQSExPx5ptvIiIigoGQiIiIiIisMBB6mcViQUxMDKKiolRt12AwYNasWTAajQyERERERERkEwOhl0iShO3bt6N169YQQmDcuHF2ty0qKkJUVBRGjhyJGTNmoH///oiMjITRaHS7/fnz5yM1NRUAGAiJiIiIiMgmBkIvOXv2LC5duoT169c7DIRGoxH9+vVDly5dYDAYAAA6nQ7t27fHwIEDYTab5W1NJpPDxWKxAADee+89nDx5Ut6PgZCIiIiIiGxhIPSyw4cPOwyEkZGREEIgNjZWsX7v3r0QQiA6OlpeJ4RwuIwaNQoA0KJFC4SGhspLSEgINBoNQkND8fnnn3vtvRIRERERUWBhIPQyR4HQYDAgLCwMNWvWVFwJBIqvHFavXh2NGzeWr/y5i1cIiYiIiIjIFgZCL3MUCOPi4iCEQOfOnW3uGx4eDiEE4uPjK1QDAyEREREREdnCQOhljgLhunXrIITA0KFDbe47ZMgQCCHw0UcfVagGZwKhwWBAbm6uvGRnZ+PPP/9ETk6OYj0XLly4cOHChQsXLt5ecnJykJCQUOE75ah8DIRe5igQLl68GEIIjBkzxua+o0ePhhACS5Ys8XKVxaGxvGcUuXDhwoULFy5cuHBRc0lISPB6PzjYMRB6maNAuGLFCghhPxCOGTMGQggsXrzYy1VaXyH866+/5JPQ138h4sKFSy4yMjLw/gdr8P4Ha5CRkeHzerhw4cKFCxdvLgkJCRBCICcnx+v94GDHQOhljgJhTEwMhBAYNmyYzX2HDRsGISp+y6g7cnNzIYRAbm6u6m0TERERUXBjX1Q9DIRe5igQxsfHQwiBbt262dy3a9euEKLig8q4gychEREREfkK+6LqYSD0MkeB0Gw2o0GDBqhTpw4kSbJ6rVatWmjQoIFPHqblSUhEREREvsK+qHoYCL2svInpFyxYACEEjh49qlgfGxsLIQQWLFigQpXWeBIS+ReTyYRtn8dg2+cxMJlMvi6HiIjIq9gXVQ8DoZeVPCc4YsQIm6/r9Xp06NABPXv2RFFREQCgsLAQnTp1QocOHaDX69UsV8aTkMi/GI1GvLtmFd5dswpGo9HX5RAREXkV+6LqYSD0ksuXL2PFihVo1qwZhBCoVq0aIiIiEBsba7VtQUEB5s6di0GDBmH69OkYOHAgZs+ejYKCAh9UXownIZF/YSAkIqJgwr6oehgIySaehET+hYGQiIiCCfui6mEgJJt4EhL5FwZCIiIKJuyLqoeBkGziSUjkXxgIiYgomLAvqh4GQrKJJyGRf2EgJCKiYMK+qHoYCMkmnoRE/sVoNOLDjz/Ahx9/wEBIRESVHvui6mEgJJt4EhIRERGRr7Avqh4GQrKJJyERERER+Qr7ouphICSbeBISERERka+wL6oeBkKyiSchkX8xmUz4YucOfLFzB0wmk6/LISIi8ir2RdXDQEg28SQk8i8cZZSIiPyVTqdDREQEli1bhhEjRmD+/PkVPib7ouphICSbeBIS+RcGQiIi8pXVq1fjiSeeQKNGjdCsWTOsXr1afi0nJwddunTB0qVLAQC//vorhBD49ttvK9Qm+6LqYSAkm3gSEvkXBkIiIvKFDz74AIcOHQIAFBQUIDw8HC1atAAASJKE/v37o2PHjrBYLACAvLw8CCHw+uuvV6hd9kXVw0BINvEkJPIvDIREROQLEyZMwHfffSd/rdfrkZKSAgBYtWoVhBA4cuSI/HpaWhqEEJg6dWqF2mVfVD0MhGQTT0Ii/8JASEREvhAbG4s6depg8+bNivWZmZkICwtD586dFet///13CCEq/Bwh+6LqYSAkm3gSEvkXBkIiIvKVjz/+GCEhIRg2bJjcN1y8eDGEEPjwww8V2+7fvx9CCKxcubJCbbIvqh4GQrKJJyGRfzEajXj/gzV4/4M1DIRERKSaL7/8ElOnTsWsWbPQpEkTdO/eHSaTCS1btkRISAgyMjIU2y9atAhCCBw7dqxC7bIvqh4GQrKJJyERERFR8DKZTBg7dix69OiB/Px8AMCBAwcghMCnn34KIQTq1auHUaNGKZbGjRujRo0aFf7jJfui6mEgJJt4EhIREREFr5kzZ6JmzZq4fv26vO769esQQiAyMhJCCMydO1exT2FhIWrXro2xY8dWuH32RdXDQEg28SQkIiIiCk6XLl1CSEgIXnnlFcX606dPQwiB9957D0II7Nu3T/H69u3bIYRAfHx8hWtgX1Q9DIRkE09CIv9iMpnw1Z6v8NWer2AymXxdDhERVWLR0dEQQuDw4cOK9QsXLoQQQn5O8PTp04rXO3bsiCeeeMIjNbAvqh4GQrKJJyGRf+Eoo0REpJY333wTQghcu3ZNXpefn4+GDRti9OjR2LJlC4QQOHPmjPz67t27UadOHVy9etUjNbAvqh4GQrKJJyGRf2EgJCIitXzzzTcQQuD7778HAFgsFjzzzDPo2LEjcnJykJKSgtDQUOzYsQMAcO3aNbRo0QIHDx70WA3si6qHgZBs4klI5F8YCImISE3R0dF4+OGHsXz5ckyePBmRkZHQ6XTy6zExMejfvz9WrlyJSZMm4ZdffvFo++yLqoeBkGziSUjkXxgIiYgomLAvqh4GwiDiyj3dPAmJ/AsDIRGR/wgPD0fjxo39dgkPD/f1R1Rh7Iuqh4GwEps2bRqEEPKyZMkSp/flSUjkXxgIiYj8R+PGjRV9LH9bGjdu7OuPqMLYF1UPA2EllZycjLFjx+Knn37CTz/9hFOnTsFsNju9P09CIv/CQEhE5D8q+xVCTwdUd7Avqh4Gwkpq5syZmDx5Mo4cOeJSECzBk5CIiIiIfIV9UfUwEHqZxWJBTEwMoqKiVGtTkiQMGzYMd911l3zbgKvDAPMkJCIiIiJfYV9UPQyEXiJJErZv347WrVtDCIFx48bZ3baoqAhRUVEYOXIkZsyYgf79+yMyMtIjt4WdPn0aXbt2RWhoKM6fP+/0fjwJiYiIiMgWnU6HiIgILFu2DCNGjMD8+fM93gb7ouphIPSSs2fP4tKlS1i/fr3DQGg0GtGvXz906dIFBoMBQPFJ1r59ewwcOFBxu6fJZHK4WCwWm23o9XrcddddmDt3rtP18yQk8i8mkwn7D+zD/gP7YDKZfF0OEREFqZycHHTp0gVLly4FAPz6668QQuDbb7/1aDvsi6qHgdDLDh8+7DAQRkZGQgiB2NhYxfq9e/dCCIHo6Gh5XXkP7I4aNcpuHf/6178wefJkp+vmSUjkXzioDBER+ZokSejfvz86duwoX4jIy8uDEAKvv/66R9tiX1Q9DIRe5igQGgwGhIWFoWbNmlYDvxiNRlSvXh2NGze2e+XPFc8//zzWrFnj9PY8CYn8CwMhERH52qpVqyCEwJEjR+R1aWlpEEJg6tSpHm2LfVH1MBB6maNAGBcXByEEOnfubHPf8PBwCCEQHx/vUpsnT57EypUrkZ+fDwD4888/0blzZxQUFDh9DJ6ERP6FgZCIiHwpMzMTYWFhVv3W33//HUIIjz9HyL6oehgIvcxRIFy3bh2EEBg6dKjNfYcMGQIhBD766COX2ty3bx+aNGmCFi1a4I033sDbb7+NzMxMh/sYDAbk5ubKS0JCAk9CIj/CQEhERL60ePFiCCHw4YcfKtbv378fQgisXLnSo+0xEKqHgdDLHAXCkhNrzJgxNvcdPXo0hBBYsmSJl6sEIiIibD6XyJOQyD8wEBIRkS+1bNkSISEhyMjIUKxftGgRhBA4duyYR9tjIFQPA6GXOQqEK1ascBgIx4wZAyEEFi9e7OUqeYWQyN8xEBIRka9cvXoVQgjUq1cPo0aNUiyNGzdGjRo1PP5/EwOhehgIvcxRIIyJiYEQAsOGDbO577Bhw9y6ZdQTeBIS+RcGQiIi8pVdu3ZBCGE1hVlhYSFq166NsWPHerxN9kXVw0DoZY4CYXx8PIQQ6Natm819u3bt6tagMp7Ak5DIv0iSBKPRCKPRCEmSfF0OEREFkTVr1kAIgX379inWb9++3Wt9VfZF1cNA6GWOAqHZbEaDBg1Qp04dqw6e2WxGrVq10KBBA49MO+EqnoREREREBADLli2DEAKnT59WrO/YsSOeeOIJr7TJvqh6GAi9rLyJ6RcsWAAhBI4ePapYHxsbCyEEFixYoEKV1ngSEhEREREAbNmyBUIInDlzRl63e/du1KlTB1evXvVKm+yLqoeB0MtKnhMcMWKEzdf1ej06dOiAnj17oqioCEDx/didOnVChw4doNfr1SxXxpPQdeb0dOSvWgXjhQu+LoUqIbPZhNhDsYg9FAuz2eTrcoiIKIikpKQgNDQUO3bsAABcu3YNLVq0wMGDB73WJvui6mEg9JLLly9jxYoVaNasGYQQqFatGiIiIhAbG2u1bUFBAebOnYtBgwZh+vTpGDhwIGbPnu3SRPKexpPQdekPP4xEIZAoBJ/xIo/joDJERORLMTEx6N+/P1auXIlJkybhl19+8Wp77Iuqh4GQbOJJ6LqSMMhASN7AQEhERMGEfVH1MBCSTTwJXcdASN7EQEhERMGEfVH1MBCSTTwJXacIhD4YGZYqNwZCIiIKJuyLqoeBkGziSeg6BkLyJgZCIiIKJuyLqoeBkGziSeg6BkLyJgZCIiIKJuyLqoeBkGziSeg6RSA0m31dDlUyDIRERBRM2BdVDwMh2cST0HUMhORNkiRBr9dBr9dx0CIiIqr02BdVDwMh2cST0HUMhOSutLQ0+d/Xrl3jFUAiogAnSRIsGRkwnjmDwr17UbBuHQr37vV1WQGFfVH1MBCSTTwJXacIhCaTr8uhAPHOO+9Aq9UiJycHQPGtoa+99hquX7/u48qIiMgWyWKBOSUFRSdPQr9rFwreew+5c+cia8wYpPfpg5QWLZBYrZqiX1Cy6LZu9XX5AYN9UfUwEJJNPAldx0BI7nj88cfx/fffK9adP38ejz32mGKd2WzC4aPf4vDRb2E28+eLiMgbJLMZ5uvXUfTDD9Dv2IH8lSuRM2sWsp56Cuk9eyLljjuQWLWqzbDnzJLaujUHnnMS+6LqYSAkm3gSuo6BkNyxYsUKq3WnTp1C7dq1Fes4qAwRlZD0ehjPn0fhnj0o+Ogj6L/4AkXHjsH055+Q9Hpfl+f3JL0exnPnUPjVV8hfvhzZU6Ygo18/pNx5JxJDQtwOeyVLUt26SL3vPmQMGIDs555DbkQEUtu2lV/nraPOYV9UPQyEZJM7J6EkSbAUFHixKv+mCITssJOTZs+ejczMTPlrnU6HAQMG4IEHHlBsx0BIFDwkSYI5PR1F8fHQffYZ8t58E1nPPov0Xr2Q3Lhx+YGkTh2k3HMPsidMgDk93ddvx2+Yr19Hep8+FQp7yfXrI7VtW2QMGoTsF15A3ptvQrdhAwz//S+MFy7Akpdns239zp3yMdL79FH5nfsf+RnLc+dg+OYb6LZuhX77dpiuXZO3YSBUDwMh2eTOSZjxyCNIDA2F/ssvvViZ/2IgJHdcvnwZ9957Lx5//HE88cQTuOWWW3DTTTdh//79iu0YCIkqF8lkgunKFRgOHULBBx8gd/ZsZA4fjrT27ZFUp06Fr1KVLGndu0MyGHz9dn3OkpmJ1Pvucxyka9dGart2yBwyBNlTpyLv7beh27wZhsOHYbp0qUJXXyWLBSn33CO3VfTTTx58d/5BkiRYcnJg+u03GI4ehX77duSvWoXc+fORPWECMh59FGnh4cV/1KhSxe73IaVpU2Q98wySoqMZCFXCQEg2uRoIjWfPKk7mYMRASO7KysrCihUrMHnyZERGRuLixYtW2zAQEgU+S14essaOLR50xEGH2OEVqgYNkNa1K7Kefhq5r7+OgnXrkPf228h56SVkjhyJ9F69ioNHaKi8T9bYsUE9XY2loABpXbve+AwbNULWM88gNyICuk2bUHT8OMxpaV7/jAo++ECuIXPUKK+25WmWnBwYz5+H4b//hW7jxuKfuenTkfnkk0jr1g0pzZopfuY8sfwmBAOhSoKz507lcjUQFv3wAwNh6UBYVOTrcihAnThxArGxsVbrGQiJAl/21Knld4RDQpDSvDnS//EPZL/wAvLfeQf6L76A8X//g8WFjnHRyZNIql5dPm7ekiVefGf+SyoqQsaAATfCYMOGMP3xh29q0euR3KBBcS1aLUyXL/ukDleYExOR8eij5f7c/k8IfOlM0NNqkXzrrUht1w4ZjzyCrGefRe6cOciPjkbuggVI79tX/rllIFRPcPbcqVwMhK5jICR3dO7cGR9++CEkScKmTZsQEhKCdu3aYc6cOYrtGAiJAltRfDwSNZri/yeqVEFqmzbIHDoUObNmoeD991F48CBMf/zh0TtM9P/5z43/mzQa6Hfu9NixA4FksSDrqadu3BJaty6MZ874tKa8hQvlenKmT/dpLeUp3L0byTffjEQhsEgIPCIEbhECTf7+uuR97BICT4WGIqF1a1zo1QvP3HUX6oaG4sycOdBt2oTC2FgYf/kF5tRUp+ZploqKUHTiBBIXLmQgVElw9typXAyErmMgJHe89dZbAIpvG61fvz4WLFgAAHj33XcV2zEQEgUuyWRCWvv28v8R+cuXq9Z23ptv3ghENWvC+L//VfiYluxsFP30U/GAN2+8gax//hNZzz6LouPHPVCxZ0iShOwXX7zxf3O1ajB8952vy4IlI0O+ApZUowYspQYV8xdSYSFypk2TP7ulQuDzevWQNXYskv71L7S//Xbc1agRio4fh+nqVYwfNw7Lly/HuXPn0KRJE1SpUgWvvfZahevgoDLqCc6eO5WLgdB1ikDIB/jJSevXrwcAPPfcc7j99tuh/3vQgpUrVyq2kyQJubm5yM3NDepngYgCUf7KlfL/D6lt26o6NZEkScgaPfrGgB233w5zcnK5+1lycoonXo+JQd7Chcj65z+R1q2bfMXI3pL55JMw/f67Cu/MsbzISMVtuIV79vi6JFnpoJq3aJGvy1EwnjuH1AceUHxPn2naFId375a30ev1SElJkb8+d+4cunfvjoceeghvvPEGrly54pFaGAjVE5w9dyoXA6HrGAjJHfPnz8f999+PWrVq4ejRozAajfj888/RsGFDX5dGRB5gvn4dSbVqyf8/+OIqmqTXI61LF7mGtC5dIBUWwpKbWxz6tm0rntpi7Fikde9+4zk3d5cqVZAzfbrPprwoWL1aUY9u0yaf1GGP6c8/kajVys80SoWFvi4JkiShYO1aJFarpriqWrBmDQ4ePIg6depg8+bNNvc9f/485s6dC4vF4tGaGAjVE5w9dyqXy4HwxAkGwkoUCKdMmYJmzZrhyJEjvi4lKPzyyy9IS0sDACQnJ+PIkSP87IkqyHjuHDJHjkRSvXrI9cDta+7KHD5c/r8he9Ikn9VhTk5Gyu2337h9tFRIdWVJbtwY6b17I/v555G3dGnxgDe//IKCdeuQ3LChYtukOnWQt3hxhaZrcMSSmYmiEyeg+/RT5M6bh8xhw6ymlsiPjvZK2xWVOWKEXGPBRx/5rA7JYoHp8mVkPvGE4nNLvf9+GM+elbf7+OOPERISgmHDhin6hpmZmZg0aZLHwyDAQKim4Oy5U7kYCF2nCIR+8Nc+d/3+++8QQsgLqeOnn37CF198gXPnztl83Ww2I+5YHOKOxcHsxEP5RMHKeO4cMkeNujGAS8mVuR9+UL2Wwn37bgSpBg18/ryY8cwZJNWsWX7ou+224tD33HPIW7KkOPT9/DMsBQUOj2/Jy0NuRASSatSwOl7Oyy/DcPiwy7fLSkVFMF64AP2uXchbuhTZEyYgvUePcm9dTRQCufPnV+Tj8qqi+Pgb4atlS0heCFQlLAUFMJ49C/2uXchfsQI506YhY+BApLZsicSbbrL63LJffFER4r/88ktMnToVs2bNQpMmTdC9e3eY/v4+TpgwAdevX/dK3QyE6mFvj2xiIHRdZQmEx48fZyBUUWZmJh588EFoNBpoNBpotVoMGTIEeXl5iu04qAyRY0UnT9oMgiVLep8+qj5/a9HpkNK8ud/dtli4fz+SGzZE8q23Ir1XL2RPmIC8t9+GfscOp0KfM8xJScieNEm+LVJx1bBePWT985/Q79gBS34+gOLbFc3JyTAcOYKCDz5AzsyZyHjsMaTcfTcSQ0Jcu4p5001Ibd0a+cuW+f3z1um9esl1F371ldvHkSQJ5sREGOLioNu4EbkLFiBrzJji23/LXLV1+IeA+vUVdZhMJowdOxY9evRA/t/fqwMHDkAIgR07duDgwYNYvHhxhT8HexgI1cPeHtnEQOi6yhIIv//+ewZCFY0fPx7//Oc/cerUKeTm5iI1NRWffPIJZsyYodiOgZDImiUvDwXr1iGtQwfrzu0ttyA/Kqp4EviSTvfXX6tWW+78+T4Lo/7CeP588a2IVarYDiGhoUht2xZJdeq4fuvqbbchvW/f4rkaV6xA4b59xdN2BNAdFIV79tz4GXnwQYfbSno9jL/+isI9e5C/ahVyZsxAxmOPIbV1a8V8k64sSTVqIPX++5E5ZAhy582DOTFR0ebMmTNRs2ZNxRXA69evQwiBxYsX45FHHkF2drZXPhuAgVBN7O2RTQyErlMEQi89L6GG7777joFQRS+++KLN9e+8847iawZComKSJKHop5+QPXGizdsfk2+5BfnLlslXuvTbtt24Na9dO6/emgcA5pQU6L/8EolVqxa3W7UqjBcueLVNf2fJyoJu69biZzpr13YtsLRrh8xRo5C7YAF0W7ei6ORJWMrcQRGoJIsFqa1aye+36Icfiq/2JSSgcM8e5C1ahMzhw4uvlNq58l1ucL71VqT36IGssWORFxkJ3aZNKDp2DObkZId/pLh06RJCQkLwyiuvKNafPn1aDoT9+vXz6ufDQKge9vYquby8PKxZswZLly7F1y78ZZSB0HWVJRAePXqUgVBFH9kZTGDWrFmKrxkIKdhZcnNRsHatYj6/0ktax44o+PBDq1seJYtFcQVR99lnHqlHMplgPH8eus8+Q+6cOcgYMADJjRpZ1ZX77397pL3KQjIYUHjgALKnTEFy48ZI1GiQcscdyBgwADkvvYSCNWtgOHQI5r/+8np49wcF69crrnom16/vWugLDUXqvfciY9Ag5EyfjvyVK1G4ezeM587BotO5XVd0dDSEEDh8+LBi/cK/J4t/++23MXHixAq+e8cYCNXD3l4ldvjwYdx9993YunWry/syELqusgTCw4cPMxCqaObMmfj555/lry9duoTp06dj9OjRiu0YCCkYSZKEohMnkP3cc1YDlSQKgaTatZE9eTKKTp1yeJzC2Fh5n5Q774RUVORSHZbcXBji4lCwejWyn38eaR07Kofnt7OktmwZ0P8fqCGQbvH0BslgKP85v2rVkNaxI7KeeQa5r78O3YYNMHz3HczXr3stNL/55psQQuDatWvyuvz8fDRs2BCjR4/GBx98gF69enml7RIMhOphb6+SOnHiBKpVq4av3HxImYHQdaXff0X+KudrBw8eZCCsoJtvvhnDhw/H+++/jz/++MPhtgkJCbj77rtRt25dhIaGQqvVok2bNopJfwEGQgou5rQ05C9fjtTWrW1fDezcGQXr18uDkjgj/eGH5f0L1qyxuY0kSTBduVI8omVkJDKHDlUMDFPuLY716iG9b1/kvPIKdJ9+6vNRRSkwKK4SNmqEjEceQe6cOdDHxMD4668uj8zqCd988w2EEPj+++8BABaLBc888ww6duyInJwc7N+/H0IIDB48GEuWLMGaNWvw7bfferQGBkL1sLdXCVksFrRu3RqDBg1y+xgMhK6rLIFw9+7dDIQVpNFoMHbsWHzzzTc4c+ZMudvr9Xps374dUVFR2LVrlzycd2kMhBQMjP/7HzJHjrzx/F3Zq4FTpsD4v/+5deyiH3+80elu2FAOk+akJOg+/RRZTz3l/O16Gg1S7r4bmcOHI2/RIhTu2QNzQkJQDhxDnmFOSIC5zB8CfS06OhoPP/wwli9fjsmTJyMyMhK6v/s3kiRh4sSJqFu3rqLPMMmDc20yEKqHvT0vs1gsiImJQVRUlGptlowSOXjwYDz//PO477778Mgjj+DKlStOH4OB0HWVJRD+5z//YSCsoHr16tkMdRUhSRIyMjOQkZnBTidVOkWnTiHz8cdthq/0nj2h27DBI9MhlJ4kPqNfP6S2a1f+Vb8aNZDWtSuyX3gBBWvXouj4cZeuTBIFA0mScO7cOTRr1sxjx2QgVA97e14iSRK2b9+O1q1bQwiBcePG2d22qKgIUVFRGDlyJGbMmIH+/fsjMjLS7asAq1atghACp/5+psJoNKJfv37o2LGj0x1JBkLXKQKhBzouvov7syQAACAASURBVLJlyxYGwgpq3769r0sgCgjGCxeQMXiwVQhLvuUW5M6eDdNvv3m0PdPFiw7ntUuqUwcZjz6K3Pnzof/8c5guXgz6Z9yInCVJEoYPH+6x4zEQqoe9PS85e/YsLl26hPXr1zsMhCVhrUuXLjAYDAAAnU6H9u3bY+DAgTCX+o/IZDI5XCx/P1j89ttvIywsTNFOyW2Aly9fdqp+fw2EJ06cQFxcnF9eIaksgfCTTz5hIKyg1q1b8z8wonJYMjORfPPNyiDYuDEKVq/26lyu2VOnKp9H7NgRuf/+NwxxcZB4OzaRS44cOYJ27dph3bp1GDt2LPbu3euxYzMQqoe9PS8rGbHRXiCMjIyEEAKxsbGK9Xv37oUQAtHR0fK60p10W8uoUaMAAJs2bULVqlUVoens2bMQQuDHH390qm6XA+Hx414PhCdPnpTfa1xcnFfaqIjKEgjXrl3LQFhBGo0GVapUQdeuXfH6668jLi5O8ccdd5jNZvwQfwI/xJ+o8LGI/EHunDnKIPjee14NgiUkoxEFH30E3datMKeleb09osrs8OHDaNSoEe655x7s2LHDo8dmIFQPe3te5igQGgwGhIWFoWbNmlYdPKPRiOrVq6Nx48bylT9n/fXXX9Bqtbh06ZK8Lj4+HlqtFhkZGU4dwx8DYZ8+feSQ0q5dO6+0URGKQBjAz5esXLmSgbCCNBqNvGi1Wmi1WtSpUweDBw/G6tWr8Zud2+BiYmLsHpODylBlYk5ORlL16sW/M2+6Cea//vJ1SUTkZxgI1cPenpc5CoRxcXEQQqBz58429w0PD4cQAvHx8S63O2LECPy71GS4ixYtcvgcY1n+GAh79+7NQKiCpUuXMhBWUNu2bfHzzz9j+fLlGDRoEGrXrm0VEJs2bYrnnnsO27ZtQ9rfVymmTZtm95gMhFSZ5EybJv++zJkxw9flELksLTwcyY0b++2SFh7u64+owhgI1cPenpc5CoTr1q2DEAJDhw61ue+QIUMghMBHH33kcrs5OTl49tlnMWfOHCxatAhTpkxBgYPbGA0GA3Jzc+UlISHBrwOhPw7aUVkC4cKFCxkIK+iee+5RfG02m3Hs2DEsXLgQvXr1QmhoqFVAbNCgAbRard1jMhCSP5MkCebUVBTFx0P/+efIf+cd5P773zDZGN3adPWqPK1EUs2afjfUPpEzkhs3dnp+Sl8syY0b+/ojqjAGQvWwt+dljgLh4sWLIYTAmDFjbO47evRoCCGwZMkSL1cJRERE2HwukYHQeYpAmJfn63Lc9tprrzEQVlCNGjUcDnyk0+lw4MABvPrqq+jQoQNCQkLkcGgPAyH5G4tOB/327cgcOhRJNWva7pTecguMZebizBo/Xn49d/58H1VPVDGV/QpheeNWuLK4i4FQPezteZmjQLhixQqHgXDMmDEQQmDx4sVerpJXCD3BlUCYkZGBuLg4l58PVcOrr76q+EXujzX6O41G49JIa1lZWYiOjkb16tXtbsNASP5AMhpR+NVXyBo92m4ItJrKISwMRceOAQBMv/2GRK1WXm/JyvLxOyIif8VAqB4GQi9zFAhjYmIghMCwYcNs7jts2DC3bxmtKJefITx2zOuBsFevXoETCB18biaTCU2aNLEaRdZfvPTSS4pAWDIdCjmvadOmqF+/Pnbu3OnSfi+88ILd1xgIyRtyX3sNyQ0aIOellyDp9Xa3M/32G3JefRXJt9xi90pgxiOPIHvyZOS9/TZ0W7cirWvXG6GwRg0UxsYic+RIeV3eW2+p+E6JKNAwEKon4AOh2WxGbm4uCm0MVf3jjz9i8uTJGDJkCN544w3k+eA2PkeBMD4+HkIIdOvWzea+Xbt2dXtQmYoKxECYmJiI5cuX4/fff/dK++VxNhB+//33fn1L5gsvvKCoLz+An4f0pUuXLmHt2rXYvXu30/sc+/sqii0MhORpuq1bFb+3Uu+7D8aff5ZfN1+/joIPPkB6z562r/zVq4fsiRNh+OYbm5O3W/Lzkf7wwzf2+fu5wZIAGcjPWhMFu+TkZHz33XdebYOBUD3+1xt10ZIlS6DVavHuu+8q1u/duxdVq1aFVquVn81p27at6lc7HAVCs9mMBg0aoE6dOlbPG5nNZtSqVQsNGjTwyS17/jjKaHmBsE2bNhBCoEaNGl5pvzyVJRA+++yzivqyeEuXX7BYLEhJSUFKSgpv46UKM127hqS6da2DXmgosidORGq7drZvAa1aFZkjRqBw3z6nJnGXDAZkDh1qdZz8lStVeJdE5A3Hjh3D+PHjUVRUhLS0NEyYMAFhYWGK6c48gYFQPf7XG3VRnz59UKVKFav59e677z5oNBqMHj0aq1atwv333w+tVov3339f1frKm5h+wYIFEELg6NGjivWxsbEQQmDBggUqVGnN3wNhhw4drF73dchSBMKcHLvbHT9+3Oe1OlIymFHJksIRAIkqFcliQXqfPvLvq4zHHkNqmzYOnwNMbd0a+StWuDWRu2QyIWvcOPlYKbffrsoE9ETkHRMmTMDy5ctx7tw5NGnSBFWqVMFrr73m8XYYCNXjf71RF91+++1o0qSJYt358+eh0WgU8/tdu3YNVapUQffu3VWtr+Q5wREjRth8Xa/Xo0OHDujZsyeKiooAAIWFhejUqRM6dOgAvYNnOryJgdB1zgbCEydO+LxWR0qeXS1ZEhISfF0SEXlQflTUjXDWtCks2dmQCguR8/LLit9jaeHhyF2wAEU//eRw1FxnSBYL8t58E2ldu8JQ5g+gRBRYzp07h+7du+Ohhx7CG2+8gSs2ppfxBAZC9fhfb9RF1apVs5rYfc2aNdBoNHjnnXcU6++9917ceuutqtR1+fJlrFixAs2aNYMQAtWqVUNERARiY2Otti0oKMDcuXMxaNAgTJ8+HQMHDsTs2bMdzhvobQyErnM2EJY8O+qvgXDQoEGK+i5fvuzrkgjFt5GfOn0Sp06fhNnG81pEztDv3HnjWT6NBoYjRxSvF504Ad1nn8GclOSjConI350/fx5z5871+uMLDITq8b/eqItq1qyJe++9V7HuqaeeglarxY8//qhY36VLF1SrVk3N8gKWPw4q8+CDDwZOIMzOtrvdTz/95PNaHXn44YcV9V28eNHXJRE4qAxVjOnqVWQOGaL4PZU7e7avyyKiAJOZmYlJkyap8iw7A6F6/K836qI2bdqgSpUqSPr7r5l6vR5hYWGoW7eu1Q9r8+bNcfvtt/uizIDj74Ew3MaEq74OWc4GwpMnT/q8Vke6d++uqO/s2bO+LonAQEjuMaemIjciAkk1aih+R2U89hgkTilDRC6aMGECrl+/rkpbDITq8b/eqIveeOMNaDQadOjQAatXr8YjjzwCrVaL5557TrFdamoqNBoN+vTp46NKAwsDoeucDYSnTp3yea2OtGvXTlHf6dOnfV0SgYGQXGM8fbp4IJebblLOF9ioEfQxMRV+JpCIgs/BgwexePFi1dpjIFSP//VGXaTT6dC1a1d5agmNRoPmzZsjMTFRsd3KlSuh0WiwcOFCH1UaWBgIXacIhA6mavD3QNiyZUtFfb6YB5OsMRBSeSSTCfodO5D+4IPWI4VqtciZNs3h881ERI488sgjyHbwB29PYyBUj//1Rt1gNpvxxRdfYMmSJdi6dSt0Op3VNtHR0Xj55Zf5PJST/DEQ9uzZs1IEwh9//NHntTrStGlTRX1xcXG+LonAQEj2mdPSkLdkCVKaNrWePD4sDDmzZsHkpVEAiSg4JCUloV+/fqq2yUCoHv/rjbro2rVruHbtGidq9jB/D4QdO3a0et3XIcvZQPjDDz/4vFZHGjRooKjv22+/9XVJBAZCUpIkCYa4OGQ9/bTVbaGJQiC1VSsUvP8+LD4crZqIKo+dO3di4sSJqrbJQKge/+uNukij0aBRo0YMhB7m6klo+P57BsLSgTAz0+52/j4xfa1atRT1HThwwNclERgIqZglNxcFa9Yg9f77bU4gnzFwIAoPHIDE/xOJyIM++OAD9OrVS9U2GQjV43+9UReFhYWhS5cuvi6j0vHHQNijR49KEQjj4uJ8XqsjISEhivq+/PJLX5dEACwWCxKuJyDhegL/ABZECnfvRsaAAUi97z4kN2yIxJAQqxCYXL9+8W2hly75ulwiqqT2798PIQQGDx6MJUuWYM2aNV6/g4iBUD3+1xt10YMPPqjaZPPBxB9vGa0sgfDo0aM+r9Ueo9GoqE0IgQ0bNvi6LKKgY8nNRdazz9q8CliypHXvDt3mzZAKC31dLhFVcpIkYeLEiahbt66ijzBp0iSvtclAqB7/6o26YceOHdBoNPj44499XUqlwkDoOkUgzMiwu93hw4d9Xqs9Jd/30kt0dLSvyyIKGpIkoXDPHqQ0a6YcHKZ6daQ0bYq0Dh2QPXUqjGfO+LpUIgpikiTh3LlzaNasmdfaYCBUj3/1Rt20dOlSVKtWDS+//DJOnToFvV7v65ICnr8Hwk6dOlm97uuQ5WwgPHTokM9rtSc5OdkqEEZERPi6LELxaMo//3IGP/9yBmaz2dflkIdJJhN0n32G1DZtlEGwdm3oNmzgvIFE5HckScLw4cO9dnwGQvX4V2/UDVqt1qUlJCTE1yUHBH8MhN27d68UgTA2Ntbntdpz+fJlq0D48ssv+7osAgeVqazMaWnIe/ttm1NGpPfuzekiiMivHDlyBO3atcO6deswduxY7N2712ttMRCqx796o27QaDQuL1Q+fxxUxpeBcM6cObjjjjscjrhZ+v2b09PtbnfgwAG/DYTnz5+3CoTPPvusr8siMBBWNkXx8cj65z9tThmR1rkz9Dt3cqRQIvI7hw8fRqNGjXDPPfdgx44dXm2LgVA9/tUbJb/BQHhDZmamU8d2NhDu27fPbwPhyZMnrQLhE0884euyCAyElYFUWAjdp58irVMn60FiNBpkPPooDN9+y9tDiYjAQKgm/+qNkt/w90DYuXNnq9e9FbLK3kZpj7OBcM+ePX4bCMtOiSGEQN++fX1dFoGBMJCZrlxB7pw5SK5f3yoIJv3f/yFn5kyY/vjD12USEfkVBkL1+FdvlPxGMAZCc3Iy9Nu2wZKXp1h/8eJF1wNhWprd7b766iuPBUKpsNCjt5WVfb5RCIH27dt77PjkPgbCwCJZLCiMjUXmkCFI1GqtgmBqu3bQffwxLDqdr0slIvJLDITqqVSB8PDhw5g3bx6efPJJ9O/fH08++STmzZuHI0eO+Lq0gOOtQLht2za89NJLSE5OdrkmbwfClHvuQaIQyBw1SrG+7HN19jgbCL/88kuPBELjmTNICgtDyj33QPLQyLo7d+60CoTNmzf3yLGpYhgIA4MlJwf5q1bJv08US9WqyHr6aRQdO8bbQomIysFAqJ5KEQivXLmCbt26ySOJlh5ApmRdjx49cIWjtTnNG4EwISFBDhkPP/ywyzV169bNq4HQXv1nzpzxaCDcsWOH4ngWN6/wpTRvLreXHxXl1jHK2rBhg1UgrFWrlkeOTRXDQOj/9F9+iaSaNa2CYHLjxsh7802YU1J8XSIRUcBgIFRPwAfCrKws3HHHHdBoNAgNDcXTTz+Nt956C+vXr8dbb72Fp59+GqGhodBoNGjevDmysrJ8XXJAcDkQxsWVGwgrOrqmO4Ewe+JEpLZtC+Mvv8jrNm3ahBkzZiA1NVWxv736yw60Yo8iEJY5dmmff/654nhFRUXlvvfy2sudM8etY5QVHR1tFQiFEMgrcxstqc9iseDylcu4fOWy239EIO+x5OUhKSxMOW1Enz7Q79gBiQGeiMhlDITqCfhAOGfOHGg0Gjz44INITEy0uU1iYiIefPBBaLVazJ07V+UKA1NlCISlr1omN2oEALh06ZK8zeOPP67Y31798fHxHg2EMTExiuPp3HyGSBEI581z6xhlRUREyHXVr19f/veFCxc8cnyiyip/2bIbQfChh2A8e9bXJRERBTQGQvUEfCBs1aoVqlWrZnW1p6yUlBSEhoaiZcuWKlUW2Lxxy6izgTA9PR0jR47Eyy+/rHjOpnQg7NKli9V+ZY+t27rVqqbPPvvMbg326v/hhx88Ggi3bt2qOJ67v+gUgfC119w6RlkzZsyQ6+rVq5f870OHDnnk+ESBzpKdjaL4eOi/+EK+NVwyGJB8223y9BHGX3/1cZVERIGPgVA9AR8Iq1evjo4dOzq1bXh4OKpXr+7liioHXwbC0aNHy9ts27ZNXu+JQLh582aXA+Hx48ddD4QOnhUqW0NmZqbdbR1RBMLXX3frGGWNGzdOrmvKlCnyvzdu3OiR45P7zGYzfr1wHr9eOA+z2ezrcoKGJEkoOnEC2VOmILlRI+WzgY0awXjuHArWr5fXZQ4d6uuSiYgqBQZC9QR8IAwLC0OLFi2c2vbuu+9GWFiYlyuqHHx5y2jpbV5++WV5fdeuXRWB0JKfD93HH8N4/rzVfgCg++wzq5o2btzociD8/vvvPRoIP/30U8Xxyru67Ux7uRERbh2jrCFDhsh1vffee/K/Fy9e7JHjk/s4qIy6LDk5yI+ORmrLltajhZZakurVQ0rTpvLXRT/84OvSiYgqBQZC9QR8IOzVqxe0Wi2++eYbh9t988030Gg06N27tzqFBThXTsLjx4/jsYYNVQ2EXbt2Rfbzz8vtSYWFTl0hLDuKZglJkuzWf/ToUY8Gwo8//lhxPHvPvpandHt5Cxe6dYyySt8mWvp9T5o0ySPHJ/cxELrH/Ndf0G3aBEt+vlPbG8+fR/aUKTZHC02qXh3pvXsje9IkpLVvb/V6ep8+Xn43RETBg4FQPQEfCDdv3gyNRoO6devi3Xffhb7MfGw6nQ6rVq1CWFgYtFottmzZ4qNKA4srJ6EQAp3KdIxssRUI8/Ly8P777+PUqVMwXb6Mwt27UcVOIOzSpYsiEJZuz3junFOBsGwYK+EoEB4+fNj1QOhgnsX3339fcbxr166V8wmX317eokVuHaOsNm3aQAiB0NBQZGdnyzXyDym+x0DoOsloREqLFkgUAmnt29udBF4ym6HftQvpDz9s8ypgeu/e0G3YAEup0XYtublIf/BBxXaFBw6o9daIiCo9BkL1BHwgBICnn35annOwRo0aaNWqFXr16oVWrVqhRo0a8tyEY8aM8XWpqjAYDGjQoIEidAgh0OjvkTadUdFAaPj22+JO1ObN8nYHDx60ClYTJkyAEALVhEBijRpIFALTvBgIP/zwQ9uB0GKxGwgPHTrk0UC4YsUKxfH+/PPPcj/j8trL89AtnU2aNIEQAg0bNgQA3HLLLYqvyXcYCF2n37lTcZ5kPfWUYqAqS2Ym8t95Byl33GF9NbBmTWRPnepwgBiLToeMQYOKQ+PDD3OyeSIiD2IgVE+lCIQAsHr1ajRt2lQxKX3J0qxZM7z33nu+LlE1W7ZswYYNG/Dnn3/iypUruHLlCpYtW4Zp06Y5fYyKBkJb4cpWIJSvQJXZp6KBUJIkm4Fw3bp1tgOh2Ww3EMbGxno0EL799tuK4128eLHcz7i89vKWLHHrGKVJkoSqVatCCIG2bdsCUN5CmpOTU+E2yH0MhK7LePRRq99HmU8+icKvvkL2888jqXp1q9dTWrRAfnQ0LE7+vEuSBOOFC5AMBi+/GyKi4MJAqJ5KEwhL/Prrr9i1axe2bNmCXbt24dcgHP47ISHBat3gwYMRFxfn9DHUDoR9XAyE3bp1cysQrl271nYgNJnsBsKvv/7a9UCYlGR3u8jISMXxzp07V+5nXF57+VFRbh2jtIyMDLmmAQMGAAAmTZokrzt27FiF2yD3MRC6xvzXX0jUaouv9tWta/f3U8mS8cgjKNy3D5LF4uvSiYgIDIRqCvhA2LdvXwwcOBBFRUW+LsUmi8WCmJgYRHmgw+6urKwsNG/e3KXbmSprICz7/F4JyWi0Gwj37dvn0UA4b948xfFOnz5d7mdcXnv5y5a5dYzSzpX6DMeNGwdA+XmtXr26wm2Q+xgIXZMXGXnjCnpkJHQff4zk+vWVt4XWro2cl16Cyc2r9ERE5D0MhOoJ+EBYrVo1hIeH+7oMK5IkYfv27WjdurWig21LUVERoqKiMHLkSMyYMQP9+/dHZGSkxzp9H330kSJYOSPgAuH584pjWywW6LZssapjzZo1tgNhUZHdQLhnzx6PBsJ//etfiuMdP3683M+4vPbyly936xillX5Wcs6cOQCA+Ph4q5BIvmGxWPD7pd/x+6XfYeFVLIcK9+5FUq1axeeHVgvzX38BAKTCQug++QTZkyej4L33FIPEEBGRf2EgVE/AB8J77rkH9913n6/LsHL27FlcunQJ69evd9iZNhqN6NevH7p06QLD38+g6HQ6tG/fHgMHDlRMQG0ymRwu9jqJDz30kMuhw9VA2FmFQNi5c+cKB8LSc+spAqHBYDcQ7tq1y/VA6GAqialTpyqO9+2335b7GZfXnicC4ZYtW+SaVq5cCQAoLCxElSpVIITAvffeW+E2iLzJkp2N3Hnz5FtFE4VA1ujRvi6LiIjcwEConoAPhPPmzUNISIjbA3N4W8mUBfYCYcnzZLGxsYr1e/fuhRAC0dHR8rrSIcLWMmrUKKvjJycnu3y7KOCdQGhrcBZvBUKz2WzzllF3AuGXX37p0UD43HPPKY739ddfl/sZl9eeJwJhVFSUXNO2bdvk9aU/99TU1Aq3Q+Rp5oQE5M6bh6SwMMV5kTlyJKQyUxEREVFgYCBUT8AHQp1Oh/DwcLRq1QpnzpzxdTlWHAVCg8GAsLAw1KxZU3ElECi+cli9enU0bty4QreHrVq1CjNnznR5P38JhPOmTEH2lCnIf+cd1wOhjSuEq1evth0ICwvtBsL//Oc/Hg2EY8aMURxv586d5X7G5bXniUA4c+ZMuaYjR47I6+fMmSOv//zzzyvcDrmHt4wqSZKEomPHkDlyJBJDQpS/d6pWRW5EBAeIISIKYAyE6gn4QDh+/Hg89dRTqFKlCrRaLR544AGMHDkS48ePt7lMmDBB1focBcK4uLjiMNW5s819w8PDIYRAfHy82+137doVP/74o8v7OXsSGs+exVgh8I9yAmH+smX4rWNH3PN3sHhYCGQOGYIu5QTC2HvvlddNaNVKXt+9e3dlIPz1V0XIMplMNgPhu+++azsQ6vV2A+H27dtdD4TXr9vdbsSIEYrjxcTElPv9KK+9/BUr3DpGac8884xcU+kr7gcOHJDXP/fccxVuh9zDQWWKSQYDdJs2IS083Pr3TdWqyBo/HqYrV3xdJhERVRADoXoCPhCWTEhva/5BW4tWq1W1PkeBsGROvKFDh9rcd8iQIRBC4KOPPnKr7StXruDOO+90aluDwYDc3Fx5SUhIKPckLD0Qy0kHgdB07Zr879N/B4uy4c9eICy9btltt1U4EK5atcpmuLPodHYD4WeffebRQFjyfS1ZNmzY4NT3yFF7ngiEDz30kFxT6e+7Xq9H9erVIYRAo0aNeHXKR4I9EJoTE5EbEYHkhg2tfsck33ILchcscDiYExERBRYGQvUEfCDcsGEDPv30U5cWNTkKhIsXL4YQAmPGjLG57+jRoyGEwBIPTDpenoiICJvPJTo6CU1Xr9oNgaWXouPHrcKeO4FwuQuB0Gg0uhYICwrsBsLSg614IhAOGDBAcby1a9c6+22y215+qWdN3VUyIm716tWtnjkdPHiwXO+JEycq3Ba5LhgDoSRJMMTFIXPUKCRWqWL1uyWtfXvoPv2Uk8ITEVVCDITqCfhA6O8cBcIVK1Y4DIQlz5otXrzYy1W6d4XQ2UD4QseO/h8I8/PtBsKNGze6HggTEuxu17t3b8Xxlrv5/J+nA2G9evUghLB5VfmTTz6R633ppZcq3Ba5LpgCoWSxQPfJJ0ht29b6d0pICDKHD4chLs7lwbKIiChwMBCqJ+ADYfPmzdGmTRu/nZjeUSCMiYmBEALDhg2zue+wYcMqdMtoRThzEjobCMNthL2yX/d1MRD26NHDrUC4cuVK24EwL89uINywYYNHA2HXrl0Vx4uMjHT222K3vYoOKqPX6xVhu6zs7GzcdNNNEEKgYcOGMJlMFWqPXBdMgTB/1Srr20IbNEDua6/JcwoSEVHlxkConoAPhDVq1ECnTp18XYZdjgJhyaTf3bp1s7lvSXCoyKAy7vJkIOzog0BYVFRkMxBGR0e7HAhL5pJ0KRA66LS2b99ecTx3RoEt215+VJRbxyhx4cIFuZ7RduZtGzp0qLzNf//73wq1R64LpkCYMXjwjdtCu3SBbssW3hZKRBRkGAjVE/CB8IEHHsDdd9/t6zLschQIzWYzGjRogDp16ljd+mQ2m1GrVi00aNDAJ4N4+GUgvPVW+4GwVKCRA+Hmzc4Hwtxcu4Hwww8/dDkQmq5etbtdybN6JcukSZOc/bbYbS+vgs+Z7t+/X65n/vz5NrcpPf3G+PHjK9QeuS6YAmHK7bcjUQgk2fjdSEREwYGBUD0BHwiXLl0KrVbrk6tozihvYvoFCxZACIGjR48q1pfM2bdgwQIVqrQW6IHQYDDYDIQlz21aBcKcHLuBcO3ata4Hwj//tLvdXXfdpTievSty5VEEwkWL3DpGiTVr1sj12LtFWa/Xo3bt2hBCoE6dOigsLKxQm+Qas9mMXy+cx68XzlvNW1qZWDIy5J/r9F69fF0OERH5CAOhegI+EJrNZjz22GNo1KgRdu3a5Xd/TS55TnDEiBE2X9fr9ejQoQN69uwpPwdZWFiITp06oUOHDtDr9WqWK/PHQLjCQSD8ocxIoIWFha4Fwuxsu4GwdFhyOhD+/rvd7Ro3bqw43mOPPebst8Vue7kREW4do8Srr74q13Po0CG7240bN07e7j//+U+F2iSyxXDokPxzncMBjIiIghYDoXoCPhD27dsXffr0kSem/7//+z907twZffv2tbk89NBDqtR1+fJlrFixAs2aNYMQAtWq9aLDYQAAIABJREFUVUNERARiY2Otti0oKMDcuXMxaNAgTJ8+HQMHDsTs2bNRUFCgSq22OHMSWjIzPRYIH3IiEM4qtb5sILyr1GtCCOh0Oug2bVJsc+3aNfu3jGZlKbb94osvcPnyZQDWk9nb+6OD4orlr7/a/dzq1q2rOF7v3r3d+h4pAuG8eW4do8Tw4cPlev744w+725Vcua5IkCVyJH/ZMvnnWvfJJ74uh4iIfISBUD0BHwidnZDeVxPTBypnTkJJr5c7bn+pHAjLTjtxZ5lAmJ+fD93GjYpt7r77bvujjJYJt0II1KtXDwaDwWofe89vKQLh2bO2PzNJglarVRyvQ4cObn2PSreX4+bANCXCw8MhhIBWq3X4fJrZbEaTJk0ghEBISAhSUlIq1C45z2Kx4PKVy7h85bJPnisuzZySgsxRo5DSvDkMHh5gKGvMmBvn0f/+59FjExFR4GAgVE/AB8IjR464vFD5nAqEhYVOBcJOTgTCh50IhK+WWt+tWzeHgTA3Nxe6Tz+1OqbdeQhLPbdUuv0TJ05Y3Waan59v8/NQBEI7HVmdTqc4lvg7qLpDEQinT3frGCXq168PIQSaNm1a7rbz58+Xa3d3DkVynb8MKmM8exbJDRrIP3tp4eEOt5fMZhjPnnU4FUtpqfffX3zsqlUh+el0QkRE5H0MhOoJ+EBI3uFqILymciDs2rWr4rXmZUJWdnY2dBs2WB2z7O2fJewFwiNHjiAqKkqxT3p6us3Po/T+RSdP2twmOTnZKhA2bNjQre9R6fayJ0926xgAkJeX59LtqxcvXpS3f+CBB/zuud3Kyh8CoSRJSO/Z0+ocN126pNjOdOUK8pYuRcaAAUiqXVsOeHmLFkFyMIelpNcjMSQEiUIgtW1bb78dIiLyYwyE6mEgJJucCoQGg1OBsLMTgfAfTgTC0reMdunSRfHaHWVCVmZmps1AuHr1apuB0JyebrP92NhYLF26VLFPgp0rHYpA+MMPNrf5/fffrQLhTTfd5FaoUgTCCRNc3r/EqVOn5FqcnU6ie/fu8j6nTp1yu21ynj8EwsI9e2ye43mLFkEym1Gwfj3SytzOXXZJ69QJxgsXbB6/6Kef5O2y7IzMTEREwYGBUD2VKhB+//33eOuttzB16lRMKNNBvnLlCi5evOijygKPU4GwqMipQNjFiUDYz4lAWPoKYefOnR0GwvT0dJduGTWnpdlsf8+ePVi8eLFiH3uDrigC4bFjNrcpHb5KL3l5eS5/j0q3lzVmjMv7l9i6datcx9KlS53ap/TcjP369YPJwVUf8gxfB0Ljzz8jpVkz+Wcuf8UK+d8pLVogrVMnm+d/cqNGyBgwAIla7Y119evDnJpq1UbBRx/dOP7Klaq/RyIi8h8MhOqpFIHw0qVL6Ny5M7RaLbRarc3BY6ZMmQKtVovvvvvOR1UGFqcCodEod94cPUPojUDYqUzns+wto6mpqTYDYdmrfSXMqak229+xYwcWLVqk2OfcuXM2P4/S+xvKzCtZomReyrLLnw7mLbSndHuZdqY1ccbrr78u1/HVV185tU9eXp5i+ozRo0fz1lEv80UgtOTno/Drr5H9/PNIvOmmG1f5unSBJElIK3PrdsmSev/9yFu8GKaLF+Wfi6IffkDKPffI2xSsW2fVXs6sWTfOoW++UeU9EhGRf2IgVE/AB8KUlBTcdttt0Gg06Ny5MxYuXIi7777bKhDGx8dDo9FgxowZPqo0sDgVCE0mpwJhVxUCYdlBZZKTk61GGRVCIDIy0nYgTEmx2f7WrVvxxhtvKPY5aef5QEUg/PZbm9vs3r3bZiCMj493+XtUur2MQYNc3r/EiBEj5Dp+++03p/c7dOgQqlatKu+7b98+t2ug8qkZCC35+ciPikJS3bpW53Nahw4w//UXACB/5UplELz3Xhgc/NGtKD7e4R8xsp5+Wn7d0VyeRERU+TEQqifgA+FLL70EjUaDadOmyX+J7tmzp83pJerUqYNOnTqpXWJAcjUQOrpl1JlA6MygMrNLre/YsaPitbLzEF6/ft1qHkIhBGbPnm07ECYn22z/k08+UVxBE0LgmJ3bQUvvX2hjvklAeXtmvXr1KhSmSreX7uZchgDQpk0bCCFQpUoVl4PGxo0b5ffQqlUrn45+WdmpEQiNv/yC7KlTbwwEU2pJqlMHufPnQyoslLe3ZGYipXlzJFarhrzISEgGg8PjS2azHDKT69eHVGb6jPQ+feT2LHZG8yUiouDAQKiegA+Ed955J2rVqgVDqY6IvUDYrl07NGrUSM3yApZTgdBsdioQOnPLqDPzEJYOhOHh4YrX7i4TCK9duwbd5s1Wx5w2bZrtQJiUZLP9NWvWYM6cOYp9vrFzK5siEH79tc1t1q5dq3gPJf/euHGjS9+f0mE8UZQ/9L89ZrMZ1apVkwOdqyRJQrdu3eT38d5777lVB5XPbDbj51/O4OdfzsBsNnvsuFJhIXSbNyO9Rw/r81ejQdaYMdBv2waLnd8FkskESa93ur3MJ56Qj288fVrxWsktpUm1a1foPRERUeBjIFRPwAfC0NBQtG/fXrHOXiDs0qULQkND1SotoDkVCC0WpwKhM6OM9nExELZv317xWssygfDPP/+EbssWq2NOmDDBpUAYFRWFV155RbGPvat5ikC4Zw8A4OrVq+jbty9eeOEFSJKkGKDm6aeflv+9ZMkSl74/loIC5a16LVu6tH+Jy5cvyzU8/vjjbh3jxIkT8jHq16+P7Oxst45D6jKeP4+cmTORXL++9dXAGjWQ/fzzMP7yi8fbLVi9Wm4nPypK8VpSrVoV+nkmIqLKg4FQPQEfCOvXr48mTZoo1tkLhLfeeituu+02tUoLaE4FQknyWCDs7UQgnFNqfbt27RSv3VsmEF68eNFmIBw1apTtQJiYqNhWI248c/jiiy8q9tmxY4fNz6P0/vpduwAAvXv3lvfbs2cPZs6cKX9deoCbadOmufT9KTtvYnLjxi7tX2L//v1yDXPmzHHrGAAwevRo+TizZs1y+zjkXZbsbBSsXYu0MqP0yn9YuO8+FLz3Hiw5OV6rwXjhgtxexoABN2rLy5PXp/ft67X2iYgoMDAQqifgA+E//vEPaLVa/FLqL9m2AuGRI0eg0WgwbNgwtUsMSM6ehM4EQmcmpu/lYiB84IEHFK/dVyYQnj9/HrqtW62OOXjwYNuB8Pp1xbYh4sYzhxMnTlTss2HDBoefRaIQ0H/xBQAo9luyZAnGjx8vf/3111/L/37iiSdc+v6UrTepbl2X9i8RHR1d7vtyxtWrV+VbT6tWrWp3ag5yn8ViQcL1BCRcT4ClzLN3zjCeO4eksDDrc/Smm5D1zDMwxMWpMlKsJElIvu02+UpkyXOHposX5ZqynnnG63UQEZF/YyBUT8AHwpiYGGg0GnTs2BFJSUkArAPhH3/8gTvvvBNarRZf23m2i5Q8GQg7OhEIH3QxELZu3Vrx2v1lAuHPP/8M3WefWR3zoYcesh0IExIU21b9+/UXX3wR48aNU+zz7rvvOvwsEoWAfts2ANaBcMiQIfLXCQkJ0Gq1EKJ4kBxXmP74Q/k5h4S41Zl/4YUX5HqOHz/u8v6lzZ8/Xz7Wk08+WaFjkbWKDiqTO3++8mpgu3bIX7UK5vR0L1TrWNbYsXIdhiNHAACGw4fldTmvvqp6TURE5F8YCNUT8IEQKB42X6PRICwsDKNGjULTpk2h1Wrx+uuvY+jQoQgNDYVGo8HYsWN9XWrAUDsQ9nQiEM4ttb5ly5aK19qUCYSnTp2CPibG6phdu3a1HQj/+kuxbbW/Xx8/frzidkghBN566y2Hn0WiEND9PUhM2UDYo0cP+euioiJ5Lr+GDRu69P0xnjtn9TmXHv3RWb169ZLrycrKcnn/0vLy8tCwYUP5ePam5yD3OBMIJUlC4cGDyJ40CRmDByP3tddgvn4dAJD+j3/cCGE+no+19JQwua+/Xryu1BX9/BUrfFofERH5HgOheipFIDSZTJg7dy6qVasGjUYjLyWT1IeGhmLOnDkeHZmvsnP2JExwIhCGOxEIezgRCOeVWt+iRQvFa+3LBML4+Hjot22zOmbbtm0V25VcVTNdu6bYts7fr48cORLDhw9X7DN37lyrz6H0iKuJQqBg7VoA1oGwVatWEEKgVq1aAIoHOiodEJ1VdPKk1edsTklxev8SN998M4QQHht9d/Xq1fL7efTRRz1yTCrmTCDM+de/rH4ukm++GeakpBvTPdx6qyq3hjpS+pbntG7dAAD5UVFWV9iJiCh4MRCqp1IEwhLp6enYuHEjZs2ahYkTJ+KVV/6fvbMOj+J44/hcHBJCkFC0SBsoBEtwCA0S3LU4PwoUd7dCKU6hNLh700KLuwcpBG8DFAjFg8SI293t9/dHcsPu3d5lz+/CfJ5nH25nZ955d/c27Pdm5n3HYePGjXQqKUM6Uh9CVUJ6XYLQX4IgrCdBEM7klZcrV05DdPLF15UrV0QF4Zdffimop0pXIn/+XFC3UPbxtm3bCqZ5qqaRqqNMSRG0V41wqAvCIkWKgBCC0qVLAwC6dOlCj//333+S70/65csa11nfiJBRUVG07yZNmujVVqtf6ekoVaqUyaahMj7CF4QZGRnICAtD4uLFiO3cGe/KlNH6/EUSgvdVq9LPse3bW/tUAADvv/oqyydHRygTEhA/bpzNjGAyGAwGw/owQWg5cpUgZJgOfQXhcwsIwtm88tKlSwuO1VIThKGhoaJTRosXLy6oFxsbCwCQP3smqFs8+3jjxo3RsmVLQZtevXppXAflhw+C9onz5gEQCsKFCxfCyckJhBD4+/sDACZOnEiPn9KSzF6M9NOnNa5z+unTktsDWYGWVH2PGjVKr7a62LBhA7UbFBRkMrufEsqEBCQtX470c+doGV8QRvIEntiW9NNPyAgLwxt3d41jqu+mtfkwfDj1Ke3kScT16EH35SwoEYPBYHzyMEFoOZggZIgi9SFUjQwaO2W0vhZB+IpXNpdXXqpUKUH9emqC8PTp06JRRvPnzy+o9/LlSwCagrBM9vGaNWtqBKJpwQuVr0Lx/r2gfcKMGQCEgnDy5MkaQmn9+vW0bPXq1ZLvT+qePRrXOWXnTsntAWDNmjW077XZU1xNQWZmJsqVK0dtX8gOGsKQhjI+HlG1amXdVwcHpB05gpTt2/GubVsqCF+4uAju/RsPD0Q6OmZ996ZNo7bUn4FIQpCmxw8P5oQf9Cnh++8R/fXXdF+ZkmJt9xgMBoNhZZggtBxMEDJEkfoQqkYGdQnCNjkIQhnRvobwhUxGy+bzyotnh61XbYFqgvDQoUNI2blTw6azs7Og3r///gtAM2qnT/bx8uXLIyAgQNCmRo0aGtdBPUpp/LhxyMjIELTr3bs3/fzNN98AAM6fP0/LxowZI/n+JK9dKzoqpA8jR44UjKiakm3btlHbDRs2tPqaNXuBy8hAdGCg6HP0wsVFIAijGzZE8vr1yLx3D5xCAWViIuQvXgjtcRziBgwQ2FEaGTzIVPCnaUcHBeFd9rpgQ1OoMBgMBiN3wQSh5WCCkCGK1IfwmQRB2CsHQehEtKedeObgQMsW88q9vb0F9ZupCcI9e/YgZccOUZv8TRUJM/PBA0FdVV7DYsWKoXbt2oI2ZcqU0bgO8v/+E7T/MGgQbt68KWjXqFEj+nn48OEAgMjISFqmTxCWxHnzNK5zvJ7TPvkjn9EmTj0gl8tRoUIFg6bDfopwHIf0M2cQ3aSJ1ufolaMjLnTtjCvz5iLt/n3pttPTqciMERndthaCfIQeHniTJw8iCcH7ihWt7RqDwWAwbAAmCC0HE4QMUaQ+hE8lCMLeavuOavuuOgThv05OtGwVrzx/dsRE/igkX3xt374dKdu25SgIVSNjmXfuCOqq1iS6u7ujevXqgjb58uXTuA6Z//4raB/bubMg8TwhwoA2M2fOBJD1Uuzu7g5CCL744gvJ94cfgEO1xbRsqccdBooWLUrFtTkICQmh51unTh02SqhGxq1biOvXDzFt2+Jd+fLC++nqitS9exFVvz7eV66M+LFjkX75MjgDEtIDWVFw0y9fhjI52cRnYRyxXbtqfI+jmza1tlsMBoPBsAGYILQcTBAyRNFXED5Xe6njb33V9l3U9t0IwddaBOFNV1da9huv3JVXHkkIuqgJvfXr1yNl69YcBeGxY8cAABlhYYK6jXl1+CNdqk0VnVRF5t9/C19qGzXCjh07BG3c3Nzo559//pm2rVGjBgghkMlkSJb4ws5P7K3a3pUtK/n+xsbGUl8CAwMlt9MHpVKJypUr034OHz5sln7sCWVsLFJ27EBMq1aI5I1+87e3JUog7ehRa7tqEZKWL9c4/7i+fa3tFoPBYDBsACYILQcThAxRpD6E/0kQhP1EBCB/Pw/JWgMoJt4uZE8jiyQE+9VEGb/+cLVjK1asQMrmzTkKwpCQEABA+sWLgrrteXW8vb012j19+lRwHTKuXxe0f1+lCpYtWybaJyEEO3bsoG2//fZbWh4WFibp/vCTjKvWXkXKZFB++CCp/eXLl2mfw4YNk9TGEPbt20f78ff3/+RGCbmMDKSHhiJh5kxE1a6tVQRGymSIDgxE6u+/g9OSY1CpVOLdu3d49+4dlAaOFNoaGdeuaVyLhClTrO0Wg8FgMGwAJggtBxOEDFGkPIQcx+EJyXnKaDe1/bwigrCRFkF4hjcSeECHIFysdmzhwoVI3rhRUMdDRJipInumnzmjMaqpqiOTyTTaXVTLk6aeBuKNlxemTp2qVRAeOXKEtl2xYgUt37hxo6T7QwNw5MuH+JEjab9pJ05Ias9PDbFy5UpJbQyB4zj4+fnRvo4fP262vmwFeUQEkoKDEdO2bVb0Ty3PxbvPP0figgXI/PdfKN6/z9GulMT09gaXkYFINzfBdUlascLabjEYDAbDBmCC0HIwQcgQRV9B+ErLS28kIWittp9PRCA21iIITzo707KDOgTharVjM2bMQPKGDVpH/VTb3LlzAQBpR48K6k7SIuTURxZVpO7dq3HeI/r00dr+6tWrtC0/0ujIkSNzvDecQoHI7OvyvkoVQfj++IkTJd3fsWPH0j7Pnj0rqY2h/PHHH7SvgIAAs/ZlDTiOoyOfKVu2IJIXGVd9e+/ra/B6wNwoCAEgumFDwTVK3bPH2i4xGAwGwwZggtByMEGYS3n27BkmTJiAVatWYcqUKRg6dCgyMjIkt5fyECqVSkRIEITt1Pa91PbdCUETLYLwWHZutUhCcEhNVL3mHdugdmzkyJFIXrdOYHOWiDBTpXpI3b9fUFfdnvq2dOlSwbVQF5+RhGBkYCAIyQqio97+0aNHtC1/Pd/XX3+d472RP35M+4jt0AHKmJiPUxHd3MApFDnaaN68Oe3z7du3OdY3BqVSia+++krr6Kq14dLTkXn7Nji1daGidTMykHHjBpJXrUJc3754X6ECIt3c8LZ4cSSvXi3IpRdJCN4WKYK43r2Rsn07FJGRRvmZWwVhwpQpgmuWfvmytV1iMBgMhg3ABKHlsCtBWLZsWaO3cuXKWfs0LELt2rVx7do1ut+7d28sXLhQcnt9BaGuraPafkG1fQ9CEKRFEB7mrbk6rCaqXvGSc29RO9anTx8kBQcLbC4VEWZ9+vQBAKT+9puG34E6BOHo0aMF1yJx8WKN9muKF8cdQnCZEJRWa6+e5qFUqVIgJCuCqSIHQcfPr5j4448AgJhmzT6OEkpIP1GyZEkQQlCgQAGLrOvbvn07PfcWNpT6AABiu3RBJCGI69FDUM4plZA/eoSUXbsQP3o0ourWRaRaMCNt29tChZB5967BUUHFyK2CMO3gQcG1k6utz2UwGAzGpwkThJbDrgShTCYzenNwcLD2aVgEd3d3HOVFKhw9ejQmTJggub2Uh1ChUOCxhJfjrmr73mr7+UhWHkExQXiAV3ZEhyDcoXasbdu2SFywQGBTfZ0hIQQts1M1qEckjSQEwWp1CxUqJLAvuF5Tp+q8BsvVbMnlckH7Ll260GPh4eE67038qFHUbtrJkwCA9LNnP4qR4sXB6RgNVt1bQggaNGigsy9TkZmZiTJlytB+b9y4YZF+cyIzPFxwnxIXLEDClCmIDgrCGy+vnMWfiwveFiumUR7dqJHpfc2lglARFSW4dlxamrVdYjAYDIYNwASh5bArQfj8+XOTbJZEqVQiJCREY4qhuRk8eDBKlSqF27dvIzw8HA0bNsSrV68kt5cqCB9JEITd1faLqu176hCE+3llR9VE1Wve6GGI2rEGDRogYfp0gc0VIoKwcuXKAICkpUs1/FafolqzZk3kyZMHhGSlouAT16ePzmvwK89O/vz5Na7l0qVL6XFdgWU4jsO7L77IsiuTQRkXR4+9yZeP9hfXv7/W0alr167RvgYPHqzze2BK1q5dS/vt3LmzxfoVg8vIQEZYGKLq15c04qfa3vn4IK53byQFByMjLIxOM31fvbqg3gczRG7NrYIQAN77+mZd31KlrO0Kg8FgMGwEJggth10JQnuC4zj8/vvvqFSpEggh6N+/v9a6GRkZWLp0Kbp3744xY8agefPmmDNnjlEvfRkZGejZsyecnJxQrVo1vR8mKQ+hXC7HQwkv0T3V9our7ecnBM21CEL+CKG6IOTX36t2rGzZsogfPVpQZ42IIFSJs4TJkzX8Vp+iGhAQgKpVq4IQAicnJ8EoX1TdurSdmK1dar6pw08DMXDgQO339erVj6NQTZoIjmXevo1I3qhpTLNmkIv8ALJlyxbaFz8forlJS0tDsWLFaN8PHz60SL/KlBQoXr5E+tmzWVM/a9cWXCdt29uiRRHbvj0Sf/wRaSdOQBkTo7WP+AkTBG2TzRC5NTcLwoy//kJs9+50xJvBYDAYDCYILQcThGYiPDwcERER2LRpk05BmJmZiWbNmqFOnTo02XlKSgr8/PzQqlUrwXoyuVyuc+PnJouJicHQoUOxZMkSeHl5oXr16ojR8UKrjpSHMDMzU5Ig7KO2X1Jt34toRiJViYaTvLI/eOXOavXVU1I4Ojoi9n//E9TZKCIICSFITExEnFrdSEJwSq1e48aN0bVrV7ofEREBICvq55v8+bNERMmS4FJTEakWXIQ/2lijRg2Na5mamgonJycQQlCpUiXR681xHGJatqQ2UzZv1rTzxx/CXHdOTojr3x9pR4/SqXgTJ078eH0t/AK+ZMkS2rc+U5hzQpmcjMy//0bqvn1IWrIEHwYORHRAAN56e+f4/Xzj7o7ohg3xvkoVfPjuO6QdOgTF69d6ra1M/fNPgc30M2dMdm4qFAoFroVdxbWwqzmuM2UwGAwGw95hgtByMEFoZlQpBbQJwjlz5oAQglOnTgnKjxw5ojGCoy3AiWr75ptvaN169erRoDIvX76Ej4+PzlFKdaQKwn8lCML+avul1fYLEM1ppapzuswr408L9VSrr76+kBCCl7xAK5FEc52hart//z6imzTR8PumWr0WLVpg+vTpdP/YsWMAgIwbN2ib2C5dAAB/372LAoTgWXb5OZ6doKAg0etZs2ZNWueDSIL5pF9+of28K1VKa1TM9LNn8bZoUVHhE9upE+ZVrQqv7H70mUZsCqKjo+Hi4gLVmsy0HNaLcRyHjFu3kH7hAjL//htpR44gedUqJEyejLh+/RDboQPef/VVjt9B9e2djw/i+vRB8sqVULx+bfR5Kd68EdhXvHljtE0Gg8FgMD5lmCC0HLlGED59+hQLFy5Ejx490Lx5czRu3Fh0a6I2zc7c6BKE6enp8PLygru7u8Yv/pmZmciTJw9KlCghGPmTQlRUFAghgpftkJAQ+Pr6SrYh5SHMyMjAAwkv3wPV9r8UEYSDtQjC27yy33jlX6jVPyEi9J6WLi2o85tIHUIIjh87hjcFCyKSEPyrFkVSxqvXtm1bbN26le4vX74cABA/diytn7xmDQDg7NmzINmiUl1cduvWTfR6jhw5UnTkjktLQ8K0aQK/Uvfv13n/lLGxSJg1i45cqm/PCcGvjo5I+e03SWkqTEmvXr3oee7evZuWcxwH+ePHSF6zBnH9+yOmVauP6yUN3N4WK4bohg0R26ULPowYgZQdO6AUEdumgN+vJSK3MhgMBoORm2GC0HLkCkG4ZMkSODs70yiiDg4OGpFFVWWWjjKqSxBeunQJhBDUrl1btG2NGjVACEFYWJhefXIch88//xznz5+nZZs3b8b//vc/rW3S09ORkJBAt1evXkkShPclvJRPVNuvq7ZfkBCM1yIIn/HK+OsE1fMWnlQTeXkIwUsnJ0GdP7UIwl9HjqR1jhYpImhTilevS5cuuH79Ot3v379/VnTP7CTxkW5uUERFAQB+++03kGyhGkkIXpCP+Qi1rRH89ddfqe3p06dD8fIlkpYswduSJQU+JUydKvm7oExJQeqBA4gbMEDr9Ml3Pj5IP31ask1jCQ0NpecZ2LAhkleuRHTDhpKmd2rb3lerhrj+/ZE4dy5Sdu9GxvXrUFr4P5C0EycQ3aQJUvfuNYt9juMQExuDmNgYJjgZDAaDkethgtBy2L0gPHr0KGQyGYoXL47NmzejSpUqcHBwwJkzZ7B161aMHTsW+fLlQ968eREcHIwLFy5Y1D9dgnDdunUghKBTp06ibdu3bw9CdEed1EZ4eDi++eYbzJ8/H8uWLcOYMWNEpyGqmD17tqhY0vUQpqenSxKES9T21fMSFiJZKR7UBWFZtTK+oPtB7dhpNb+HivihHiRGRghqEoJ/PD1pnemVKgnaFOPV79GjB9LS0lDQwQGNCMH2AgUQ6ej4UahNn06vzcqVK0FIVoJ7dXE5fvx4jWvJcRwib91CM0IwixBcdHdHpEwmPAcnJyQuWmSwGOAUCvy9eTO+JwTXRa5PbPfuFhFRiuhozCxSBHsJwb2cvj+uroiqWROxHTogrk8fJMyaheRNm5B++jRSvU38AAAgAElEQVQy79+HPCIC8mfPzO6zLZCbg8owGAwGg6EOE4SWw+4FYcuWLeHg4IDLly8DAAICAjRGAWNiYhAYGIj8+fPj8ePHFvVPlyBcsGABCPmYHF2dnj17ghCCRYsWmdlLw0YI09PTDRrNCVfbv0yypjDyy84Tgmsibf8iWdFGxew+JgQXCcENHX0/z653I/tf9VGmgNq1BesWQwnBw2zhEuHigjfu7qJ2Y9q0Acd7Sf/+++9BCMEcXp2ahMCDEGzs2xcp27Yhcd48fBg6FNFNm+Jt4cI6r1lMu3bIzCE/oRR27NhBxfCOwYMR3bCh8Br4+kIZG2t0P2IoY2PxYcQIrcnd3xYrhuigICQuXIiMsDAooqMtPp3VlmGCkMFgMBifEkwQWg67F4Te3t4oUaIE3RcThADw5s0bODs7o3fv3pZ0T6cgXL58uU5B2KdPHxBCsGDBAjN7qYmUhzAtLc3gKX6W2n739cULCfXeV6oE+bNnqFatGtbpYf+VhwcSFywAp5ZoftiwYVlTP3l1NxCCJ3rYflK2LBJ/+AFyE/6IMXXqVDriefToUXBKJZLXrsWbAgVov9GBgToT2xtC6r59ePvZZxrn+A8hOODkhITsAD0M7TBByGAwGIxPCSYILYfdC0JXV1fBGrygoCA4ODiIfnn8/PxQvHhxS7qnUxCGhISAEO1Jujt37mzwlFFjkfIQpqammky4vdJSfkxL+RVCMEik/F+SNZq3lxD0yZcPvXv10qgTSgjuEIIwV1dsIgTfEIKY7KiQ5cuXxxq1+g9J1ijmP/nz432lSrj9xReYT7JSZWzRkm9OlZ5iisTzf1ukCGKaN0dY+/ZoSbIC7UyePNnk91U1DZkQgme8qZbyx48Fgi3RhKPSCVOnCs71jYcH4seOxbh27agvO3bsMFl/uRUmCBkMBoPxKcEEoeWwe0FYqlQpfPXVV3S/V69ecHBwwPXr1zXq+vj4wNXV1ZLu6RSEYWFhIISgXr16om3r1q1rUFAZU2BKQbhWbb+22v4PhCCfWlkfQpCXaCagr0MInIh4cvpBRHMNZOvWrQV1gnnHevfuTT+rphyXKlUKq9XsNsyuM3r0aAAf7ykhBMOHDxe9NoGBgSBEM6BOJCG4U68ekoKDkbpvHzKuX4fi/XvaThUhlhCCWrVqmfCOZvHll1+CEIK8efNqRK/NuHqV5jB8kzcvFC9fGtUXx3FIWrpUcO6x7dvTNA+qoEqEEAQEBBjV16cAE4QMBoPB+JRggtBy2L0gbNSoETw9Pen+L7/8AplMhgEDBgjqnTlzBjKZDOXKlbOof7oEoUKhgLe3Nzw9PTUChSgUCnh4eMDb21vvtBOmQMpDmJKSIkkQjlTbL6i2P1xE3LXXIvoqqAk+bW1Um4+Pj6DORN6xhQsX0s+qUdjChQtjlZrdfNl1Jk6cCAD48OEDbVe/fn3Ra1OxYkUQQjBZFYE0eztHCA7kkDKicuXKIITAwcEB8fHxBt5BTVJTU+Hg4ABCCGrUqCFa58OIER/Fm5b0GFJJnDNHcO5JK1YIvuccx6FSpUr0Wt67d8+o/nI7TBAyGAwG41OCCULLYfeCcNGiRYIRwejoaHh5ecHBwQENGjTAxIkT0bdvX7i6usLBwQGzZ8+2qH85JaZXBR8JDQ0VlJ86dQqEEHz//fcW8FITUwpC9YifXmr734mIu+ZaRF9JHYKwiYggVK8zgFd++PBh+lkV+dPd3R0r1drwU0GoKFOmDAghojkkASB//vwghGBuoUICW/MJwalTp3Re+1GjRgl8NBV3796ldvv27StaRxkXJ0j/kJaDr9pI2bVLcN4JWp67X375hfqkGoFliMMEIYPBYDA+JZggtBx2LwifPn2KQYMG4cSJE7Ts5MmTKFCggCAXoUwmQ7du3SBXC/5hblTrBLUlI09NTYW/vz8CAgKQkR3IIy0tDbVq1YK/vz9SU1Mt6S5FykOYnJwsSRAOVtv3UNv/VkS4NdIi6IroEHt1s8ucnJy01unKK3/69Cn93KpVK3AcBwcHB9EUGIQQwY8JnTp1ouUPHz7UuC6qYz+VLSuw1Z98nJ6qjX379mkIVVPAz3O4cOFCrfVStm6l/r4rX17vADPyR48EkUSTfvpJa924uDi4ubmBEAIvLy+rfd/tAYVCgUtXLuHSlUuiP0JYi+vXr2P79u24cuUKYs0UoZbBYDAYnx5MEFoOuxeE2oiPj0dISAgWLlyIFStW4NatWxbt/+nTp1i+fDlKly4NQgjc3Nwwe/Zs0dGh5ORkTJ06FW3atMGoUaPQqlUrTJ48GcnJyRb1mY8pBeFAtX03tf1+IsKtgRZBV0CHIPTPLqtQoYLWOm155XK5HPny5QMhBGXKlEFGRgYIEeZE/JdXf/78+fTc586dS8tDQkIE1yUiIoIeW1+9uqD/FoTgzp07Oq99bGwsZDIZCCHw8/Mz7kby4Pu8b98+rfU4pRJR9etTn1N27dKrn9jOnWnbD4MH55g3sX///tQvFlzGvoiIiKDTkFVb8eLF8c0332D16tUWT/PDYDAYjNwDE4SWI9cKQoZxSHkIk5KSJAnCb9X2XdT2e4sIt3paBJ2HDkFYhXwMJKOtTjNeOcdxqFWrFgghkMlkePPmTZaI49W/yau/ZMkSeu786abq0UBDQ0Ppsd2BgRqi9dGjRzle/+rVq1O/TDXqwhdef//9t8666aGh1OfoRo0k95F2+DBt97ZoUSgl/KjBDy7TrFkzyX0xrM/+/ftFp2nztyZNmmD//v02NarJYDAYDNuHCULLwQQhQxQpD2FiYqJBgtBBbb+niHCrrUXQuekQhBWzywYPHgxXV1fROl9nl6lyVfbr14/WO378OAgh2MKrf4XX14oVK+i5v379WquIUU0TJoTgcIcOgv5LEoKXEqJ3jh07ltrYn0MQGqkEBARQm0lJSTrrchyH9xUqUL+l5ELkMjLwrkyZjyOLW7dK8ovjOJQrV47el8jISEntPjU4jkNCQgISEhJyHHW1FNu2baPfqfr166NRo0bw8PAQFYa+vr7s3jIYDAZDMkwQWg67F4ShoaFo3Lgx1q1bp7Pe2rVr0bhx4xzXbzGyMKcgVBdpYoKwphbR56pDEH6RXTZs2DCUL19etE5dXlsAgkij8+fPByEEO3n1Q3n1V69eTc+d4zh4e3uDEAJvb2/BC/qyZctomwsDBgj69yQE73lpJrRx8OBBasNUwVaKFSsGQgg+++wzSfX5KSMSZs7MsX7y+vUfRxWbNtVLtKiCKxFCsHTpUsntPiVsMagMPyjQruypxXK5HDdu3MCiRYtomhPVFhgYaPF13AwGg8GwT5ggtBx2Lwj79u0LBweHHKfA3b17FzKZDN9++62FPLNvpDyECQkJZhOE/kRc9Dlnl6kCkfCPlc4+NmLECAQFBYm259sFgAMHDtD9zp07gxCC33j1T/Pqq1JTqGjWrNnHPngjHxMmTKDld8aP1xjhjIuLy/H6f/jwga7NqlKlioF38SMpKSnUJ215L9VRvHlD/Y7KYS0jl5GBd59/Tutn6Jk78/Hjx9S/qlWr6tX2U8EWBSF/XapYRFylUonjx4+jRIkStN6sWbOs4CmDwWAw7A0mCC2H3QtCHx8fFC5cWFLdwoULo0KFCmb2KHdgbUFYTYsgVCWlV40A8o+Vyj42atQoDBgwQLR9VTVB+OjRI7qvSiXxJ6/+cV79bdu2Cc5/0qRJ9NjRo0dpec+ePWn503nzBP07EiI5WFCNGjWonejoaAPu4kfCw8OprT59+khuF+XvT31XvHmjcTz1998R07w5ogMCaL2Y1q0N8rFu3brUx5x+4PkUsUVByP/x4+LFi1rrXbp0CY6OjiAka13s6dOnLeglg8FgMOwRJggth90Lwrx586JmzZqS6tasWRMeHh5m9ih3IOUhjI+PN5sgrKxFEDpkl3399dcax1Q5CseMGSOYgsivU4UIBaFcLoezs7NgWtshXv1DvPJff/1VcP67d+8WTDdVERgYSMvj1q7VOPcMiWkcJk6cSO38+eefBtzFj/BHQvXJxZkwbRr1PXXvXsGx1D/+EL3fGdeuGeTj6tWrqY8TJ040yEZuxhYF4aBBgySLeP707CJFirD/4BkMBoOhEyYILYfdC0IvLy/Jo34VKlSAp6enmT3KHZhSEA7IQRD2Einz1SIIVWUdO3bUOFaCJwg3btwo2p5vV4X6OqfjvPp/8sr3qgmi+/fv02P8PJM+Pj4ghCB//vxI2b5dw3+pa+uOHj1K7Y8cOVLPOyiEv65Rn9QOaYcOUd/jJ0wQHPswbJjGvY6qX99gH2NiYqg4L1asGItKqYYtCsJu3brR79WzZ8901lUqlWjRogWtv2fPHss4yWAwGAy7hAlCy2H3grBu3bpwcHDIMZT/o0ePIJPJJI8mfupIeQg/fPhgNkGoihiqTRB+++23GseKk49rCE+cOCHavpKIIGzatKlAEJ7m1f+NV37w4EHB+SsUCuTJkweEEPj4+ADICjbj7u4OQggqVqyIlF27NPzX5x6o1hH6+vrqeQeFDB8+nJ7HlStXJLdTREVpFXsxzZtr3OuUnTuN8rNDhw7Uz5MnTxplK7dhi4KwefPmH0fDJayNPXToEK0/adIkC3jIYDAYDHuFCULLYfeCcOnSpZDJZKhTpw4+fPggWufDhw9UOC5evNjCHtonUh7CuLg4NCQEWwlBIMmKyBlJCC6ZQBCWz0EQqtbviQnCwYMH459//hFtzxeaKlTiUrVd4NXfxSs/duyYxjWoXbs2PZ6UlESvGyEETZs2RWpIiMGCEADNk0iItOik2mjTpg2180ZkLaAu3pUti0hC8MbdHZxS+bG8XDkNQajMIZ1FTvzxxx/UT33WOn4K2KIg5K/7lDKi++7dO1o/MDDQ/A4yGAwGw25hgtBy2L0gTE1NRcWKFeHg4ICiRYtixowZOHToEC5evIhDhw5h+vTpKFq0KGQyGSpWrIjU1FRru2wXSBWEfCFVlBD0JwTF1ERCTmsIxQRhKaJbEKrWI/GPFcs+1r9/f0GeQH6dCiKCkB8pkfCEbSQh2MErP3PmjMY14AevuXXrFv7991+637dvX6Tu3WuUIJw8ebJJpthVq1YNhBA4OztDyRN1Uojt2JH6L4+IAABwmZmIdHQUnFu8CdJjpKenw8vLC4QQ5MuXD+np6UbbzC0oFHKcDz2H86HnoFDYRuqGihUrghCi19rs0qVLgxACd3d3Ni2YwWAwGFphgtBy2L0gBICXL1+iRo0akMlkcHBw0NhkMhlq1aolKSE4IwspD2FsbKxASPE3fQRh7+yyDoTgGSHYrsOWqmzDhg0ax4pmH+vXrx9SU1NF2/uICMLt27cL+ruoRRCGhoZqXIPFixfT47t378bZs2fp/pQpU5C6b59RgvDYsWPU3vDhw/Vqy6dgwYIgJCuSqr4kfP899T81O7iNPCKClsW0aYOMsDBwJsov169fP3rOx48fN4lNhnkoXrw4CCEoUaKE5Db8dYf//POPGb1jMBgMhj3DBKHlyBWCEMgKWLB371706dMHNWrUgI+PD/z9/dG3b1/8+eefeo+KfOpYQxASQuCegy1V2d69ezWOfcYbmQMAV1dXjTpfEE1BeOHCBUF//CmvfEEotvaOn0B+1qxZ2LlzJ93/5ZdfkHbwoFGCMDExkYbrr1ixol5tVfBzEAYEBOjdPvXPP6n/iXPmAADSTp6kZQlTpxrklzb27dtH/f3uu+9MapthWlTrZStVqiS5zdKlS+n93bRpkxm9YzAYDIY9wwSh5cg1gpBhWqQ8hDExMZIEYU5rCHtrsaFLEKoicPKPFVEThEWLFpUkCB8+fCjo7zKv/jZe+TWRdAr8PIbdu3cXjBju3bsXaUeOGCUIAaBOnTrU5rt37/Ruz/exZ8+eerfPDA+n/sf16wcASN6wgZYlr1unt01dpKSk0GA9n332GfsxJxuO45CamoLU1BTJkWrNiVwup9+revXqSW4XGhrKBD+DwWAwcoQJQsvBBCFDFCkPYXR0tNUE4fnz5zWOeasJwgoVKmjUKSsiCNVHOq/w6m/lld+4cUPjGmRmZtJUCVWrVsWYMWMEI4ppJ04YLQinTp0qEJn6cubMGdrekMiOysRE6n/0118DABJmzqRlaSLBdoyFH230r7/+Mrl9e8TWgsrwn5uWLVtKbpeUlESj51avXt2MHjIYDAbDnmGC0HLkKkH49OlTrF+/HhMmTMB3332HCRMmYP369Xj69Km1XbM7jBWE+3giqH4OgrCXFhuqbVx2veVqo3XqdgqrCcIaNWpo1CktIgiVSiWdlqkuCLfw6t++fVv0OqgCa7i5uaFLly60/rNnz5B++rTRgpAfqn/8+PF6t9+6dSttHxwcrHd7AHhbqBAiCcG7zz8HAMT160fPKfPePYNs6oLv8+TJk01u3x6xNUH49OlTeo+++eYbvdpWqVIFhBA4OjoiJSXFTB4yGAwGw55hgtBy5ApBGBcXhx49esDR0VEQSEb12dHREb169ZKUJ4uRhdTE9PxE0/ytOMmabjldRADqO0JIeGJPtanSSvDtFFIThAEBARp1+NFL+Xz22WcfR6R49Ter9SlG69ataR1+kvv09HSknzljtCDkC299puap+PHHH2n7/fv3690eAKJq1sw6BwcHcJmZiA4MpOekTEw0yKYuoqOj6SiSj4+PTUyRtDa2Jgjv3Llj8NTPgQMH0raXLl0yk4cMBoPBsGeYILQcdi8IU1NT4efnR0Vg/fr1MXjwYMycORODBw9G/fr1qTj09/dHWlqatV22C/R5CHMSc6YQhOpbRESEhp2C2cdU+esaNWqkUaekFkGoGrEghOAar/4mXv379++Lnv+wYcM0/PP09AQApJ06ZbQgBAAfHx8QQuDi4qJ3KobvvvuO+iU27VUKsV270nOQP336MTdhgQIG2ZNCYGAg9fvBgwdm68desDVByA/GpO9U5PXr19O2y5YtM5OHDAaDwbBnmCC0HHYvCOfPn09zDGp72b1x4wYqVaoEBwcHLFy40MIe2ie2LghfvnypYadA9rHevXsDAIKCgjTqFOfZ4NOkSRNaHsarv5FX/+HDh6Lnr8qJyN9U6R1MsYYQEKZiuHr1ql5t+SOYhgSlAYD4cePoOaRfvIhIZ2dEEoL3VasaZE8KP//8M/V7wYIFZuvHXrA1QciPsPvjjz/q1ZY/uqjvdFMGg8FgfBowQWg57F4QVqtWDU5OTvjvv/901nvy5AmcnJxQrVo1C3lm35hCEHbv3t1sgvDVq1daBWGvXr0AAC1bttSoU4xngw9/7d91Xv0NvPoR2UnZ1dm9e7eGf/7+/gCAtKNHTSII165dS20vX75cr7ZVq1YFIYYlpVeRuGABPYeUrVvp55hmzQyyJwX+GrXatWubrR97wdYE4Y4dO+j90Xdtqlwup5Fky5YtayYPGQwGg2HPMEFoOexeELq7u0uOVFe9enW4u7ub2aPcgSkE4TfffGM2Qfj69WsNO17Zx1SpFdq2batRpygRF4T9+/en5Te0CEJtwYkuX76s4V/Tpk0BAGmHD5tEEN69e5fa7tatm15tixQpAkIISpUqZVDfAJC8cSM9h4TJk+nnuB49DLYphWrVqgnu+aeMrQnClStX0nuzfft2vdur1vgSQhAVFWUGDxkMBoNhzzBBaDnsXhB6enrC19dXUl1fX1/ky5fPzB7lDiwpCPsYIAgjIyM17OTn9QsAHTt21KjzGc8GnxEjRtDym7z663j1X758KXr+qumr/E0l2lIPHDCJIFQoFPDw8NBb2CkUChqcpWbNmgb1DQjPI7Z9e/r5w4gRBtuUwuzZs+k1Xb9+vVn7snUUCjlOnTmFU2dOQaGQW9sdzJs3j96bAwcO6N1+3LhxtP0xM6QuYTAYDIZ9wwSh5bB7QVirVi04ODjg7t27OuvduXMHMpmMTT2TiDUE4bBhwwSjBrq2N2/eaNjxJB+nqgJAt27dJAvCKVOmiArCtWoiVAx+gm7VNmTIEABA6r59JhGEANCwYUNqPyYmRlKb9+/f0zatW7c2uO+MK1foObwrX/7jaOH33xtsUwphYWGC75MtEBMTgytXruCPP/7AmjVrsG7dOly9evWTi4Q6efJkem/Onz+vd3v+VGt91yAyGAwGI/fDBKHlsHtBGBwcDJlMhpIlS+LQoUOidQ4ePIhSpUrBwcEBK1eutLCH9okl1xCqBKGYvUqVKkkWhPnURud69uwpWRDyUzPc0iIIdQVkyZ8/v8C/qVOnAgAybt6ktm6SrLxrhjJ69Ghq/8yZM5LahIeH0zYDBgwwuG/5o0eC66jakgzMayi5X7kcnp6eIITA29vbKqKL4zjcv38fP/74I/z9/bV+3wcMGGATUzktxZAhQ+i5a8vRqYtHjx7R9h06dDCDhwwGg8GwZ5ggtBx2LwjlcjmaNGlCU0uUKVMGLVu2RL9+/dCyZUuULl2apqRo2rQpFAqFtV22C8w9QvhAJqP7LXQIwr///hutW7cWjEZoE4Qe2ce6du0KAOjbt69GHW1rCPkRLW/z6q/m1de1zqlcuXIC/5YsWUKP/Vm5Mo4Sgq9IVvJ6Q+Ena1+6dKmkNmfPnqVtpkyZYnDfyrg4UUGYsnu3wTaloloLSghBeHi42ftT8fbtW8ycORPly5eXNGpNCMG0adNM6sPRo0exbt06XL58GfHx8cjMzERmZqZNjEb26NGDnndOQb3EUCqVyJcvHwghKFGihBk8ZDAYDIY9wwSh5bB7QQgAaWlpmDBhAtzd3SGTyTQ2d3d3TJw48ZPKQfj8+XOMGjUKixYtQo8ePbBp0ya92ptCEPJfGNUFYUC+fHhbrBh2EwKZDkEYHx8vWv727VsNu+7Zx7p06QIAGDBggGRBuHHjRlp+l1d/Fa9+dHS01mtQs2ZNgX/8663ygxBi1BpWfqh+VSTVnPj1119pG2PyvXEch0gnJw1BmHbihME2pfLTTz/Rc1i3bp3Z+3v37h2GDRsGV1dX0e91jRo1MHz4cCxatAibN2/G9OnT4eTkBEIIvvjiC5P5cerUKUG/Li4uNKjMpEmTsGHDBly5cgWpqakm61MfWrVqRX2TOoVZHVWuUNUzzWAwGAyGCiYILUeuEIQqEhMTcezYMaxYsQLz5s3DihUrcOzYMSQmJlrbNYuiUChQtWpV3LlzBwCQmpqK0qVL48iRI5JtmHuE0MvLC5xSKagvZk+XIFy7dq3Abt7sY507dwYADBo0SLIgDAkJ+Tgqyau/kldf10tvixYtBP798ccf9FifPn1oecGCBSXfA3UyMjLg7OwMQggqVqwoqc2KFSto37t27TK4bwB4W7SohiDMMDDRvT789ddf9Bz+97//ma0fjuOwZcsWFChQQHAvHRwcEBgYiF9++QUvXrwQbVu/fn2jxZE606ZN0yoIXVxcaLmzszNat26Nw4cPm6RfqfDP2dCpshMnTqQ29Pn7xGAwGIzcDxOEliNXCUJGFocOHYKLi4tgWtno0aP1ijJpCUGo3lbMHr9/dUEIQGA3T/axjh07AgCGDh0qWRAePnyYlv/Dqx/Mqx8XF6f1GqjWK6q2kydP0mP86/DZZ59JuPra8fPzoyIlJSUlx/p8UXHq1Cmj+n7n46MhCOVaUnGYkrS0NL2FsL7ExcUJpqYSQuDh4YGJEydqDSbEZ+zYsbTd8ePHTeITfw1ujx49EBAQICoI+du4cePw4sULi0wp9fX1BSEEefPmNdjGb7/9Rn2fM2eOCb3TjlKpxM2bNxEWFoaIiAjExMSwpQQMBoNhgzBBaDmYIDQzSqUSISEhktd8mYKlS5fC09NTULZ8+XI4OTlBLpcWrt7cgjB//vwabcXs8Ud3+eWqAC98u27Zx1QBKlQRKqdlH48oUoROT1UXhOfOnaPl4VoE4YcPH7ReA37aCkIIrl69So8dP36clv/yyy8Srr52+NNPw8LCcqyvGiUlhOQYiTcn3levriEIlbwRXHNSq1YtSffBUNq1aye4f71799YrNx5/aq6phE2NGjWo+M/IyBDkITx58iRWrlyJAQMGoGTJkhrPXuHChdGzZ09ERESYxBcxVP0WK1bMYBsRERHU57Zt25rQO+2ofihS3/Lnz4+yZcvC398fQUFB6NatG4YMGYKpU6di5cqVOHz4MMLDwyX/Dc0t7NixA8OGDcPkyZOxYMECrF69Grt378aZM2fw77//IikpydouMhiMXAoThJbDrgThixcvTLJZAo7j8Pvvv9Momf3799daNyMjA0uXLkX37t0xZswYNG/eHHPmzDF4GpYq+MibN29o2ZYtWzTKdGFuQagSrOYQhO3bt6dt9u7di1U//4yk/fvxGy+Rtrog5E9LvMezuYJXP16H+Pn+++8Ftu/du0ePcRyHDRs2YNmyZUZHoVy2bBntQ0oy8K5du9L6xn73o+rX1xCEnIWiao4aNUp09NUUZGZmCu6dIVMXnzx5IrDRuXNn7NixQ+eock54eXmBEILSpUtTP8US0yuVSqxbt46uY1Qf5dy3b5/BPuhCFRCmQoUKBtvgOI5G6DVGWOpD4cKFtf7NkrIVLlwYw4YNw6VLl2wiuI85OX36tKRrosoHPGzYMJw7d46NuDIYDJPABKHlsCtBqIokasxmTNh/fQgPD0dERAQ2bdqkUxBmZmaiWbNmqFOnDtLT0wEAKSkp8PPzQ6tWrQT/scrlcp2bUqkEAMTGxqJgwYL47rvvaLu+ffvCwcGB9pETtiII+b8+5yQIXbOPtWvXTtTPHTt2aBWEN2/eFBWEP/Pq67oW/LV6phBf2jh69CjtQ0pEy6ZNm4qKa0OIDgoSCkIHB4u9EPNz1v3www8mtf3y5UtqW9t3Jyc4jkOhQoU0ngEXFxd06tQJf/75p+RnD8h6hlU2GjduDEC7IFRx69YtTJgwAa1atRKkQXFzczN5wBaFQkHtG5CPovIAACAASURBVJvblf8dlTI91xg+fPhA+ypVqhR69eqFli1bok6dOvDx8UHhwoXh6OgoWRx27tyZ/t3NjaivjZa6FSlSBEOGDMHZs2dzvWhmMBjmgwlCy2FXgrB06dIoU6aM0ZslOX/+vE5BOGfOHBCiub7ryJEjIITg559/pmU5/SfMT9wdHh6OLl26oEOHDpg5cyZat26NOnXqSPbbVgRhcnKyaPn79+8BCAWhS/YxbVPPtm/frlUQJicnw8PDA4QQPHF1FRWEugTVzp07BbbNMa0RAP777z/aR6dOnXKsz592aOyLWWz79oLr/caItWP6wj/vVq1amdS2amoxIQQjRoww2M7SpUvpWkexzcvLC9999x3++uuvHO/FjRs3aLtBgwYByFkQ8klKSkLHjh2pjdmzZxt8XmLwhVWzZs2MsjVlyhRq6+DBgybyUByx66oOx3FISEjAs2fPcPv2bZw+fRpbt27F7Nmz0blzZ7i5uQnu6/Lly83qs7W4d+8ePccyZcrg3Llz2L9/P7Zt24aff/4ZU6ZMQe/evdGoUSN8+eWXWr/7qh8mGQwGQ1+YILQcdiUI7RFdgjA9PR1eXl5wd3fXmGKTmZmJPHnyoESJEkb/Ah0VFYW8efNi586dktuYO+2EKv2COQRhmzZtRP3UJQgB4P79+1i1ahUiPT2pzWVafFGHP3JHCDHbOiOFQkHTIUgJsKLKj2hMdFMVcT17Cq7320KFjLYpFY7j6FS/AgUKmHTUYf/+/fS+zZ8/3yhbGRkZkMvluHTpEsaOHYvPPvtM9NmoVKkSfvrpJ9y8eVM0bQQ/2MrChQsBZI30HztxFMdOHJX0/Xr58iUd7fL29jZp2p2HDx9S/3r27GmUrT179lBbs2bNMpGH4vDXei5evNggG4mJiVi7di214+rqivv375vYU+vDX3/M/2FSG4mJiQgJCUGXLl2QJ08ewffd2AjHDAbj04QJQsvBBKGZ0SUIL126BEK0T7lSje5ICR6iDaVSiaCgIPTs2VOvl2hbEYT8SJpSBaG2EaScBKGK+PHjqc22WnxR59q1a5Jsm4IqVaqAkKx0AzmNFBUsWBCEmCY/3oeBA4WC0MLJxNu0aUOvryGJ0LWxevVqanfr1q0mswtkibiTJ0+iT58+yJs3r+hzUrBgQSxYsECw3nD+/Pn0+J49ewzunz9KL2XNqVTOnDlD7U6ePNkoW0+fPqW2WrdubSIPxfnhhx9oX8aurRw3bhy15e/vb/T6YFsiKiqK/vDk6emp98tYUlKSYL2zp6cnnj17Zh5nGQxGroUJQsvBBKGZ0SUI161bB0K0T/1r3749CCHYuHGjQX0/f/4czZo1w7Rp03Jc5J+eno6EhAS6vXr1ymhBqGvKqIeHh0ZbMXv80RN+uSoC5IehQxFJCK7ywvC3bNlS1M9t27ZJEm3KpCTEjxqFuJkztfqizuPHjy0mCPnpCB49eqS1nlKphIODAwjJSqZuLPGjRgnu4zsTJmGXwkze/Thw4IDJ7M6YMYPaPXHihMnsqpOUlIStW7ciICBA9Hlxd3fHiBEj8NNPPwlGFm/dumVwn6ofnQj5mJ/TFPCfpeDgYKNscRxHf7goWLCgWaN49u3bl/r9zz//GGUrNTUVFStWpPZ8fHxQqVIllC9fHo0bN8bgwYOxePFi7Nu3D//884/OGQa2Bl84jx8/3mA7/BysDRo0+OQitDIYDONggtByMEFoZnQJwgULFoAQgj59+oi2VeW2W7RokV59pqWlYcOGDQgODpYc3GT27NmiL6m2Lgi5tDSk7t+Pul9+SY+1aNFC1E+pglCFevRJXVPu+EFAzC0IZ82aRfs5dOgQgKzpWn379kXRokWxatUqAB//kBJCEBQUZHS/CVOmCO7je19fo23qA39q4dy5c01m99tvvzWZSJDKw4cPsWDBAnTq1ImKdrGtZs2aRk0ZVygUNNiNp6enyUax+COYpohiyo+Ge/r0aRN4KE7dunVpP1LyeObEzZs3RaO7atuKFy+Or7/+Gt9++y0WLFiAPXv24Pbt2zb1spOenk5/kHBwcMDz588NthUfH48yZcrQ8//xxx9N6CmDwcjtMEFoOZggNDO6BOHy5ct1CkLVr6sLFiwws5fmGSHUNWXU3d1do62YPb4IExOEKvi/1Ddv3lzUT30FIT+SIiFEZ5RI9brmRJVWhBCClStXIi0tDTVr1qRljo6OePr0KZ4/f07LunbtanS/iT/8ILiPUSYYddQH/ro1U5yPipYtW1K7MTExJrMrlcePH2PEiBEaU0oDAgIQGxtL6+kTVIZPr169qM0LFy6YxOdhw4ZRm9evXzfaHl/sawv2YgpU4rhkyZIms7lq1SrkzZsXzs7O8PDwoMGp9N2KFCmCevXqoVu3bhg7dizmzp2L4cOHo127dqhbty66d++O+fPn4+jRo3j9+rXJ1tGGhISgY8eOmDt3Lm7dukVTFBFC0K1bN6PtX758mf7o4ejoaNQSCFNy7949PHnyhEVBZTBsGCYILQcThGZGlyAMCQkBIdqncnXu3BmEGD5l1BhMHWX0bzVBmDc7QmVOglDbGsLo6GiBD6p8j4Roj3rIF1JSRBvHcYL6Ob2Ez5o1C4ULF8bu3btztG0M586doz5NmDABP/30k8a1nzx5Mu7evWvSl+ykn34SCMLoBg1McDbSUSgUNMJj+fLlTWa3atWqICQrRYQ1Xw7j4uKwbds2zJgxA8ePHxcNNGWIIORHwG3RooXR6UcAoF27dtSm1NymukhJSaGCuGDBgmZZjxcXF0d9btSokcnt84mNjcX169fx66+/Yu7cuejXrx/q16+PIkWKGCQWxbZChQqhSZMmGD9+PLZv3467d+8iIyNDso9yuRxjxozRsCuTyejnv/76yyTXg5+n9YsvvsDp06dx5swZnD59GqdPn8aFCxfw/Plzi+QvVCqVGD16NPWncOHCaN26NX744QecOHHCqNyhDAbDtDBBaDmYIDQzugShKtx9vXr1RNuqpjdZ4xdVUwvCMoQgxM8PFSUIwmLFiomKMF2CsHLlyvSYtumR+gpC9T6lrH+xhKDgp2Do0qULSpcurXHt/fz8cOHCBbo/adIko/tNXrNGKAibNjXB2eiHKtCSTCYzSdTMZ8+e0UicX375pQk8NB+GCsKoqCjBS76bmxv69++Pq1evGvx99fPzAyEETk5OJnuJ5/+9OH78uEls8rl+/Tq1P3jwYJPbl0pCQgJu376NPXv2YP78+RgwYAAaNmwo+Ltn6Obs7IzKlSujR48emDdvHg4cOICIiAiNexQbG4ugoCCdturWrWuyc5bL5YLputo2FxcXfPXVV2jTpg0mTJiA3bt348GDByb7jikUCsEUcW1b+fLl0bdvX6xatQo3btzQS2gzGAzTwQSh5WCC0MzoEoQKhQLe3t7w9PTUeDFTKBTw8PCAt7e3VRIfmzrKKCFZ+ahUn/PkyaPRVsWjR48wePBgHD16VGs/6oJQFXmTEIImTZqI+mmsILTEr9dSyMjIEF131qJFC/j7+9P9TZs20c/z5s0zut+UbdsEgjBGS3oPc9K7d296Tvfu3ZPcjuM4XL16FWPHjkXTpk3x5ZdfCtY2EWL6hPemxlBBCACNGjUSfUZr166NAwcO6P03xtvbG4QQfP7553q108W+ffuoX//73/9MZlfF7t27qf0lS5aY3L4pSEtLw3///YeLFy/iwIEDuHbtGl6/fo309HTcu3cPu3fvxqRJk9C8eXOtKU3Etjx58sDX1xfVq1eHn5+foK2zszN++eUXrFmzBm3atIGbmxvc3NwQGhpq0nN78uSJwdNp8+bNi3r16mHEiBHYtGkTbt++rbdIy8zMpOvyCclaH9m0aVM6jVjX5urqinr16mHs2LEICQnB06dP2VRTBsMCMEFoOZggNDM5JaZXTaVR/8/31KlTIITg+++/t4CXmph6hJAQgiFDhtDPbm5uGm316Ud9rZdq2h8h2qeDGSsIrSHMtVGyZEmN671u3TqMGjWK7g8cOJB+XrlypdF9pu7ZIxCEsSZcxycVfvTDP//8U1KbI0eOwNfXV+cLn7u7u1XWD+qDMYIwMjISc+fORd++feHl5aVx/r6+vti1a5ekUfC0tDTarn79+oaejgapqalUMLi4uKBs2bJo1qwZNm7caJJpfKZMOWErvH37FidOnMDixYvRq1cv+Pr66hXkpkiRIrh06ZLAZnp6utlGxG7fvo1Zs2Zh+vTpmDFjBmbMmIGZM2di3Lhx6NChAypXrkynhee0OTs7w8/PD99++y1WrVqFK1euaI3kmp6ejo4dO9K2Tk5ONJ0Lx3F48uQJdu/ejdGjR6NOnTpw4UWt1rZ5e3ujbdu2+PHHH3Hq1Cl8+PDBLNeMwfiUYYLQcjBBaGZU6wS1Lc5PTU2Fv78/AgIC6H/CaWlpqFWrFvz9/XWmOjAn5hCEQ4cONZsgnDdvXo7ihx8swRBBaEu/CIulLnjw4IEgp1716tXp5y1bthjdZ9qRIwJBGKclGJI54SdslxJsacmSJaLfzXz58qFIkSIoUKAA6tati8OHD1vAe+MwRhDySUlJwdatWwU/oqi2smXLYu3atTqn4/KnLHfv3t1gP8TgjwCrv/y3a9cOu3fvRlJSkkG2+SkQwsPDTeq3LZGRkYF79+7h999/x6xZs9CpUyf4+PjAzc0NLi4ucHZ2hrOzM5o3by45CrUlUSqVePXqFY4dO4b58+ejS5cuKFu2rCSRKJPJUKFCBbRq1QqDBg3CnDlzsGnTJrRo0YLWcXFxodGZtZGeno6wsDAEBwejd+/e+JIXxVrX9tVXX6F///5Ys2YNbt26latyUzIY1oAJQsvBBKGZePr0KZYvX07Xd7m5uWH27Nk4deqURt3k5GRMnToVbdq0wahRo9CqVStMnjzZqnmrzDFllC8IXV1dNdrq04+6IJTL5RgxYgQGDRqkNZz8H3/8YZQgtCXUX5wLFSoEjuNw9uxZ0XthTHJzFennzwsE4QczRoPUxp07d+g5aRt1V7F9+3bBNahXrx62bNmC6OhomxL3UjGVIFTBcRyOHDmC+vXra3xfihYtiiVLlogGoAkNDaX1jMlRJ8aDBw/w+eefw9nZGZ6enqLf5bx58+J///sfrly5Iuk+RkZGYvPmzShfvjy1YYqUEwzLEhcXh3PnzmHZsmXo3bs3KlWqpDNli9iWJ08e0f+DpRATE4Njx45h9uzZaNmyJc2dqWtzc3NDtWrV0LVrV0ydOhWbN2/GxYsX8ebNG7v8G8RgWBomCC2Hbb3lMmwGcwhCfqh6FxcXjbb69GPI9D6FQoEqVarAzc0NZ86ckdTGVgUhP5k6IQRNswO8vH79WvReqK/HNISMsDCBIIwfOdJom/qSnJxMz0lX0Iv//vtPkMZh7ty5dv8CJpfLcfDwQRw8fNCkCb45jkNoaKhgFEW1ubu7Y9CgQYJcdPy1eMuXLzeZH3x/VNv169cxbtw4FC9eXPR77evri59//lnr34OkpCSNtaKmTDnBsC4pKSm4evUqVq9ejUGDBsHf3x+urq6i35V8+fLh4sWLJuub4zg8fvwYO3fuxMiRI1GrVi04OztLFqfFixfHpEmT9FoLzWB8ajBBaDls6y2XYTOYQxDyg5x07NgRwMe1f5UrV9arH35+Nn1QKpWIj4+XXN9WBeH69esFvo3MFmccx4m+lJgiQETm/ftCQThxotE2DaFEiRIgJGsNjzZatWpFz33QoEF2LwYtxc2bN9G1a1dBVFJCskb0p06dioSEBMyZM4eWm2LkWQpKpRIXLlzAkCFDkD9/fo3vt4uLC3r27Inz588L7vXEiRM16uY0ssywbziOQ1RUFG7fvo1Dhw5h7dq1mDdvHu7fv2/2vtPS0nD16lWsWLECPXv2RPny5SWt6axRowaCg4M1gqUxGJ86TBBaDtt6y2XYDOZYQ6hQKNC3b180b94c7969A5AVFGHDhg2ScpmZQhDqi60KwqNHjwp8W716NT0mFr7+1q1bRvepjI0VCMKEmTONtmkIDRo0oOcltsb2ypUr9HipUqVMknfvU+Pff//FkCFDtE7bVG137tyxuG8pKSnYtm2b4HvA38qXL4/Fixdj165dNKWIq6srgoODsXPnTvZ9YFiUzMxMRERE4NixYwgODsaoUaMQFBQkKhSdnJzQoUMH7Nu3j6W6YDDABKElsa23XIbNYI4RQmNhgvAj//zzj8C3s2fP0mNiwUIePnxodJ8cxwkEYaIJUlkYAj90vNh5tW3blh7fvHmzFTzMPcTHx2Py5MmiURd79Ohhbffw4MEDjB8/PsfUAbaeUoTx6REVFYXg4GCaW1V9K1SoEEaOHIkbN26wGQ6MTxYmCC2Hbb3lMmwGWxeEpghDr2+ftkRcXJzAN360wKZNm2rci1evXpmkX74gTPrpJ5PY1JcpU6bQ81IPEPH27Vs6KlSqVKlcFeUvMzMTa9avxpr1qy1+Xs+ePcPAgQNp/sHhw4fbTF5OICsqZEhICBo3biw6Ypienm5tFxkMrdy7dw+TJk0Snd1BCEGlSpWwaNEiREZGWttVBsOiMEFoOWzrLZdhMzBBqNmnLcFxnMA3/su5+nU35YiqLQjCNWvW0PPauHGj4NiyZcvosRkzZljFP3Nh6iijhqBUKm0+39rjx48RHByM77//HjNnzsTTp0+t7RKDIQm5XI4TJ06gZ8+eovkYHR0d0aFDBxw7dsymfpBhMMwFE4SWw7bechk2AxOEmn3aGs2aNQMhBE2aNBGU85PTqzZTpTARrCG0kuA6cuQIPa9Zs2YJjjVs2NCk02RtCVsQhAwGwzLEx8dj48aNgr9p/K106dL48ccf2aghI1fDBKHlsL23XIZNYI6gMsbCt2WpUQpbFoRRUVHYvn07DdCjYu7cuRr3wlRpCiIdHT/mIRw61CQ29SU8PJyeV79+/Wh5YmIiDdRQvnx5q/hmTpggZDA+TZ48eYJZs2aJpl9xdHREx44dce7cObbWkJHrYILQctjeWy7DJmCCULNPe2Ht2rUCv52cnExmO37MGCoIU3/7zWR29UH13SSEoFGjRrT88OHDtHz48OFW8c2cMEHIYHzayOVyHDhwAK1bt9ZIDUNIVvqKkJAQk+YpZTCsCROElsN+3nIZFsXWp4wyQaidnTt3Cvx2d3c3mW1lcjLiBgxA/Lhx4JRKk9nVF3d3dxBCULFiRVo2fvx4es779++3mm/mgglCBoOh4vnz55g5c6ZoIJrSpUtjxYoVSEpKsrabDIZRMEFoOeznLZdhUUwhCPv37282QahPcnlT9Wkv7NmzR+B3oUKFrO2SySlTpozGuTVq1Iiec1RUlBW9Mw9MEDIYDHUyMzPx66+/ws/PT+P/YC8vL0yfPp0lvGfYLUwQWg77ectlWBRTCMI9e/bQF/c9e/YY7RMThNI4ePCgwO/ixYtb2yWTU6tWLRBCIJPJoFAowHEcChQoAEIIihUrZm33zIJcLsef+//An/v/YFPCGAyGAI7jcPbsWbRq1Urj/2J3d3dMnTqVCUOG3cEEoeWwn7dchkUxhSDcv38/UlNTTRb2nQlCaZw8eVLgd7ly5aztkslp3bo1Pb/379/j5cuXdL9ly5bWdo/BYDCsRnh4OPr37w9nZ2cmDBl2DROElsN+3nIZFsVUgtCU8G1b6o+DKjAOP3iJrXPhwgXBteKvs8st8Kcj37t3TxBQZsqUKdZ2j8FgMKzOq1evMGLECLi4uAj+T/Dw8MC0adM0IlQzGLYGE4SWgwlChihMEGaRnJyMgwcP2nwybj5Xr14VXCs/Pz9ru2RyJk6cSM/v/PnzWLhwId3fvXu3td1jMBgMm+Hly5cYPny4hjCUyWSoWbMmZs2ahStXrrBk9wybgwlCy8EEIUMUJgjtl9u3bwuuVd26da3tkslZvHixYK3q0KFD6f7169et7Z5ZyMzMxIbN67Fh83oWVIbBYOiNNmGo2goUKIDu3btj69atbPSQYRMwQWg5mCBkiGLrgjAxMdGktnMTDx48EFyrwMBAa7tkcrZs2ULPb/Xq1WjTpg3df/v2rbXdMwssyiiDwTAFL1++xLRp01CtWjWt/38TQlC7dm388MMPuHXrFkt6z7AKTBBaDiYIGaKYQhDu27fPpD6xEUJp/Pfff4JrFRQUZG2XTA5/zeCcOXNQtWpVEELg7OwMpRXzI5oTJggZDIapiYyMxObNm9GtWzfkz59f6//nxYsXx+DBg3Hw4EEkJydb223GJwIThJaDCUKGKEwQ2i+vX78WXKsWLVpY2yWTc+3aNXp+I0aMoCknypQpY23XzAYThAwGw5zI5XJcvnwZ06ZNoz+yiW2urq5o2bIlVq1ahWfPnlnbbUYuhglCy8EEIUMUWxeElko7YY9ER0cLrlXr1q2t7ZLJ4Y+C8qeLNmzY0NqumQ0mCBkMhiV58eIF1q5dizZt2sDNzU3r//W+vr6YMmUKLl++nGtnaDCsAxOEloMJQoYoti4I7Snqp6VJSkoSXKt27dpZ2yWTExMTQ8+vXLly9HOvXr2s7ZrZYIKQwWBYi5SUFBw5cgRDhw5FyZIltf6/X6ZMGcyaNQsRERHWdpmRC2CC0HIwQcgQhQlC+yUzM1NwrTp16mRtl0xOamqq6HcuN+cgZIKQwWDYAhzH4e7du5g/fz7q1asHmUwm+ve4QYMG2LBhA5vRwzAYJggtBxOEDFGYILRfOI4TXKuuXbta2yWTo36Oqm3VqlXWds1syOVy/LYnBL/tCYFcLre2OwwGgwEAiIqKwrZt29CiRQs4ODho/F12c3ND9+7dsXPnTrx//97a7jLsCCYILQcThAxRbF0QxsXFmdR2boN/rb755htru2MW8ubNq/Gd+/XXX63tFoPBYHyyREZGYvHixahUqZLWdwN/f39MmzYNoaGhbLYDQydMEFoOJghzAa9fvza5TVsXhLGxsSa1ndvgX6vcuq7O29tb4zt3+PBha7vFYDAYnzwcx+HGjRsYOXIkChUqpPU9IV++fGjfvj0WL16M0NBQltKCIYAJQsvBBKEdc/z4cdSrV090BCg+Ph4jR45EcHAwJk2ahLlz5+pl2xSC8NKlS3r1qU8/TBDqhn+t+vXrZ213zELp0qU1vnMXLlywtlsMBoPB4JGRkYELFy5g2rRp8PPz0/rOQAiBo6Mj/Pz8MHz4cOzYsQOPHz8Gx3HWPgWGlWCC0HIwQWinxMbGIjo6GpUrVxYVhM2aNcOSJUvofosWLbBy5UrJ9g0VhHv27EGJEiXQvXt3k/8RZ4JQOvxrNWDAAGu7YxYqVqyo8TJx69Yta7tlNjIzM7F1xxZs3bGFTbNiMBh2y7t377Bjxw707t0bhQsX1ikQCSEoVKgQWrdujblz5+L06dMsSM0nBBOEloMJQjsnMDBQQxBeunQJhBA8fvyYlm3duhUlS5aU/CJpqCB8+fKl2X7N4/cTExNjlj5yC/xrNWjQIGu7YxZq1Kih8eLA/87nNliUUQaDkdtQKpV48OABNm/ejMGDB6NKlSpao5aqNplMBl9fXwwcOBAbN27EvXv3WP7DXAoThJaDCUIjUSqVCAkJwdKlS63Sv5ggnDt3LlxdXQVlYWFhIITg9u3bkuwaIwjNRZUqVWg/GRkZZusnN8C/J0OGDLG2O2ahYcOGGi8Kb9++tbZbZoMJQgaD8SmQkJCAs2fPYt68eWjbtq2kUURPT08EBQVh5syZOHLkCPvROJfABKHlYILQQDiOw++//04jafXv319r3YyMDCxduhTdu3fHmDFj0Lx5c8yZM8ckL3VignDIkCH47LPPBGWPHz8GIQT79++XZNcWBeGLFy8wadIknD9/3mx95Bb4v7AOHz7c2u6YhRYtWmi8FOTmgARMEDIYjE8RjuPw5MkT7Ny5EyNGjECNGjXg5OSUo0gsUaIEGjVqhO+++w5Lly7FgQMH8ODBA6Snp1v7lBgSYYLQcjBBaCDh4eGIiIjApk2bdArCzMxMNGvWDHXq1KF/hFJSUuDn54dWrVpBoVDQunK5XOcmNiVCTBCOHDkSJUuWFJQ9fPgQhEiP/GmoIHzx4oUk+wzz4uzsnOsFYadOnQTfPQcHh1wdfIAJQgaDwcgiJSUFly5dwpIlS9C5c2cUK1YsR4HI/7+iUqVKmDZtGm7cuJGr/9+wd5ggtBxMEBrJ+fPndQrCOXPmgBCCU6dOCcqPHDkCQgh+/vlnWpbTHzGx4DFignDhwoXw8PAQlF29ehWEEFy/fl3SeTFBaN/kyZMn108Z7d27t8aUodwME4QMBoMhDsdxePnyJfbs2YNx48ahQYMGkqaaEkJQqlQpjBkzBqGhoYIf6RnWhwlCy8EEoZHoEoTp6enw8vKCu7u7xh+ZzMxM5MmTByVKlDBqMbSYILx9+zYIIYL8hBs3bkSRIkUgl8sl2bXFKaMM6eTLl4/ek4EDB1rbHbMwePBgwXevePHi1nbJrDBByGAwGPoRFxeHsLAw7Nq1C7Nnz0bPnj3h7+8PBwcHUXHo7e2NQYMG4fTp00wc2gBMEFoOJgiNRJcgVEX7rF27tmhbVZTEsLAwg/sPCAgQHTls2LChYPSxVatWmDNnjmS7TBDaNwX+396dx0VV7/8Df2PiCiIYuaBhqeGWKSpquFSmhV7xgomhuJDWtcW4XhO1+w1Mi+tuN7tqLt3UXLK80q2UB1aoLYq7ed2VDPdUEmUZBobX749+Mw9GDgPDObO/no/H+cNz5gyfz5vP8XxezJxz/P1NvxNL17e6soSEBLOxFxIS4ugm2ZRer8cnG9bhkw3rGAiJiFS4fv06Vq5ciYiICLNLLMouTZo0QUJCAjIzM/m1UgdhILQfBkKVLAXC5cuXQ0QQFRWluG9kZCREBCtXrrT65+bm5mLt2rWoX78+goODsXXrVhQWFpq237hxA/Hx8ViwYAFmzJiBGTNmWPx0eC9WJAAAIABJREFUUKfTITc317RcvHiRXxl1YYGBgabfyciRIx3dHJuYMWOG2djr1q2bo5tEREQu5vbt21i/fj2GDRuGevXqKYbDVq1a4a233sLJkycd3VyPwkBoPwyEKlkKhCkpKRARxMXFKe4bGxsLEcGcOXNs3MrKJScnK/4nyEDomspeYB8TE+Po5tjE7Nmzzcbek08+6egmERGRC8vPz8dnn32GqKgo1KpVS3FeFBoaivfffx83btxwdHPdHgOh/TAQqmQpEC5atMhiIIyLi4OIICUlxcatrBw/IXQvLVq0MP1Ohg0b5ujm2MTChQvNxl5kZKSjm0RERG7i999/x+rVq9G/f3+zRzkZF29vb0RFRSE1NZVf47cRBkL7YSBUyVIg3LhxI0QE0dHRivtGR0dX+yujtsa7jLq2hx56yPQ7GTp0qKObYxPLli0zG3ujRo1ydJNsitcQEhE5xpUrV/Dee++hW7duFd6MJiEhAYcPH3Z0U90KA6H9MBCqZCkQZmZmQkTQq1cvxX179uyp+qYytlLdQHjhwgU7tI4q88gjj5h+J4MGDXJ0c2xizZo1ZmNv4sSJjm6STfEuo0REjnf8+HEkJiZW+OzDrl27YsWKFbh7966jm+ryGAjth4FQJUuBsKSkBIGBgWjQoEG5O1SVlJTAx8cHgYGBqh47YSsMhK6tXbt2pt/JwIEDHd0cm/jss8/Mxt7UqVMd3SSbYiAkInIexcXF2LZtG2JiYhSvN/T19cXLL7+MI0eOOLqpLouB0H4YCFWq7MH0SUlJEBHs2rXLbH16ejpEBElJSXZopfUYCF3bo48+avqd9O/f39HNsYmvv/7abOy9++67jm6STTEQEhE5p5ycHCxdutT0OLF7lx49euCjjz5Cfn6+o5vqUhgI7YeBUCXjdYLDhw9X3F5QUIDQ0FD07t0bRUVFAIDCwkJ0794doaGhKCgosGdzq4yB0LV16dLF9Dvp16+fo5tjE8Y/xhiX/fv3O7pJNsVASETk/Pbv348JEyagfv365YJhQEAAVq9ezecaVhEDof0wEFZTVlYWFi1ahODgYIgI6tSpg+TkZKSnp5d7bV5eHqZPn47Bgwdj0qRJiIiIQGJiIvLy8hzQ8qrhg+ldW1hYmOl38vjjjzu6OTaxZ88es7Hn7hgIiYhcR25uLpYuXYrHHnusXDB84okncPr0aUc30ekxENqP+8+iqFqsOQiXLFni1sHDFYWHh5tOPBXd1MjVFRUVISQkBF5eXvjqq68c3RybYyAkInI9paWl2Lt3L0aMGGEWCmvXro133nnH9O0xKo+B0H4YCEmRtQdhVlYWiouLbdwqqqojR46YTjoHDhxwdHNsRqfT4fbt245uhl3o9Xr8e+1H+PfajxgIiYhcUFpaGlq2bGkWDDt27Ig9e/Y4umlOiYHQfhgISREPQtd3+PBhHDx40NHNICIiov8vLy8Pb7zxBmrUqGEKhV5eXnj11VeRk5Pj6OY5Fc5F7YeBkBTxICQiIiKyjYMHDyI0NNTs00IvLy+EhIQgNjYWCxYsQEZGhsd8C0YJ56L2w0BIingQEhEREdlOcXExFi5ciHr16ik+rsK4tG7dGiNGjMC8efPw7bffeswniZyL2g8DISniQUjkXIqLi7Fp80Zs2ryR1+sSEbmRrKwsvPbaa+jWrZviQ+6VlocffhjDhw/HnDlzkJ6ejlu3bjm6G5rjXNR+GAhJEQ9CIufCu4wSEbm/oqIiHDp0CKtWrcLLL7+MsLAw1K5du0ohsWXLlhg2bBjeffddpKWl4caNG47ujiqci9oPAyEp4kFI5FwYCImIPJNer8fRo0fx0Ucf4dVXX0WvXr1Qt27dKoXEFi1a4M9//jNmz56Nbdu24dq1a47uTpVxLmo/DISkiAchkXNhICQiIqPi4mIcO3YMH3/8MV5//XWEh4dXei2icQkKCkJkZCTefvttfPnll7hy5Yqju6OIc1H7YSAkRTwIiZwLAyEREVlSUlKCEydOYN26dfjrX/+KPn36wMfHp0ohsUmTJnjmmWcwdepUrFu3DkeOHIFOp3NofzgXtR8GQlLEg5DIuTAQEhGRtQwGA06dOoX169fjb3/7G5544gk0aNCgSiGxZs2a6NixI2JjYzFnzhzs27cPBoPBbm3nXNR+GAhJEQ9CIufCQEhERFowGAw4c+YMNm3ahKlTp+Kpp56Cv79/lULi/fffj5EjR2Lt2rU2vx6Rc1H7YSAkRTwIiZyLXq/HitUfYsXqDxkIiYhIU6Wlpbh06RK2b9+OuXPnYtSoUXj00Ufh7e1tMSCGhobizTffxO7duzV/JBLnovbDQEiKeBASERERebaioiL8/PPPWL58OaKiouDr61thOPTz88OwYcOwcuVKZGdnq/7ZnIvaDwMhKeJBSERERERlFRUVYefOnZg+fTo6d+5s8dPDDh06YMqUKdixY0e1blDDuaj9MBCSIh6ERERERGTJlStX8PHHH+P5559HQEBAheGwXr16GDJkCFauXImrV69W6b05F7UfBkJSxIOQyLkUFxdjy9bPsWXr55pfp0FERKRWSUkJ9u7di5kzZ6Jnz57w8vKqMCCGhYXhnXfewdGjR1FaWqr4fpyL2g8DISniQUjkXHiXUSIiciU3b97Epk2bMG7cODRu3LjCcBgcHIzXXnsNO3bsMPuDJ+ei9sNASIp4EBI5FwZCIiJyVQaDAZmZmfi///s/dOrUqcJw2KRJE0yePBkHDhzA7du3ORe1EwZCUsRASORcGAiJiMhdXLhwAUuWLMHAgQMrfLRFmzZtOBe1EwZCUsRASORcGAiJiMgd5ebmYvPmzYiOjkatWrXKBUPORW2PgZAUMRASORcGQiIicnc5OTlYsWIF+vbty0BoRwyEpIiBkMi5MBASEZEnOXbsGOeidsJASIoYCImci16vx9IP/4WlH/6LgZCIiNwe56L2w0DoJi5duqRq+714EBIRERGRo3Auaj8MhC5u+/bt6NWrF0aMGFGt7RXhQUhEREREjsK5qP0wELqwW7du4caNG+jYsaNi4KtsuyU8CImIiIjIUTgXtR8GQjfQr18/i4Gvsu1KeBASOZfi4mJ88eUX+OLLL1BcXOzo5hAREdkU56L2w0CoAYPBgI0bN2L+/PkO+fkMhETuj3cZJSIiT8K5qP0wEKpQWlqKTz/9FO3bt4eIYOzYsRW+tqioCPPnz0dMTAwSEhIwcOBAzJw5U5OJHQMhkftjICQiIk/Cuaj9MBCqcOzYMZw9exarVq2yGAj1ej0GDBiAHj16QKfTAQDy8/PRpUsXREREoKSkxPTa4uJii4vBYCj3/gyERO6PgZCIiDwJ56L2w0CogYyMDIuBcObMmRARpKenm63/6quvICJYvHixaZ2IWFyUgh0DIZH7YyAkIiJPwrmo/TAQasBSINTpdGjYsCHq169v9kkg8McEr27duggKClL85K+qGAiJ3B8DIREReRLORe2HgVADlgLh999/DxFBWFiY4r5du3aFiCAzM7PaP793794WA19l25XwICRyLgyERETkSTgXtR8GQg1YCoTLly+HiCAqKkpx38jISIgIVq5cafXPzc3Nxdq1a1G/fn0EBwdj69atKCwsrPL2snQ6HXJzc01LdnY2RAQXL140W8+FCxfHLDdv3sTcBXMxd8Fc3Lx50+Ht4cKFCxcuXGy5XLx4ESKC27dvWz1HJuswEGrAUiBMSUmBiCAuLk5x39jYWIgI5syZY+NWWpacnFzp9YtcuHDhwoULFy5cuNhzuXjxokPnyJ6AgVADlgLhokWLIFJxIIyLi4OIICUlxcattOzeTwh//fVXiAiys7Md/hciR/9lytM/JWUdWAPWgHVgDVgD1oE1sHcNbt++jYsXL6q6zwZVDQOhBiwFwo0bN0JEEB0drbhvdHQ0RKr3lVFbys3l97ZZgz+wDqwBwBoYsQ6sAcAaGLEOrAHAGrgDBkINWAqEmZmZEBH06tVLcd+ePXtCRN1NZWyBBzdrYMQ6sAYAa2DEOrAGAGtgxDqwBgBr4A4YCDVgKRCWlJQgMDAQDRo0QGlpabltPj4+CAwMdLqPw3lwswZGrANrALAGRqwDawCwBkasA2sAsAbugIFQA5U9mD4pKQkigl27dpmtT09Ph4ggKSnJDq20jk6nQ3JyMnQ6naOb4jCswR9YB9YAYA2MWAfWAGANjFgH1gBgDdwBA6EGjNcJDh8+XHF7QUEBQkND0bt3bxQVFQEACgsL0b17d4SGhqKgoMCezSUiIiIiIgLAQKhKVlYWFi1ahODgYIgI6tSpg+TkZKSnp5d7bV5eHqZPn47Bgwdj0qRJiIiIQGJiIvLy8hzQciIiIiIiIgZCIiIiIiIij8VASERERERE5KEYCImIiIiIiDwUAyEREREREZGHYiAk0sDx48exYcMGbN682dFNISIichieD12XwWDAxo0bMX/+fLv/bL1ejx9//NHuP5f+wEBIVXLu3Dn4+PggIyOjyvu4+8Gdn5+Pd999F23btsX06dORlZXl6CY5LWcdC0VFRZg/fz5iYmKQkJCAgQMHYubMmdDr9VXa/8qVKxg/fjxGjRqFkSNHom/fvvjss89s3Gr1eNJX5si6OALHQcW0ro2791fN+dDda+MKSktL8emnn6J9+/YWn6tdEWvPhampqRCRcsuaNWtU9oSqi4HQTamd6JZVXFyMnj17QkQqDISudHBrUZvTp0+jdevW6NChA86dO2fD1qqnpr8ffPCB4u/VuAQEBJTbx1XGgl6vx4ABA9CjRw/Tw3Tz8/PRpUsXREREoKSkxOL+ly5dwoMPPojly5eb1h0+fBh169bF3Llzbdr26lJ70rd2LLnKWFBbl5MnT+K5555DQEAAvL298cgjj2DOnDkoLi62TYNVUtvfy5cvY8KECXjwwQdRr149dO7cGevWravw9a4yDgD1tQE8r7/WnA89qTaXL19GQkICxo0bh/Hjx+PZZ5/FxIkTce3aNds0WIVjx47h7NmzWLVqldV9rc65sHv37hgwYACeeeYZ0zJixAg+2N6BGAjdkNqJ7r2SkpLQuXNni4HQVQ5uLWpz+vRpBAQEoFWrVvjtt99s3WRV1Pa3Xbt26N27N+Lj4zF+/Hizxd/fHy+99FK5fVxlLMycORMiUu65oV999RVEBIsXL7a4f2RkJBo1alSuhpMmTcJ9992HQ4cOad5mtdSc9KszllxlLKipy4ULF+Dv748+ffpg5MiR6N69u2mSGxcXZ7tGq6Cmv1euXEGnTp2QmJiIDRs2YN68eQgKCoKIYNOmTYr7uMo4ANTVxsiT+mvt+dBTapOdnY3AwEAsXbrUtM5gMGD06NFo1aoV8vPzbdBi9TIyMqzuq7Xnwu3bt2PIkCFaNJc0xEDohtROdMv68ccfER8fj+Tk5AoDoSsd3GprU1RUZPpr4ffff2/LpmpCTX937NiB2bNnK2777bffULNmTXz33Xdm611lLOh0OjRs2BD169cvdxLT6/WoW7cugoKCYDAYFPe/fPkyvLy80Ldv33Lb0tLSnDoMANU76Vs7llxlLJRVnboMHjwYX375pdm6LVu2wMvLCyKCo0ePatxK7VSnv1OmTMGpU6fM1u3duxcigujo6HKvd8VxAFSvNoBn9dfa86En1ebNN9+EiODu3btm6w8cOAARwdatWzVupTas7Wt1zoXh4eGIj49Henp6ufqQ4zAQuhm1E92y7ty5gyeffBK5ubkWA6GrHNxa1GbZsmUQETzxxBO2bq5qavt78eJFlJaWKm5bsmQJmjZtWm5fVxkL33//PUQEYWFhitu7du0KEUFmZqbi9v/+978QETz//PPltv36668QEQQGBmraZi1Ze9KvzlhylbFQlrV1uXbtGhISEhS3DR06FCKCjRs3athCbVVnovu///2v3Lr8/HyICF588cVy21xxHADVD4Se1F9rz4eeVJvXXnsNIoI9e/aYrd+3bx9EBGlpaRq3UhvW9tXac+F3331n9lXhWrVq4bnnnuM9GJwAA6GbUTvRLSs+Ph67d+8GgAoDoSsd3FrUJjQ0FCKCSZMmIS4uDs2bN0fdunXRtWtXp7ujmpZj4V49e/bE66+/brbOlcbC8uXLISKIiopS3B4ZGQkRwcqVKxW3f/LJJxARPPvss+W2FRYWmmrw+++/a9purVh70rd2LLnSWCjL2rrcuXMHt2/fVtyWmJgIETH9H+qMqht67pWWloYHHnig3O/XVccBUL3aeFp/rTkfelpttm7dChFBp06dcP36ddP6cePGoWPHjigqKrJBS9Wztq/WngsvXbqEbdu2YdmyZYiJiUHt2rUhImjQoAH27dunZVfISgyEbkbtRNfo008/xYwZM0z/rigQutLBrbY2OTk5pq+BDRs2DKdPn4ZOp8Pu3bvRunVriIjZRdWOptVYuNe5c+cgIvjpp5/M1rvSWEhJSbH4tc7Y2FiICObMmaO4/ZtvvoGI4KGHHlLcbjwJXr58WbM2a8nak761Y8mVxkJZWgUkABgzZgyaN2/utDeWAbTp7/79+9GuXTv8/PPP5ba56jgAqlcbT+qvtedDT6qN0QsvvAARQbNmzbBu3TrEx8dj3LhxyMnJsU1DNWBtX9WeCy9fvmz6NkWzZs1QWFhY3aaTSgyEbkbtRBf446uCTz31lNmdAy19ZbQsZz641dbm6NGjEBE0bNgQBQUFZtuOHDkCEYG/v3+5bY6ixVhQMmvWLAQHB1f6OmceC4sWLbJYm7i4OIgIUlJSFLfn5+fDz88PIoKdO3eabcvJyTGdBJ2pz2VZe9JXO5aceSyUpVUg1Ov1eOCBB5zyzollqenvzp07MXToUNSoUQMiAj8/P6Smplrcx1XGAaDNWHDn/qo9H7pzbYxKS0uRlJRkCs6PPfaY09+V3Nq+anEuNBgMGDJkCEQEn3/+uZrmkwoMhG5G7UTXYDBg0KBBOHHihNn6qgZC43s448GttjbGr8316NFDcbvx4nprntVoS2r7W5GQkBBMmzatSq911rGwceNGiCjfBAMAoqOjK/301Hj9TJs2bXD06FEYDAYcO3YMMTExEBE0bdrUVs1XzdqTvhZjyVnHQllaBcLFixcjNjZWm0bZkJr+GgwG3LlzB/v27cP48eMhIvD19a30U3FXGAeAdmPBXfurxfnQXWtjVFhYiIkTJ2LMmDFo1aoVRAQ+Pj74z3/+Y5uGakDNtaRqzoX79++HiGDevHkqWk9qMBC6GbUT3Xnz5uGtt97C1atXzZYpU6ZARLBlyxZcvXq10gvCnfHgVlubn3/+2eIJ0Lj/+vXrNWuzGlqEnnsZ75B2+PDhKu/jjGMhMzMTIoJevXopbjc+d7Oy6ys3bNiA0NBQ+Pr6Ijg4GC+88AKWLFkCEcGYMWNs0XRNWHvS12osOeNYKEuLEHD48GFERkY67TVCZWn5FVnjTTSq8qmos48DQNvauGN/tTofumNtAODu3bvo2bMnXnjhBQB/hMPJkydDRFCzZs1qXbtvD9Ud92rPhcbrDZcsWVLNlpNaDIRuRu1Et1+/fqaP+C0tycnJFtvhjAe32trodDp4e3tX+HXJkSNHQkSc5q9/WoWesiZPnoyQkBCr2uGMY6GkpASBgYFo0KBBuTuplpSUwMfHB4GBgVW6G++9jH/xdpZPipVYe9LXaiw541goS20IOHPmDGJjY53ma+OV0TL0GMfIP/7xj0pf6+zjANC2Nu7YX63Oh+5YG+CPSytEBGfOnDFbb3x8T0V/XHM0Lce9NefCs2fPQkSwd+9e1T+XqoeB0M2onehmZmZi+/bt5ZZRo0ZBRDB37lxs374dZ8+etdgOZzy4tQgBAwcOhJeXF27evFlu29NPPw0RqbQ29qJ16DEYDGjatGmlfwy4lzOOBQBISkqCiGDXrl1m69PT0yEiSEpKMq0rKSnB559/Xu7kfq+dO3fCy8sLgwcPtkmbtWLtSV+rseSsY8FIzWTozJkzGDt2rMuEQUDbyd+hQ4eq/AcxZx8HgLa1cdf+anE+dNfaREREKF47p9PpUKdOHbRt21bjVmqjsr6qPRcWFhYqPs7qjTfecInHebkzBkI3ZIuJbkXXELrawa22NsaHcC9btsxsf71ej0aNGiE8PNy2HbCSlmNhx44dEBGcPHlScburjYWCggKEhoaid+/epq/3FRYWonv37ggNDTWb2H/44YcQEQQFBVX4ftnZ2WjRogXatm3r1HeRA6p30rdmLLnaWDCq7mTo1KlTGDNmjGIY/PHHHyu92YqjaDX5A4C5c+fi4YcfNvuqrKuOA6B6tfG0/lpzPvS02sTHx0NEFJ/b6efnhwEDBtiquaoYLw8YPny44nY158KsrCx4e3ujcePGWLFihekPiGvXrkVYWBiuXr2qbWfIKgyEbkjriS6gHAhd8eDWojajR49G48aN8csvv5jWLVu2DI0aNSp3Mx5H03IsjBs3Do899pjiNlccCwCQl5eH6dOnY/DgwZg0aRIiIiKQmJiIvLw8s9f98MMP8Pf3R0xMjOL7HDp0CC1btsTTTz+N3377zR5NV6U6J/2qjiVXHQtA9epy8uRJNG3aFJGRkRgxYoTZMmjQIAQHB5vdsdmZWNvfO3fuoFmzZggLC8N3331nel1aWhratWtnNvl15XEAWF8bT+uvUVXOh55YmxMnTsDPzw+RkZHQ6XSm9Rs2bECtWrWc7vmkWVlZWLRoEYKDgyEiqFOnDpKTk5Genm72OjXnwqKiIkycOBFNmjSBt7c3unXrhrFjx2LNmjUucc21u2MgdFNaTXSNlAKhqx7camtjMBiwcOFC9OjRA2PHjkV8fDzi4uJw/vx5e3ajyrQYC4WFhWjQoEGF1we56lhQo7S0FAcPHsRLL72ELl26YO3atdW65tCe1J70qzKWXHEsVLcuWVlZaNy4scXrrf/+9787oksWVbe/paWlGDNmDBo2bIiaNWsiLCwM48ePx3vvvVfu/xNXHAdA9Wvjaf01qsr50FNr88svv2DChAno378/xo8fjxdffBGxsbE4duyYPbthc654LqTyGAiJiKrhk08+wfr165GVleXophARETkEz4XugYGQiIiIiIjIQzEQEhEREREReSgGQiIiIiIiIg/FQEhERG7lwQcfNN0EonXr1ujUqZPpJi9t27ZF586d4e/vDxFBQECA4u3wiYiIPAUDIRERuY0zZ87A398fX3zxBUpKSgAAR44cgYigRo0apudiFRUVIS4uDtHR0YrvY3z9uHHjMGXKFCxdulTxdefPn8e0adPQrVs3NG7cGEFBQfD19TW702hlj/VRkpqaih49epjeo1mzZkhJScGlS5fMXldSUoIFCxagffv2EBH07t0bu3fvxrlz5zBlyhRMnjwZbdq0gYggOTnZ6nYQEZH7YyAkIiK3sXTpUmzZssVs3cKFCyEiCAsLM1v/zTff4IMPPlB8HxFBr169Kvw5paWlePvtt1GzZk106NABW7duRWFhoWnb/v37MWDAAIgI/P39q9WXgoICtG7dGiJS6cO7Z82ahZCQELNnnhkZHyDOQEhEREoYCImIyG2kpqaWWzdo0CDFZwIeOnQIZ86cUXwfEUG/fv0q/DmvvPKKKagVFBQovqa0tBSRkZGoU6dO1Ttwj82bN0NE4OXlhbNnz1b4uscffxxr1qxR3JaRkcFASEREFWIgJCIit1VcXAwfHx+ICHbt2lXl/SwFwq1bt0JEUK9ePVy7ds3i+9y6dQt+fn7Vvk6xtLQU7dq1g4jgL3/5i+Jrjh49isDAQMVPBwEGQiIisoyBkIiI3NYPP/wAEYGPjw/0en2V97MUCMPCwiAiGDt2bJXea926deV+9oEDBxATE4M+ffqgcePGCA8PR0ZGhuL+a9asgYigdu3auHLlSrntEyZMwIwZMyr8+QyERERkCQMhERG5rbfffhsigsGDB1u1X0WB8MaNG/Dy8oKIYNWqVdVq07fffovu3bvj+vXrAP74FLFVq1bw9vbGTz/9VO71xcXFeOihhyAimDp1qtm2nJwc+Pr6Ijs7u8Kfx0BIRESWMBASEZHb6tOnD0QE//znP63ar6JAePDgQdOdP7/++usK99+zZw8yMjLMlv3790Ov16NFixblrnWcPXs2RKTCu54uW7YMIgJfX1/TnVIBYN68eYiKirLYFwZCIiKyhIGQiIjcUl5eHmrVqgURwYkTJ6zat6JAuHfvXlMgTEtLq3D/CxcuYNWqVabXxsfH45dffkFaWhpEBAMGDMDQoUNNy1NPPYWQkBAMGTJE8f10Oh2aNm0KEcGsWbMAAAaDAS1btsS3335rsS8MhEREZAkDIRERuaXt27dDRNC8eXOr960oEGZnZ5tC3r///e9K3+eBBx6AiCA9PR0AsGDBAogITp8+bXWbjPvef//9yM/PR2pqKtq3b1/pfgyERERkCQMhERG5pTfeeMP06Zy1LN1UxvhswNGjR1f6PsHBwRAR0w1jUlJSzP5tjby8PDRq1Agigvfeew/9+/fHv/71r0r3YyAkIiJLGAiJiMgtdenSBSKCDRs2WL2vpUC4dOlS010/L1y4YPF97g2Ea9euhYjg1VdfVXz9nj17LH56aLxJTqNGjeDn54e7d+9W2hcGQiIisoSBkIiI3M6tW7dQo0YNiEilzwpUYikQGgwGREVFQUQQGhqKmzdvVvg+9wbCq1evwtvbG/fddx+2bdtm9trjx49j0KBBFttlvKuoiGDSpElV6gsDIRERWcJASEREbmfx4sWmT9Kqw1IgBICSkhK8+eabqFWrFlq0aIFVq1aZ3f2zsLAQ69atQ40aNRAQEICTJ0+ats2cORMigho1amDo0KGYPn06YmNjERQUhOPHj1fatmnTpsHLywunTp2qUl8YCImIyBIGQiIichs//PADXnrpJdSuXdt085dXXnkF69evt+p9KguERpcuXcKsWbPQt29AeIRPAAABFUlEQVRfNGnSBM2bN0fbtm3Rpk0bDBo0CO+//z5u3bpVbr/ly5ejQ4cOqFWrFpo3b47Ro0fj/PnzVWrb9evXMXTo0Cr3hYGQiIgsYSAkIiK6R1UDoStgICQiIksYCImIiO7BQEhERJ6CgZCIiOgeIoKQkBCUlpY6uimqpaamMhASEVGFGAiJiIjuER4ejvDwcMTHx2PatGn48MMPHd0kq5w/fx7Tpk1DYmIi/vSnPyE8PByrV692dLOIiMgJMRASERERERF5KAZCIiIiIiIiD8VASERERERE5KEYCImIiIiIiDwUAyEREREREZGHYiAkIiIiIiLyUAyEREREREREHoqBkIiIiIiIyEMxEBIREREREXmo/wfEhRwXEDVREQAAAABJRU5ErkJggg==\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.9, right=0.9,wspace=0.0,hspace=0.25)\n", " sub = fig.add_subplot(1,1,1)\n", " \n", " sub.plot(ax.T,np.abs(ax.dtheta/ax.theta),linestyle='-',linewidth=2,alpha=1,c='xkcd:black',label=r'$\\dfrac{\\delta \\theta}{\\theta}$')\n", " sub.plot(ax.T,np.abs(ax.dzeta/ax.zeta),linestyle='-',linewidth=2,alpha=1,c='xkcd:red',label=r'$\\dfrac{\\delta \\zeta}{\\zeta}$')\n", " \n", " sub.set_yscale('log')\n", " sub.set_xscale('linear')\n", " \n", " sub.set_xlabel(r'$T ~[{\\rm GeV}]$')\n", " sub.xaxis.set_label_coords(0.5, -0.1) \n", " sub.set_ylabel(r'local errors')\n", " sub.yaxis.set_label_coords(-0.1,0.5) \n", " \n", " sub.legend(bbox_to_anchor=(0.98, 0.95),borderaxespad=0., \n", " borderpad=0.05,ncol=1,loc='upper right',fontsize=14,framealpha=0)\n", "\n", " \n", " \n", " \n", " sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5)\n", " \n", " \n", " #set major ticks\n", " _M_xticks=[ round(0.45+i*0.15,4) for i in range(0,15) ]\n", " _M_yticks=[ 10.**i for i in range(-12,5,1) ]\n", "\n", " #set major ticks that will not have a label\n", " _M_xticks_exception=[]\n", " _M_yticks_exception=[]\n", "\n", " _m_xticks=[]\n", " _m_yticks=[] \n", " ft=FT(_M_xticks,_M_yticks,\n", " _M_xticks_exception,_M_yticks_exception,\n", " _m_xticks,_m_yticks,\n", " xmin=0.45,xmax=2,ymin=1e-11,ymax=1e-4,xscale='linear',yscale='log')\n", "\n", " ft.format_ticks(plt,sub) \n", "\n", " \n", " sub.text(x=0.92,y=1e-6, s=r'$T_{\\rm osc}$',rotation=90)\n", " \n", "# fig.savefig('local_errors.pdf',bbox_inches='tight')\n", "\n", " \n", " fig.show()\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,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tWzZUqFQSGPGjFHPnj3L3p/w9ttvT/ZRI5SUlGjlypXq1q2bjDEaN25chdctKCjQnDlzNHLkSE2ePFkDBgxQdna2CgsLK/ycH374QW3btq32t58RhP4eEqtnz55x/z15URkAQJAQhM7xTRBK0uLFi9W6deuyN3g+emlpaVq0aFGyj1jOli1btH37di1dujRqEBYWFqp///7q06eP8vPzJf34BWLPnj01aNAgFRcX235edna2Vq9eXe1zEYT+HhKrW7ducX8CIwgBAEFCEDrHV0Eo/RhO69ev18KFC3XnnXdq/vz5eumll8oiyq3Wrl0bNQizs7NljFFOTk7E5c8995yMMZo3b165z3n22We1bNmyGp2HIPT3kFiWZal27drq27evfv/73+v111+v8D/aVBVBCAAIEoLQOb4LQq+KFoT5+flq2rSpGjRoUO6LysLCQqWmpqpt27YKh8Nll+fk5JR7ZdHq/NwRQejvIbGO/u6EUCikUCikxo0b69JLL9WCBQv0ySef2H5etFcDJggBAEFCEDrHF0F4wQUXaPLkyVW67m9+8xtdeOGFCT5R9UULwtdff13GGGVmZtp+bq9evWSM0aZNmyT9+CI7d9xxh7Zu3aqtW7fqo48+0v3336933nmnyuchCP09JNbpp5+uDz74QPfcc4+GDBmiRo0alQvEDh06aMKECXriiSf03XffSZJuvPHGCn9PghAAECQEoXN8EYSWZemcc86p0nXPP/982/cnTLZoQbh48WIZYzR8+HDbzx06dKiMMVqyZIlefvll1a1bV8aYiPXq1Svqn5+fn6+DBw+Wbe/evQShj4fEOumkkyJ+XVxcrA0bNmjmzJk699xzVbdu3XKBWPoqyBUhCAEAQUIQOidwQXjWWWcpJSUlwSeqvmhBOGvWLBljKnz/xFGjRskYo7vuuqvGf/6MGTPKRSRB6N8hserXr6+SkpIKP37kyBGtWbNGt9xyizIyMlSrVq2yOIz2OQQhACAoCELnBCoIc3Nz1aJFC7Vu3dqBU1VPtCCcO3du1CAcPXq0jDGaNWtWjf98/oUwWENiWZal5557rsrX379/v+bNm6fU1NQKr1NUVKTN72/W5vc388b1AADfIwid48kgXL16tbKysspmWZZat24dcdmxu/LKK9W5c2eFQiGNHDky2TehnGhBuGLFChljNGLECNvPHTFi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91jTp09Xjx49ogahV/5yx+O+2bZtm4477jh17txZ3333XaKPHJNYb2/Xrl3Vr18/ZWVlacKECRFr1qyZrrvuunKf45XHQnZ2towx5d6K5bnnnpMxRvPmzYv6+UOHDlXz5s3L3YeTJk1SrVq1tHnz5rifOVaxPOnX5LHklcdCLPfL559/rmbNmumcc87RVVddpd69e5d9kTt69OjEHToGsdzer776St27d9fUqVP1+OOP6+6771bbtm1ljNETTzxh+zleeRxIsd03pYJ0e6v7fBiU+2bPnj1KS0vTAw88UHZZOBzWmDFj1LlzZx05ciQBJ47d2rVrq31bq/tc+OKLL+rSSy+Nx3ERRwShD8X6he7RNmzYoKysLM2YMaPCIPTSX+5Y75uCgoKy/1r4+uuvJ/KocRHL7X3ppZf0hz/8wfZj3333nWrXrq1XX3014nKvPBby8/PVtGlTNWjQoNyTWGFhoVJTU9W2bVuFw2Hbz//yyy9lWZbOPffcch9bs2aNq2NAqtmTfnUfS155LBytJvfLkCFD9M9//jPisqeeekqWZckYow8++CDOp4yfmtzeKVOm6JNPPom47K233pIxRiNGjCh3fS8+DqSa3TdSsG5vdZ8Pg3Tf3H777TLG6Icffoi4/J133pExRk8//XScTxkf1b2tNXkuPPvss5WVlaWcnJxy9w+ShyD0mVi/0D3aoUOHdMEFF+jgwYNRg9Arf7njcd8sWrRIxhidf/75iT5uzGK9vXv37lVJSYntxxYsWKDjjz++3Od65bHw+uuvyxijzMxM24/36tVLxhht2rTJ9uPPPvusjDG68sory31s9+7dMsYoLS0trmeOp+o+6dfkseSVx8LRqnu/fPPNN5o8ebLtx4YNGyZjjFasWBHHE8ZXTb7Q/c9//lPusiNHjsgYo4kTJ5b7mBcfB1LNgzBIt7e6z4dBum9uvPFGGWO0cePGiMv//e9/yxijNWvWxPmU8VHd21rd58JXX3014luF69Spo8svv5zXYHABgtBnYv1C92hZWVl67bXXJKnCIPTSX+543DcZGRkyxmjSpEkaPXq02rVrp9TUVPXq1ct1r6gWz8fCsfr27atf//rXEZd56bGwePFiGWM0fPhw248PHTpUxhgtWbLE9uOPPvqojDG65JJLyn0sLy+v7D74/vvv43rueKnuk351H0teeiwcrbr3y6FDh3TgwAHbj02dOlXGmLL/DXWjmkbPsdasWaOWLVuW+/+vVx8HUs3um6Dd3uo8Hwbtvnn66adljFH37t317bffll0+fvx4nXbaaSooKEjASWNX3dta3efCL774Qi+88IIWLVqkkSNHqm7dujLGqHHjxvr3v/8dz5uCaiIIfSbWL3RLrVy5UrfddlvZrysKQi/95Y71vtm/f3/Zt4Fddtll2rZtm/Lz8/Xaa6/pxBNPlDEm4oeqky1ej4Vj7dixQ8YYvfnmmxGXe+mxMGvWrKjf1jlq1CgZY3TXXXfZfvzll1+WMUadOnWy/Xjpk+CXX34ZtzPHU3Wf9Kv7WPLSY+Fo8QokSRo7dqzatWvn2heWkeJze99++2117dpVH374YbmPefVxINXsvgnS7a3u82GQ7ptS11xzjYwxatOmjZYvX66srCyNHz9e+/fvT8xB46C6tzXW58Ivv/yy7Lsp2rRpo7y8vJoeHTEiCH0m1i90pR+/VfDCCy+MeOXAaN8yejQ3/+WO9b754IMPZIxR06ZNlZubG/Gx999/X8YYNWvWrNzHkiUejwU7M2fOVHp6eqXXc/NjYe7cuVHvm9GjR8sYo1mzZtl+/MiRI2rSpImMMVq3bl3Ex/bv31/2JOim23y06j7px/pYcvNj4WjxCsLCwkK1bNnSla+ceLRYbu+6des0bNgwhUIhGWPUpEkTrV69OurneOVxIMXnseDn2xvr86Gf75tSJSUlmj59elk4n3766a5/VfLq3tZ4PBeGw2FdeumlMsboySefjOX4iAFB6DOxfqEbDoc1ePBgffzxxxGXVzUIS38PN/7ljvW+Kf22uT59+th+vPSH66vzXo2JFOvtrcjJJ5+sadOmVem6bn0srFixQsbYvwiGJI0YMaLSfz0t/fmZLl266IMPPlA4HNaWLVs0cuRIGWN0/PHHJ+r4Mavuk348HktufSwcLV5BOG/ePI0aNSo+h0qgWG5vOBzWoUOH9O9//1sTJkyQMUaNGjWq9F/FvfA4kOL3WPDr7Y3H86Ff75tSeXl5uv766zV27Fh17txZxhg1bNhQ//jHPxJz0DiI5WdJY3kufPvtt2WM0d133x3D6RELgtBnYv1C9+6779bvf/97ff311xGbMmWKjDF66qmn9PXXX1f6A+Fu/Msd633z4YcfRn0CLP38xx57LG5njkU8oudYpa+Q9t5771X5c9z4WNi0aZOMMTrzzDNtP176vpuV/Xzl448/royMDDVq1Ejp6em65pprtGDBAhljNHbs2EQcPS6q+6Qfr8eSGx8LR4tHBLz33nsaOnSoa39G6Gjx/BbZ0hfRqMq/irr9cSDF977x4+2N1/OhH+8bSfrhhx/Ut29fXXPNNZJ+jMObbrpJxhjVrl27Rj+774SaPu5jfS4s/XnDBQsW1PDkiBVB6DOxfqF73nnnlf0Tf7TNmDEj6jnc+Jc71vsmPz9fKSkpFX675FVXXSVjjGv+61+8oudoN910k04++eRqncONj4Xi4mKlpaWpcePG5V5Jtbi4WA0bNlRaWlqVXo33WKX/xdst/1Jsp7pP+vF6LLnxsXC0WCPg008/1ahRo1zzbeOViWf0lD5G/vSnP1V6Xbc/DqT43jd+vL3xej70430j/fijFcYYffrppxGXl759T0X/cS3Z4vm4r85z4fbt22WM0VtvvRXzn4uaIQh9JtYvdDdt2qQXX3yx3K6++moZYzR79my9+OKL2r59e9RzuPEvdzwiYMCAAbIsS//73//Kfeziiy+WMabS+8Yp8Y6ecDis448/vtL/GHAsNz4WJGn69Okyxmj9+vURl+fk5MgYo+nTp5ddVlxcrCeffLLck/ux1q1bJ8uyNGTIkIScOV6q+6Qfr8eSWx8LpWL5YujTTz/VuHHjPBODUny/+Nu8eXOV/4OY2x8HUnzvG7/e3ng8H/r1vhk0aJDtz87l5+erXr16OuWUU+J8yvio7LbG+lyYl5dn+3ZWN998syfezsvPCEIfSsQXuhX9DKHX/nLHet+Uvgn3okWLIj6/sLBQzZs319lnn53YG1BN8XwsvPTSSzLGaOvWrbYf99pjITc3VxkZGerXr1/Zt/fl5eWpd+/eysjIiPjC/sEHH5QxRm3btq3w99uzZ4/at2+vU045xdWvIifV7Em/Oo8lrz0WStX0i6FPPvlEY8eOtY3BDRs2VPpiK8kSry/+JGn27Nk64YQTIr5V1quPA6lm903Qbm91ng+Ddt9kZWXJGGP7vp1NmjRR//79E3XcmJT+eMAVV1xh+/FYngt37dqllJQUtWrVSn/5y1/K/gPismXLlJmZqa+//jq+NwbVQhD6ULy/0JXsg9CLf7njcd+MGTNGrVq10meffVZ22aJFi9S8efNyL8aTbPF8LIwfP16nn3667ce8+FiQpMOHD+vWW2/VkCFDNGnSJA0aNEhTp07V4cOHI673xhtvqFmzZho5cqTt77N582Z17NhRF198sb777jsnjh6TmjzpV/Wx5NXHglSz+2Xr1q06/vjjNXToUP385z+P2ODBg5Wenh7xis1uUt3be+jQIbVp00aZmZl69dVXy663Zs0ade3aNeKLXy8/DqTq3zdBu72lqvJ8GMT75uOPP1aTJk00dOhQ5efnl13++OOPq06dOq57f9Jdu3Zp7ty5Sk9PlzFG9erV04wZM5STkxNxvVieCwsKCnT99derdevWSklJ0RlnNVY5egAAB5pJREFUnKFx48bpkUce8cTPXPsdQehT8fpCt5RdEHr1L3es9004HNY999yjPn36aNy4ccrKytLo0aO1c+dOJ29GlcXjsZCXl6fGjRtX+PNBXn0sxKKkpETvvvuurrvuOvXs2VPLli2r0c8cOinWJ/2qPJa8+Fio6f2ya9cutWrVKurPW//ud79Lxk2Kqqa3t6SkRGPHjlXTpk1Vu3ZtZWZmasKECbr33nvL/e+JFx8HUs3vm6Dd3lJVeT4M6n3z2Wef6dprr9VFF12kCRMmaOLEiRo1apS2bNni5M1IOC8+F6I8ghAAauDRRx/VY489pl27diX7KAAAJAXPhf5AEAIAAABAQBGEAAAAABBQBCEAAAAABBRBCADwlQ4dOpS9CMSJJ56o7t27l73IyymnnKIePXqoWbNmMsbouOOOs305fAAAgoIgBAD4xqeffqpmzZrpmWeeUXFxsSTp/ffflzFGoVCo7H2xCgoKNHr0aI0YMcL29ym9/vjx4zVlyhQ98MADttfbuXOnpk2bpjPOOEOtWrVS27Zt1ahRo4hXGq3sbX3srF69Wn369Cn7Pdq0aaNZs2bpiy++iLhecXGx/vznP6tbt24yxqhfv3567bXXtGPHDk2ZMkU33XSTunTpImOMZsyYUe1zAAD8jyAEAPjGAw88oKeeeirisnvuuUfGGGVmZkZc/vLLL2vhwoW2v48xRmeeeWaFf05JSYnuuOMO1a5dW6eeeqqefvpp5eXllX3s7bffVv/+/WWMUbNmzWp0W3Jzc3XiiSfKGFPpm3fPnDlTJ598csR7npUqfQNxghAAYIcgBAD4xurVq8tdNnjwYNv3BNy8ebM+/fRT29/HGKPzzjuvwj/nl7/8ZVmo5ebm2l6npKREQ4cOVb169ap+A46xatUqGWNkWZa2b99e4fXOOussPfLII7YfW7t2LUEIAKgQQQgA8K2ioiI1bNhQxhitX7++yp8XLQiffvppGWNUv359ffPNN1F/n3379qlJkyY1/jnFkpISde3aVcYY/eIXv7C9zgcffKC0tDTbfx2UCEIAQHQEIQDAt9544w0ZY9SwYUMVFhZW+fOiBWFmZqaMMRo3blyVfq/ly5eX+7PfeecdjRw5Uuecc45atWqls88+W2vXrrX9/EceeUTGGNWtW1dfffVVuY9fe+21uu222yr88wlCAEA0BCEAwLfuuOMOGWM0ZMiQan1eRUH43//+V5ZlyRijpUuX1uhMr7zyinr37q1vv/1W0o//iti5c2elpKTozTffLHf9oqIiderUScYY3XLLLREf279/vxo1aqQ9e/ZU+OcRhACAaAhCAIBvnXPOOTLGaP78+dX6vIqC8N133y175c/nn3++ws/fuHGj1q5dG7G3335bhYWFat++fbmfdfzDH/4gY0yFr3q6aNEiGWPUqFGjsldKlaS7775bw4cPj3pbCEIAQDQEIQDAlw4fPqw6derIGKOPP/64Wp9bURC+9dZbZUG4Zs2aCj//888/19KlS8uum5WVpc8++0xr1qyRMUb9+/fXsGHDynbhhRfq5JNP1qWXXmr7++Xn5+v444+XMUYzZ86UJIXDYXXs2FGvvPJK1NtCEAIAoiEIAQC+9OKLL8oYo3bt2lX7cysKwj179pRF3t/+9rdKf5+WLVvKGKOcnBxJ0p///GcZY7Rt27Zqn6n0c1u0aKEjR45o9erV6tatW6WfRxACAKIhCAEAvnTzzTeX/etcdUV7UZnS9wYcM2ZMpb9Penq6jDFlLxgza9asiF9Xx+HDh9W8eXMZY3Tvvffqoosu0v3331/p5xGEAIBoCEIAgC/17NlTxhg9/vjj1f7caEH4wAMPlL3q5+effx719zk2CJctWyZjjH71q1/ZXn/jxo1R//Ww9EVymjdvriZNmuiHH36o9LYQhACAaAhCAIDv7Nu3T6FQSMaYSt8r0E60IAyHwxo+fLiMMcrIyND//ve/Cn+fY4Pw66+/VkpKimrVqqUXXngh4rofffSRBg8eHPVcpa8qaozRpEmTqnRbCEIAQDQEIQDAd+bNm1f2L2k1ES0IJam4uFi333676tSpo/bt22vp0qURr/6Zl5en5cuXKxQK6bjjjtPWrVvLPpadnS1jjEKhkIYNG6Zbb71Vo0aNUtu2bfXRRx9VerZp06bJsix98sknVbotBCEAIBqCEADgG2+88Yauu+461a1bt+zFX375y1/qscceq9bvU1kQlvriiy80c+ZMnXvuuWrdurXatWunU045RV26dNHgwYN13333ad++feU+b/HixTr11FNVp04dtWvXTmPGjNHOnTurdLZvv/1Ww4YNq/JtIQgBANEQhAAAHKOqQegFBCEAIBqCEACAYxCEAICgIAgBADiGMUYnn3yySkpKkn2UmK1evZogBABUiCAEAOAYZ599ts4++2xlZWVp2rRpevDBB5N9pGrZuXOnpk2bpqlTp+qnP/2pzj77bD300EPJPhYAwIUIQgAAAAAIKIIQAAAAAAKKIAQAAACAgCIIAQAAACCgCEIAAAAACCiCEAAAAAACiiAEAAAAgIAiCAEAAAAgoAhC/L/24IAAAAAAQMj/1w0JAADAVGJXNtbCh9WSAAAAAElFTkSuQmCC\" width=\"900\">" + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nO3deXhU9cH+/88ZCCHsCAFkC4iooGUJElBxFxCoUFCpKFtErLZSalFA20KklYpUEEFBwRZBjaBW6uNCoxYiIlLcqSIGUMC9BQEhG5nc3z/8JT+GnAxZJuecOef9uq73dT1OZuAz8wxNbkhmjAAAAAAAgWTcPgAAAAAAwB0MQgAAAAAIKAYhAAAAAAQUgxAAAAAAAopBCAAAAAABxSAEAAAAgIBiEAIAAABAQDEIAQAAACCgGIQAAAAAEFAMQgAAAAAIKAYhAAAAAAQUgxAAAAAAAopBCAAAAAABxSAEAAAAgIBiEAIAAABAQDEIAQAAACCgGIQAAAAAEFAMQgAAAAAIKAYhAAAAAAQUgxAAAAAAAopBCAAAAAABxSAEAAAAgIBiEAIAAABAQDEIAQAAACCgGIQAAAAAEFAMQgAAAAAIKAYhAAAAAAQUgxAAAAAAAopBCAAAAAABxSD0qS+++EI/+9nP1LJlS7Vu3VoLFixw+0gAAAAAPIZB6EPFxcW69dZbtXfvXknSihUrZIxRTk6OyycDAAAA4CUMQh/av3+/9u/fX/rfR44ckWVZ2rlzp4unAgAAAOA1DEIPCYfDyszM1Ny5c2P66/71r3/V/fffH9NfEwAAAED8YxB6QHFxsVatWqWuXbvKGKNx48aVe92CggLNnTtXI0eO1OTJkzVgwABlZGSosLCwzHW3bt2qMWPGqFatWrruuuuUm5tbg/cCAAAAQLxhEHrA1q1blZOTo2XLlkUdhIWFherfv7/69Omj/Px8ST9+O2jPnj01aNAgFRUVlbnNwYMH9fjjj6thw4aaNWtWTd4NAAAAAHGGQegh69atizoIMzIyZIxRVlZWxOUvvPCCjDGaP39+ub/273//ew0ZMiSWxwUAAAAQ5xiEHhJtEObn56tJkyaqX79+mX8JLCwsVFJSktq0aaNwOGz7ay9YsEA333xzTRwbAAAAQJxiEHpItEG4YcMGGWOUlpZme9tevXrJGKPNmzfr0KFDeuqpp0q/rfTo0aMaMmSIduzYUZPHBwAAABBnGIQeEm0QLlmyRMYYDR8+3Pa2Q4cOlTFGS5cu1SeffKL27durU6dOmjVrlubNm6dt27ZF/b3z8/N18ODB0r7//nvt3LlTBw4ciLiciIiIiKimO3DggPbu3Vvud78hdhiEHhJtEM6ePVvGGI0ePdr2tqNGjZIxRvfcc0+Vfu+ZM2fKGENERERE5Jn27t1bpa9tUXEMQg+JNgjnzZsnY8ofhKNHj5YxRrNnz67S7338vxDu2bOn9A/hif4GJ3Thh4HI7b8po2D39Tdf69775uje++bo62++dv08RERENdnevXtljNGBAweq9LUtKo5B6CHRBmFmZqaMMRoxYoTtbUeMGCFjfvyW0Vg4ePCgjDE6ePDgCa9b69LPAhEAAACcUZmvRVE9DEIPiTYIN2/eLGOMzjnnHNvb9u3bV8b8+KIyscAgZBACAAC4hUHoHAahh0QbhEVFRUpOTlajRo1UXFxc5mMNGjRQcnJyzH7wlkHIIAQAAHALg9A5DEIPOdEb08+YMUPGGGVnZ0dcnpWVJWOMZsyYEbOzMAgZhPCWvLw8PfTwg3ro4QeVl5fn9nEAAKhRDELnMAg9pOTnBK+++mrbj+fm5io1NVX9+vVTQUGBpB+/SOzdu7dSU1OVm5sbs7MwCBmE8JYjR47ogQcX6IEHF+jIkSNuHwcAgBrFIHQOg9ADdu3apXnz5iklJUXGGNWtW1czZ85UVlZWmesePnxY06dP15AhQzRp0iQNGjRIU6dO1eHDh2N6JgYhgxDewiAEAAQJg9A5DELYYhAyCOEtDEIAQJAwCJ3DIIQtBiGDEN7CIAQABAmD0DkMQthiEDII4S0MQgBAkDAIncMghC0GIYMQ3sIgBAAECYPQOQxC2GIQMgjhLQxCAECQMAidwyCELQYhgxAAAMAtDELnMAhhi0HIIAQAAHALg9A5DELYYhAyCAEAANzCIHQOgxC2GIQMQnhLXl6elixdrCVLFysvL8/t4wAAUKMYhM5hEMIWg5BBCG/hRWUAAEHCIHQOgxC2GIQMQngLgxAAECQMQucwCGGLQcgghLcwCAEAQcIgdA6DELYYhAxCeAuDEAAQJAxC5zAIYYtByCCEtzAIAQBBwiB0DoMQthiEDEJ4C4MQABAkDELnMAhhi0HIIIS3MAgBAEHCIHQOgxC2GIQMQgAAALcwCJ3DIIQtBiGDEAAAwC0MQucwCGGLQcggBAAAcAuD0DkMQthiEDII4S15eXla+ugjWvroI8rLy3P7OAAA1CgGoXMYhLDFIGQQwlt4URkAQJAwCJ3DIIQtBiGDEN7CIAQABAmD0DkMQthiEDII4S0MQgBAkDAIncMghC0GIYMQ3sIgBAAECYPQOQxC2GIQMgjhLQxCAECQMAidwyCELQYhgxDewiAEAAQJg9A5DELYYhAyCOEtDEIAQJAwCJ3DIIQtBiGDEAAAwC0MQucwCGGLQcggBAAAcAuD0DkMQthiEDIIAQAA3MIgdA6DELYYhAxCeEteXp4eXb5Mjy5fpry8PLePAwBAjWIQOodBCFsMQgYhvIUXlQEABAmD0DkMQthiEDII4S0MQgBAkDAIncMghC0GIYMQ3sIgBAAECYPQOQxC2GIQMgjhLQxCAECQMAidwyCELQYhgxDewiAEAAQJg9A5DELYYhAyCOEtDEIAQJAwCJ3DIIQtBiGDEN7CIAQABAmD0DkMQthiEDII4S3hcFhHjhzRkSNHFA6H3T4OAAA1ikHoHAYhbDEIGYQAAABuYRA6h0EIWwxCBiEAAIBbGITOYRDCFoOQQQhvKSjI1/KVy7V85XIVFOS7fRwAAGoUg9A5DELYYhAyCOEtvKgMACBIGITOYRDCFoOQQQhvYRACAIKEQegcBiFsMQgZhPAWBiEAIEgYhM5hEMIWg5BBCG9hEAIAgoRB6BwGIWwxCBmE8BYGIQAgSBiEzmEQwhaDkEEIb2EQAgCChEHoHAYhbDEIGYTwFgYhACBIGITOYRDCFoOQQQhvCYfD2rf/f9q3/38Kh8NuHwcAgBrFIHQOgxC2GIQMQgAAALcwCJ3j+0F48OBBPfXUU5o3b57Wr1/v9nHiBoOQQQgAAOAWBqFzfDEIn3rqKfXs2VNLly6NuHzbtm1q166dQqFQaePGjXPnkHGGQRjM4F0FBfl6PHOlHs9cqYKCfLePAwBAjWIQOscXg3D48OEKhULavn17xOUDBw6UZVk69dRTNXz4cDVq1EihUEgvvviiSyeNHwzCYAbv4kVlAABBwiB0ji8G4SmnnKLmzZtHXPbVV18pFAopJSVFeXl5kqTs7GxZlqXBgwe7ccy4wiAMZvAuBiEAIEgYhM7xxSBs2LChUlNTIy574oknZFmW7rjjjojLO3TooI4dOzp5vLjEIAxm8C4GIQAgSBiEzvHFIExMTFT37t0jLrvpppsUCoWUlZUVcXmfPn1Ut25dJ48XlxiEwQzexSAEAAQJg9A5vhiEp5xyiho0aBDxRVKHDh1Up06dMl84de3aVS1btnT6iHGHQRjM4F0MQgBAkDAIneOLQXjjjTcqFArp+uuv19atWzVz5kxZlqXLL7884nq5ublKSEjQ2Wef7dJJ4weDMJjBuxiEAIAgYRA6xxeDcPfu3WrevHnpW0tYlqU6depo8+bNEddbtWqVLMvSrbfe6tJJ4weDMJjBuxiEAIAgYRA6xxeDUJI+//xz3XLLLbr88ss1ceJEvf/++2Wuc/PNN6tHjx68QX0FMAiDGbwrHA7ryy+/0JdffqFwOOz2cQAAqFEMQuf4ZhAithiEwQwAAMALGITOYRDCFoMwmAEAAHgBg9A5vhuE69ev1x133KErr7xSAwYM0JVXXqk77rhD69atc/tocYVBGMzgXQUFBXpqdaaeWp2pgoICt48DAECNYhA6xzeD8NNPP1Xfvn0jXlimpJLL+vTpo+3bt7t91LjAIAxmcMd3331X+n/v3r1bhYWFZa7Di8oAAIKEQegcXwzCPXv2qEWLFrIsS0lJSRozZoxmz56tRx99VH/+8581duxYJSUlybIstWjRQnv27HH7yJ7HIAxmcN69996rUCikAwcOSJIKCwv1u9/9Tl988UXE9RiEAIAgYRA6xxeDcMyYMbIsSwMGDIj4m/Zj/fe//9WAAQNkWZbGjh3r8AnjD4MwmMF5w4YN0xtvvBFx2UcffaSf/vSnEZcxCAEAQcIgdI4vBmGLFi1Ur1497d+/P+r19u/fr3r16qlFixYOnSx+MQiDGZw3b968Mpe98847atiwYcRlDEIAQJAwCJ3ji0FYr1499e7du0LX7d27t+rVq1fDJ4p/DMJgBudNnTpV+/btK/3vI0eOaODAgfrJT34ScT0GIQAgSBiEzvHFIPzJT36iDh06VOi6HTp0ULdu3Wr4RPGPQRjM4Lxdu3apS5cuGjZsmH72s5+pRYsWqlOnjl566aWI6zEIAQBBwiB0ji8G4QMPPCDLsrR69eqo13v66adlWZYWLlzo0MniF4MwmMEd+/fv17x583TTTTcpIyPD9tWQGYQAgCBhEDrHF4NQkn75y18qMTFRt956q3JyciI+tmPHDv32t79V3bp19atf/cqlE8YXBmEwg/s2bdqkrKysMpeHw2Ht2LVDO3btUDgcduFkAAA4h0HoHF8Mwo4dO6pjx45KSEgofc/BxMREtW7dWomJiaWX1alTp/S6x3fKKae4fTc8hUEYzOC8tLQ0PfLIIyouLtaKFStUq1Yt9ejRQ9OmTXP7aAAAuIZB6BxfDMJj34S+qoVCIbfvhqcwCIMZnHf33XdL+vHbRps1a6YZM2ZI+vFb4QEACCoGoXN8MQg///zzmIT/H4MwmMF5y5YtkyRNmDBB7dq1U25uriTp/vvvj7heQUGBnvn703rm70+roKDA8XMCAOAkBqFzfDEIEXsMwmAG5915550666yz1KBBA2VnZ6uwsFCrV69Wy5YtI67Hi8oAAIKEQegcBiFsMQiDGdzx4Ycf6rvvvpMkff3111q/fr3Wr18fcR0GIQAgSBiEzvHVICwoKNDjjz+uiRMnavDgwbrkkksiPv7mm2/qn//8p4qKilw6YfxgEAYzuGfLli169tln9Z///Mf24wxCAECQMAid45tBuGnTJrVv316hUKjcF4qZNm2aQqGQ1q5d69Ip4weDMJjBefv27dP5558f8b9bQ4cO1aFDhyKuxyAEAAQJg9A5vhiEO3fuVOPGjWVZlq666iqtWLFCZ511VplBuHXrVlmWpYkTJ7p00vjBIAxmcF56errGjBmjd955RwcPHtS3336rv/71r5o8eXLE9RiEAIAgYRA6xxeDMD09XZZlafbs2aWX9evXz/atJJo1a6YePXo4eby4xCAMZnDer371K9vL77333oj/ZhACAIKEQegcXwzCtm3bqkmTJiouLi69rLxB2KtXLzVv3tzJ48UlBmEwg/OWLl1qe/ltt90W8d8MQgBAkDAIneOLQZiYmKhevXpFXFbeIExLS1PdunWdOporPvzwQ1188cVq0KCBUlJSdN9991X612AQBjM4b8qUKfrggw9K/zsnJ0eTJk3SqFGjIq539OhRffzxR/r444909OhRp48JAICjGITO8cUgbNmypVq1ahVxWbRvGU1JSXHoZM77/vvvdeWVV2rjxo169913lZ6eLmOMMjMzK/XrMAiDGWKjefPmuuqqq/TQQw9px44dUa+7d+9ede7cWY0bN1ZiYqJCoZC6deumb775xqHTAgDgPQxC5/hiEF5xxRUKhUJ6/fXXSy+zG4TPPfecLMvS6NGjnT6iY5544gl99dVXpf8dDofVrl073XDDDZX6dRiEwQyxYVmWxo4dq9dee03vv//+Ca+fm5urVatWae7cuVqzZg3/AggACDwGoXN8MQjXrl0ry7J06qmnln7r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gwcPtn1PwHfffVeffvqp7a9jjNGFF15Y7u/zy1/+snSo5ebm2l6nuLhYQ4cOVd26dSt+B46zevVqGWNkWZZycnLKvd65556rxx57zPZj69atYxACAMrFIAQA+NbRo0fVoEEDGWOUnZ1d4dtFG4TPPfecjDGqV6+evvnmm6i/zr59+9S4ceMq/5xicXGxunTpImOMfvGLX9he54MPPlBycrLtvw5KDEIAQHQMQgCAb73xxhsyxqhBgwYqLCys8O2iDcK0tDQZYzRu3LgK/VorV64s83u//fbbGjlypM4//3y1bNlS5513ntatW2d7+8cee0zGGCUmJuqrr74q8/EbbrhBd9xxR7m/P4MQABANgxAA4Ft33XWXjDEaMmRIpW5X3iD873//K8uyZIzRsmXLqnSm1157Tb1799a3334r6cd/RezUqZMSEhL05ptvlrn+0aNH1bFjRxljdPvtt0d8bP/+/WrYsKH27NlT7u/HIAQARMMgBAD41vnnny9jjBYsWFCp25U3CN95553SV/588cUXy739pk2btG7duoi2bNmiwsJCtWvXrszPOv7xj3+UMabcVz1dvHixjDFq2LBh6SulStK9996r4cOHR70vDEIAQDQMQgCALx0+fFh16tSRMUYff/xxpW5b3iB86623Sgfh2rVry739559/rmXLlpVeNz09XZ999pnWrl0rY4z69++vYcOGlXbJJZfo9NNP1xVXXGH76+Xn5+vkk0+WMUazZs2SJIXDYXXo0EGvvfZa1PvCIAQARMMgBAD40ssvvyxjjNq2bVvp25Y3CPfs2VM68v72t7+d8Ndp0aKFjDHKysqSJP3lL3+RMUbbt2+v9JlKbtu8eXMdOXJEa9asUdeuXU94OwYhACAaBiEAwJduu+220n+dq6xoLypT8t6AY8aMOeGvk5KSImNM6QvGzJ49O+K/K+Pw4cNq1qyZjDG6//77demll+rBBx884e0YhACAaBiEAABf6tmzp4wxevLJJyt922iD8KGHHip91c/PP/886q9z/CBcsWKFjDH61a9+ZXv9TZs2Rf3Xw5IXyWnWrJkaN26sH3744YT3hUEIAIiGQQgA8J19+/YpFArJGHPC9wq0E20QhsNhDR8+XMYYpaam6n//+1+5v87xg/Drr79WQkKCatWqpZdeeiniuh999JEGDx4c9VwlrypqjNGkSZMqdF8YhACAaBiEAADfmT9/fum/pFVFtEEoSUVFRbrzzjtVp04dtWvXTsuWLYt49c+8vDytXLlSoVBIJ510krZt21b6sYyMDBljFAqFNGzYME2fPl2jRo1SmzZt9NFHH53wbNOmTZNlWfrkk08qdF8YhACAaBiEAADfeOONN3TjjTcqMTGx9MVffvnLX+qJJ56o1K9zokFY4osvvtCsWbN0wQUXqFWrVmrbtq3OOOMMde7cWYMHD9YDDzygffv2lbndkiVLdOaZZ6pOnTpq27atxowZo507d1bobN9++62GDRtW4fvCIAQARMMgBADgOBUdhPGAQQgAiIZBCADAcRiEAICgYBACAHAcY4xOP/10FRcXu32UaluzZg2DEABQLgYhAADHOe+883TeeecpPT1d06ZN08MPP+z2kSpl586dmjZtmqZOnaqf/vSnOu+88/Too4+6fSwAgAcxCAEAAAAgoBiEAAAAABBQDEIAAAAACCgGIQAAAAAEFIMQAAAAAAKKQQgAAAAAAcUgBAAAAICAYhACAAAAQEAxCAEAAAAgoP4fcAkjzJkK+2AAAAAASUVORK5CYII=\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.9, right=0.9,wspace=0.0,hspace=0.25)\n", " sub = fig.add_subplot(1,1,1)\n", "\n", " sub.hist(ax.T,bins=30,color='xkcd:blue')\n", " \n", " sub.set_yscale('log')\n", " sub.set_xscale('linear')\n", " \n", " sub.set_xlabel(r'$T ~[{\\rm GeV}]$')\n", " sub.xaxis.set_label_coords(0.5, -0.1) \n", " sub.set_ylabel(r'Number of steps')\n", " sub.yaxis.set_label_coords(-0.1,0.5) \n", " \n", "\n", " sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5)\n", " \n", "\n", " sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5)\n", " \n", " \n", " #set major ticks\n", " _M_xticks=[ round(0.45+i*0.15,4) for i in range(0,15) ]\n", " _M_yticks=[ 10.**i for i in range(-12,5,1) ]\n", "\n", " #set major ticks that will not have a label\n", " _M_xticks_exception=[]\n", " _M_yticks_exception=[]\n", "\n", " _m_xticks=[]\n", " _m_yticks=[] \n", " ft=FT(_M_xticks,_M_yticks,\n", " _M_xticks_exception,_M_yticks_exception,\n", " _m_xticks,_m_yticks,\n", " xmin=0.45,xmax=2,ymin=1e0,ymax=1e3,xscale='linear',yscale='log')\n", "\n", " ft.format_ticks(plt,sub) \n", "\n", " \n", " sub.text(x=0.92,y=1e2, s=r'$T_{\\rm osc}$',rotation=90)\n", "\n", "# fig.savefig('histogram.pdf',bbox_inches='tight')\n", "\n", " fig.show()\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, + "outputs": [], + "source": [ + "cosmo=Cosmo()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,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pSIjI5WZmWlZrTQhYC9ut1sbNq7Xho3r5Xa7A10OgtiOHTvUv39/lS9f3u+sYfv27fXNN9+wAA2AC8Ysah3bBMK3335b8+bN07Bhw9SwYUOVLVtWzZo102WXXZbnMX8NhDt37tSUKVM0depUrVixwlb/M0pKSlJsbKzq1q0rwzBUoUIFDR8+3DTspqena8iQIYqKitITTzyhjh076oUXXlB6erqlNdOEAID8HD58WEOHDtVFF13kFwybN2+u999/n7PZAAqNWdQ6tgmE77//fu5/e71evfvuuxoxYoQ+++yzPI85Gwhnz57tt3pp3bp1tXDhwmKvu7SiCQEABZGenq633npL9erV8wuGderU0ZtvvskCNADOG7OodWwTCIcMGaI///zT57Xly5fnuwDM2UDYqFEjtW7dWs8++6wef/xxtWvXTqGhoXI6nXryySeLte7SiiYE7MXj8ejw4cM6fPiwZYtLAefD5XJp0aJFuu666/yCYVhYmJ5++mklJSUFukwAJQSzqHVsEwj37dunyMhIzZ492+dyz6ioqDyPORsIzR7mnpGRoQkTJigiIkIvvvhi0RdcytGEgL2wqAxKCq/Xq+XLl+uee+7xC4ZOp1Ndu3bVmjVrAl0mAJtjFrWObQKhJG3btk1NmzZVnTp11KtXL3Xr1k0RERF57n82EMbExOS5z/79+9WiRQutXr26yOstzWhCwF4IhCiJduzYoQEDBqhChQp+4bBNmzb64IMP5HK5Al0mABtiFrWOrQKhdOaSk/fee099+vRRly5d9PXXX+e579lAOHjwYH3//fd57nf06FH179+/yGstzWhCwF4IhCjJ/vzzT40aNUo1a9b0C4b16tXTxIkTlZaWFugyAdgIs6h1bBcIz8fZQHjy5Ek1a9ZMr776ap43rr/22mtWllbi0YSAvRAIURpkZWXp3XffVZMmTfyCYeXKlTV48GD9/vvvgS4TgA0wi1onIIGwqB4R8dfHThw9ejR3MZn7779fs2fP9nmw/bhx4y647mBCEwL2QiBEaeL1evX111+rQ4cOfsEwJCRE3bt31+rVq231CCkA1mIWtY7lgbAoHxFh9mD6xYsXq0WLFnI4HHI6nbriiisUHR2t22+/nX91PA80IWAvBEKUVr/88ov69etn+qD7yMhIvfvuuzp9+nSgywRgMWZR61geCIvyERFmgfCs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L1++7PB5ng+Ea9euhYjgT3/6k+Lj9+/f7/DdQ/NNcmrUqIGqVaviyZMnRV4LAyERETnCQEhERF7n3r178Pf3h4gU+VuBShwFQqPRiD59+kBEEBERgbt379p9nucD4c2bNxEQEIAyZcrgu+++s3rs6dOn0bNnT4ftMt9VVEQwevToYl0LAyERETnCQEhERF5nwYIFlnfSSsJRIASAwsJCTJ48GeXKlUPdunWxevVqq7t/5ubmYt26dfD390f16tWRnp5uOZaQkAARgb+/P3r37o2JEydiwIABCA0NxenTp4ts24QJE+Dn54ezZ88W61oYCImIyBEGQiIi8hp79+7FyJEjUb58ecvNXz788ENs2LDBqecpKhCaXbt2DdOnT8ebb76Jl156CXXq1EF4eDgaNmyInj174l//+hfu3btnc96KFSvQtGlTlCtXDnXq1EFsbCwuXrxYrLbdvn0bvXv3Lva1MBASEZEjDIRERETPKW4g9AQMhERE5AgDIRER0XMYCImIyFcwEBIRET1HRNCoUSOYTCZXN0W15ORkBkIiIrKLgZCIiOg57du3R/v27REXF4cJEyZg5cqVrm6SUy5evIgJEyZg/Pjx+O1vf4v27dvj008/dXWziIjIDTEQEhERERER+SgGQiIiIiIiIh/FQEhEREREROSjGAiJiIiIiIh8FAMhERERERGRj2IgJCIiIiIi8lEMhERERERERD6KgZCIiIiIiMhHMRASERERERH5qP8DycMbvdm0wzUAAAAASUVORK5CYII=\" width=\"900\">" + "<img src=\"data:image/png;base64,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KtRQvXr1tHbtWr+6PR6Pxo4dq6pVq+Z/z6pVq+q11147a8hYvXq1unXrprCwMBmGodq1a+vBBx/Uzp07z+vPe926dbr//vsVGRnp92dRp04d9e7dW99++62jAlBeXp7ef/99tWrVqsAA17BhQ/Xo0UOjR4/We++9p++++04bNmzQrl27tGfPHu3YsUNbt25VcnKylixZomnTpmnkyJHq0aOHrr76aoWGhhYaEC+77DI98sgj+vbbb4Pi7CGBEAAQTAiE1iEQwlRRm9Dn8+nrr7/W4sWL9eeff2rEiBF6+umnlZKSojZdx6ralUPUaeBMvfXWW/kD/jXXXKMm0TPkumGVXDdvllH1crVr10716tU7PezXbJsfCGu0fMXkzOP3AWce77vvPtWqVUshlz72n6BZ+1YZhqGwsDB9+OGHOnDUraYP7FHtW79QSIPBgSGjxnW66x9xWr89KyB8ZWdna/jw4YVe4vjee++d85/znj171K1btyKdIbvhhhsCwq3V3G63pk+frgYNGgTUV6VKFf3973/XrFmztH///vP+Xjk5Ofr555+VmJioXr16/ef/HyZbZGSkHn744XIdDgmEAIBgQiC0DoEQpkqjCffv368ffvghf2D/7LPPNHToUM2aNUter1d79uxRhw4dZFS6UI1ueFbP/mu7vko+rttuu81v+K9+2w+KuGu36ty13uTM44v5gbBZh4F+793YZbDfmUeXy6WHH35YgwadPrvpav2ZQm/brQq37fS7hHTz5s26pNVQuaIWyNV0qozqLfQ///M/6tixoyIiImSEVJBRq52M8L9pyGMvFCmQeL1eJSYm+p2lNAxD4eHh6tSpkwYMGKA777xTNWvW9P/5QkL0wgsvyOPxlNjfS1H4fD599NFHuvLKKwP+zFu2bKmZM2fqxIkTpV7Dpk2bNGHCBN16662qWLGiaTj8n//5Hz3zzDPasmVLqdZjNQIhACCYEAitQyCEKTub8NSpU35fu91uTZs2TQ899JBmzJiRH4by3D4lJCSoUqVK+WHgpnueUdysg3pm2jHtPpClAQMG+J0BdN2yTaG37VZE87Favnx5/vdYtGiRQm/44f+fefxZjRo10jvvvKOxY8cqLCxMIZf958zjoOfm5Q/k6enp6vvgiPz3XE2nqFOnTkpLSyvw59uxY4duvPHGgBAzdepUZWdn++2bm5ur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ffdd3XjjjaZnDevWratnnnlGW7dutbtUIACzqHUIhDBFEwLWSElJ0dVXX61u3bqpe/fuuvDCC1WpUiV98cUXdpcGoBzZvn27nn/+edWrV880HLZv314zZszgv/twDGZR6xAIYYomBKyTlpam+Ph4DRkyRHFxcdq+fXvAPj6fT3l5ecrLy2NxCADF5na79cUXX6hHjx6qWLFiQDCsWrWqBg4cqBUrVvBvDWzFLGodAiFM0YSAPVavXq2kpKSA11lUBkBJ+/PPP5WQkKCmTZuanjW84oor9Morryg1NdXuUhGEmEWtQyCEKZoQsEabNm309ttvy+fzac6cOQoNDVWLFi303HPP+e1HIARQWnw+n9auXatHHnlENWrUCAiGLpdLXbp00YcffqicnBy7y0WQYBa1DoEQpmhCwBqvvPKKpNOXjdauXVujRo2SJL311lt++xEIAVghOztb77//vm6//XbTs4a1a9fW8OHDtXHjRrtLRTnHLGodAiFM0YSANWbOnClJeuihh3TJJZcoOztbkpSQkOC3H4EQgNV2796tuLg4NWzY0DQctmrVSpMmTVJaWprdpaIcYha1DoEQpmhCwBr//Oc/de211yo8PFwrVqxQXl6ePvjgA9WtW9dvPwIhALt4vV598803+sc//qHKlSsHBMPKlSurd+/eSkpKktfrtbtclBPMotYhEMIUTQhY59dff9WRI0ckSQcPHtTy5cu1fPlyv30IhACcIC0tTVOmTFHr1q1Nzxo2aNBAo0aNUkpKit2looxjFrUOgRCmaELAWj///LM+/vhjbd682fR9AiEAp/n111/15JNPqk6dOqbh8NZbb9W8efPyL4UHzgWzqHUIhDBFEwLWOHbsmG688UaFhIQoJCRELpdL99xzjzIyMvz2c7vd+uLLz/XFl5/L7XbbVC0ABMrNzdXHH3+s6OhouVyugGBYo0YNDRkyRGvWrOHZhigyZlHrEAhhiiYErPHAAw+of//+WrdundLT03X48GHNmjVLw4cPt7s0ADhn+/fv16uvvqrGjRubnjW89tprFR8fn3+ZPFAQZlHrEAhhiiYErPHoo4+avv76669bXAkAlByfz6eVK1fqgQceULVq1QKCYYUKFRQTE6OlS5dy1QNMMYtah0AIUzQhYI0ZM2aYvj5ixAiLKwGA0pGRkaF33nlHN9xwg+lZw4suukix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sWvXLpw/fx5jx47FmDFj0KhRI4gIkpKSnG4HERH5PgZCIiLyGUuXLsXGjRut9s2dOxcigqioKKv9W7duxeLFixWfR0TQvn17u69jMpkwbdo0lC1bFs2aNcOmTZuQl5dnOXbo0CF0794dIoLg4OBSXUtubi4aNmwIESn2x7unT5+Oxo0bW/3mmZn5B8QZCImISAkDIRER+YzU1FSbfb169VL8TcAjR47g3Llzis8jIujSpYvd13nvvfcsQS03N1fxMSaTCTExMahYsWLJL+ApX375JUQEAQEByMzMtPu4V155BatWrVI8tn37dgZCIiKyi4GQiIh8VmFhIYKCgiAi2LlzZ4nPcxQIN23aBBHBM888g5s3bzp8nrt376JatWql/p6iyWRCkyZNICL4/e9/r/iY48ePIyQkRPHdQYCBkIiIHGMgJCIin7Vnzx6ICIKCgmAwGEpu+1i5AAAEaElEQVR8nqNAGBUVBRHBkCFDSvRca9assXntw4cPIzY2Fp06dUJoaCg6dOiA7du3K56/atUqiAgqVKiA69ev2xwfPnw4Jk6caPf1GQiJiMgRBkIiIvJZ06ZNg4ggOjraqfPsBcL//e9/CAgIgIhg5cqVpWrT999/jzZt2uDWrVsAHr+L2KBBA5QrVw4//PCDzeMLCwvxwgsvQETw17/+1epYdnY2qlSpgitXrth9PQZCIiJyhIGQiIh8VqdOnSAiWLhwoVPn2QuEP/74o+XOn//973/tnr9v3z5s377dajt06BAMBgPq1atn813HGTNmQETs3vV02bJlEBFUqVLFcqdUAJg9ezb69u3r8FoYCImIyBEGQiIi8kmPHj1C+fLlISI4ffq0U+faC4T79++3BMK0tDS751++fBkrV660PDYhIQGXLl1CWloaRATdu3dHnz59LFu3bt3QuHFj9O7dW/H58vPzUbt2bYgIpk+fDgAwGo14/vnn8f333zu8FgZCIiJyhIGQiIh80pYtWyAiqFu3rtPn2guEV65csYS8zz//vNjnqVWrFkQE6enpAIAPP/wQIoKzZ8863Sbzuc8++yxycnKQmpqKpk2bFnseAyERETnCQEhERD7p/ffft7w75yxHN5Ux/zbgoEGDin2e8PBwiIjlhjHJyclW/3bGo0ePULNmTYgIFixYgNdeew1Lliwp9jwGQiIicoSBkIiIfFLLli0hIli/fr3T5zoKhEuXLrXc9fPy5csOn+fpQLh69WqICP74xz8qPn7fvn0O3z003ySnZs2aqFatGh4+fFjstTAQEhGRIwyERETkc+7evYvAwECISLG/FajEUSA0Go3o27cvRASRkZG4c+eO3ed5OhDeuHED5cqVQ5kyZfDtt99aPfbUqVPo1auXw3aZ7yoqIhg1alSJroWBkIiIHGEgJCIinzN//nzLO2ml4SgQAkBRUREmTZqE8uXLo169eli5cqXV3T/z8vKwZs0aBAYGokaNGsjIyLAcmzp1KkQEgYGB6NOnDyZMmIC4uDiEhYXh1KlTxbZt/PjxCAgIwJkzZ0p0LQyERETkCAMhERH5jD179mDEiBGoUKGC5eYv7733HtatW+fU8xQXCM2uXr2K6dOno3PnznjuuedQt25dREREoFGjRujVqxc++ugj3L171+a85cuXo1mzZihfvjzq1q2LQYMG4cKFCyVq261bt9CnT58SXwsDIREROcJASERE9JSSBkJvwEBIRESOMBASERE9hYGQiIj8BQMhERHRU0QEjRs3hslkcndTVEtNTWUgJCIiuxgIiYiIntKhQwd06NABCQkJGD9+PFasWOHuJjnlwoULGD9+PMaNG4ff/OY36NChAz799FN3N4uIiDwQAyEREREREZGfYiAkIiIiIiLyUwyEREREREREfoqBkIiIiIiIyE8xEBIREREREfkpBkIiIiIiIiI/xUBIRERERETkpxgIiYiIiIiI/BQDIRERERERkZ/6P+7FG+A8Dk6DAAAAAElFTkSuQmCC\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.9, right=0.9,wspace=0.0,hspace=0.25)\n", " sub = fig.add_subplot(1,1,1)\n", " \n", - " sub.plot(ax.T,ax.rho_axion/rho_crit,linestyle='-',linewidth=2,alpha=1,c='xkcd:black')\n", - " sub.plot(ax.T_peak,ax.rho_axion_peak/rho_crit,linestyle=':',linewidth=2,alpha=1,c='xkcd:blue')\n", + " sub.plot(ax.T,ax.rho_axion/cosmo.rho_crit,linestyle='-',linewidth=2,alpha=1,c='xkcd:black')\n", + " sub.plot(ax.T_peak,ax.rho_axion_peak/cosmo.rho_crit,linestyle=':',linewidth=2,alpha=1,c='xkcd:blue')\n", "\n", " \n", " sub.set_xlabel(r'$T ~[{\\rm GeV}]$')\n", " sub.xaxis.set_label_coords(0.5, -0.1) \n", " sub.set_ylabel(r'$\\dfrac{\\rho_{a}(T)}{\\rho_{\\rm crit}}$')\n", " sub.yaxis.set_label_coords(-0.1,0.5) \n", " \n", " \n", " sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5)\n", " #set major ticks\n", " _M_xticks=[ round(0.45+i*0.15,4) for i in range(0,15) ]\n", " _M_yticks=[ 10.**i for i in range(32,42,1) ]\n", "\n", " #set major ticks that will not have a label\n", " _M_xticks_exception=[]\n", " _M_yticks_exception=[]\n", "\n", " _m_xticks=[]\n", " _m_yticks=[] \n", " ft=FT(_M_xticks,_M_yticks,\n", " _M_xticks_exception,_M_yticks_exception,\n", " _m_xticks,_m_yticks,\n", " xmin=0.45,xmax=2,ymin=1e32,ymax=1e36,xscale='linear',yscale='log')\n", "\n", " ft.format_ticks(plt,sub) \n", "\n", " \n", " sub.text(x=0.92,y=1e33, s=r'$T_{\\rm osc}$',rotation=90)\n", "\n", "# fig.savefig('axion_energy_density.pdf',bbox_inches='tight')\n", "\n", "\n", " fig.show()" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "#run the destructor\n", "del ax" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.9.5" } }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/UserSpace/JupyterNotebooks/AxionMass.ipynb b/UserSpace/JupyterNotebooks/AxionMass.ipynb index 52f7605..cfae66c 100755 --- a/UserSpace/JupyterNotebooks/AxionMass.ipynb +++ b/UserSpace/JupyterNotebooks/AxionMass.ipynb @@ -1,1113 +1,1125 @@ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np#you usually need numpy\n", "\n", "#---these are for plots---#\n", "import matplotlib\n", "matplotlib.use('nbAgg')\n", "import matplotlib.pyplot as plt\n", "\n", "plt.rcParams['font.size']=16\n", "plt.rcParams['font.family']='dejavu sans'\n", "\n", "plt.rcParams['mathtext.fontset']='stix'\n", "plt.rcParams['mathtext.rm']='custom'\n", "plt.rcParams['mathtext.it']='stix:italic'\n", "plt.rcParams['mathtext.bf']='stix:bold'\n", "#-------------------------#" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#load the module\n", "from sys import path as sysPath\n", - "from os import path as osPath\n", - "sysPath.append(osPath.join(osPath.dirname('./'), '../../src'))\n", + "sysPath.append('../../src')\n", "\n", "from interfacePy.AxionMass import AxionMass\n", "from interfacePy.FT import FT #easy tick formatting" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#you can define the axion mass using a data file\n", - "axionMassInterpolation = AxionMass(r'../../src/data/chi.dat',0,1e5)\n", + "axionMassInterpolation = AxionMass(r'../../src/data/chi.dat',0,10)\n", + "\n", + "def ma2_MAX(T,fa):\n", + " TMAX=axionMassInterpolation.getTMax()\n", + " chiMAX=axionMassInterpolation.getChiMax()\n", + " return chiMAX/fa/fa/pow(T/TMAX,8.16)\n", + "#set this in order to get the correct scaling (for the dataset we use here)\n", + "axionMassInterpolation.set_ma2_MAX( ma2_MAX )\n", + "\n", + "\n", "\n", "#you can define the axion mass via a function\n", "def ma2(T,fa):\n", " TQCD=150*1e-3;\n", " ma20=3.1575e-05/fa/fa;\n", " if T<=TQCD:\n", " return ma20;\n", " return ma20*pow((TQCD/T),8.16)\n", "\n", - "axionMassFunction = AxionMass(ma2)\n" + "axionMassFunction = AxionMass(ma2)\n", + "\n", + "\n", + "\n", + "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nOzdeVxUddsG8N/MsIoLCriAgqZo4Rao4EKCG4ooCu6mWbZabmWZpQnuFYmaLZa+6WMmas+jaZZFFppp2pO5oFmZWuIggsoi6yznev9Q5nGaAUHhHGa4vp/P7/M+zTln5sa3m+7LOYsAERERERER1UpC6QKIiIiIiIhIGQyEREREREREtRQDIRERERERUS3FQEhERERERFRLMRASERERERHVUgyEREREREREtRQDIRERERERUS3FQEhERERERFRLMRASERERERHVUgyEREREREREtRQDIRERERERUS3FQEhERERERFRLMRASERERERHVUgyENsRoNCIpKQkJCQlKl0JERERERHaAgdAGSJKErVu3IiAgAEIITJo0qcx9S0pKkJCQgNGjR2PGjBmIiIhAfHw8dDqdfAUTEREREZFNYCC0AampqTh79izWrVtXbiDU6XQYMGAAQkJCUFxcDAAoKChAYGAgIiMjYTAYZKyaiIiIiIhqOgZCG5KSklJuIIyPj4cQAsnJyWav7969G0IIrFixQoYqiYiIiIjIVjAQ2pDyAmFxcTHc3d3h5uZm8U2gTqeDq6srfHx8YDQaZaqWiIiIiIhqOgZCG1JeIDxw4ACEEAgODrZ6bJcuXSCEwJEjR6xuLy4uRm5urmllZ2fj3LlzyMnJMXudi4uLi4uLi4uLq7pXTk4O0tLS+GWGDBgIbUh5gXDNmjUQQiAmJsbqsdHR0RBCYO3atVa3x8XFQQjBxcXFxcXFxcXFVWNWWlpaVY7TZAUDoQ0pLxAuXboUQghMmDDB6rHjxo2DEAKvv/661e3//Ibw4sWLpiZU+m+IuLi4uLi4uLi4atdKS0uDEAI5OTlVOU6TFQyENqS8QJiYmFhuIJwwYQKEEFi6dGmFPis3NxdCCOTm5t5LyURERERElcZZVD4MhDakvECYlJQEIQRiY2OtHhsbGwshyj5l9J/YhERERESkFM6i8mEgtCHlBcIjR45ACIEePXpYPbZ79+4QouybyvwTm5CIiIiIlMJZVD4MhDakvEBoMBjg5eWF+vXrQ5Iki21169aFl5dXhe/UxCYkIiIiIqVwFpUPA6ENudOD6efPnw8hBPbv32/2enJyMoQQmD9/foU/i01IRERERErhLCof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2D5+/PgyH/1AltiERERki4y5ubj+8MPQCoHrkyYh5fPP0aJFC9SrVw/r16+3eO4vEdVMnEXlYzeBsGnTpsjOzgYAxMTEWGx/5ZVX4OvrK3dZNotNSEREtqxg40aku7kho00bXD9+HI888giEEBg+fDiuXLmidHlEdAecReVjN4Gwd+/epv9tLRAOHz4cLi4ucpZk09iERERk6/R//IHrEydCKioCAPznP/+Bp6cnvLy88NlnnylcHRGVh7OofOwmEI4ZMwZXr14FALObygDAnj17oNFo0LFjRyVKs0lsQiIisie6U6dwbdgwXD55EtHR0RBC4NFHH+V/54hqKM6i8rGbQHj06FGEhIRg165dGDhwIP7880/s378f06ZNg6OjI9RqNT788EOly7QZbEIiIrInxfv343KTJrjcuDEKv/wSH330EerWrYtWrVrhhx9+ULo8IvoHzqLysZtACADffvstfH19oVKpoFaroVaroVKp4OTkhAULFihdnk1hExIRkb0xZGTg6qBB0AqBnBdewLlff0XPnj2hVqsxb9486HQ6pUskols4i8rHrgIhAOj1enz99ddYvnw5li1bho8//hgZGRlKl2Vz2IRERGSPJKMRNxITcblJExjS0qDX67Fo0SJoNBp069YNv//+u9IlEhE4i8rJ7gKhNZmZmTh16pTSZdgUNiEREdkzY37+zf97/ToKPvkERw4fhr+/P+rUqYMPPviAj6cgUhhnUfnUikAIAJs3b8bnn3+udBk2g01IRES1Qf6aNTefWThuHG5otXjqqacghMDQoUP5eIoaqqSkBHPnzsV9990HR0dHCCGQkpKidFkVtn79egghsH79eqVLqdE4i8rHbgLhY489VuZ69NFH0b17d/j4+Chdps1gExIRUW1RsHkz0uvXR0arVig5fBg7d+6Ep6cnGjdujC+++ELp8ugflixZAiEEwsPDMXfuXMTFxeHChQtKl2Vy4cIFCCEwadIkq9sZCCuGs6h87CYQqlSqO6727dsrXabNYBMSEVFtoj93DpkhIdA6O8Nw6RIuX76MwYMHQwiBZ599FgUFBUqXSLf06tULdevWrbE3AbpTIMzJycGZM2eQk5Mjb2E2hrOofOwmEO7bt6/MlZycjOeeew7Xr19XukybwSYkIqLaRtLpUJScfPN/GwzQX76Md999Fy4uLrj//vtx9OhR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FixYoOHDh6tnz55KTExUx44dqwKomSkxMbHef8fGjRs1atSoqmNcccUVys7O1rFjx6rt5/V6tWzZMg0ZMkRmprFjx+oPf/iD/va3v2nevHn64Q9/qOTkZJmZMjMz610HACD8EQgBAGHjueee06uvvlrttV/84hcyM40cObLa6++8845WrFgR8DhmptGjR9d6Hr/fr0WLFqlNmza69tpr9dprr6msrKzqvZ07d2rcuHEyM3Xp0qVBf0tpaamSkpJkZrrtttuC7vvEE09o0KBB8ng8Nd7bvHkzgRAAUCsCIQAgbGzcuLHGaxMnTpSZ6bHHHqv2+p49e7R///6AxzEz3XrrrbWe5+GHH64KaqWlpQH38fv9mjJliqKjo+v+B3zFK6+8IjNTRESEDhw4UOt+//Iv/6IXX3wx4Ht5eXkEQgBArQiEAICwVVlZqbi4OJmZtm3bVud1wQLha6+9JjNThw4ddPLkyaDHKSoqUufOnRv8O0W/369rrrlGZqYHHngg4D5//vOflZCQEPDTQYlACAAIjkAIAAhbO3bskJkpLi5OFRUVdV4XLBCOHDlSZqZZs2bV6VgvvfRSjXPv2rVL06dP180336yePXtqzJgxysvLC7j+xRdflJmpffv2On78eI33Z8+erZ/85Ce1np9ACAAIhkAIAAhbixYtkplp0qRJ9VpXWyA8ffq0IiIiZGZas2ZNg2p69913NWLECJ06dUrS3z9FHDhwoNq2bas//vGPNfavrKzUgAEDZGb693//92rvnT17Vh07dtTRo0drPR+BEAAQDIEQABC2br75ZpmZnnnmmXqtqy0Q7t69u+rOn2+++Wat699//33l5eVV23bu3KmKigr17du3xm8d/+M//kNmVutdT//zP/9TZqaOHTtW3SlVkp566ilNnTo16N9CIAQABEMgBACEpeLiYrVr105mpo8//rhea2sLhB988EFVINy6dWut648cOaI1a9ZU7Xvffffp8OHD2rp1q8xM48aN01133VW13X777Ro0aJAmT54c8Hgej0e9e/eWmemJJ56QJPl8Pl155ZV69913g/4tBEIAQDAEQgBAWNqyZYvMTH369Kn32toC4dGjR6tC3vPPP3/Z4/To0UNmptzcXEnSsmXLZGb67LPP6l3TpbXdu3dXSUmJNm7cqCFDhlx2HYEQABAMgRAAEJZ+/OMfV306V1/Bbipz6dmA99xzz2WP079/f5lZ1Q1jsrOzq/27PoqLi9WtWzeZmZ5++mndcccdWrly5WXXEQgBAMEQCAEAYWno0KEyM/3617+u99pggfC5556ruuvnkSNHgh7nq4Fw3bp1MjN9//vfD7j/+++/H/TTw0s3yenWrZs6d+6sixcvXvZvIRACAIIhEAIAwk5RUZEiIyNlZpd9VmAgwQKhz+fT1KlTZWZKSUnRmTNnaj3OVwPhiRMn1LZtW0VFRel3v/tdtX337duniRMnBq3r0l1FzUxz5syp099CIAQABEMgBACEneXLl1d9ktYQwQKhJHm9Xv30pz9Vu3bt1LdvX61Zs6ba3T/Lysr00ksvKTIyUl27dtUnn3xS9V5WVpbMTJGRkbrrrru0cOFCzZw5U4mJidq3b99la1uwYIEiIiL06aef1ulvIRACAIIhEAIAwsaOHTv0ve99T+3bt6+6+cvDDz+s9evX1+s4lwuElxw7dkxPPPGEbrnlFvXq1Ut9+vTR4MGDlZycrIkTJ+rZZ59VUVFRjXWrVq3Stddeq3bt2qlPnz665557dPDgwTrVdurUKd111111/lsIhACAYAiEAAB8RV0DYUtAIAQABEMgBADgKwiEAIDWgkAIAMBXmJkGDRokv9/vdimNtnHjRgIhAKBWBEIAAL5izJgxGjNmjO677z4tWLBAv/zlL90uqV4OHjyoBQsWaP78+frmN7+pMWPGaO3atW6XBQBohgiEAAAAANBKEQgBAAAAoJUiEAIAAABAK0UgBAAAAIBWikAIAAAAAK0UgRAAAAAAWikCIQAAAAC0Uv8Hvv/qgijVnYgAAAAASUVORK5CYII=\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0)\n", " sub = fig.add_subplot(1,1,1)\n", " \n", " X=np.logspace(-2,1,500)\n", " Y=[]\n", " for t in X:\n", " Y.append(axionMassInterpolation.ma2(t,1e12)**0.5*1e15)\n", " sub.plot(X,Y,linestyle='-',linewidth=1,alpha=1,c='xkcd:black',label='interpolation')\n", " \n", " Y=[]\n", " for t in X:\n", " Y.append(axionMassFunction.ma2(t,1e12)**0.5*1e15)\n", " sub.plot(X,Y,linestyle='--',linewidth=1,alpha=1,c='xkcd:red',label='function')\n", " \n", " sub.set_xlabel(r'$T ~[{\\rm GeV}]$')\n", " sub.xaxis.set_label_coords(0.5, -0.1) \n", " sub.set_ylabel(r'$ m_a(T) ~[{\\rm \\mu eV}]$')\n", " sub.yaxis.set_label_coords(-0.1,0.5) \n", " \n", " sub.legend(bbox_to_anchor=(1, 0.5),borderaxespad=0., \n", " borderpad=0.05,ncol=1,loc='lower right',fontsize=14,framealpha=0)\n", "\n", " #set major ticks\n", " _M_xticks=[ 10.**i for i in range(-2,2) ]\n", " _M_yticks=[ 10.**i for i in range(-7,2) ]\n", "\n", " #set major ticks that will not have a label\n", " _M_xticks_exception=[]\n", " _M_yticks_exception=[]\n", "\n", " _m_xticks=[j*10.**i for i in range(-2,2) for j in range(1,10)]\n", " _m_yticks=[] \n", " ft=FT(_M_xticks,_M_yticks,\n", " _M_xticks_exception,_M_yticks_exception,\n", " _m_xticks,_m_yticks,\n", " xmin=1e-2,xmax=1e1,ymin=1e-7,ymax=1e1,xscale='log',yscale='log')\n", "\n", " ft.format_ticks(plt,sub) \n", "\n", "# fig.savefig('axion_mass.pdf',bbox_inches='tight')\n", "\n", " fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.5" } }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/UserSpace/JupyterNotebooks/Cosmo.ipynb b/UserSpace/JupyterNotebooks/Cosmo.ipynb index 86d46cf..dd166c6 100755 --- a/UserSpace/JupyterNotebooks/Cosmo.ipynb +++ b/UserSpace/JupyterNotebooks/Cosmo.ipynb @@ -1,5058 +1,5066 @@ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np#you usually need numpy\n", "\n", "#---these are for plots---#\n", "import matplotlib\n", "matplotlib.use('nbAgg')\n", "import matplotlib.pyplot as plt\n", "\n", "plt.rcParams['font.size']=16\n", "plt.rcParams['font.family']='dejavu sans'\n", "\n", "plt.rcParams['mathtext.fontset']='stix'\n", "plt.rcParams['mathtext.rm']='custom'\n", "plt.rcParams['mathtext.it']='stix:italic'\n", "plt.rcParams['mathtext.bf']='stix:bold'\n", "#-------------------------#" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#load the module\n", "from sys import path as sysPath\n", - "from os import path as osPath\n", - "sysPath.append(osPath.join(osPath.dirname('./'), '../../src'))\n", + "sysPath.append('../../src')\n", "\n", "import interfacePy.Cosmo as Cosmo\n", "from interfacePy.FT import FT #easy tick formatting" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, + "outputs": [], + "source": [ + "cosmo=Cosmo()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,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uPjii2VmGn799QqZadsJJxAKAQBAlccs6h0CIVzRhNGhqKhI06dP15pLL1XITOmDBvldEgAAQIVjFvUOgRCuaMLoEd65U6GaNRUyU8GXX/pdDgAAQIVjFvUOgRCuaEJ/ZWdny3EcSVLW00/veblo+/aRPQAAgKqMWdQ7BEK4ogn91b9/f5144on67LPPtO2EExQyU3Zyst9lAQAAeIJZ1DsEQriiCf2TmZmpevXqycy05LXXFDJTKD5e4V27/C4NAABgv/7I3JiVlbXfr8Us6g0CIVzRhP7asWOHXn75ZWUOG6aQmXb17+93SQAAAPs1YcIETZs2LfLx999/LzNT3bp11bFjR/Xs2VM1atSQmalnz57q1q2b6tatKzPTJZdcsk8wZBb1DoEQrmjC6OA4jgoWL1bh99/7XQoAAICre++9VxMnTiy199RTT+n2229XQUGBJCk1NVVmpmbNmkXObNmyRc2bN1dqaqouuugi5eTkRB5jFvUOgRCuaEJ/7N692+8SAAAAyuy5555Tv3799tm///77VVRUFPl4ypQpMjPddNNNpc6NGjVKkjR37lzdeOONkX1mUe8QCOGKJvReRkaGGjVqpKuvvloZGRly8vP9LgkAAGC/tm/frjp16mjVqlX7PPbrH3Jff/31MjPNmDGj1P62bdsivz7llFM0e/ZsScyiXiIQopTk5GQlJSUpMTGRJvTY66+/LjNTUlKS8n/4QSn16yv9ttu41QQAAPjD3n33XfXt21ePPPKIevTooYSEBHXo0EEbNmw46K89cuRItWrVqkxnmzZtqri4OO06wEXyRo4cqTPOOEMSgdBLBEK4ogn98dVXX2n+/PnKvP9+hcyUdv75fpcEAECVE87O3u9y8vLKfjY394+fzclxPVeexo4dq5o1a+rHH3+UtGfOMDO9+eab5fL1O3To4Ppy0V/76aefZGbq1KnTAc+98847MjNt2rSJWdRDBEK4ogn94xQVaevhhytkptyZM/0uBwCAKidktt/16x/GptSuvd+zO846q9TZrY0a7ffs9pNPLnU2tVkz13PlJT8/X4cccogGDBgQ2Zs/f77MTG+99dZvfu7YsWM1ZswYnXjiiUpPT99nb/v27apWrZruvvvu36xlwoQJMjMNHz78gOeWLVsmM9P06dOZRT1EIIQrmtA76enpSk9Pj3yc9847Cplpa+PGckquzAUAAMpPLATCX67q+eSTT0b2HnjgAdWvX7/U3OFm4sSJGjp0qCRp8eLFchxnn72UlBSZWWTvQPr27Ssz08KFCw947pdnEseMGcMs6iECIVzRhN658847lZCQoOnTp0uS0i68UCEzZdx3n8+VAQBQNcXCS0Ydx9Epp5yi+++/X5K0Zs0aNW7cWP/3f//3m5970003acSIEQfcK2sgDIfDatiwoerVq1fqqqNu1q5dKzPTY489xizqIQIhXNGE3igsLFS7du1kZvroo49UnJKiUFycQmYqLHm9PwAAwB+xfv16tW/fXk888YSGDBmi5cuXl3r8tdde07hx43TppZdqyJAhkvZchKZTp0664IIL9Oyzzyo9Pd11r6CgQHFxcb/5ktGlS5fKzHTxxRf/Zr2/3Mz+ueeeYxb1EIEQrmhC7xQVFem///2vJGn3Y4/teVnJ6af7XBUAAKjMwuGw2rVrpzFjxrg+vnjxYt18882SpKysLNWoUUMffPCBJOm6667b5xlCt7127drpiiuuOGAdjz32mMxMEyZM+M2aP/7448hLS5lFvUMghCua0B9FGzcq88EHuZgMAAA4KPn5+Tr88MNVrVo19enTR1OnTi31ks37779fV199tZ599lk9++yzuvzyyzVt2jRJZQ+Ew4YNU+vWrQ9YR8eOHWVm+vLLL3+z5gkTJighIUFFRUXMoh4iEMIVTVixdu/erVdffZV7DAIAgArxn//8RxMmTNC4ceMib085+eSTlZOTI2nPNQzGjh1b6nN+mUvKGgi3bNmimjVrauPGjfv8/h988IH+8pe/yMxkZhowYEDkFVH707dv38h7EplFvUMghCuasGLddtttMjPdeOONfpcCAACqmIkTJ+qhhx4qtff666+revXqmjRpkiRp5syZ+tOf/qQffvhBkrRq1Sq9+OKLkqRrr712n1tEuO1J0pgxYzR48OCDrnnNmjU69thjlZWVJYlZ1EsEQriiCSvWuHHjVKtWLc2bN0+SVLRqldLOP195c+b4XBkAAKjsTjnllMiMsbfu3bvrueeei3z8wAMP6LDDDtNxxx2nu+66S4WFhfr222/Vpk0bde3aVStWrJAk171fOI6j3r1769NPP/3D9RYUFKhXr16lLnrDLOodAiFc0YQVb/v27ZFfZ9x55557H114oY8VAQCAqqBfv356+OGHS+2F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\" width=\"900\">" + "<img src=\"data:image/png;base64,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eodACFc0YXS45JJLZGZ68IYbFDLT7pNPJhQCAIA6j1nUOwRCuKIJo0NZWZmmT5+ujZdfrpCZsm++2e+SAAAAahyzqHcIhHBFE0aPcHa2QgkJCpmp9LPP/C4HAACgxjGLeodACFc0ob+KiorkOI4kqSAl5du3i55ySmQPAACgLmMW9Q6BEK5oQn9df/316t27txYvXqzMXr0UMlP+3/7md1kAAACeYBb1DoEQrmhC/+Tn56tp06YyMy2eNk0hM4Xq11d4716/SwMAADionzI35ufnH/R7MYt6g0AIVzShv3bv3q0pU6Yod9QohcyUdeWVfpcEAABwUM8++6zefPPNyNdr1qyRmalJkybq06ePzjvvPNWvX19mpvPOO0/nnHOOmjRpIjPTkCFDDgiGzKLeIRDCFU0YHRzHUenixSr7+mu/SwEAAHB1zz33aPLkyVX2Jk2apOHDh6u0tFSSlJGRITNThw4dImd27dqljh07KiMjQ//3f/+nwsLCyGPMot4hEMIVTeiPgoICv0sAAACothdeeEFDhw49YP/+++9XeXl55Ovp06fLzHTrrbdWOTd69GhJ0ty5c3XzfrfXYhb1DoEQrmhC7+Xl5alNmza64YYblJOTI6fyJ2oAAADRKDMzU40bN9aGDRsOeCwvL6/K1zfeeKPMTDNnzqyyv3v37sive/furX//+9+SmEW9RCBEFSkpKUpOTlZSUhJN6LE33nhDZqakpCSVbNyotObNlT18uJxw2O/SAABALTV79mxdeumlGjNmjM4991wlJiaqV69e2r59+2F/70cffVRdu3at1tn27dsrLi5O+/btO+T369evnyQCoZcIhHBFE/pj2bJl+uSTT5T74IMKmWnvoEF+lwQAQJ0TLig46HKKi6t/tqjop58tLHQ9dySNHz9eDRo00Pr16yVJX3zxhcxM77zzzhH5/r169XJ9u+j3bdy4UWamM84445DnZs2aJTPTzp07mUU9RCCEK5rQP055udLbtVPITEXfe1sFAAA4fCGzg669559f5Wxao0YHPbvn7LOrnE1v2fKgZzN//vMqZzM6dHA9d6SUlJToqKOO0g033BDZmz9/vsxM77777g8+d/z48Ro3bpxOPfVUZWdnH7CXmZmpevXqacSIET9Yy7PPPisz0yOPPHLIcytWrJCZ6a233mIW9RCBEK5oQu/k5uYqJycn8nXx7NkKmSm9ZUs+RwgAQA2IhUD43VU9J06cGNl74IEH1KxZM2VnZx/yuZMnT9ZDDz0kSVq6dKkcxzlgLy0tTWYW2TuUSy+9VGamRYsWHfLcd68kjhs3jlnUQwRCuKIJvXP33XerVatWkQ9ZZ11yiUJmyqnGT9wAAMCPFwtvGXUcR71799b9998vSdqyZYtat26t99577wefe+utt2rUqFGH3KtuIAyHw2rRooWaNm1a5aqjbrZu3Soz0+OPP84s6iECIVzRhN4oKytT9+7dZWb66KOPVJGerlC9egqZqWzNGr/LAwAAtdg333yjnj176qmnntJ9992nVatWVXl82rRpmjBhgi677DLdd999kr69CM0ZZ5yhCy64QM8//7yys7Nd90pLSxUXF/eDbxldtmyZzEyXXHLJD9b73c3sX3jhBWZRDxEI4Yom9E5ZWZn++c9/SpLynnzy27eV/MCHrgEAAA4lHA6rR48eGjdunOvjS5cu1W233SZJys/PV/369TVnzhxJ0vXXX3/AK4Ruez169NCVV155yDoef/xxmZmeffbZH6x53rx5kbeWMot6h0AIVzShP8p37FDuAw+o6O23/S4FAADUYiUlJWrbtq3q1auniy++WDNmzKjyls37779f1157rZ5//nk9//zzuuKKK/Tmm29Kqn4gfPjhh9WtW7dD1tGnTx+ZmT7//PMfrPnZZ59VYmKiysvLmUU9RCCEK5qwZhUUFGj69OlyHMfvUgAAQB30+uuv69lnn9WECRPUo0cPmZl+/vOfq7CwUJL0hz/8QePHj6/ynO/mkuoGwl27dqlBgwbasWPHAf/8OXPm6Oqrr5aZycx0ww036F//+tcha7700ksjn0lkFvUOgRCuaMKa9fvf/15mpltuucXvUgAAQB0zefJkjRw5ssreG2+8ofj4eP3973+XJP3jH//QMccco3Xr1kmSNmzYoBdffFGSdN111x1wiwi3PUkaN26c7rzzzsOuecuWLerSpYvy8/MlMYt6iUAIVzRhzRo/frwSEhL0n//8R5JUvnGj9l5wgYo/+sjnygAAQG3Xu3dvffLJJwfsDxw4UC+88ELk6wceeECtWrXSCSecoLvuuktlZWX66quvdPLJJ2vAgAH6+uuvJcl17zuO4+jCCy/UwoULf3K9paWlGjx4cJWL3jCLeodACFc0Yc3LyMiI/Drn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\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0)\n", " sub = fig.add_subplot(1,1,1)\n", "\n", " T=np.logspace(-5,5,500)\n", - " gt=[Cosmo.geff(i) for i in T]\n", - " ht=[Cosmo.heff(i) for i in T]\n", + " gt=[cosmo.geff(i) for i in T]\n", + " ht=[cosmo.heff(i) for i in T]\n", "\n", " sub.plot(T,gt,linestyle='--',c='xkcd:red',label=r\"$g_{\\rm eff} (T)$\")\n", " sub.plot(T,ht,linestyle=':',c='xkcd:black',label=r\"$h_{\\rm eff} (T)$\")\n", "\n", " sub.set_xlabel(r'$T ~ [{\\rm GeV}]$')\n", " sub.set_ylabel(r'rel. dof')\n", "\n", " sub.legend(bbox_to_anchor=(1, 0.0),borderaxespad=0., \n", " borderpad=0.05,ncol=1,loc='lower right',fontsize=14,framealpha=0)\n", " sub.set_yscale('log')\n", " sub.set_xscale('log')\n", "\n", "\n", "\n", "\n", " fig.show()" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,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\" width=\"900\">" + "<img src=\"data:image/png;base64,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\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0)\n", " sub = fig.add_subplot(1,1,1)\n", "\n", " T=np.logspace(-5,5,500)\n", - " dg=[Cosmo.dgeffdT (i) for i in T]\n", - " dh=[Cosmo.dheffdT(i) for i in T]\n", + " dg=[cosmo.dgeffdT (i) for i in T]\n", + " dh=[cosmo.dheffdT(i) for i in T]\n", "\n", " sub.plot(T,dg,linestyle='--',c='xkcd:red',label=r\"$\\dfrac{d g_{\\rm eff}}{dT} (T)$\")\n", " sub.plot(T,dh,linestyle=':',c='xkcd:black',label=r\"$\\dfrac{d h_{\\rm eff}}{dT} (T)$\")\n", "\n", " sub.set_xlabel(r'$T ~ [{\\rm GeV}]$')\n", "\n", " sub.legend(bbox_to_anchor=(1, 0.5),borderaxespad=0., \n", " borderpad=0.05,ncol=1,loc='lower right',fontsize=14,framealpha=0)\n", " sub.set_yscale('symlog')\n", " sub.set_xscale('log')\n", "\n", "\n", "\n", "\n", " fig.show()" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nOzde5xN9f4/8NeecR23mFwixv0nilyKUm6lUpRbKCGXJJcmCpUcx1BRpENRU5JuLonICaFJyImDyJ3GNcol12ZGzH79/jjf2Q/T7DGzZ9b6fPaeeT0fj/V4fK291me955u3837N3nstUERERERERHIl2C5ARERERERE7FAgFBERERERyaUUCEVERERERHIpBUIREREREZFcSoFQREREREQkl1IgFBERERERyaUUCEVERERERHIpBUIREREREZFcSoFQREREREQkl1IgFBERERERyaUUCEVERERERHIpBUIREREREZFcSoFQREREREQkl1IgFBERERERyaUUCEVERERERHIpBUIREREREZFcSoFQREREREQkl1IgNCw+Pp6xsbHs06cPa9euzfDwcALgmDFjsr32nDlzeO+997JUqVLMly8fy5Yty3vvvZfTp093oHIREREREclpFAgNi46OJoA0W3YCYVJSEh988EHfWpUrV+Ytt9zC8uXLMywsjPXr1w94zeTkZB4+fJhnzpzh2bNntWnTpk2bNm3atGkztp05c4aHDx9mcnJylmdkyRwFQsPGjBnD1q1bMyYmhkuWLGGHDh2yHQgfeeQRAmCTJk24a9euVK8dP36cy5YtC3jNw4cP+w2u2rRp06ZNmzZt2rSZ2g4fPpzlGVkyR4HQsh49ehDIeiBcsmQJAbBGjRpMSEhwrK4zZ874mtD2b4i0adOmTZs2bdq05a4t5c2JM2fOODbfin8KhJZlNxDee++9BMBPPvnE0brOnj1LADx79qyj64qIiIiIZESzqDkKhJZlJxAmJCQwT5489Hg8PH36NOPi4tirVy+2aNGC7du356RJk3ju3Lks1aUmFBERERFbNIuao0BoWXYC4bp16wiA5cqV4/PPP+/3c9dly5bl5s2bA15bTSgiIiIitmgWNUeB0LLsBML58+cTAPPmzUsAbNOmDXft2sWLFy9y/fr1rFevHgGwQoUKPH/+/FXXSkpK8vu5bTWhiIiIiJimQGiOAqFl2QmEH3/8se+dwMqVK/Ovv/5K9fqxY8cYERFBAJw8efJV1xo1apTfdxjVhCIiIiJimgKhOQqElmUnEH7++ee+4DZhwgS/x/Tq1YsAeP/99191Lb1DKCIi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VHQNIxsbG4ioszYd1Qz2NfEzYDnY15aB/Ux0FwMhkREqsjMBgIEDB0JEMHXq1FI/i4yMhIjA3d0d+fn5NVUqGYl9TfwMWA72tWVgPxPdxUBIZISK7kzi4+NhZWUFa2tr7N69W3n85MmT8PDwgIjg3XffrelyyQjsa+JnwHKwry0D+5noLgZCokqIj4+Hu7u70uzs7CAicHR0LPF4ampqqdcuX75cWWuqVatW8PPzg7W1NUQEzz33HIqKijR4R1QW9jXxM2A52NeWgf1MZBgDIVElxMXFlVpI2FBLTk42+PqvvvoKffv2hYuLCxwdHfHYY49h3bp13JGYIPY18TNgOdjXloH9TGQYAyEREREREZGFYiAkIiIiIiKyUAyEREREREREFoqBkIiIiIiIyEIxEBIREREREVkoBkIiIiIiIiILxUBIRERERERkoRgIiYiIiIiILBQDIRERERERkYViICQiIiIiIrJQDIREREREREQWioGQiIiIiIjIQjEQEhERERERWSgGQiIiMistWrSAiMDe3h6tW7eGn58fRAQigrZt2+Lxxx+Hm5sbRAQNGjSATqfTumQiIiLNMBASEZHZ+PPPP+Hm5oYvv/wSRUVFAICTJ09CRGBtbY2MjAwAQH5+Pl566SW88MILBrejf/6ECRMwb948REREGHzehQsX8NZbb6FLly7w8PCAp6cnnJ2dlQAqIvD09Kz0+4iOjkb37t2VbTz00EMIDQ3F5cuXSzyvqKgI4eHhaN++PUQETz75JH788Uf873//w7x58zB37ly0adMGIoIlS5ZUug4iIjJ/DIRERGQ2IiIiEBUVVeKxNWvWQETQrVu3Eo9/99132LBhg8HtiAieeOKJMn+PTqfDsmXLULduXfj6+uKLL75Abm6u8rNjx46hX79+EBG4ublV6b3cuXMHrVu3hojgqaeeKve5wcHB8PHxQV5eXqmfff311wyERERUJgZCIiIyG9HR0aUeGzRoEEQEixYtKvH48ePH8eeffxrcjoigT58+Zf6eV199VQlqd+7cMfgcnU6HoUOHwt7evuJv4D579+6FiMDKygp//fVXmc/r2bMntm/fbvBncXFxDIRERFQmBkIiIjJbhYWFcHJygojg8OHDFX5deYHwiy++gIjA0dER165dK3c76enpcHFxqfJ1ijqdDu3atYOIYNq0aQafc+rUKTRq1Mjg0UGAgZCIiMrHQEhERGYrPj4eIgInJycUFBRU+HXlBcJu3bpBRBAYGFihbe3cubPU705MTMTo0aPRu3dveHh4oFevXoiLizP4+u3bt0NEYGdnh7///rvUz6dMmYK33367zN/PQEhEROVhICQiIrO1bNkyiAiee+65Sr2urEB4/fp1WFlZQUSwdevWKtV06NAhdO3aFf/88w+Au0cRvb29YWNjg59//rnU8wsLC/Hwww9DRDB//vwSP8vIyICzszNSU1PL/H0MhEREVB4GQiIiMlu9e/eGiOD999+v1OvKCoS//fabcufPmJiYMl+fkJCAuLi4Eu3YsWMoKChA8+bNS13rGBISAhEp866nH374IUQEzs7Oyp1SASAsLAzDhw8v970wEBIRUXkYCImIyCzdunULtra2EBGcPXu2Uq8tKxD+8ssvSiA8cOBAma9PSUnB1q1bledOnDgRycnJOHDgAEQE/fr1w7Bhw5TWt29f+Pj4YMiQIQa3l5eXh6ZNm0JEEBwcDAAoLi5Gy5YtcejQoXLfCwMhERGVh4GQiIjMUmxsLEQEzZo1q/RrywqEqampSsjbtm3bA7fTuHFjiAgOHjwIAAgPD4eI4Pz585WuSf/ahg0b4vbt24iOjkb79u0f+DoGQiIiKg8DIRERmaX/+7//U47OVVZ5N5XRrw0YEBDwwO14eXlBRJQbxoSGhpb4d2XcunUL7u7uEBGsW7cO/v7+2Lhx4wNfx0BIRETlYSAkIiKz1LFjR4gIdu/eXenXlhcIIyIilLt+pqSklLud+wPhjh07ICKYOXOmwecnJCSUe/RQf5Mcd3d3uLi44ObNmw98LwyERERUHgZCIiIyO+np6bC2toaIPHCtQEPKC4TFxcUYPnw4RASdOnXCjRs3ytzO/YHw6tWrsLGxQZ06dfDNN9+UeO7vv/+OQYMGlVuX/q6iIoLZs2dX6L0wEBIRUXkYCImIyOysXbtWOZJWFeUFQgAoKirCwoULYWtri+bNm2Pr1q0l7v6Zm5uLnTt3wtraGg0aNMAff/yh/Gzp0qUQEVhbW2PYsGFYsGABxo4dC09PT/z+++8PrO2tt96ClZUVzp07V6H3wkBIRETlYSAkIiKzER8fj6lTp8LOzk65+curr76KyMjISm3nQYFQ7/LlywgODsa//vUvNGnSBM2aNUPbtm3Rpk0bDBo0COvXr0d6enqp123atAm+vr6wtbVFs2bNEBAQgAsXLlSotn/++QfDhg2r8HthICQiovIwEBIREd2nooGwNmAgJCKi8jAQEhER3YeBkIiILAUDIRER0X1EBD4+PtDpdFqXYrTo6GgGQiIiKtP/AwAaYHYQiqQnAAAAAElFTkSuQmCC\" width=\"900\">" + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAAGQCAYAAAD2lq6fAAAgAElEQVR4nOzde5xN9f4/8NeecR23mFwixv0nilyKUm6lUpRbKCGXJJcmCpUcx1BRpENRU5JuLonICaFJyImDyJ3GNcol12ZGzH79/jjf2Q/T7DGzZ9b6fPaeeT0fj/V4fK291me955u3837N3nstUERERERERHIl2C5ARERERERE7FAgFBERERERyaUUCEVERERERHIpBUIREREREZFcSoFQREREREQkl1IgFBERERERyaUUCEVERERERHIpBUIREREREZFcSoFQREREREQkl1IgFBERERERyaUUCEVERERERHIpBUIREREREZFcSoFQREREREQkl1IgFBERERERyaUUCEVERERERHIpBUIREREREZFcSoFQREREREQkl1IgNCw+Pp6xsbHs06cPa9euzfDwcALgmDFjsr32nDlzeO+997JUqVLMly8fy5Yty3vvvZfTp093oHIREREREclpFAgNi46OJoA0W3YCYVJSEh988EHfWpUrV+Ytt9zC8uXLMywsjPXr1w94zeTkZB4+fJhnzpzh2bNntWnTpk2bNm3atGkztp05c4aHDx9mcnJylmdkyRwFQsPGjBnD1q1bMyYmhkuWLGGHDh2yHQgfeeQRAmCTJk24a9euVK8dP36cy5YtC3jNw4cP+w2u2rRp06ZNmzZt2rSZ2g4fPpzlGVkyR4HQsh49ehDIeiBcsmQJAbBGjRpMSEhwrK4zZ874mtD2b4i0adOmTZs2bdq05a4t5c2JM2fOODbfin8KhJZlNxDee++9BMBPPvnE0brOnj1LADx79qyj64qIiIiIZESzqDkKhJZlJxAmJCQwT5489Hg8PH36NOPi4tirVy+2aNGC7du356RJk3ju3Lks1aUmFBERERFbNIuao0BoWXYC4bp16wiA5cqV4/PPP+/3c9dly5bl5s2bA15bTSgiIiIitmgWNUeB0LLsBML58+cTAPPmzUsAbNOmDXft2sWLFy9y/fr1rFevHgGwQoUKPH/+/FXXSkpK8vu5bTWhiIiIiJimQGiOAqFl2QmEH3/8se+dwMqVK/Ovv/5K9fqxY8cYERFBAJw8efJV1xo1apTfdxjVhCIiIiJimgKhOQqElmUnEH7++ee+4DZhwgS/x/Tq1YsAeP/99191Lb1DKCIi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DsTFxaFv374oU6YMXFxcMGLECCYIGinOumbbNR9q/l3n9ZjMGRNCIhPk52ISEBAAEUGHDh1yfY+/vz9EBF26dCmOMKkIsK6J3wHrwbq2DqxnoqeYEBKZwNxGjaj4sK6J3wHrwbq2DqxnoqeYEBKZwNyeK6Piw7omfgesB+vaOrCeiZ5iQkhkAnNbeZKKD+ua+B2wHqxr68B6JnqKCSGRCfK7h5GdnR1E1NmbjooH65r4HbAerGvrwHomeooJIZEJ8nMxAYCePXtCRDB+/PgcPwsLC4OIwM3NDU+ePCmuUMlErGvid8B6sK6tA+uZ6CkmhEQmyO/FJCYmBjY2NrC1tcXu3buV18+ePQt3d3eICD755JPiDpdMwLomfgesB+vaOrCeiZ5iQkhUADExMXBzc1OKg4MDRATOzs4Gr1+9ejXHsYsXL1b2mqpXrx68vb1ha2sLEUHv3r2RmZmpwSei3LCuid8B68G6tg6sZyLjmBASFUB0dHSOjYSNlfj4eKPHf/311+jcuTNcXFzg7OyMl156CatWreKFxAyxronfAevBurYOrGci45gQEhERERERWSkmhERERERERFaKCSEREREREZGVYkJIRERERERkpZgQEhERERERWSkmhERERERERFaKCSEREREREZGVYkJIRERERERkpZgQEhERERERWSkmhERERERERFaKCSEREREREZGVYkJIRERERERkpZgQEhERERERWSkmhEREZFFq1aoFEYGjoyPq168Pb29viAhEBI0aNUKzZs3g6uoKEUHFihWh0+m0DpmIiEgzTAiJiMhi/Pnnn3B1dcVXX32FzMxMAMDZs2chIrC1tUViYiIA4MmTJ3jnnXfw1ltvGT2P/v2jRo3CzJkzERoaavR9V65cwccff4xWrVrB3d0d1atXR7ly5ZQEVERQvXr1An+OiIgIvPzyy8o5XnjhBQQFBeH69esG78vMzERISAiaNGkCEcGrr76Kn376Cf/3f/+HmTNnYvr06WjQoAFEBAsWLChwHEREZPmYEBIRkcUIDQ1FeHi4wWsrVqyAiKBNmzYGr3///fdYt26d0fOICF555ZVcf49Op8OiRYtQunRpeHl54csvv0RqaqrysxMnTqBbt24QEbi6uhbqszx+/Bj169eHiKBTp055vjcgIACenp5IS0vL8bNvvvmGCSEREeWKCSEREVmMiIiIHK/16tULIgI/Pz+D10+fPo0///zT6HlEBB07dsz197z//vtKovb48WOj79HpdOjXrx8cHR3z/wGy2bdvH0QENjY2+Ouvv3J9X7t27bB9+3ajP4uOjmZCSEREuWJCSEREFisjIwNly5aFiODo0aP5Pi6vhPDLL7+EiMDZ2Rk3b97M8zz37t2Di4tLoZ9T1Ol0aNy4MUQEEyZMMPqec+fOoXLlykZHBwEmhERElDcmhEREZLFiYmIgIihbtizS09PzfVxeCWGbNm0gIvDx8cnXuXbu3Jnjd588eRJDhgxBhw4d4O7ujvbt2yM6Otro8du3b4eIwMHBAf/++2+On48bNw5z5szJ9fczISQiorwwISQiIou1aNEiiAh69+5doONySwjv3LkDGxsbiAi2bNlSqJiOHDmC1q1b49atWwCejiJ6eHjAzs4Ov/zyS473Z2RkoG7duhARzJ492+BniYmJKFeuHK5evZrr72NCSEREeWFCSEREFqtDhw4QEaxevbpAx+WWEJ46dUpZ+TMyMjLX42NjYxEdHW1QTpw4gfT0dNSsWTPHs46BgYEQkVxXPd2wYQNEBOXKlVNWSgWA4OBgDBgwIM/PwoSQiIjywoSQiIgs0sOHD2Fvbw8RwcWLFwt0bG4J4a+//qokhIcOHcr1+ISEBGzZskV57+jRoxEfH49Dhw5BRNCtWzf0799fKZ07d4anpyf69u1r9HxpaWmoVq0aRAQBAQEAgKysLNSpUwdHjhzJ87MwISQiorwwISQiIosUFRUFEUGNGjUKfGxuCeHVq1eVJG/btm3PPU+VKlUgIjh8+DAAICQkBCKCy5cvFzgm/bGVKlXCo0ePEBERgSZNmjz3OCaERESUFyaERERkkWbNmqWMzhVUXovK6PcGHDly5HPPU7t2bYiIsmBMUFCQwb8L4uHDh3Bzc4OIYNWqVejSpQvWr1//3OOYEBIRUV6YEBIRkUVq3rw5RAS7d+8u8LF5JYShoaHKqp8JCQl5nid7Qrhjxw6ICCZPnmz0/bGxsXmOHuoXyXFzc4OLiwsePHjw3M/ChJCIiPLChJCIiCzOvXv3YGtrCxF57l6BxuSVEGZlZWHAgAEQEbRo0QJ3797N9TzZE8IbN27Azs4OpUqVwrfffmvw3gsXLqBXr155xqVfVVREMHXq1Hx9FiaERESUFyaERERkcVauXKmMpBVGXgkhAGRmZmLu3Lmwt7dHzZo1sWXLFoPVP1NTU7Fz507Y2tqiYsWK+OOPP5SfLVy4ECICW1tb9O/fH76+vhg2bBiqV6+OCxcuPDe2jz/+GDY2Nrh06VK+PgsTQiIiygsTQiIishgxMTEYP348HBwclMVf3n//fYSFhRXoPM9LCPWuX7+OgIAAvPbaa6hatSpq1KiBRo0aoUGDBujVqxfWrFmDe/fu5Thu48aN8PLygr29PWrUqIGRI0fiypUr+Yrt1q1b6N+/f74/CxNCIiLKCxNCIiKibPKbEJYETAiJiCgvTAiJiIiyYUJIRETWggkhERFRNiICT09P6HQ6rUMxWUREBBNCIiLK1f8DkN9fvDpR7G0AAAAASUVORK5CYII=\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0)\n", " sub = fig.add_subplot(1,1,1)\n", "\n", " T=np.logspace(-5,5,500)\n", - " dht=[Cosmo.dh(i) for i in T]\n", + " dht=[cosmo.dh(i) for i in T]\n", " sub.plot(T,dht,linestyle='-',c='xkcd:black') \n", " sub.set_xlabel(r'$T ~ [{\\rm GeV}]$')\n", " sub.set_ylabel(r'$\\delta_h = 1 + \\dfrac{1}{3} \\dfrac{d \\log h_{\\rm eff} }{d \\log T}$')\n", " sub.set_yscale('linear')\n", " sub.set_xscale('log')\n", "\n", "\n", " fig.show()" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,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AD/ALGofAiEs0YSoayUlJXrmmWfUsmVLMwjGxcVp3LhxKioqcro8AADgR5hF7UMghCWaEHXlyJEjmjx5si666CIzCCYmJupPf/qTjh075nR5AADADzGL2odACEs0IS7U/v37NXbsWMXExJhB8PLLL9fChQt1+vRpp8sDAAB+jFnUPgRCWKIJcb527typ4cOHKywszAyC11xzjZYvX66qqiqnywMAAAGAWdQ+BEJYoglxLjwejz744AP179+/xo6hffv21bp169gxFAAAnBNmUfsQCGGJJoQvqqur9dZbb6lbt25mCHS73Ro6dKj++c9/Ol0eAAAIUMyi9iEQwhJNiLMpLy/XkiVLdMUVV5hBMCoqSvfff7/27t3rdHkAACDAMYvah0AISzQhrJw8eVLz5s3TJZdcYgbB+Ph4TZgwQQcPHnS6PAAAECSYRe1DIIQlmhA/dezYMU2fPl0JCQlmELz44os1e/Zs/owAAIA6xyxqHwIhLNGEkKTDhw9r4sSJatSoUY2jIxYtWqSysjKnywMAAEGKWdQ+BEJYoglD24EDB/S73/1OsbGxZhDs2LGjcnJyVFlZ6XR5AAAgyDGL2odAGCBWrFih2267TS1btlRMTIw6duyouXPnqqKiwvL+nJwcde7cWdHR0brooovUt29fHTlyxOfXowlD0759+3T//fcrMjLSDIKdO3fWypUrVV1d7XR5AAAgRDCL2odAGCC6du2qIUOGKCcnRxs2bND06dMVHR2tESNG1Lp35syZioyM1JNPPqkNGzZo9erVGjdunL755hufX48mDC27d+/WiBEjahwm3717d7333nucIQgAAGzHLGofAmGAOHz4cK1r06ZNk2EYOnTokHnt3//+t8LDw/XSSy9d0OvRhKHhX//6l4YNGyaXy2UGwZtvvlkffPCB06UBAIAQxixqHwJhAHv33XdlGIY++eQT89of/vAHNWzYUOXl5Rf0tWnC4PbFF1/ojjvuqBEEb731Vm3dutXp0gAAAJhFbUQgPGPfvn1atGiRRo0apdTUVPNH56ZNm+bT8/Py8pSenq4mTZooNjZWaWlpeu655+r1c1cTJkxQZGRkjUbp1auXOnfurEWLFqlVq1YKCwvTL37xC7333nvn9LVpwuC0Z88e3XXXXTWC4JAhQ7Rr1y6nSwMAADAxi9qHQHjGI488Yg7IP12+BMIZ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\" width=\"900\">" + "<img src=\"data:image/png;base64,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\" width=\"900\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig=plt.figure(figsize=(9,4))\n", "fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0)\n", "fig.suptitle('')\n", "\n", "sub = fig.add_subplot(1,1,1)\n", "\n", "T=np.logspace(-5,5,500)\n", - "H=[Cosmo.Hubble(i) for i in T]\n", + "H=[cosmo.Hubble(i) for i in T]\n", "sub.plot(T,H,linestyle='-',c='xkcd:black')\n", "sub.set_ylabel(r'$H ~ [{\\rm GeV}]$')\n", "sub.set_yscale('log')\n", "sub.set_xscale('log')\n", "\n", "sub.set_xlabel(r'$T \\; [{\\rm GeV}]$')\n", "\n", "fig.show()" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "/* global mpl */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function () {\n", " if (typeof WebSocket !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof MozWebSocket !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert(\n", " 'Your browser does not have WebSocket support. ' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.'\n", " );\n", " }\n", "};\n", "\n", "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = this.ws.binaryType !== undefined;\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById('mpl-warnings');\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent =\n", " 'This browser does not support binary websocket messages. ' +\n", " 'Performance may be slow.';\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = document.createElement('div');\n", " this.root.setAttribute('style', 'display: inline-block');\n", " this._root_extra_style(this.root);\n", "\n", " parent_element.appendChild(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message('supports_binary', { value: fig.supports_binary });\n", " fig.send_message('send_image_mode', {});\n", " if (fig.ratio !== 1) {\n", " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", " }\n", " fig.send_message('refresh', {});\n", " };\n", "\n", " this.imageObj.onload = function () {\n", " if (fig.image_mode === 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function () {\n", " fig.ws.close();\n", " };\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "};\n", "\n", "mpl.figure.prototype._init_header = function () {\n", " var titlebar = document.createElement('div');\n", " titlebar.classList =\n", " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", " var titletext = document.createElement('div');\n", " titletext.classList = 'ui-dialog-title';\n", " titletext.setAttribute(\n", " 'style',\n", " 'width: 100%; text-align: center; padding: 3px;'\n", " );\n", " titlebar.appendChild(titletext);\n", " this.root.appendChild(titlebar);\n", " this.header = titletext;\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", "\n", "mpl.figure.prototype._init_canvas = function () {\n", " var fig = this;\n", "\n", " var canvas_div = (this.canvas_div = document.createElement('div'));\n", " canvas_div.setAttribute(\n", " 'style',\n", " 'border: 1px solid #ddd;' +\n", " 'box-sizing: content-box;' +\n", " 'clear: both;' +\n", " 'min-height: 1px;' +\n", " 'min-width: 1px;' +\n", " 'outline: 0;' +\n", " 'overflow: hidden;' +\n", " 'position: relative;' +\n", " 'resize: both;'\n", " );\n", "\n", " function on_keyboard_event_closure(name) {\n", " return function (event) {\n", " return fig.key_event(event, name);\n", " };\n", " }\n", "\n", " canvas_div.addEventListener(\n", " 'keydown',\n", " on_keyboard_event_closure('key_press')\n", " );\n", " canvas_div.addEventListener(\n", " 'keyup',\n", " on_keyboard_event_closure('key_release')\n", " );\n", "\n", " this._canvas_extra_style(canvas_div);\n", " this.root.appendChild(canvas_div);\n", "\n", " var canvas = (this.canvas = document.createElement('canvas'));\n", " canvas.classList.add('mpl-canvas');\n", " canvas.setAttribute('style', 'box-sizing: content-box;');\n", "\n", " this.context = canvas.getContext('2d');\n", "\n", " var backingStore =\n", " this.context.backingStorePixelRatio ||\n", " this.context.webkitBackingStorePixelRatio ||\n", " this.context.mozBackingStorePixelRatio ||\n", " this.context.msBackingStorePixelRatio ||\n", " this.context.oBackingStorePixelRatio ||\n", " this.context.backingStorePixelRatio ||\n", " 1;\n", "\n", " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", " 'canvas'\n", " ));\n", " rubberband_canvas.setAttribute(\n", " 'style',\n", " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", " );\n", "\n", " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", " if (this.ResizeObserver === undefined) {\n", " if (window.ResizeObserver !== undefined) {\n", " this.ResizeObserver = window.ResizeObserver;\n", " } else {\n", " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", " this.ResizeObserver = obs.ResizeObserver;\n", " }\n", " }\n", "\n", " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", " var nentries = entries.length;\n", " for (var i = 0; i < nentries; i++) {\n", " var entry = entries[i];\n", " var width, height;\n", " if (entry.contentBoxSize) {\n", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\n", " width = entry.contentRect.width;\n", " height = entry.contentRect.height;\n", " }\n", "\n", " // Keep the size of the canvas and rubber band canvas in sync with\n", " // the canvas container.\n", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * fig.ratio);\n", " canvas.setAttribute('height', height * fig.ratio);\n", " }\n", " canvas.setAttribute(\n", " 'style',\n", " 'width: ' + width + 'px; height: ' + height + 'px;'\n", " );\n", "\n", " rubberband_canvas.setAttribute('width', width);\n", " rubberband_canvas.setAttribute('height', height);\n", "\n", " // And update the size in Python. We ignore the initial 0/0 size\n", " // that occurs as the element is placed into the DOM, which should\n", " // otherwise not happen due to the minimum size styling.\n", " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", " fig.request_resize(width, height);\n", " }\n", " }\n", " });\n", " this.resizeObserverInstance.observe(canvas_div);\n", "\n", " function on_mouse_event_closure(name) {\n", " return function (event) {\n", " return fig.mouse_event(event, name);\n", " };\n", " }\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mousedown',\n", " on_mouse_event_closure('button_press')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseup',\n", " on_mouse_event_closure('button_release')\n", " );\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband_canvas.addEventListener(\n", " 'mousemove',\n", " on_mouse_event_closure('motion_notify')\n", " );\n", "\n", " rubberband_canvas.addEventListener(\n", " 'mouseenter',\n", " on_mouse_event_closure('figure_enter')\n", " );\n", " rubberband_canvas.addEventListener(\n", " 'mouseleave',\n", " on_mouse_event_closure('figure_leave')\n", " );\n", "\n", " canvas_div.addEventListener('wheel', function (event) {\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " on_mouse_event_closure('scroll')(event);\n", " });\n", "\n", " canvas_div.appendChild(canvas);\n", " canvas_div.appendChild(rubberband_canvas);\n", "\n", " this.rubberband_context = rubberband_canvas.getContext('2d');\n", " this.rubberband_context.strokeStyle = '#000000';\n", "\n", " this._resize_canvas = function (width, height, forward) {\n", " if (forward) {\n", " canvas_div.style.width = width + 'px';\n", " canvas_div.style.height = height + 'px';\n", " }\n", " };\n", "\n", " // Disable right mouse context menu.\n", " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", " event.preventDefault();\n", " return false;\n", " });\n", "\n", " function set_focus() {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'mpl-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'mpl-button-group';\n", " continue;\n", " }\n", "\n", " var button = (fig.buttons[name] = document.createElement('button'));\n", " button.classList = 'mpl-widget';\n", " button.setAttribute('role', 'button');\n", " button.setAttribute('aria-disabled', 'false');\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", "\n", " var icon_img = document.createElement('img');\n", " icon_img.src = '_images/' + image + '.png';\n", " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", " icon_img.alt = tooltip;\n", " button.appendChild(icon_img);\n", "\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " var fmt_picker = document.createElement('select');\n", " fmt_picker.classList = 'mpl-widget';\n", " toolbar.appendChild(fmt_picker);\n", " this.format_dropdown = fmt_picker;\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = document.createElement('option');\n", " option.selected = fmt === mpl.default_extension;\n", " option.innerHTML = fmt;\n", " fmt_picker.appendChild(option);\n", " }\n", "\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "};\n", "\n", "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", "};\n", "\n", "mpl.figure.prototype.send_message = function (type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "};\n", "\n", "mpl.figure.prototype.send_draw_message = function () {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "};\n", "\n", "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1], msg['forward']);\n", " fig.send_message('refresh', {});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", " var x0 = msg['x0'] / fig.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", " var x1 = msg['x1'] / fig.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0,\n", " 0,\n", " fig.canvas.width / fig.ratio,\n", " fig.canvas.height / fig.ratio\n", " );\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "};\n", "\n", "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "};\n", "\n", "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch (cursor) {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "};\n", "\n", "mpl.figure.prototype.handle_message = function (fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "};\n", "\n", "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "};\n", "\n", "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "};\n", "\n", "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", " for (var key in msg) {\n", " if (!(key in fig.buttons)) {\n", " continue;\n", " }\n", " fig.buttons[key].disabled = !msg[key];\n", " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", " if (msg['mode'] === 'PAN') {\n", " fig.buttons['Pan'].classList.add('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " } else if (msg['mode'] === 'ZOOM') {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.add('active');\n", " } else {\n", " fig.buttons['Pan'].classList.remove('active');\n", " fig.buttons['Zoom'].classList.remove('active');\n", " }\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Called whenever the canvas gets updated.\n", " this.send_message('ack', {});\n", "};\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function (fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = 'image/png';\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src\n", " );\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data\n", " );\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " } else if (\n", " typeof evt.data === 'string' &&\n", " evt.data.slice(0, 21) === 'data:image/png;base64'\n", " ) {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig['handle_' + msg_type];\n", " } catch (e) {\n", " console.log(\n", " \"No handler for the '\" + msg_type + \"' message type: \",\n", " msg\n", " );\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\n", " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", " e,\n", " e.stack,\n", " msg\n", " );\n", " }\n", " }\n", " };\n", "};\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function (e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e) {\n", " e = window.event;\n", " }\n", " if (e.target) {\n", " targ = e.target;\n", " } else if (e.srcElement) {\n", " targ = e.srcElement;\n", " }\n", " if (targ.nodeType === 3) {\n", " // defeat Safari bug\n", " targ = targ.parentNode;\n", " }\n", "\n", " // pageX,Y are the mouse positions relative to the document\n", " var boundingRect = targ.getBoundingClientRect();\n", " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", "\n", " return { x: x, y: y };\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys(original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object') {\n", " obj[key] = original[key];\n", " }\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function (event, name) {\n", " var canvas_pos = mpl.findpos(event);\n", "\n", " if (name === 'button_press') {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * this.ratio;\n", " var y = canvas_pos.y * this.ratio;\n", "\n", " this.send_message(name, {\n", " x: x,\n", " y: y,\n", " button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event),\n", " });\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", " // Handle any extra behaviour associated with a key event\n", "};\n", "\n", "mpl.figure.prototype.key_event = function (event, name) {\n", " // Prevent repeat events\n", " if (name === 'key_press') {\n", " if (event.which === this._key) {\n", " return;\n", " } else {\n", " this._key = event.which;\n", " }\n", " }\n", " if (name === 'key_release') {\n", " this._key = null;\n", " }\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which !== 17) {\n", " value += 'ctrl+';\n", " }\n", " if (event.altKey && event.which !== 18) {\n", " value += 'alt+';\n", " }\n", " if (event.shiftKey && event.which !== 16) {\n", " value += 'shift+';\n", " }\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", " return false;\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", " if (name === 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message('toolbar_button', { name: name });\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "\n", "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", "// prettier-ignore\n", "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";/* global mpl */\n", "\n", "var comm_websocket_adapter = function (comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function () {\n", " comm.close();\n", " };\n", " ws.send = function (m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function (msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data']);\n", " });\n", " return ws;\n", "};\n", "\n", "mpl.mpl_figure_comm = function (comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = document.getElementById(id);\n", " var ws_proxy = comm_websocket_adapter(comm);\n", "\n", " function ondownload(figure, _format) {\n", " window.open(figure.canvas.toDataURL());\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element;\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error('Failed to find cell for figure', id, fig);\n", " return;\n", " }\n", " fig.cell_info[0].output_area.element.on(\n", " 'cleared',\n", " { fig: fig },\n", " fig._remove_fig_handler\n", " );\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function (fig, msg) {\n", " var width = fig.canvas.width / fig.ratio;\n", " fig.cell_info[0].output_area.element.off(\n", " 'cleared',\n", " fig._remove_fig_handler\n", " );\n", " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable();\n", " fig.parent_element.innerHTML =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", " fig.close_ws(fig, msg);\n", "};\n", "\n", "mpl.figure.prototype.close_ws = function (fig, msg) {\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "};\n", "\n", "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width / this.ratio;\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] =\n", " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "};\n", "\n", "mpl.figure.prototype.updated_canvas_event = function () {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message('ack', {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () {\n", " fig.push_to_output();\n", " }, 1000);\n", "};\n", "\n", "mpl.figure.prototype._init_toolbar = function () {\n", " var fig = this;\n", "\n", " var toolbar = document.createElement('div');\n", " toolbar.classList = 'btn-toolbar';\n", " this.root.appendChild(toolbar);\n", "\n", " function on_click_closure(name) {\n", " return function (_event) {\n", " return fig.toolbar_button_onclick(name);\n", " };\n", " }\n", "\n", " function on_mouseover_closure(tooltip) {\n", " return function (event) {\n", " if (!event.currentTarget.disabled) {\n", " return fig.toolbar_button_onmouseover(tooltip);\n", " }\n", " };\n", " }\n", "\n", " fig.buttons = {};\n", " var buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " var button;\n", " for (var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " /* Instead of a spacer, we start a new button group. */\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", " buttonGroup = document.createElement('div');\n", " buttonGroup.classList = 'btn-group';\n", " continue;\n", " }\n", "\n", " button = fig.buttons[name] = document.createElement('button');\n", " button.classList = 'btn btn-default';\n", " button.href = '#';\n", " button.title = name;\n", " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", " button.addEventListener('click', on_click_closure(method_name));\n", " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", " buttonGroup.appendChild(button);\n", " }\n", "\n", " if (buttonGroup.hasChildNodes()) {\n", " toolbar.appendChild(buttonGroup);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = document.createElement('span');\n", " status_bar.classList = 'mpl-message pull-right';\n", " toolbar.appendChild(status_bar);\n", " this.message = status_bar;\n", "\n", " // Add the close button to the window.\n", " var buttongrp = document.createElement('div');\n", " buttongrp.classList = 'btn-group inline pull-right';\n", " button = document.createElement('button');\n", " button.classList = 'btn btn-mini btn-primary';\n", " button.href = '#';\n", " button.title = 'Stop Interaction';\n", " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", " button.addEventListener('click', function (_evt) {\n", " fig.handle_close(fig, {});\n", " });\n", " button.addEventListener(\n", " 'mouseover',\n", " on_mouseover_closure('Stop Interaction')\n", " );\n", " buttongrp.appendChild(button);\n", " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", "};\n", "\n", "mpl.figure.prototype._remove_fig_handler = function (event) {\n", " var fig = event.data.fig;\n", " if (event.target !== this) {\n", " // Ignore bubbled events from children.\n", " return;\n", " }\n", " fig.close_ws(fig, {});\n", "};\n", "\n", "mpl.figure.prototype._root_extra_style = function (el) {\n", " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", "};\n", "\n", "mpl.figure.prototype._canvas_extra_style = function (el) {\n", " // this is important to make the div 'focusable\n", " el.setAttribute('tabindex', 0);\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " } else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "};\n", "\n", "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager) {\n", " manager = IPython.keyboard_manager;\n", " }\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which === 13) {\n", " this.canvas_div.blur();\n", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\n", " }\n", "};\n", "\n", "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", " fig.ondownload(fig, null);\n", "};\n", "\n", "mpl.find_output_cell = function (html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i = 0; i < ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code') {\n", " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] === html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "};\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel !== null) {\n", " IPython.notebook.kernel.comm_manager.register_target(\n", " 'matplotlib',\n", " mpl.mpl_figure_comm\n", " );\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ - "<img src=\"data:image/png;base64,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sFALFizQtddea4ZAl8ulu+66S2vXrnW6PABwBLOoffwyELpcLjMIXnbZZXrrrbd4i4yPMjIyFB8fr+TkZLVr145ACAB+Ki8vT2+99ZYuv/xyMwhGRESoX79+7J4NIOQxi9rHbwNhgwYNNHfuXKdLCTh/vIbjuHHjCIQA4GdOnz6tl19+WW63yYUAACAASURBVPXq1TODYKVKlTR8+PCzPkMPAKGKWdQ+fhkIr776anZPKwUEQgDwH8eOHdPEiRNVs2ZNMwhWr15df//739kgDQD+B7OoffwyEH7yySdOl1Cqtm3bphkzZqhv375KTEw0d41LS0vz6f6LFi1SUlKSYmNjFR0drebNm2v69OlerwZaIRACgPMOHz6sZ5991usagnXq1NH06dPZIA0AisAsah+/DIS++v33350uwSeDBw/22jHuzPIlEJ4JdYZhKCEhQYmJiXK73TIMQ127dv3TUEggBADn7N27V8OGDVPFihW9riE4a9YsNkgDgHNgFrVPwATCb7/9Vnfeeaduv/12r2PJycn69ddfHazs3NLS0pScnKzU1FQtXrxY3bt39ykQrlq1ytxgJz093Ty+fv16xcfHyzAMTZw4scj7EwgBwH7bt2/XgAEDzJ2eDcNQs2bN9P7777NBGgD4iFnUPgERCJctW6bIyEi5XC41btzY67aNGzeqTp062r59uzPFnYfevXv7FAg7d+4swzCUkpJy1m1z5syRYRiKi4tTXl6e5f0JhABgn02bNql3794qV66cGQSvueYaffrpp1xDEACKiVnUPgERCK+77jrVr19fY8eO1Y033njW7ffdd5969+5tf2HnyZdAmJ2drYiICBmGoTVr1px1e15enipXrizDMLRkyRLLr0EgBICyt27dOt15551yuVxmELzpppuUkZFBEASA88Qsap+ACIQ1a9Y0d2Dr1q3bWbc/9dRTqlu3rt1lnTdfAuGyZctkGIaioqKUn59veU5SUpIMw1Bqaqrl7QRCACg7y5cvV6dOnbw+G3777bdb/hIPAFA8zKL2CYhA2K5dO/PPVoHw9ttvV1RUlJ0llYgvgXDmzJkyDEMNGzYs8px+/frJMAz16tXL6/jcuXM1d+5c9ezZU4ZhmH/fuHGjzzXShABwNo/Ho88//1zt2rUzQ6Db7VbPnj31888/O10eAAQNZlH7BEQg7NGjhw4dOiRJ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\" width=\"900\">" + "<div id='95d66bfb-a49f-488f-9966-6c19cdd13b4a'></div>" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if True:\n", " fig=plt.figure(figsize=(9,4))\n", " fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0)\n", " sub = fig.add_subplot(1,1,1)\n", "\n", " T=np.logspace(-5,5,500)\n", - " s=[Cosmo.s(i) for i in T]\n", + " s=[cosmo.s(i) for i in T]\n", " sub.plot(T,s,linestyle='-',c='xkcd:black')#,label=r\"$g_{\\rm eff} (T)$\")\n", " sub.set_ylabel(r'$s ~ [{\\rm GeV}^3]$')\n", " sub.set_yscale('log')\n", " sub.set_xscale('log')\n", "\n", " sub.set_xlabel(r'$T \\; [{\\rm GeV}]$')\n", "\n", " fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.5" } }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/UserSpace/JupyterNotebooks/WKB.ipynb b/UserSpace/JupyterNotebooks/WKB.ipynb index 41c1729..d2274c3 100755 --- a/UserSpace/JupyterNotebooks/WKB.ipynb +++ b/UserSpace/JupyterNotebooks/WKB.ipynb @@ -1,204 +1,133 @@ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np#you usually need numpy\n", "\n", "#---these are for plots---#\n", "import matplotlib\n", "matplotlib.use('nbAgg')\n", "import matplotlib.pyplot as plt\n", "\n", "plt.rcParams['font.size']=16\n", "plt.rcParams['font.family']='dejavu sans'\n", "\n", "plt.rcParams['mathtext.fontset']='stix'\n", "plt.rcParams['mathtext.rm']='custom'\n", "plt.rcParams['mathtext.it']='stix:italic'\n", "plt.rcParams['mathtext.bf']='stix:bold'\n", "#-------------------------#" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": true }, "outputs": [], "source": [ "#load the module\n", "from sys import path as sysPath\n", - "from os import path as osPath\n", - "sysPath.append(osPath.join(osPath.dirname('./'), '../../src'))\n", + "sysPath.append('../../src')\n", "\n", "from interfacePy.WKB import WKB\n", "from interfacePy.Axion import Axion \n", "from interfacePy.AxionMass import AxionMass \n", - "from interfacePy.Cosmo import s \n", + "from interfacePy.Cosmo import Cosmo\n", "\n", "from interfacePy.FT import FT #easy tick formatting\n" ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "One can use the WKB approximation, in order to estimate the relic abundance using ```WKB.relic```, which takes as\n", - "$T_{\\rm osc}$, $\\theta_{\\rm osc}$, and $\\gamma$ (the entropy injection from $T_{\\rm osc}$ until today).\n", - "\n", - "For $\\theta_{\\rm osc}$ one usually uses $\\theta_{\\rm ini}$, or can use ```WKB.theta_osc``` for a firs order approximation. This function takes \n", - "\n", - "$T_{\\rm ini}$, $3H/m_a$ at $T=T_{\\rm ini}$, $T_{\\rm osc}$, $\\theta_{\\rm ini}$, $\\gamma_{\\rm osc}$ (the entropy injection between $T_{\\rm ini}$ and $T_{\\rm osc}$).\n" - ] - }, - { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "theta_ini, fa=0.94435, 1e12\n", "\n", "CosmoFile='../InputExamples/RDinput.dat'\n", "# CosmoFile='../InputExamples/MatterInput.dat'\n", "# CosmoFile='../InputExamples/KinationInput.dat'\n", "\n", "\n", "axionMass = AxionMass(r'../../src/data/chi.dat',0,1e5)\n", "#------------------------------------------------------------------------------#\n", "# this is the axion mass squared beyond the interpolation limits for the current data \n", "# if yo don't specify it, the axion mass is taken to be constant beyond these limits\n", "TMax=axionMass.getTMax() \n", "chiMax=axionMass.getChiMax()\n", "TMin=axionMass.getTMin() \n", "chiMin=axionMass.getChiMin()\n", "\n", "axionMass.set_ma2_MAX( lambda T,fa: chiMax/fa/fa*pow(T/TMax,-8.16) )\n", "axionMass.set_ma2_MIN( lambda T,fa: chiMin/fa/fa )\n", "#------------------------------------------------------------------------------#\n", - "\n", - "\n", - "gamma_osc, gamma, Tosc, Tini,ratio_ini=WKB.getPoints(5,1.5,fa,axionMass.ma2,CosmoFile)" + "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.11935022004089332\n" - ] - } - ], + "outputs": [], "source": [ - "#numerical result\n", - "ax =Axion(theta_ini,fa,500,1e-4,1e3,5,1e-2,CosmoFile,axionMass)\n", - "ax.solveAxion()\n", - "print(ax.relic)\n", - "MiMeS_theta_osc=ax.theta_osc\n", - "del ax" + "gamma_osc, gamma, Tosc, Tini, ratio_ini = WKB.getPoints(10,5,fa,axionMass.ma2,CosmoFile)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.07152932609370595" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "#just WKB\n", + "#WKB\n", "WKB.relic(Tosc,theta_ini,axionMass.ma2,gamma)" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.06841468669903171" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#WKB with approximate theta_osc\n", - "theta_osc=WKB.theta_osc(Tini, ratio_ini, Tosc, theta_ini, gamma_osc)\n", - "WKB.relic(Tosc,theta_osc,axionMass.ma2,gamma)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.0646097119884361" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#WKB with numerical result for theta_osc\n", - "WKB.relic(Tosc,MiMeS_theta_osc,axionMass.ma2,gamma)" - ] - }, - { - "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.9.5" } }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/UserSpace/Python/Axion.py b/UserSpace/Python/Axion.py index 66a0143..11ad702 100755 --- a/UserSpace/Python/Axion.py +++ b/UserSpace/Python/Axion.py @@ -1,193 +1,197 @@ from time import time from sys import stderr from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), '../../src')) #load the module from interfacePy.Axion import Axion from interfacePy.AxionMass import AxionMass -from interfacePy.Cosmo import Hubble,mP +from interfacePy.Cosmo import Cosmo + + +Hubble=Cosmo().Hubble +mP=Cosmo().mP theta_i, fa=0.94435, 1e12 umax=500 TSTOP=1e-4 ratio_ini=1e3 N_convergence_max, convergence_lim=5, 1e-2 #this is fine, but you can experiment a bit. #radiation dominated example inputFile="../InputExamples/RDinput.dat" # Matter Domination example. # the NSC parameters (using the notation of 2012.07202) are: # T_end=1e-2 (GeV), c=3, T_ini=1e12 (GeV), and r=1e-1 # inputFile="../InputExamples/MatterInput.dat" # Kination Domination example. # the NSC parameters (using the notation of 2012.07202) are: # T_end=0, c=6, T_ini=1e3 (GeV), and r=1e10 # inputFile="../InputExamples/KinationInput.dat" # options for the solver # These variables are optional. Yoou can use the Axion class without them. initial_step_size=1e-2; #initial step the solver takes. minimum_step_size=1e-8; #This limits the sepsize to an upper limit. maximum_step_size=1e-2; #This limits the sepsize to a lower limit. absolute_tolerance=1e-8; #absolute tolerance of the RK solver relative_tolerance=1e-8; #relative tolerance of the RK solver beta=0.9; #controls how agreesive the adaptation is. Generally, it should be around but less than 1. #The stepsize does not increase more than fac_max, and less than fac_min. #This ensures a better stability. Ideally, fac_max=inf and fac_min=0, but in reality one must #tweak them in order to avoid instabilities. fac_max=1.2; fac_min=0.8; maximum_No_steps=int(1e7); #maximum steps the solver can take Quits if this number is reached even if integration is not finished. _=time() # AxionMass instance axionMass = AxionMass(r'../../src/data/chi.dat',0,mP) #------------------------------------------------------------------------------# # this is the axion mass squared beyond the interpolation limits for the current data # if yo don't specify it, the axion mass is taken to be constant beyond these limits TMax=axionMass.getTMax() chiMax=axionMass.getChiMax() TMin=axionMass.getTMin() chiMin=axionMass.getChiMin() axionMass.set_ma2_MAX( lambda T,fa: chiMax/fa/fa*pow(T/TMax,-8.16) ) axionMass.set_ma2_MIN( lambda T,fa: chiMin/fa/fa ) #------------------------------------------------------------------------------# # def ma2(T,fa): # TQCD=150*1e-3 # ma20=3.1575e-05/fa/fa # if T<=TQCD: # return ma20 # return ma20*pow((TQCD/T),8.16) # axionMass = AxionMass(ma2) # Axion instance ax=Axion(theta_i, fa, umax, TSTOP, ratio_ini, N_convergence_max, convergence_lim, inputFile, axionMass, initial_step_size,minimum_step_size, maximum_step_size, absolute_tolerance, relative_tolerance, beta, fac_max, fac_min, maximum_No_steps) # solve the EOM (this only gives you the relic, T_osc, theta_osc, and a_osc) ax.solveAxion() print(ax.theta_i, ax.fa, ax.theta_osc, ax.T_osc ,ax.relic) print(round(time()-_,3),file=stderr) # change to True in order to mkae the plots if False: import matplotlib.pyplot as plt from numpy import array as np_array from numpy import abs as np_abs ax.getPeaks()#this gives you the peaks of the oscillation ax.getPoints()#this gives you all the points of integration ax.getErrors()#this gives you local errors of integration #########-----\theta-----######### fig=plt.figure(figsize=(9,4)) fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.9, right=0.9,wspace=0.0,hspace=0.25) sub = fig.add_subplot(1,1,1) #this plot shows the peaks of the oscillation sub.plot(ax.T_peak,ax.theta_peak,linestyle=':',marker='+',color='xkcd:blue',linewidth=2) #this plot shows all the points sub.plot(ax.T,ax.theta,linestyle='-',linewidth=2,alpha=1,c='xkcd:black') sub.set_yscale('linear') sub.set_xscale('linear') sub.set_xlabel(r'$T ~[{\rm GeV}]$') sub.xaxis.set_label_coords(0.5, -0.1) sub.set_ylabel(r'$\theta$') sub.yaxis.set_label_coords(-0.1,0.5) sub.axhline(ax.theta_osc,linestyle=':',color='xkcd:red',linewidth=1.5) sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5) fig.savefig('theta-T_examplePlot.pdf',bbox_inches='tight') #########-----\zeta-----######### fig=plt.figure(figsize=(9,4)) fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.9, right=0.9,wspace=0.0,hspace=0.25) sub = fig.add_subplot(1,1,1) sub.plot(ax.T,ax.zeta,linestyle='-',linewidth=2,alpha=1,c='xkcd:black') sub.plot(ax.T_peak,ax.zeta_peak,linestyle=':',marker='+',color='xkcd:blue',linewidth=2) sub.set_yscale('linear') sub.set_xscale('linear') sub.set_xlabel(r'$T ~[{\rm GeV}]$') sub.xaxis.set_label_coords(0.5, -0.1) sub.set_ylabel(r'$\zeta $') sub.yaxis.set_label_coords(-0.1,0.5) sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5) fig.savefig('zeta-T_examplePlot.pdf',bbox_inches='tight') #########-----errors-----######### fig=plt.figure(figsize=(9,4)) fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.9, right=0.9,wspace=0.0,hspace=0.25) sub = fig.add_subplot(1,1,1) sub.plot(ax.T,np_abs(ax.dtheta/ax.theta),linestyle='-',linewidth=2,alpha=1,c='xkcd:black',label=r'$\dfrac{\delta \theta}{\theta}$') sub.plot(ax.T,np_abs(ax.dzeta/ax.zeta),linestyle='-',linewidth=2,alpha=1,c='xkcd:red',label=r'$\dfrac{\delta \zeta}{\zeta}$') sub.set_yscale('log') sub.set_xscale('linear') sub.set_xlabel(r'$T ~[{\rm GeV}]$') sub.xaxis.set_label_coords(0.5, -0.1) sub.set_ylabel(r'local errors') sub.yaxis.set_label_coords(-0.1,0.5) sub.legend(bbox_to_anchor=(1, 0.0),borderaxespad=0., borderpad=0.05,ncol=1,loc='lower right',fontsize=14,framealpha=0) sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5) fig.savefig('errors_examplePlot.pdf',bbox_inches='tight') #########-----rho_a-----######### fig=plt.figure(figsize=(9,4)) fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.9, right=0.9,wspace=0.0,hspace=0.25) sub = fig.add_subplot(1,1,1) sub.plot(ax.T,ax.rho_axion,linestyle='-',linewidth=2,alpha=1,c='xkcd:black') sub.plot(ax.T_peak,ax.rho_axion_peak,linestyle=':',linewidth=2,alpha=1,c='xkcd:blue') sub.set_yscale('log') sub.set_xscale('linear') sub.set_xlabel(r'$T ~[{\rm GeV}]$') sub.xaxis.set_label_coords(0.5, -0.1) sub.set_ylabel(r'$\rho_{a}(T) ~[{\rm GeV}^{4}]$') sub.yaxis.set_label_coords(-0.1,0.5) sub.axvline(ax.T_osc,linestyle='--',color='xkcd:gray',linewidth=1.5) fig.savefig('rho_a-T_examplePlot.pdf',bbox_inches='tight') #don't forget the destructor del ax \ No newline at end of file diff --git a/UserSpace/Python/Cosmo.py b/UserSpace/Python/Cosmo.py index 9c550de..5cb19c8 100755 --- a/UserSpace/Python/Cosmo.py +++ b/UserSpace/Python/Cosmo.py @@ -1,94 +1,95 @@ from numpy import logspace from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), '../../src')) #load the module -import interfacePy.Cosmo as Cosmo +from interfacePy import Cosmo +cosmo=Cosmo() for T in logspace(-5,5,50): print( 'T=',T,'GeV\t', - 'H=',Cosmo.Hubble(T),'GeV\t', - 'h_eff=',Cosmo.heff(T),'\t', - 'g_eff=',Cosmo.geff(T),'\t', - 's=',Cosmo.s(T),'GeV^3\t', + 'H=',cosmo.Hubble(T),'GeV\t', + 'h_eff=',cosmo.heff(T),'\t', + 'g_eff=',cosmo.geff(T),'\t', + 's=',cosmo.s(T),'GeV^3\t', ) if False: import matplotlib.pyplot as plt #########-----g_eff and h_eff-----######### fig=plt.figure(figsize=(9,4)) fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0) fig.suptitle('') sub = fig.add_subplot(1,1,1) T=logspace(-5,5,500) - gt=[Cosmo.geff(i) for i in T] - ht=[Cosmo.heff(i) for i in T] + gt=[cosmo.geff(i) for i in T] + ht=[cosmo.heff(i) for i in T] sub.plot(T,gt,linestyle='--',c='xkcd:red',label=r"$g_{\rm eff} (T)$") sub.plot(T,ht,linestyle=':',c='xkcd:black',label=r"$h_{\rm eff} (T)$") sub.set_xlabel(r'$T ~ [{\rm GeV}]$') sub.set_ylabel(r'rel. dof') sub.legend(bbox_to_anchor=(1, 0.0),borderaxespad=0., borderpad=0.05,ncol=1,loc='lower right',fontsize=14,framealpha=0) sub.set_yscale('log') sub.set_xscale('log') fig.savefig('rdofs-T_examplePlot.pdf',bbox_inches='tight') #########-----dg_effdT and dh_effdT-----######### fig=plt.figure(figsize=(9,4)) fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0) fig.suptitle('') sub = fig.add_subplot(1,1,1) T=logspace(-5,5,500) - dg=[Cosmo.dgeffdT (i) for i in T] - dh=[Cosmo.dheffdT(i) for i in T] + dg=[cosmo.dgeffdT (i) for i in T] + dh=[cosmo.dheffdT(i) for i in T] sub.plot(T,dg,linestyle='--',c='xkcd:red',label=r"$\dfrac{d g_{\rm eff}}{dT} (T)$") sub.plot(T,dh,linestyle=':',c='xkcd:black',label=r"$\dfrac{d h_{\rm eff}}{dT} (T)$") sub.set_xlabel(r'$T ~ [{\rm GeV}]$') sub.legend(bbox_to_anchor=(1, 0.5),borderaxespad=0., borderpad=0.05,ncol=1,loc='lower right',fontsize=14,framealpha=0) sub.set_yscale('symlog') sub.set_xscale('log') fig.savefig('drdofsdT-T_examplePlot.pdf',bbox_inches='tight') #########-----dh-----######### fig=plt.figure(figsize=(9,4)) fig.subplots_adjust(bottom=0.15, left=0.15, top = 0.95, right=0.9,wspace=0.0,hspace=0.0) fig.suptitle('') sub = fig.add_subplot(1,1,1) T=logspace(-5,5,500) - dht=[Cosmo.dh(i) for i in T] + dht=[cosmo.dh(i) for i in T] sub.plot(T,dht,linestyle='-',c='xkcd:black') sub.set_xlabel(r'$T ~ [{\rm GeV}]$') sub.set_ylabel(r'$\delta_h = 1 + \dfrac{1}{3} \dfrac{d \log h_{\rm eff} }{d \log T}$') sub.set_yscale('linear') sub.set_xscale('log') fig.savefig('dh-T_examplePlot.pdf',bbox_inches='tight') diff --git a/UserSpace/scan/AxionScan/AxionScan.py b/UserSpace/scan/AxionScan/AxionScan.py index 7175a6e..7ce23f1 100755 --- a/UserSpace/scan/AxionScan/AxionScan.py +++ b/UserSpace/scan/AxionScan/AxionScan.py @@ -1,47 +1,47 @@ ###-----------------------------------------------------------------------------### ###-------------------Example of interfacePy.ScanScript.Scan-------------------### ###-----------------------------------------------------------------------------### #------------------------------------Note:------------------------------------# ###########-Scan: scans for the entire theta_i and f_a one provides-########### #-----------------------------------------------------------------------------# from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), '../../../src')) from interfacePy.ScanScript import Scan from numpy import logspace,linspace,log10,pi scan=Scan( cpus=8, - table_fa= logspace(10,19,50), - table_theta_i=linspace(0.1,2,50), + table_fa= logspace(10,19,150), + table_theta_i=linspace(0.1,2,150), umax=500, TSTOP=1e-4, ratio_ini=1e3, N_convergence_max=5, convergence_lim=1e-2, inputFile="../../InputExamples/RDinput.dat", # inputFile="../../InputExamples/MatterInput.dat", # inputFile="../../InputExamples/KinationInput.dat", PathToCppExecutable=r"../../Cpp/Axion/Axion.run", break_after=60*60*3, break_time=60, break_command='', initial_step_size=1e-2, minimum_step_size=1e-8, maximum_step_size=1e-2, absolute_tolerance=1e-8, relative_tolerance=1e-8, beta=0.9, fac_max=1.2, fac_min=0.8, maximum_No_steps=int(1e7) ) scan.run() \ No newline at end of file diff --git a/UserSpace/scan/AxionScanObs/AxionScanObs.py b/UserSpace/scan/AxionScanObs/AxionScanObs.py index e9f980d..e4a5a1c 100755 --- a/UserSpace/scan/AxionScanObs/AxionScanObs.py +++ b/UserSpace/scan/AxionScanObs/AxionScanObs.py @@ -1,77 +1,80 @@ ###-----------------------------------------------------------------------------### ###-------------------Example of interfacePy.ScanScript.ScanObs-----------------### ###-----------------------------------------------------------------------------### #--------------------------------Note:--------------------------------# ###################-The scan proceeds as follows:-##################### #-For each value of $f_a$, we find $\theta_i^{approx}$ such that------# #-$Omega h^2 = 0.12$, assuming that $\theta_i^{approx} \ll 1$.--------# #-Then, it scans values of $\theta_i$ close to $\theta_i^{approx}$.---# #-This results in a range of values of $\theta_i$ for each $f_a$, with# #-$\Omega h^2$ close to the observed value.---------------------------# #---------------------------------------------------------------------# from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), '../../../src')) from interfacePy.ScanScript import ScanObs -from interfacePy.Cosmo import relicDM_obs,mP +from interfacePy.Cosmo import Cosmo from interfacePy.AxionMass import AxionMass from numpy import logspace +cosmo=Cosmo() +mP=cosmo.mP +relicDM_obs=cosmo.relicDM_obs # AxionMass instance axionMass = AxionMass(r'../../../src/data/chi.dat',0,mP) #------------------------------------------------------------------------------# # this is the axion mass squared beyond the interpolation limits for the current data # if yo don't specify it, the axion mass is taken to be constant beyond these limits TMax=axionMass.getTMax() chiMax=axionMass.getChiMax() TMin=axionMass.getTMin() chiMin=axionMass.getChiMin() axionMass.set_ma2_MAX( lambda T,fa: chiMax/fa/fa*pow(T/TMax,-8.16) ) axionMass.set_ma2_MIN( lambda T,fa: chiMin/fa/fa ) scan=ScanObs( cpus=8, table_fa= logspace(10,20,150), - len_theta=350, + len_theta=150, umax=500, TSTOP=1e-4, ratio_ini=1e3, N_convergence_max=10, convergence_lim=1e-1, inputFile="../../InputExamples/RDinput.dat", # inputFile="../../InputExamples/MatterInput.dat", # inputFile="../../InputExamples/KinationInput.dat", axionMass=axionMass, PathToCppExecutable=r"../../Cpp/Axion/Axion.run", relic_obs=relicDM_obs, relic_err_up=0.01, relic_err_low=0.01, break_after=60*60*3, break_time=60, break_command='', initial_step_size=1e-2, minimum_step_size=1e-8, maximum_step_size=1e-2, absolute_tolerance=1e-8, relative_tolerance=1e-8, beta=0.9, fac_max=1.2, fac_min=0.8, maximum_No_steps=int(1e7) ) scan.run() \ No newline at end of file diff --git a/src/interfacePy/Cosmo/Cosmo.py b/src/interfacePy/Cosmo/Cosmo.py index a93ef7f..3adb3d1 100644 --- a/src/interfacePy/Cosmo/Cosmo.py +++ b/src/interfacePy/Cosmo/Cosmo.py @@ -1,79 +1,95 @@ from ctypes import CDLL, c_longdouble, c_double from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), '../../')) from misc_dir.path import _PATH_ from misc_dir.type import cdouble #load the library func = CDLL(_PATH_+'/lib/libCosmo.so') CppFunc=func.heff,func.geff,func.dgeffdT,func.dheffdT,func.dh,func.rhoR,func.Hubble,func.s #specify the argument types for i,f in enumerate (CppFunc): f.argtypes = cdouble, #specify the return type f.restype = cdouble ############################################### -def heff(T): - '''h_eff at temperature T [GeV]''' - return func.heff(T) - -def geff(T): - '''g_eff at temperature T [GeV] ''' - return func.geff(T) - -def dgeffdT(T): - '''\\dfrac{dg_eff}{dT} at temperature T [GeV]''' - return func.dgeffdT(T) - -def dheffdT(T): - '''\\dfrac{dh_eff}{dT} at temperature T [GeV]''' - return func.dheffdT(T) - -def dh(T): - '''\\delta_h(T)=1+1/3 \frac{d log h_eff}{d log T} at temperature T [GeV]''' - return func.dh(T) - -def rhoR(T): - '''energy density of the plasma at temperature T [GeV]''' - return func.rhoR(T) - -def Hubble(T): - '''H at temperature T [GeV]''' - return func.Hubble(T) - -def s(T): - '''s (entropy density of the plasma) at temperature T [GeV]''' - return func.s(T) func.getT0.argtypes =None func.getT0.restype =cdouble func.geth_hub.argtypes =None func.geth_hub.restype =cdouble func.getrho_crit.argtypes =None func.getrho_crit.restype =cdouble func.getrelicDM.argtypes =None func.getrelicDM.restype =cdouble func.getMP.argtypes =None func.getMP.restype =cdouble -# CMB temperature today in GeV -T0=func.getT0() -# critical density today in GeV^4 -rho_crit=func.getrho_crit() -# dimensionless hubble parameter -h_hub=func.geth_hub() -# central value of Omega h^2 according to Planck -relicDM_obs=func.getrelicDM() -# Planck mass -mP=func.getMP() + + +class Cosmo: + '''Class that contains various cosmological parameters and functions. + The available functions are: + heff, geff, dgeffdT, dheffdT, dh, rhoR, Hubble, s. + All are functions of the temperature (in GeV), and correspond to the standard comsological scenario. + The available variables are: + T0: CMB temperature today in GeV + rho_crit: critical density today in GeV^4 + h_hub: dimensionless hubble parameter + relicDM_obs: central value of Omega h^2 according to Planck + mP: Planck mass in GeV + ''' + def __init__(self): + # CMB temperature today in GeV + self.T0=func.getT0() + # critical density today in GeV^4 + self.rho_crit=func.getrho_crit() + # dimensionless hubble parameter + self.h_hub=func.geth_hub() + # central value of Omega h^2 according to Planck + self.relicDM_obs=func.getrelicDM() + # Planck mass in GeV + self.mP=func.getMP() + + def heff(self,T): + '''h_eff at temperature T [GeV]''' + return func.heff(T) + + def geff(self,T): + '''g_eff at temperature T [GeV] ''' + return func.geff(T) + + def dgeffdT(self,T): + '''\\dfrac{dg_eff}{dT} at temperature T [GeV]''' + return func.dgeffdT(T) + + def dheffdT(self,T): + '''\\dfrac{dh_eff}{dT} at temperature T [GeV]''' + return func.dheffdT(T) + + def dh(self,T): + '''\\delta_h(T)=1+1/3 \frac{d log h_eff}{d log T} at temperature T [GeV]''' + return func.dh(T) + + def rhoR(self,T): + '''energy density of the plasma at temperature T [GeV]''' + return func.rhoR(T) + + def Hubble(self,T): + '''H at temperature T [GeV]''' + return func.Hubble(T) + + def s(self,T): + '''s (entropy density of the plasma) at temperature T [GeV]''' + return func.s(T) if __name__=="__main__": pass \ No newline at end of file diff --git a/src/interfacePy/Cosmo/__init__.py b/src/interfacePy/Cosmo/__init__.py index 206c9ac..790951b 100644 --- a/src/interfacePy/Cosmo/__init__.py +++ b/src/interfacePy/Cosmo/__init__.py @@ -1,3 +1,3 @@ -from .Cosmo import heff, geff, dgeffdT, dheffdT, dh, rhoR, Hubble, s, T0, rho_crit, h_hub, relicDM_obs, mP +from .Cosmo import Cosmo diff --git a/src/interfacePy/ScanScript/ScanObs.py b/src/interfacePy/ScanScript/ScanObs.py index 4989310..2b4bd15 100644 --- a/src/interfacePy/ScanScript/ScanObs.py +++ b/src/interfacePy/ScanScript/ScanObs.py @@ -1,267 +1,273 @@ # Scan for axion in radiation dominated Uinverse. # #------------------Note:------------------# # The scan proceeds as follows: # The for each value of $f_a$, we find $\theta_i^{\rm approx}$ such that # $\Omega h^2 = 0.12$, assuming that $sin(\theta_i^{\rm approx}) \approx \theta_i^{\rm approx}$. # Then, we scan values of $\theta_i$ close to $\theta_i^{\rm approx}$. # This results in a range of values of $\theta_i$ for each $f_a$, # with $\Omega h^2$ close to the observed value. #-----------------------------------------# from sys import path as sysPath from os import path as osPath sysPath.append(osPath.join(osPath.dirname(__file__), '../')) sysPath.append(osPath.join(osPath.dirname(__file__), '../../src')) from misc_dir.path import _PATH_ from interfacePy.Axion import Axion -from interfacePy.Cosmo import h_hub,T0,rho_crit,s +from interfacePy.Cosmo import Cosmo + +cosmo=Cosmo() +h_hub=cosmo.h_hub +T0=cosmo.T0 +rho_crit=cosmo.rho_crit +s=cosmo.s from numpy import pi, sqrt, abs, array, float64, argmin, savetxt, linspace from subprocess import check_output as subprocess_check_output from sys import stdout as sys_stdout from time import time from datetime import datetime from datetime import timedelta from os import remove as os_remove from os import system as os_system from pathlib import Path parallelScan=_PATH_+r"/src/util/parallel_scan.sh" class ScanObs: def __init__(self,cpus,table_fa,len_theta,umax,TSTOP,ratio_ini,N_convergence_max,convergence_lim,inputFile,axionMass, PathToCppExecutable, relic_obs,relic_err_up,relic_err_low,break_after,break_time,break_command='', initial_step_size=1e-2, minimum_step_size=1e-8, maximum_step_size=1e-2, absolute_tolerance=1e-8, relative_tolerance=1e-8, beta=0.9, fac_max=1.2, fac_min=0.8, maximum_No_steps=int(1e7)): ''' scan for different values of fa (in table_fa) and find the theta_i closer to relic_obs. The result file is timecoded (so it would be difficult to write over it), and the columns correspond to theta_i fa [GeV] theta_osc T_osc [GeV] relic (Omega h^2) Comment 1: The way it works is the following: 1) we solve for theta_i=1e-5. 2) based on this, rescale it in order to find an appropriate theta_i such that Omegah^2 = relic_obs 3) use this rescaled theta_i as initial point, and scan for len_theta between np.linspace(min([theta_i*0.85,1]),min([theta_i*1.2,pi]),len_theta) 4) finally, the point with Omegah^2 closer to relic_obs is stored. Comment 2: If the scan exits before it finishes, it will continue from the point it stopped. In order to start from the beginning, delete the file "count.dat". cpus: number of points to run simultaneously (No of cpus available). table_fa: table of fa to scan len_theta: number of points to search for theta closest to relic_obs. This search happens in np.linspace(min([theta_i*0.85,1]),min([theta_i*1.2,pi]),self.len_theta), with theta_i is the angle that results in Omega h^2=relic_obs assuming theta_i<<1. umax: if u>umax the integration stops (rempember that u=log(a/a_i)) TSTOP: if the temperature drops below this, integration stops ratio_ini: integration starts when 3H/m_a<~ratio_ini (this is passed to AxionEOM, in order to make the interpolations start at this point) N_convergence_max and convergence_lim: integration stops when the relative difference between two consecutive peaks is less than convergence_lim for N_convergence_max consecutive peaks inputFile: file that describes the cosmology. the columns should be: u T[GeV] logH axionMass: instance of AxionMass PathToCppExecutable: path to an executable that takes "theta_i fa umax TSTOP ratio_ini N_convergence_max convergence_lim inputFile" and prints "theta_i fa theta_osc T_osc relic" relic_obs: central value of the relic (example, relic_obs=0.12) relic_err_up: upper error bar around relic_obs (example, relic_err_up=0.001) relic_err_low: lower error bar around relic_obs (example, relic_err_low=0.001) break_after,break_time: take a break after break_after seconds for break_time seconds (optional) break_command: before it takes a break, run this system command (this may be a script to send the results to an e-mail, or back them up) -----------Optional arguments------------------------ initial_stepsize: initial step the solver takes. maximum_stepsize: This limits the sepsize to an upper limit. minimum_stepsize: This limits the sepsize to a lower limit. absolute_tolerance: absolute tolerance of the RK solver relative_tolerance: relative tolerance of the RK solver Note: Generally, both absolute and relative tolerances should be 1e-8. In some cases, however, one may need more accurate result (eg if f_a is extremely high, the oscillations happen violently, and the ODE destabilizes). Whatever the case, if the tolerances are below 1e-8, long doubles *must* be used. beta: controls how agreesive the adaptation is. Generally, it should be around but less than 1. fac_max, fac_min: the stepsize does not increase more than fac_max, and less than fac_min. This ensures a better stability. Ideally, fac_max=inf and fac_min=0, but in reality one must tweak them in order to avoid instabilities. maximum_No_steps: maximum steps the solver can take Quits if this number is reached even if integration is not finished. ''' self.cpus=cpus self.Table_fa=table_fa self.len_theta=len_theta self.umax=umax self.TSTOP=TSTOP self.ratio_ini=ratio_ini self.Npeaks=N_convergence_max self.conv=convergence_lim self.inputFile=inputFile self.axionMass=axionMass self.PathToCppExecutable=PathToCppExecutable self.relic_obs=relic_obs self.relic_err_up,self.relic_err_low = relic_err_up,relic_err_low self.break_after=break_after self.break_time=break_time self.break_command=break_command self.initial_step_size=initial_step_size self.minimum_step_size=minimum_step_size self.maximum_step_size= maximum_step_size self.absolute_tolerance=absolute_tolerance self.relative_tolerance=relative_tolerance self.beta=beta self.fac_max=fac_max self.fac_min=fac_min self.maximum_No_steps=maximum_No_steps self.FileDate=datetime.now() self.FileName = "{}".format(self.FileDate.strftime('%d-%m-%Y_%H-%M-%S')) self._p = Path(self.FileName+'.dat') self.in_file="in._mimes_" self.count_file="count._mimes_" def run_batch(self): ''' run a batch. ''' # get the result points=subprocess_check_output( [parallelScan, self.PathToCppExecutable, str(self.cpus),self.in_file]).decode(sys_stdout.encoding) points=points.split('\n') points=array([array(i.split(),float64) for i in points[:-1] ]) points=array(sorted(points, key=lambda arr: arr[0])) absDiff=argmin(abs(points[:,4]-self.relic_obs)) _=points[absDiff] if _[4]<=self.relic_obs+self.relic_err_up and _[4]>=self.relic_obs-self.relic_err_low: File= self._p.open('ab') savetxt(File,array([_])) File.close() def run(self): try: with open(self.count_file,'r') as _: last_batch=int(_.read()) except: last_batch=0 Total_batches=len(self.Table_fa)-last_batch totalT=0 meanT=0 ETA=0 batch=0 sleepTimer=0 for fa in self.Table_fa[last_batch:]: time0=time() ########################---find theta_i (assuming theta_i<<1) such that Omega h^=0.12---######################## theta_small=1e-3 ax=Axion(theta_small,fa,self.umax,self.TSTOP, self.ratio_ini,self.Npeaks,self.conv,self.inputFile, self.axionMass, self.initial_step_size, self.minimum_step_size, self.maximum_step_size, self.absolute_tolerance, self.relative_tolerance, self.beta, self.fac_max, self.fac_min, self.maximum_No_steps) ax.solveAxion() ax.getPeaks() T=ax.T_peak[-1] theta=ax.theta_peak[-1] relic=ax.relic theta_obs=sqrt(theta**2/relic*self.relic_obs) relic=s(T0)/s(T)*0.5*sqrt(self.axionMass.ma2(0,1)*self.axionMass.ma2(T,1))*theta_obs**2*h_hub**2/rho_crit theta_small_i=theta_small*theta_obs/theta if theta_small_i < theta_small: Table_theta_i = array([theta_small_i]) else: if theta_small_i>pi: theta_small_i=pi Table_theta_i=linspace(min([theta_small_i*0.85,1]),min([theta_small_i*1.2,pi]),self.len_theta) del ax ########################---END---######################## file=open(self.in_file , 'w') for theta_i in Table_theta_i : file.write( '{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} \n'. format(theta_i, fa, self.umax, self.TSTOP, self.ratio_ini, self.Npeaks, self.conv, self.inputFile, self.initial_step_size, self.minimum_step_size, self.maximum_step_size, self.absolute_tolerance, self.relative_tolerance, self.beta, self.fac_max, self.fac_min, self.maximum_No_steps) ) file.close() self.run_batch() batch+=1 totalT+=time()-time0 meanT=totalT/batch if self.break_after>0: sleepTimer+=time()-time0 if sleepTimer>self.break_after: os_system(self.break_command) print("taking a break") time.sleep(self.break_time) sleepTimer=0 ETA=meanT*(Total_batches-batch) print('======================================== \n', 'Completed batches: ',batch,' out of ', Total_batches ,'\n', 'Running for: {0:.50s}'.format( str(timedelta(seconds=totalT)) ), '\n', 'ETA: {0:.50s}'.format(str(timedelta(seconds=ETA) ) ),'\n', 'Time per batch: {0:.3f} sec'.format(meanT), '\n========================================' ) with open(self.count_file,'w') as _: _.write(str(batch+last_batch)) os_remove(self.in_file) os_remove(self.count_file) print('Done!') \ No newline at end of file diff --git a/src/interfacePy/WKB/WKB.py b/src/interfacePy/WKB/WKB.py index 313a088..6d0a6da 100644 --- a/src/interfacePy/WKB/WKB.py +++ b/src/interfacePy/WKB/WKB.py @@ -1,66 +1,53 @@ -from ..Cosmo import Hubble,s,T0, rho_crit, h_hub,heff,geff +from ..Cosmo import Cosmo from ..AxionMass import AxionMass from numpy import sqrt,loadtxt,vectorize,array,exp +cosmo=Cosmo() + def relic(Tosc,theta_osc,ma2,gamma=1.): ''' The axion relic abundance using the WKB approximation. Tosc: the oscillation temperature theta_osc:the angle at T_osc (usually one uses theta_osc = theta_ini) gamma: entropy ratio betweem Tosc and today (gamma = S(T0)/S(Tosc)) ''' correction=(3/4)**(0.5)#this factor gives more acurate form of WKB result - return s(T0)/s(Tosc)/gamma*0.5*sqrt(ma2(0,1)*ma2(Tosc,1))*theta_osc**2*h_hub**2/rho_crit *correction - - - -def theta_osc(Tini,ratio_ini,Tosc,theta_ini,gamma_osc=1): - ''' - The first approximation for theta_osc. - Tini=initial temperature . In this approximation it has to be as close to T_osc as possible, - while dtheta/dt ~= 0. - ratio_ini: 3H/ma at T=Tini. - Tosc: the oscillation temperature - theta_ini:the angle at Tini - gamma_osc: entropy ratio betweem Tini and Tosc (gamma_osc = S(Tosc)/S(Tini)) - ''' - return theta_ini*(1- (ratio_ini/3.)**(-2.)*( 1-Tini/Tosc*( heff(Tini)/heff(Tosc)*gamma_osc )**(1/3.) )**2)#work in progress - + return cosmo.s(cosmo.T0)/cosmo.s(Tosc)/gamma*0.5*sqrt(ma2(0,1)*ma2(Tosc,1))*theta_osc**2*cosmo.h_hub**2/cosmo.rho_crit *correction def getPoints(T_start,ratio_ini,fa,ma2,inputFile): '''find the points you need for Tosc, gamma, and gamma osc T_start: some initial temperature (this just help to start searching for an appropriate Tini) ratio_ini: 3H/ma at Tini (it has to be close to 1 for the theta_osc approximation to work). This is used to find Tini fa: PQ scale inputFile: a file that contains u,T,logH forthe cosmology of interest this function returns gamma_osc, gamma, Tosc, Tini, and ratio_ini (this is close to the inut's value, but corresponts to the closest point in inputFile) ''' _=loadtxt(inputFile) cosmology=_[_[:,1]<T_start] u=cosmology[:,0] T=cosmology[:,1] logH=cosmology[:,2] ma=vectorize(lambda T:ma2(T,fa)**0.5) ratio=3*exp(logH)/ma(T) ch=ratio<=ratio_ini tmp=cosmology[ch][0] Tini=tmp[1] uini=tmp[0] logHini=tmp[2] ratio_ini=3*exp(logHini)/ma(Tini) ch=ratio<=1 tmp=cosmology[ch][0] Tosc=tmp[1] uosc=tmp[0] - return s(Tosc)/s(Tini)*exp(3*(uosc-uini)),s(cosmology[-1][1])/s(Tosc)*exp(3*(cosmology[-1][0]-uosc)),Tosc,Tini,ratio_ini + return cosmo.s(Tosc)/cosmo.s(Tini)*exp(3*(uosc-uini)),cosmo.s(cosmology[-1][1])/cosmo.s(Tosc)*exp(3*(cosmology[-1][0]-uosc)),Tosc,Tini,ratio_ini diff --git a/src/interfacePy/WKB/__init__.py b/src/interfacePy/WKB/__init__.py index dd9a788..f82160a 100644 --- a/src/interfacePy/WKB/__init__.py +++ b/src/interfacePy/WKB/__init__.py @@ -1,2 +1,2 @@ -from .WKB import relic, theta_osc, getPoints +from .WKB import relic, getPoints diff --git a/src/interfacePy/__init__.py b/src/interfacePy/__init__.py index e69de29..227e109 100644 --- a/src/interfacePy/__init__.py +++ b/src/interfacePy/__init__.py @@ -0,0 +1,10 @@ +from .Axion import Axion +from .AxionMass import AxionMass +from .AnharmonicFactor import anharmonicFactor +from .Cosmo import Cosmo +from .WKB import relic, getPoints + +from .ScanScript.ScanObs import ScanObs +from .ScanScript.Scan import Scan + +from FT import FT \ No newline at end of file