Repository: Eomys/MoSQITo (language: python)

Issue:
loudness_zwst and sharpness_din per time segments
Today, _loudness_zwst_ and _sharpness_din_ can be computed over the whole input time signal.  The idea would be to able to compute the metrics over time segments by using _sb_ (block size) and _sh_ (hop size) input arguments.




Discussion / hints:
Implementation ongoing in this branch: https://github.com/mglesser/MoSQITo/tree/time_segment

Fix patch:
diff --git a/mosqito/__init__.py b/mosqito/__init__.py
index 8a15bd40..42c2731f 100644
--- a/mosqito/__init__.py
+++ b/mosqito/__init__.py
@@ -3,6 +3,9 @@
 )
 from mosqito.sq_metrics.loudness.loudness_ecma.loudness_ecma import loudness_ecma
 from mosqito.sq_metrics.loudness.loudness_zwst.loudness_zwst import loudness_zwst
+from mosqito.sq_metrics.loudness.loudness_zwst.loudness_zwst_perseg import (
+    loudness_zwst_perseg,
+)
 from mosqito.sq_metrics.loudness.loudness_zwtv.loudness_zwtv import loudness_zwtv
 from mosqito.sq_metrics.loudness.utils.equal_loudness_contours import (
     equal_loudness_contours,
@@ -17,8 +20,17 @@
     roughness_dw,
 )
 from mosqito.sq_metrics.sharpness.sharpness_din.sharpness_din import sharpness_din
+from mosqito.sq_metrics.sharpness.sharpness_din.sharpness_din_from_loudness import (
+    sharpness_din_from_loudness,
+)
+from mosqito.sq_metrics.sharpness.sharpness_din.sharpness_din_perseg import (
+    sharpness_din_perseg,
+)
 from mosqito.sq_metrics.loudness.utils.sone_to_phon import sone_to_phon
+from mosqito.utils.isoclose import isoclose
 from mosqito.utils.load import load
+from mosqito.utils.sine_wave_generator import sine_wave_generator
+from mosqito.utils.time_segmentation import time_segmentation
 
 # Colors and linestyles
 COLORS = [
diff --git a/mosqito/sound_level_meter/noct_spectrum/_n_oct_filter.py b/mosqito/sound_level_meter/noct_spectrum/_n_oct_filter.py
index 18865c5f..d88e94d6 100644
--- a/mosqito/sound_level_meter/noct_spectrum/_n_oct_filter.py
+++ b/mosqito/sound_level_meter/noct_spectrum/_n_oct_filter.py
@@ -51,7 +51,7 @@ def _n_oct_filter(sig, fs, fc, alpha, N=3):
         q = 2
         while fc < fs / q / 200:
             q += 1
-        sig = decimate(sig, q)
+        sig = decimate(sig, q, axis=0)
         fs = fs / q
 
     # Normalized cutoff frequencies
@@ -62,10 +62,10 @@ def _n_oct_filter(sig, fs, fc, alpha, N=3):
     b, a = butter(N, [w1, w2], "bandpass", analog=False)
 
     # filter signal
-    sig_filt = lfilter(b, a, sig)
+    sig_filt = lfilter(b, a, sig, axis=0)
 
     # Compute overall rms level
-    level = np.sqrt(np.mean(sig_filt ** 2))
+    level = np.sqrt(np.mean(sig_filt ** 2, axis=0))
 
     return level
 
diff --git a/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py b/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py
index 4f05bd0e..41cf4de8 100644
--- a/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py
+++ b/mosqito/sound_level_meter/noct_spectrum/noct_spectrum.py
@@ -18,7 +18,7 @@ def noct_spectrum(sig, fs, fmin, fmax, n=3, G=10, fr=1000):
     Parameters
     ----------
     sig : numpy.ndarray
-        time signal (dim [nb points, nb blocks])
+        A time signal array with size (nperseg, nseg).
     fs : float
         Sampling frequency [Hz]
     fmin : float
@@ -26,7 +26,7 @@ def noct_spectrum(sig, fs, fmin, fmax, n=3, G=10, fr=1000):
     fmax : float
         Max frequency band [Hz]
     n : int
-        number of bands pr octave
+        Number of bands pr octave
     G : int
         System for specifying the exact geometric mean frequencies.
         Can be base 2 or base 10
@@ -38,11 +38,15 @@ def noct_spectrum(sig, fs, fmin, fmax, n=3, G=10, fr=1000):
     Outputs
     -------
     spec : numpy.ndarray
-        Third octave band spectrum of signal sig [dB re.2e-5 Pa]
+        The third octave band spectrum of signal sig with size (nfreq, nseg)
     fpref : numpy.ndarray
         Corresponding preferred third octave band center frequencies
     """
 
+    # 1-dimensional array to 2-dimensional array with size (nperseg, 1)
+    if sig.ndim == 1:
+        sig = sig[:, np.newaxis]
+
     # Get filters center frequencies
     fc_vec, fpref = _center_freq(fmin=fmin, fmax=fmax, n=n, G=G, fr=fr)
 
diff --git a/mosqito/sq_metrics/__init__.py b/mosqito/sq_metrics/__init__.py
index cc4aa601..130e2f05 100644
--- a/mosqito/sq_metrics/__init__.py
+++ b/mosqito/sq_metrics/__init__.py
@@ -1,5 +1,8 @@
 from mosqito.sq_metrics.loudness.loudness_ecma.loudness_ecma import loudness_ecma
 from mosqito.sq_metrics.loudness.loudness_zwst.loudness_zwst import loudness_zwst
+from mosqito.sq_metrics.loudness.loudness_zwst.loudness_zwst_perseg import (
+    loudness_zwst_perseg,
+)
 from mosqito.sq_metrics.loudness.loudness_zwtv.loudness_zwtv import loudness_zwtv
 from mosqito.sq_metrics.loudness.utils.equal_loudness_contours import (
     equal_loudness_contours,
@@ -14,4 +17,10 @@
     roughness_dw,
 )
 from mosqito.sq_metrics.sharpness.sharpness_din.sharpness_din import sharpness_din
+from mosqito.sq_metrics.sharpness.sharpness_din.sharpness_din_from_loudness import (
+    sharpness_din_from_loudness,
+)
+from mosqito.sq_metrics.sharpness.sharpness_din.sharpness_din_perseg import (
+    sharpness_din_perseg,
+)
 from mosqito.sq_metrics.loudness.utils.sone_to_phon import sone_to_phon
diff --git a/mosqito/sq_metrics/loudness/loudness_ecma/_rectified_band_pass_signals.py b/mosqito/sq_metrics/loudness/loudness_ecma/_rectified_band_pass_signals.py
index 4076560d..004c56a7 100644
--- a/mosqito/sq_metrics/loudness/loudness_ecma/_rectified_band_pass_signals.py
+++ b/mosqito/sq_metrics/loudness/loudness_ecma/_rectified_band_pass_signals.py
@@ -10,9 +10,7 @@
     _auditory_filters_centre_freq,
 )
 from mosqito.sq_metrics.loudness.loudness_ecma._gammatone import _gammatone
-from mosqito.sq_metrics.loudness.loudness_ecma._segmentation_blocks import (
-    _segmentation_blocks,
-)
+from mosqito.utils import time_segmentation
 
 
 def _rectified_band_pass_signals(sig, sb=2048, sh=1024):
@@ -84,9 +82,10 @@ def _rectified_band_pass_signals(sig, sb=2048, sh=1024):
         # "band_number" in which we are processing the signal. "sh_array" is the step size, the time shift to the next
         # block.
 
-        block_array = _segmentation_blocks(
-            band_pass_signal, sb[band_number], sh[band_number]
+        block_array, _ = time_segmentation(
+            band_pass_signal, fs, sb[band_number], sh[band_number], is_ecma=True
         )
+        block_array = block_array.T
 
         # RECTIFICATION (5.1.5)
 
diff --git a/mosqito/sq_metrics/loudness/loudness_ecma/_segmentation_blocks.py b/mosqito/sq_metrics/loudness/loudness_ecma/_segmentation_blocks.py
deleted file mode 100644
index b65fd1ac..00000000
--- a/mosqito/sq_metrics/loudness/loudness_ecma/_segmentation_blocks.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-@author: Daniel Jiménez-Caminero Costa
-"""
-
-import numpy as np
-
-
-def _segmentation_blocks(band_pass_signal_hr, sb, sh):
-    """Function used for the segmentation of the signal into smaller parts of audio (blocks).
-    This has been implemented as described in Formula 16 (section 5.1.4) of ECMA-418-2.
-
-    Parameters
-    ----------
-    band_pass_signal_hr: numpy.array
-        time signal values of the input signal
-    sb: int
-        block size
-    sh: int
-        Hop size.
-
-    Returns
-    -------
-    block_array: List
-        Array list of blocks in which the signal has been segmented.
-    """
-
-    # TODO: check first blocks
-
-    l = 0
-    block_array = []
-    while l * sh <= len(band_pass_signal_hr):
-        i_begin = l * sh - sb
-        i_end = l * sh
-        if i_begin < 0 and i_end <= 0:
-            block_array.append(np.zeros(sb))
-        elif i_begin < 0:
-            block_array.append(
-                np.concatenate((np.zeros(-i_begin), band_pass_signal_hr[0:i_end]))
-            )
-        else:
-            block_array.append(band_pass_signal_hr[i_begin:i_end])
-        l += 1
-
-    return block_array
diff --git a/mosqito/sq_metrics/loudness/loudness_zwst/_main_loudness.py b/mosqito/sq_metrics/loudness/loudness_zwst/_main_loudness.py
index 3e6bed91..647716c3 100644
--- a/mosqito/sq_metrics/loudness/loudness_zwst/_main_loudness.py
+++ b/mosqito/sq_metrics/loudness/loudness_zwst/_main_loudness.py
@@ -24,7 +24,7 @@ def _main_loudness(spec_third, field_type):
     Parameters
     ----------
     spec_third : numpy.ndarray
-        A third octave band spectrum [dB ref. 2e-5 Pa]
+        A third octave band spectrum with size (nfreq, nseg) or (nfreq,) [dB ref. 2e-5 Pa]
     field_type : str
         Type of soundfield correspondin to spec_third ("free" or
         "diffuse")
@@ -66,13 +66,11 @@ def _main_loudness(spec_third, field_type):
     )
     # Critical band level at absolute threshold without taking into
     # account the transmission characteristics of the ear
-    ltq = np.array([30, 18, 12, 8, 7, 6, 5, 4, 3,
-                    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3])
+    ltq = np.array([30, 18, 12, 8, 7, 6, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3])
     # Correction of levels according to the transmission characteristics
     # of the ear
     a0 = np.array(
-        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, -
-            1.6, -3.2, -5.4, -5.6, -4, -1.5, 2, 5, 12]
+        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, -1.6, -3.2, -5.4, -5.6, -4, -1.5, 2, 5, 12]
     )
     # Level difference between free and diffuse sound fields
     ddf = np.array(
@@ -130,22 +128,12 @@ def _main_loudness(spec_third, field_type):
     # contours 'xp' and calculation of the intensities for 1/3 oct.
     # bands up to 315 Hz
 
-    # Prepare al arrays to work with
+    # 1-dimensional array to 2-dimensional array with size (nfreq, 1)
     if spec_third.ndim == 1:
-        # This is for the test only for test_loudness_zwicker_3oct because only one array of one col is given and this routine needs 2 or more
-        spec_third_adapted = (
-            np.ones((spec_third.shape[0], 100)).T * spec_third).T
-    elif spec_third.shape[1] == 1:
-        # This line is only for testing test_loudness_zwicker_wav(), only in case one col in spec third is given.
-        spec_third_adapted = (
-            np.ones((spec_third.shape[0], 100)).T * spec_third[:, 0]
-        ).T
-    else:
-        # Fomn common wav files where more htan one col is given.
-        spec_third_adapted = spec_third
-
-    spec_third_aux = spec_third_adapted[: dll.shape[1], :]
-    spec_third_aux[:, -1] = 0
+        spec_third = spec_third[:, np.newaxis]
+
+    spec_third_aux = spec_third[: dll.shape[1], :]
+    # spec_third_aux[:, -1] = 0
 
     # Convert rap, dll in 3 dimensional array
     # 1. generate the array shape
@@ -155,10 +143,7 @@ def _main_loudness(spec_third, field_type):
         [base_mat[:, i, :].T * rap for i in np.arange(dll.shape[1])]
     ).transpose(2, 0, 1)
     dll_mat = np.array(
-        [
-            np.multiply(base_mat[:, :, i], dll)
-            for i in np.arange(spec_third_adapted.shape[1])
-        ]
+        [np.multiply(base_mat[:, :, i], dll) for i in np.arange(spec_third.shape[1])]
     ).transpose(1, 2, 0)
     spec_third_aux_mat = np.array(
         [
@@ -197,29 +182,29 @@ def _main_loudness(spec_third, field_type):
     # Calculation of main loudness
     s = 0.25
     nm = np.zeros([20, spec_third_aux.shape[1]])
-    le = np.copy(spec_third_adapted[8:, :])
+    le = np.copy(spec_third[8:, :])
     # le = le.reshape((20))
     le[0:3, :] = lcb
-    a0_mat = np.ones(a0.shape[0] * spec_third_adapted.shape[1]).reshape(
-        a0.shape[0], spec_third_adapted.shape[1]
+    a0_mat = np.ones(a0.shape[0] * spec_third.shape[1]).reshape(
+        a0.shape[0], spec_third.shape[1]
     )
     a0_mat = (a0_mat.T * a0).T
     le = le - a0_mat
 
     if field_type == "diffuse":
-        ddf_mat = np.ones(ddf.shape[0] * spec_third_adapted.shape[1]).reshape(
-            ddf.shape[0], spec_third_adapted.shape[1]
+        ddf_mat = np.ones(ddf.shape[0] * spec_third.shape[1]).reshape(
+            ddf.shape[0], spec_third.shape[1]
         )
         ddf_mat = (ddf_mat.T * ddf).T
         le += ddf_mat
 
-    ltq_mat = np.ones(ltq.shape[0] * spec_third_adapted.shape[1]).reshape(
-        ltq.shape[0], spec_third_adapted.shape[1]
+    ltq_mat = np.ones(ltq.shape[0] * spec_third.shape[1]).reshape(
+        ltq.shape[0], spec_third.shape[1]
     )
     ltq_mat = (ltq_mat.T * ltq).T
     i = le > ltq_mat
-    dcb_mat = np.ones(dcb.shape[0] * spec_third_adapted.shape[1]).reshape(
-        dcb.shape[0], spec_third_adapted.shape[1]
+    dcb_mat = np.ones(dcb.shape[0] * spec_third.shape[1]).reshape(
+        dcb.shape[0], spec_third.shape[1]
     )
     dcb_mat = (dcb_mat.T * dcb).T
     le[i] -= dcb_mat[i]
@@ -243,10 +228,10 @@ def _main_loudness(spec_third, field_type):
     # within this critical band
     korry = 0.4 + 0.32 * nm[0] ** 0.2
     nm[0, korry <= 1] *= korry
-    nm[:, -1] = 0
-    if spec_third.ndim == 1 or spec_third.shape[1] == 1:
-        # This is only for test_loudness_zwicker_3oct because only one array of one col is given and this routine needs 2 or more
-        # This line is only also for testing test_loudness_zwicker_wav(), only in case one col in spec third is given.
-        nm = nm[:, 1]
+    # nm[:, -1] = 0
+    # if spec_third.ndim == 1 or spec_third.shape[1] == 1:
+    #     # This is only for test_loudness_zwicker_3oct because only one array of one col is given and this routine needs 2 or more
+    #     # This line is only also for testing test_loudness_zwicker_wav(), only in case one col in spec third is given.
+    #     nm = nm[:, 1]
 
-    return nm
+    return np.squeeze(nm)
diff --git a/mosqito/sq_metrics/loudness/loudness_zwst/loudness_zwst.py b/mosqito/sq_metrics/loudness/loudness_zwst/loudness_zwst.py
index 3fb9a871..863fcae3 100644
--- a/mosqito/sq_metrics/loudness/loudness_zwst/loudness_zwst.py
+++ b/mosqito/sq_metrics/loudness/loudness_zwst/loudness_zwst.py
@@ -1,12 +1,11 @@
 # -*- coding: utf-8 -*-
 
 # Third party imports
+from time import time
 import numpy as np
 
 # Local application imports
-from mosqito.sound_level_meter.noct_spectrum.noct_spectrum import (
-    noct_spectrum,
-)
+from mosqito.sound_level_meter import noct_spectrum
 from mosqito.sq_metrics.loudness.loudness_zwst._main_loudness import (
     _main_loudness,
 )
@@ -34,19 +33,21 @@ def loudness_zwst(signal, fs, field_type="free"):
     Parameters
     ----------
     signal : numpy.array
-        time signal values [Pa]
+        Time signal values [Pa].
     fs : integer
-        sampling frequency
+        Sampling frequency.
     field_type : str
         Type of soundfield corresponding to spec_third ("free" by
-        default or "diffuse")
+        default or "diffuse").
 
     Outputs
     -------
     N : float
-        Calculated loudness [sones]
+        The overall loudness array [sones], size (Ntime,)
     N_specific : numpy.ndarray
-        Specific loudness [sones/bark]
+        The specific loudness array [sones/bark], size (Nbark, Ntime)
+    bark_axis: numpy.array
+        The Bark axis array, size (Nbark,)
     """
 
     #
diff --git a/mosqito/sq_metrics/loudness/loudness_zwst/loudness_zwst_perseg.py b/mosqito/sq_metrics/loudness/loudness_zwst/loudness_zwst_perseg.py
new file mode 100644
index 00000000..c2816c4a
--- /dev/null
+++ b/mosqito/sq_metrics/loudness/loudness_zwst/loudness_zwst_perseg.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+# Third party imports
+from time import time
+import numpy as np
+
+# Local application imports
+from mosqito.utils import time_segmentation
+from mosqito.sq_metrics.loudness.loudness_zwst.loudness_zwst import loudness_zwst
+
+
+def loudness_zwst_perseg(signal, fs, nperseg=4096, noverlap=None, field_type="free"):
+    """Zwicker-loudness calculation for stationary signals
+
+    Calculates the acoustic loudness according to Zwicker method for
+    stationary signals per signal segment.
+    Normatice reference:
+        ISO 532:1975 (method B)
+        DIN 45631:1991
+        ISO 532-1:2017 (method 1)
+    The code is based on BASIC program published in "Program for
+    calculating loudness according to DIN 45631 (ISO 532B)", E.Zwicker
+    and H.Fastl, J.A.S.J (E) 12, 1 (1991).
+    Note that due to normative continuity, as defined in the
+    preceeding standards, the method is in accordance with
+    ISO 226:1987 equal loudness contours (instead of ISO 226:2003)
+
+    Parameters
+    ----------
+    signal : numpy.array
+        Time signal values [Pa].
+    fs : integer
+        Sampling frequency.
+    nperseg: int, optional
+        Length of each segment. Defaults to 4096.
+    noverlap: int, optional
+        Number of points to overlap between segments.
+        If None, noverlap = nperseg / 2. Defaults to None.
+    field_type : str
+        Type of soundfield corresponding to spec_third ("free" by
+        default or "diffuse").
+
+    Outputs
+    -------
+    N : float
+        The overall loudness array [sones], size (Ntime,)
+    N_specific : numpy.ndarray
+        The specific loudness array [sones/bark], size (Nbark, Ntime)
+    bark_axis: numpy.array
+        The Bark axis array, size (Nbark,)
+    time_axis: numpy.array
+        The time axis array, size (Ntime,) or None
+
+    """
+
+    # Time signal segmentation
+    signal, time_axis = time_segmentation(signal, fs, nperseg, noverlap)
+
+    # Compute loudness
+    N, N_specific, bark_axis = loudness_zwst(signal, fs, field_type="free")
+
+    return N, N_specific, bark_axis, time_axis
diff --git a/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_aures.py b/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_aures.py
deleted file mode 100644
index 20323c45..00000000
--- a/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_aures.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Thu Sep 10 12:22:23 2020
-
-@author: wantysal
-"""
-
-# Standard library import
-import numpy as np
-
-
-def _comp_sharpness_aures(N, N_specific, is_stationary):
-    """Sharpness calculation
-
-    The code is based on W. Aures' equation to determine sharpness
-    from specific zwicker loudness.
-
-    Parameters
-    ----------
-    N : float
-        loudness value
-    N_specific : np.ndarray
-        specific critical bands loudness
-    is_stationary : boolean
-        indicates if the signal is stationary or time-varying
-
-    Outputs
-    -------
-    S : sharpness
-    """
-
-    # Bark axis
-    z = np.linspace(0.1, 24, int(24 / 0.1))
-
-    if is_stationary == True:
-        if N == 0:
-            S = 0
-        else:
-            # weighting function depending on the loudness
-            gA = np.zeros((z.size))
-            gA = 0.078 * (np.exp(0.171 * z) / z) * (N / np.log(N * 0.05 + 1))
-            S = 0.11 * sum(N_specific * gA * z * 0.1) / N
-    else:
-        S = np.zeros((N.size))
-        gA = np.zeros((z.size, N.size))
-        for t in range(N.size):
-            if N[t] >= 0.1:
-                # weighting function depending on the loudness
-                gA[:, t] = (
-                    0.078 * (np.exp(0.171 * z) / z) * (N[t] / np.log(N[t] * 0.05 + 1))
-                )
-                S[t] = 0.11 * sum(N_specific[:, t] * gA[:, t] * z * 0.1) / N[t]
-
-    return S
diff --git a/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_bismarck.py b/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_bismarck.py
deleted file mode 100644
index f11e3889..00000000
--- a/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_bismarck.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Thu Sep 10 17:06:11 2020
-
-@author: wantysal
-"""
-
-# Standard library import
-import numpy as np
-
-
-def _comp_sharpness_bismarck(N, N_specific, is_stationary):
-    """Sharpness calculation
-
-    The code is based on Bismarck formulation to determine sharpness
-    from specific zwicker loudness. It is quite similar to DIN 45692:2009.
-
-    Parameters
-    ----------
-    N : float
-        loudness value
-    N_specific : np.ndarray
-        specific critical bands loudness
-    is_stationary : boolean
-        indicates if the signal is stationary or time-varying
-    time : np.array
-        time axis
-
-    Outputs
-    -------
-    S : sharpness
-    """
-    # Bark axis
-    z = np.linspace(0.1, 24, int(24 / 0.1))
-
-    # Von Bismarck weighting function
-    gB = np.zeros((z.size))
-    gB[z <= 15] = 1
-    gB[z > 15] = 0.2 * np.exp(0.308 * (z[z > 15] - 15)) + 0.8
-
-    if is_stationary:
-        if N == 0:
-            S = 0
-        else:
-            S = 0.11 * sum(N_specific * gB * z * 0.1) / N
-    else:
-        S = np.zeros((N.size))
-        for t in range(N.size):
-            if N[t] >= 0.1:
-                S[t] = 0.11 * sum(N_specific[:, t] * gB * z * 0.1) / N[t]
-    return S
diff --git a/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_din.py b/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_din.py
deleted file mode 100644
index 33ece02a..00000000
--- a/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_din.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Thu Sep 10 16:59:53 2020
-
-@author: wantysal
-"""
-# Standard library import
-import numpy as np
-
-
-def _comp_sharpness_din(N, N_specific, is_stationary):
-    """Sharpness calculation
-
-    The code is based on DIN 45692:2009 to determine sharpness
-    from specific zwicker loudness.
-
-    Parameters
-    ----------
-    N : float
-        loudness value
-    N_specific : np.ndarray
-        specific critical bands loudness
-    is_stationary : boolean
-        indicates if the signal is stationary or time-varying
-    time : np.array
-        time axis
-
-    Outputs
-    -------
-    S : sharpness
-    """
-
-    # Bark axis
-    z = np.linspace(0.1, 24, int(24 / 0.1))
-
-    # weighting function
-    gDIN = np.zeros((z.size))
-    gDIN[z <= 15.8] = 1
-    gDIN[z > 15.8] = 0.15 * np.exp(0.42 * (z[z > 15.8] - 15.8)) + 0.85
-
-    if is_stationary:
-        if N == 0:
-            S = 0
-        else:
-            S = 0.11 * sum(N_specific * gDIN * z * 0.1) / N
-    else:
-        S = np.zeros((N.size))
-        for t in range(N.size):
-            if N[t] >= 0.1:
-                S[t] = 0.11 * sum(N_specific[:, t] * gDIN * z * 0.1) / N[t]
-    return S
diff --git a/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_fastl.py b/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_fastl.py
deleted file mode 100644
index b81a1340..00000000
--- a/mosqito/sq_metrics/sharpness/sharpness_din/_sharpness_fastl.py
+++ /dev/null
@@ -1,155 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Wed Nov  4 2020
-
-@author: wantysal
-"""
-
-# Standard library imports
-import numpy as np
-
-
-def _comp_sharpness_fastl(N, N_specific, is_stationary):
-    """Sharpness calculation according to FASTL's method (1991)
-        Expression for weighting function obtained by fitting an
-        equation to the data given in 'Psychoacoustics: Facts and Models'
-
-    Parameters
-    ----------
-    N : float
-        loudness value
-    N_specific : np.ndarray
-        specific critical bands loudness
-    is_stationary : boolean
-        indicates if the signal is stationary or time-varying
-    """
-    # Bark axis
-    z = np.linspace(0.1, 24, int(24 / 0.1))
-
-    # Zwicker and Fastl weighting function
-    x = np.array(
-        [
-            0.0985854,
-            14.826764,
-            15.364039,
-            15.863559,
-            16.297388,
-            16.533346,
-            16.844551,
-            17.052244,
-            17.335314,
-            17.599474,
-            17.816587,
-            18.014925,
-            18.231972,
-            18.38313,
-            18.543644,
-            18.704224,
-            18.883648,
-            18.978205,
-            19.167118,
-            19.346476,
-            19.441233,
-            19.554567,
-            19.668102,
-            19.762926,
-            19.923306,
-            20.036907,
-            20.188398,
-            20.320976,
-            20.462912,
-            20.60518,
-            20.78507,
-            20.908228,
-            21.078962,
-            21.268276,
-            21.410543,
-            21.533966,
-            21.704834,
-            21.847036,
-            21.98957,
-            22.141394,
-            22.312195,
-            22.464752,
-            22.62633,
-            22.759441,
-            22.89302,
-            23.054932,
-            23.236088,
-            23.38871,
-            23.5416,
-            23.6848,
-            23.932978,
-        ]
-    )
-
-    y = np.array(
-        [
-            0.9783246,
-            0.99701804,
-            1.0092967,
-            1.0169811,
-            1.0438102,
-            1.0713409,
-            1.0891489,
-            1.1167798,
-            1.1441435,
-            1.1668463,
-            1.1944437,
-            1.2268357,
-            1.2497056,
-            1.277537,
-            1.3006072,
-            1.3284053,
-            1.3561363,
-            1.3794405,
-            1.411866,
-            1.4348694,
-            1.4723566,
-            1.4908663,
-            1.523559,
-            1.5657737,
-            1.5793887,
-            1.6168091,
-            1.6682787,
-            1.7150875,
-            1.7571354,
-            1.8228214,
-            1.8836461,
-            1.9304883,
-            2.0102572,
-            2.0710485,
-            2.1367345,
-            2.2024875,
-            2.2917116,
-            2.35267,
-            2.4372666,
-            2.5123746,
-            2.5968711,
-            2.7239833,
-            2.8226962,
-            2.9073262,
-            3.02505,
-            3.147401,
-            3.2980514,
-            3.429891,
-            3.5806417,
-            3.7125149,
-            3.9385738,
-        ]
-    )
-
-    gZF = np.interp(z, x, y)
-
-    if is_stationary == True:
-        if N == 0:
-            S = 0
-        else:
-            S = 0.11 * sum(N_specific * gZF * z * 0.1) / N
-    else:
-        S = np.zeros((N.size))
-        for t in range(N.size):
-            if N[t] >= 0.1:
-                S[t] = 0.11 * sum(N_specific[:, t] * gZF * z * 0.1) / N[t]
-
-    return S
diff --git a/mosqito/sq_metrics/sharpness/sharpness_din/_weighting_fastl.py b/mosqito/sq_metrics/sharpness/sharpness_din/_weighting_fastl.py
new file mode 100644
index 00000000..88ce1f8c
--- /dev/null
+++ b/mosqito/sq_metrics/sharpness/sharpness_din/_weighting_fastl.py
@@ -0,0 +1,114 @@
+import numpy as np
+
+# Zwicker and Fastl weighting function
+x = np.array(
+    [
+        0.0985854,
+        14.826764,
+        15.364039,
+        15.863559,
+        16.297388,
+        16.533346,
+        16.844551,
+        17.052244,
+        17.335314,
+        17.599474,
+        17.816587,
+        18.014925,
+        18.231972,
+        18.38313,
+        18.543644,
+        18.704224,
+        18.883648,
+        18.978205,
+        19.167118,
+        19.346476,
+        19.441233,
+        19.554567,
+        19.668102,
+        19.762926,
+        19.923306,
+        20.036907,
+        20.188398,
+        20.320976,
+        20.462912,
+        20.60518,
+        20.78507,
+        20.908228,
+        21.078962,
+        21.268276,
+        21.410543,
+        21.533966,
+        21.704834,
+        21.847036,
+        21.98957,
+        22.141394,
+        22.312195,
+        22.464752,
+        22.62633,
+        22.759441,
+        22.89302,
+        23.054932,
+        23.236088,
+        23.38871,
+        23.5416,
+        23.6848,
+        23.932978,
+    ]
+)
+
+y = np.array(
+    [
+        0.9783246,
+        0.99701804,
+        1.0092967,
+        1.0169811,
+        1.0438102,
+        1.0713409,
+        1.0891489,
+        1.1167798,
+        1.1441435,
+        1.1668463,
+        1.1944437,
+        1.2268357,
+        1.2497056,
+        1.277537,
+        1.3006072,
+        1.3284053,
+        1.3561363,
+        1.3794405,
+        1.411866,
+        1.4348694,
+        1.4723566,
+        1.4908663,
+        1.523559,
+        1.5657737,
+        1.5793887,
+        1.6168091,
+        1.6682787,
+        1.7150875,
+        1.7571354,
+        1.8228214,
+        1.8836461,
+        1.9304883,
+        2.0102572,
+        2.0710485,
+        2.1367345,
+        2.2024875,
+        2.2917116,
+        2.35267,
+        2.4372666,
+        2.5123746,
+        2.5968711,
+        2.7239833,
+        2.8226962,
+        2.9073262,
+        3.02505,
+        3.147401,
+        3.2980514,
+        3.429891,
+        3.5806417,
+        3.7125149,
+        3.9385738,
+    ]
+)
\ No newline at end of file
diff --git a/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din.py b/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din.py
index c6324461..50659de5 100644
--- a/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din.py
+++ b/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din.py
@@ -1,79 +1,62 @@
 # -*- coding: utf-8 -*-
-"""
-Created on Mon Nov 16 10:00:50 2020
-
-@author: wantysal
-"""
 
 # Standard library import
 import numpy as np
 
 # Local imports
 from mosqito.sq_metrics import loudness_zwst
-from mosqito.sq_metrics.sharpness.sharpness_din._sharpness_aures import (
-    _comp_sharpness_aures,
-)
-from mosqito.sq_metrics.sharpness.sharpness_din._sharpness_din import (
-    _comp_sharpness_din,
-)
-from mosqito.sq_metrics.sharpness.sharpness_din._sharpness_bismarck import (
-    _comp_sharpness_bismarck,
-)
-from mosqito.sq_metrics.sharpness.sharpness_din._sharpness_fastl import (
-    _comp_sharpness_fastl,
+from mosqito.sq_metrics.sharpness.sharpness_din.sharpness_din_from_loudness import (
+    sharpness_din_from_loudness,
 )
 
 
-def sharpness_din(is_stationary, signal, fs, method="din", skip=0):
+def sharpness_din(
+    signal,
+    fs,
+    method="zwst",
+    weighting="din",
+    field_type="free",
+    skip=0,
+):
     """Acoustic sharpness calculation according to different methods:
         Aures, Von Bismarck, DIN 45692, Fastl
 
     Parameters:
     ----------
-    is_stationary: boolean
-        True if the signal is stationary, false if it is time varying
     signal: numpy.array
         time history values
     fs: integer
         sampling frequency
-    method: string
-        'din' by default,'aures', 'bismarck','fastl'
+    method : string
+        To specify the Loudness computation method
+    weighting : string
+        To specify the weighting function used for the
+        sharpness computation.'din' by default,'aures', 'bismarck','fastl'
+    field_type : str
+        Type of soundfield corresponding to spec_third ("free" by
+        default or "diffuse").
     skip : float
         number of second to be cut at the beginning of the analysis
 
     Outputs
     ------
     S : float
-    sharpness value
+        sharpness value
+    time_axis: numpy.array
+        The time axis array, size (Ntime,) or None
 
     """
 
-    if (
-        method != "din"
-        and method != "aures"
-        and method != "fastl"
-        and method != "bismarck"
-    ):
-        raise ValueError("ERROR: method must be 'din', 'aures', 'bismarck', 'fastl'")
-
-    N, N_specific, _ = loudness_zwst(signal, fs)
-
-    if method == "din":
-        S = _comp_sharpness_din(N, N_specific, is_stationary)
-
-    elif method == "aures":
-        S = _comp_sharpness_aures(N, N_specific, is_stationary)
-
-    elif method == "bismarck":
-        S = _comp_sharpness_bismarck(N, N_specific, is_stationary)
-
-    elif method == "fastl":
-        S = _comp_sharpness_fastl(N, N_specific, is_stationary)
-
-    if is_stationary == False:
-        # Cut transient effect
-        time = np.linspace(0, len(signal) / fs, len(S))
-        cut_index = np.argmin(np.abs(time - skip))
-        S = S[cut_index:]
+    # Compute loudness
+    if method == "zwst":
+        N, N_specific, _ = loudness_zwst(signal, fs, field_type=field_type)
+    elif method == "zwtv":
+        # TBD
+        pass
+    else:
+        raise ValueError("ERROR: method must be either 'zwst' or 'zwtv'")
+
+    # Compute sharpness from loudness
+    S = sharpness_din_from_loudness(N, N_specific, weighting=weighting, skip=0)
 
     return S
diff --git a/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din_from_loudness.py b/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din_from_loudness.py
new file mode 100644
index 00000000..560c27e5
--- /dev/null
+++ b/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din_from_loudness.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+
+import numpy as np
+
+from mosqito.sq_metrics.sharpness.sharpness_din._weighting_fastl import x, y
+
+
+def sharpness_din_from_loudness(N, N_specific, weighting="din", skip=0):
+    """Acoustic sharpness calculation according to different methods:
+        Aures, Von Bismarck, DIN 45692, Fastl
+
+    Parameters:
+    ----------
+    N : float or numpy.ndarray
+        The overall loudness [sones]. If array, size (Ntime,)
+    N_specific : numpy.ndarray
+        The specific loudness array [sones/bark], size (Nbark,) or (Nbark, Ntime)
+    weighting : string
+        To specify the weighting function used for the
+        sharpness computation.'din' by default,'aures', 'bismarck','fastl'
+    skip : float
+        number of second to be cut at the beginning of the analysis
+
+    Outputs
+    ------
+    S : float or numpy.ndarray
+        sharpness value
+
+    """
+
+    # 1D-array => 2D-array
+    if not isinstance(N, np.ndarray):
+        N = np.array([N])
+    elif N.ndim <= 1:
+        N = N[np.newaxis, :]
+    if N_specific.ndim <= 1:
+        N_specific = N_specific[:, np.newaxis]
+
+    # Bark axis
+    z = np.linspace(0.1, 24, int(24 / 0.1))[:, np.newaxis]
+
+    # weighting function
+    if weighting == "din":
+        g = np.ones(z.shape)
+        g[z > 15.8] = 0.15 * np.exp(0.42 * (z[z > 15.8] - 15.8)) + 0.85
+    elif weighting == "aures":
+        g = 0.078 * (np.exp(0.171 * z) / z) * (N / np.log(N * 0.05 + 1))
+    elif weighting == "bismarck":
+        g = np.ones(z.shape)
+        g[z > 15] = 0.2 * np.exp(0.308 * (z[z > 15] - 15)) + 0.8
+    elif weighting == "fastl":
+        g = np.interp(z, x, y)
+    else:
+        raise ValueError(
+            "ERROR: weighting must be 'din', 'aures', 'bismarck' or 'fastl'"
+        )
+
+    S = np.zeros(N.shape)
+    ind = np.where(N >= 0.1)[0]
+    S[ind] = (
+        0.11
+        * np.sum(
+            N_specific[:, ind] * g * z * 0.1,
+            axis=0,
+        )
+        / N[ind]
+    )
+
+    if S.size == 1:
+        S = float(S)
+    else:
+        S = np.squeeze(S)
+    return S
\ No newline at end of file
diff --git a/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din_perseg.py b/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din_perseg.py
new file mode 100644
index 00000000..409d00f4
--- /dev/null
+++ b/mosqito/sq_metrics/sharpness/sharpness_din/sharpness_din_perseg.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+# Standard library import
+import numpy as np
+
+# Local imports
+from mosqito.sq_metrics import loudness_zwst_perseg
+from mosqito.sq_metrics.sharpness.sharpness_din.sharpness_din_from_loudness import (
+    sharpness_din_from_loudness,
+)
+
+
+def sharpness_din_perseg(
+    signal,
+    fs,
+    weighting="din",
+    nperseg=4096,
+    noverlap=None,
+    field_type="free",
+    skip=0,
+):
+    """Acoustic sharpness calculation according to different methods:
+        Aures, Von Bismarck, DIN 45692, Fastl
+
+    Parameters:
+    ----------
+    signal: numpy.array
+        time history values
+    fs: integer
+        sampling frequency
+    weighting : string
+        To specify the weighting function used for the
+        sharpness computation.'din' by default,'aures', 'bismarck','fastl'
+    nperseg: int, optional
+        Length of each segment. Defaults to 4096.
+    noverlap: int, optional
+        Number of points to overlap between segments.
+        If None, noverlap = nperseg / 2. Defaults to None.
+    field_type : str
+        Type of soundfield corresponding to spec_third ("free" by
+        default or "diffuse").
+    skip : float
+        number of second to be cut at the beginning of the analysis
+
+    Outputs
+    ------
+    S : float
+        sharpness value
+    time_axis: numpy.array
+        The time axis array, size (Ntime,) or None
+
+    """
+
+    # Compute loudness
+    N, N_specific, _, time_axis = loudness_zwst_perseg(
+        signal, fs, nperseg=nperseg, noverlap=noverlap, field_type=field_type
+    )
+
+    # Compute sharpness from loudness
+    S = sharpness_din_from_loudness(N, N_specific, weighting=weighting, skip=0)
+
+    return S, time_axis
diff --git a/mosqito/utils/__init__.py b/mosqito/utils/__init__.py
index ec38882a..866bf458 100644
--- a/mosqito/utils/__init__.py
+++ b/mosqito/utils/__init__.py
@@ -1,1 +1,4 @@
-from mosqito.utils.load import load
\ No newline at end of file
+from mosqito.utils.isoclose import isoclose
+from mosqito.utils.load import load
+from mosqito.utils.sine_wave_generator import sine_wave_generator
+from mosqito.utils.time_segmentation import time_segmentation
diff --git a/mosqito/utils/isoclose.py b/mosqito/utils/isoclose.py
new file mode 100644
index 00000000..953a8771
--- /dev/null
+++ b/mosqito/utils/isoclose.py
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+
+try:
+    import matplotlib.pyplot as plt
+except ImportError:
+    raise RuntimeError(
+        "In order to perform this validation you need the 'matplotlib' package."
+    )
+
+import numpy as np
+
+
+def isoclose(actual, desired, rtol=1e-7, atol=0, is_plot=False, tol_label=None, xaxis=None):
+    """
+    Check if two arrays are equal up to desired tolerance.
+
+    The test is inspired from section 5.1 of ISO 532-1. It compares 
+    ``actual`` to ``desired +/- min(atol, rtol * abs(desired))``.
+
+    Parameters
+    ----------
+    actual : array_like
+        Array obtained.
+    desired : array_like
+        Array desired.
+    rtol : float, optional
+        Relative tolerance.
+    atol : float, optional
+        Absolute tolerance.
+    is_plot : bool, optional
+        To generate a "compliance" plot
+    tol_label: str
+        Label for the tolerance curves
+    xaxis : array_like, optional
+        x axis for the "compliance" plot
+
+    Output
+    ------
+    is_isoclose: bool
+        False if actual and desired are not equal up to specified tolerance.
+
+    """
+
+    # Tolerances
+    range_pos = np.amin(
+        [desired * (1 - abs(rtol)), desired - abs(atol)], axis=0)
+    range_neg = np.amax(
+        [desired * (1 + abs(rtol)), desired + abs(atol)], axis=0)
+
+    # Test for ISO 532-1 comformance (section 5.1)
+    is_isoclose = (actual >= range_pos).all() and (actual <= range_neg).all()
+
+    if is_plot:
+        # Define xaxis
+        if xaxis is None:
+            xaxis = np.arange(actual.shape[0])
+
+        # Plot desired range
+        plt.plot(
+            xaxis,
+            range_neg,
+            color="tab:red",
+            linestyle="solid",
+            label=tol_label,
+            linewidth=1,
+        )
+        plt.plot(
+            xaxis,
+            range_pos,
+            color="tab:red",
+            linestyle="solid",
+            # label="",
+            linewidth=1,
+        )
+
+        # Plot actual value
+        plt.plot(xaxis, actual)
+        plt.legend()
+
+    return is_isoclose
diff --git a/mosqito/utils/time_segmentation.py b/mosqito/utils/time_segmentation.py
new file mode 100644
index 00000000..677819bc
--- /dev/null
+++ b/mosqito/utils/time_segmentation.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+
+import numpy as np
+
+
+def time_segmentation(sig, fs, nperseg=2048, noverlap=None, is_ecma=False):
+    """Function used for the segmentation of a time signal into
+    smaller parts of audio (blocks).
+
+    Parameters
+    ----------
+    sig: numpy.array
+        A 1-dimensional time signal array.
+    fs : float
+        The time signal sampling frequency.
+    nperseg: int, optional
+        Length of each segment. Defaults to 2048.
+    noverlap: int, optional
+        Number of points to overlap between segments.
+        If None, noverlap = nperseg / 2. Defaults to None.
+    is_ecma: bool, optional
+        If is_ecma = True, the implementation is as described
+        in Formula 16 (section 5.1.4) of ECMA-418-2. Defaults
+        to False.
+
+    Returns
+    -------
+    block_array: numpy.array
+        A 2-dimensional array of size (nperseg, nseg)
+        containing the segmented signal.
+    time: numpy.array
+        The time axis corresponding to the segmented
+        signal, size (nseg,)
+    """
+
+    if noverlap is None:
+        noverlap = int(nperseg / 2)
+
+    if is_ecma:
+        # pad with zeros at the begining
+        sig = np.hstack((np.zeros(nperseg), sig))
+
+    # build time axis for sig
+    time = np.linspace(0, (len(sig) - 1) / fs, num=len(sig))
+
+    l = 0
+    block_array = []
+    time_array = []
+    while l * noverlap <= len(sig) - nperseg:
+        block_array.append(sig[l * noverlap : nperseg + l * noverlap])
+        time_array.append(np.mean(time[l * noverlap : nperseg + l * noverlap]))
+        l += 1
+
+    return np.array(block_array).T, np.array(time_array)
diff --git a/tutorials/tuto_loudness_zwst.ipynb b/tutorials/tuto_loudness_zwst.ipynb
index eb794f6e..bdcf980c 100644
--- a/tutorials/tuto_loudness_zwst.ipynb
+++ b/tutorials/tuto_loudness_zwst.ipynb
@@ -7,7 +7,7 @@
    },
    "source": [
     "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
-    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Load-signal\" data-toc-modified-id=\"Load-signal-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Load signal</a></span></li><li><span><a href=\"#Compute-loudness-of-the-whole-signal\" data-toc-modified-id=\"Compute-loudness-of-the-whole-signal-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Compute loudness of the whole signal</a></span></li><li><span><a href=\"#Compute-loudness-per-signal-blocks\" data-toc-modified-id=\"Compute-loudness-per-signal-blocks-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Compute loudness per signal blocks</a></span></li></ul></div>"
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Load-signal\" data-toc-modified-id=\"Load-signal-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Load signal</a></span></li><li><span><a href=\"#Compute-loudness-of-the-whole-signal\" data-toc-modified-id=\"Compute-loudness-of-the-whole-signal-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Compute loudness of the whole signal</a></span></li><li><span><a href=\"#Compute-loudness-per-signal-segments\" data-toc-modified-id=\"Compute-loudness-per-signal-segments-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Compute loudness per signal segments</a></span></li></ul></div>"
    ]
   },
   {
@@ -41,6 +41,7 @@
     "# Import mosqito functions\n",
     "from mosqito.utils import load\n",
     "from mosqito.sq_metrics import loudness_zwst\n",
+    "from mosqito.sq_metrics import loudness_zwst_perseg\n",
     "\n",
     "# Import MOSQITO color sheme [Optional]\n",
     "from mosqito import COLORS"
@@ -1043,7 +1044,7 @@
    "source": [
     "# Define path to the .wav file\n",
     "# To be replaced by your own path\n",
-    "path = \"../validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 5 (pinknoise 60 dB).wav\"\n",
+    "path = \"../validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 5 (pinknoise 60 dB).wav\"\n",
     "# load signal\n",
     "sig, fs = load(path, wav_calib=2 * 2 **0.5)\n",
     "# plot signal\n",
@@ -2068,7 +2069,7 @@
     {
      "data": {
       "text/html": [
-       "<img src=\"data:image/png;base64,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\" width=\"724.3333333333334\">"
+       "<img src=\"data:image/png;base64,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\" width=\"724.3333333333334\">"
       ],
       "text/plain": [
        "<IPython.core.display.HTML object>"
@@ -2099,8 +2100,1007 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Compute loudness per signal blocks\n",
-    "Coming soon..."
+    "## Compute loudness per signal segments\n",
+    "To compute the loudnes for successive, possibly overlaping, time segments, you can use the loudness_zwst_perseg function. It accepts two more input paramters:\n",
+    "- nperseg: to define the length of each segment\n",
+    "- noverlap: to define the number of points to overlap between segments"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "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,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l+PjoUfoHB8ffyn8WdCMDxe4vLycf+b4P4y/4bm4uJh/5viks83NTUGzpq9Z/y0CBHIBQZPb/cSkoPkJRT+DAAEC/wj8VtCMtff39/Pf1Izvqnl9fZ2/N2Z/f386PT2dPwHtq8dnQfP4+Di/xezh4WF6eXmZtra25r/TOT8//+/ta35D42VPgACBdwFB030lCJquv+0ECBCoCYygGfEyPlFtfCHn+Pcqj/FWt/GJaycnJ9Pd3d309PS0ypjnECBAYG0FBE33tIKm6287AQIEagJ/B8z19fX8trVVHuMLPs/Ozuan7uzsCJpV0DyHAIG1FhA03fMKmq6/7QQIEKgJjC/R/HiML+gcf3+zymO8Fe35+Xl+6sbGxrS3t7fKmOcQIEBgbQUETfe0gqbrbzsBAgQIECBAgMDCBQRN94CCputvOwECBAgQIECAwMIFBE33gIKm6287AQIECBAgQIDAwgUETfeAgqbrbzsBAgQIECBAgMDCBQRN94CCputvOwECBAgQIECAwMIFBE33gIKm6287AQIECBAgQIDAwgUETfeAgqbrbzsBAgQIECBAgMDCBQRN94CCputvOwECBAgQIECAwMIFBE33gIKm6287AQIECBAgQIDAwgUETfeAgqbrbzsBAgQIECBAgMDCBQRN94CCputvOwECBAgQIECAwMIFBE33gIKm6287AQIECBAgQIDAwgUETfeAf7rrbSdAgAABAgQIECBAgEAuIGhyO5MECBAgQIAAAQIECJQFBE35ANYTIECAAAECBAgQIJALCJrcziQBAgQIECBAgAABAmUBQVM+gPUECBAgQIAAAQIECOQCgia3M0mAAAECBAgQIECAQFlA0JQPYD0BAgQIECBAgAABArmAoMntTBIgQIAAAQIECBAgUBYQNOUDWE+AAAECBAgQIECAQC4gaHI7kwQIECBAgAABAgQIlAUETfkA1hMgQIAAAQIECBAgkAsImtzOJAECBAgQIECAAAECZQFBUz6A9QQIECBAgAABAgQI5AKCJrczSYAAAQIECBAgQIBAWUDQlA9gPQECBAgQIECAAAECuYCgye1MEiBAgAABAgQIECBQFhA05QNYT4AAAQIECBAgQIBALiBocjuTBAgQIECAAAECBAiUBQRN+QDWEyBAgAABAgQIECCQCwia3M4kAQIECBAgQIAAAQJlAUFTPoD1BAgQIECAAAECBAjkAoImtzNJgAABAgQIECBAgEBZQNCUD2A9AQIECBAgQIAAAQK5gKDJ7UwSIECAAAECBAgQIFAWEDTlA1hPgAABAgQIECBAgEAuIGhyO5MECBAgQIAAAQIECJQFBE35ANYTIECAAAECBAgQIJALCJrcziQBAgQIECBAgAABAmUBQVM+gPUECBAgQIAAAQIECOQCgia3M0mAAAECBAgQIECAQFlA0JQPYD0BAgQIECBAgAABArmAoMntTBIgQIAAAQIECBAgUBYQNOUDWE+AAAECBAgQIECAQC4gaHI7kwQIECBAgAABAgQIlAUETfkA1hMgQIAAAQIECBAgkAsImtzOJAECBAgQIECAAAECZQFBUz6A9QQIECBAgAABAgQI5AKCJrczSYAAAQIECBAgQIBAWUDQlA9gPQECBAgQIECAAAECuYCgye1MEiBAgAABAgQIECBQFhA05QNYT4AAAQIECBAgQIBALiBocjuTBAgQIECAAAECBAiUBQRN+QDWEyBAgAABAgQIECCQCwia3M4kAQIECBAgQIAAAQJlAUFTPoD1BAgQIECAAAECBAjkAoImtzNJgAABAgQIECBAgEBZQNCUD2A9AQIECBAgQIAAAQK5gKDJ7UwSIECAAAECBAgQIFAWEDTlA1hPgAABAgQIECBAgEAuIGhyO5MECBAgQIAAAQIECJQFBE35ANYTIECAAAECBAgQIJALCJrcziQBAgQIECBAgAABAmUBQVM+gPUECBAgQIAAAQIECOQCgia3M0mAAAECBAgQIECAQFlA0JQPYD0BAgQIECBAgAABArmAoMntTBIgQIAAAQIECBAgUBYQNOUDWE+AAAECBAgQIECAQC4gaHI7kwQIECBAgAABAgQIlAUETfkA1hMgQIAAAQIECBAgkAsImtzOJAECBAgQIECAAAECZQFBUz6A9QQIECBAgAABAgQI5AKCJrczSYAAAQIECBAgQIBAWUDQlA9gPQECBAgQIECAAAECuYCgye1MEiBAgAABAgQIECBQFhA05QNYT4AAAQIECBAgQIBALiBocjuTBAgQIECAAAECBAiUBQRN+QDWEyBAgAABAgQIECCQCwia3M4kAQIECBAgQIAAAQJlAUFTPoD1BAgQIECAAAECBAjkAoImtzNJgAABAgQIECBAgEBZQNCUD2A9AQIECBAgQIAAAQK5gKDJ7UwSIECAAAECBAgQIFAWeAOS1c1WHbGrfgAAAABJRU5ErkJggg==\" width=\"724.3333333333334\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/plain": [
+       "(0.0, 15.0)"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "N, N_specific, bark_axis, time_axis = loudness_zwst_perseg(\n",
+    "    sig, fs, nperseg=8192 * 2, noverlap=4096\n",
+    ")\n",
+    "plt.figure(3)\n",
+    "plt.plot(time_axis, N, color=COLORS[0])\n",
+    "plt.xlabel(\"Time [s]\")\n",
+    "plt.ylabel(\"N_zwst [sone]\")\n",
+    "plt.ylim((0, 15))"
    ]
   },
   {
@@ -2112,14 +3112,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Tutorial generation date: February 25, 2022\n"
+      "Tutorial generation date: March 24, 2022\n"
      ]
     }
    ],
@@ -2127,6 +3127,13 @@
     "from datetime import date\n",
     "print(\"Tutorial generation date:\", date.today().strftime(\"%B %d, %Y\"))"
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
diff --git a/tutorials/tuto_sharpness_din.ipynb b/tutorials/tuto_sharpness_din.ipynb
index 646d4aae..7069cca1 100644
--- a/tutorials/tuto_sharpness_din.ipynb
+++ b/tutorials/tuto_sharpness_din.ipynb
@@ -7,7 +7,7 @@
    },
    "source": [
     "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
-    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Load-signal\" data-toc-modified-id=\"Load-signal-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Load signal</a></span></li><li><span><a href=\"#Compute-sharpness-of-the-whole-signal\" data-toc-modified-id=\"Compute-sharpness-of-the-whole-signal-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Compute sharpness of the whole signal</a></span></li></ul></div>"
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Load-signal\" data-toc-modified-id=\"Load-signal-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Load signal</a></span></li><li><span><a href=\"#Compute-sharpness-of-the-whole-signal\" data-toc-modified-id=\"Compute-sharpness-of-the-whole-signal-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Compute sharpness of the whole signal</a></span></li><li><span><a href=\"#Compute-sharpness-per-signal-segments\" data-toc-modified-id=\"Compute-sharpness-per-signal-segments-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Compute sharpness per signal segments</a></span></li><li><span><a href=\"#Compute-sharpness-from-loudness\" data-toc-modified-id=\"Compute-sharpness-from-loudness-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>Compute sharpness from loudness</a></span></li></ul></div>"
    ]
   },
   {
@@ -40,7 +40,10 @@
     "import matplotlib.pyplot as plt\n",
     "# Import mosqito functions\n",
     "from mosqito.utils import load\n",
+    "from mosqito.sq_metrics import loudness_zwst_perseg\n",
     "from mosqito.sq_metrics import sharpness_din\n",
+    "from mosqito.sq_metrics import sharpness_din_perseg\n",
+    "from mosqito.sq_metrics import sharpness_din_from_loudness\n",
     "\n",
     "# Import MOSQITO color sheme [Optional]\n",
     "from mosqito import COLORS"
@@ -1043,7 +1046,7 @@
    "source": [
     "# Define path to the .wav file\n",
     "# To be replaced by your own path\n",
-    "path = \"../validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 5 (pinknoise 60 dB).wav\"\n",
+    "path = \"../validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 5 (pinknoise 60 dB).wav\"\n",
     "# load signal\n",
     "sig, fs = load(path, wav_calib=2 * 2 **0.5)\n",
     "# plot signal\n",
@@ -1059,7 +1062,7 @@
    "metadata": {},
    "source": [
     "## Compute sharpness of the whole signal\n",
-    "The acoustic sharpness is computed by using the following command line. In addition to the signal (as ndarray) and the sampling frequency, the function takes 2 input arguments: \"is_stationnary\" to specify the nature of the signal and \"method\" to specify the weighting functions to be used."
+    "The acoustic sharpness is computed by using the following command line. In addition to the signal (as ndarray) and the sampling frequency, the function takes 1 input arguments: \"weitghting\" to specify the weighting functions to be used ('din' by default, 'aures', 'bismarck' or 'fastl')."
    ]
   },
   {
@@ -1068,7 +1071,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "sharpness = sharpness_din(True, sig, fs, method=\"din\")"
+    "sharpness = sharpness_din(sig, fs, weighting=\"din\")"
    ]
   },
   {
@@ -1095,6 +1098,2017 @@
     "print(\"Sharpness = {:.1f} acum\".format(sharpness) )"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Compute sharpness per signal segments\n",
+    "To compute the sharpness for successive, possibly overlaping, time segments, you can use the sharpness_din_perseg function. It accepts two more input paramters:\n",
+    "- nperseg: to define the length of each segment\n",
+    "- noverlap: to define the number of points to overlap between segments"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "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,iVBORw0KGgoAAAANSUhEUgAAAzQAAAJnCAYAAABBHxaaAAAgAElEQVR4XuzdB5xV1dX38RWkSVPpKGUQRCWiYiFqDM2SaKQ9isESBZOPJRYSCw9olBKfiKIhGowaIxJj9LFhJKLmNTQJCkJsib6iglRBUEBBQep71tHLewdmWPfOzNrn3Jnf+Xzmg8K6Z9/73Wf23f9Tv7UjWoQFAQQQQAABBBBAAAEEyiTwrWgp0wt5UYUIfItAUyGOrAQBBBBAAAEEEECgigoQaJLteAJNsv60jgACCCCAAAIIIFDgAgSaZDuQQJOsP60jgAACCCCAAAIIFLgAgSbZDiTQJOtP6wgggAACCCCAAAIFLkCgSbYDCTTJ+tM6AggggAACCCCAQIELEGiS7UACTbL+tI4AAggggAACCCBQ4AIEmmQ7kECTrD+tI4AAAggggAACCBS4AIEm2Q4k0CTrT+sIIIAAAggggAACBS5AoEm2Awk0yfrTOgIIIIAAAggggECBCxBoku1AAk2y/rSOAAIIIIAAAgggUOACBJpkO5BAk6w/rSOAAAIIIIAAAggUuACBJtkOJNAk60/rCCCAAAIIIIAAAgUuQKBJtgMJNMn60zoCCCCAAAIIIIBAgQsQaJLtQAJNsv60jgACCCCAAAIIIFDgAgSaZDuQQJOsP60jgAACCCCAAAIIFLgAgSbZDiTQJOtP6wgggAACCCCAAAIFLkCgSbYDCTTJ+tM6AggggAACCCCAQIELEGiS7UACTbL+tI4AAggggAACCCBQ4AIEmmQ7kECTrD+tI4AAAggggAACCBS4AIEm2Q4k0CTrT+sIIIAAAggggAACBS5AoEm2Awk0yfrTOgIIIIAAAggggECBCxBoku1AAk2y/rSOAAIIIIAAAgggUOACBJpkO5BAk6w/rSOAAAIIIIAAAggUuACBJtkOJNAk60/rCCCAAAIIIIAAAgUuQKBJtgMJNMn60zoCCCCAAAIIIIBAgQsQaJLtQAJNsv60jgACCCCAAAIIIFDgAgSaZDuQQJOsP60jgAACCCCAAAIIFLgAgSbZDiTQJOtP6wgggAACCCCAAAIFLkCgSbYDCTTJ+tM6AggggAACCCCAQIELEGiS7UACTbL+tI4AAggggAACCCBQ4AIEmmQ7kECTrD+tI4AAAggggAACCBS4AIEm2Q4k0CTrT+sIIIAAAggggAACBS5AoEm2Awk0yfrTOgIIIIAAAggggECBCxBoku1AAk2y/rSOAAIIIIAAAgggUOACBJpkO5BAk6w/rSOAAAIIIIAAAggUuACBJtkOJNAk60/rCCCAAAIIIIAAAgUuQKBJtgMJNMn60zoCCCCAAAIIIIBAgQsQaJLtQAJNsv60jgACCCCAAAIIIFDgAgSaZDuQQJOsP60jgAACCCCAAAIIFLgAgSbZDiTQJOtP6wgggAACCCCAAAIFLkCgSbYDCTTJ+tM6AggggAACCCCAQIELEGiS7UACTbL+tI4AAggggAACCCBQ4AIEmmQ7kECTrD+tI4AAAggggAACCBS4AIEm2Q4k0CTrT+sIIIAAAggggAACBS5AoEm2Awk0yfrTOgIIIIAAAggggECBCxBoku1AAk2y/rSOAAIIIIAAAgggUOACBJpkO5BAk6w/rSOAAAIIIIAAAggUuACBJtkOJNAk60/rCCCAAAIIIIAAAgUuQKBJtgMJNMn60zoCCCCAAAIIIIBAgQsQaJLtQAJNsv60jgACCCCAAAIIIFDgAgSaZDuQQJOsP60jgAACCCCAAAIIFLgAgSbZDiTQJOtP6wgggAACCCCAAAIFLkCgSbYDCTTJ+tM6AggggAACCCCAQIELEGiS7UACTbL+tI4AAggggAACCCBQ4AIEmmQ7kECTrD+tI4AAAggggAACCBS4AIEm2Q4k0CTrT+sIIIAAAggggAACBS5AoEm2Awk0yfrTOgIIIIAAAggggECBCxBoku1AAk2y/rSOAAIIIIAAAgggUOACBJpkO7DSB5qZM2fKyJEj5e2335Y1a9ZIkyZN5Lvf/a6MGDFCDj300D3qf/jhhzJ48GCZNm2aVK9eXXr16iVjx46VRo0aJdtrtI4AAggggAACCCCQGgECTbJdUekDzaRJk+JAcsIJJ0jTpk1l2bJlcsstt8R//uc//5GWLVuW2APr16+XTp06ScOGDWXUqFGyceNGGTJkiDRv3lxmzZol1apVS7bnaB0BBBBAAAEEEEAgFQIEmmS7odIHmpJ433vvPTn44IPlt7/9bXwEpqTljjvukKFDh8qCBQukdevWcckrr7wSB6Onn35a+vbtm2zP0ToCCCCAAAIIIIBAKgQINMl2Q5UMNJ9++qk0btxYxo0bJ5dffnmJPdCjR4/47/XoTvbSrl076d69uzzwwAPJ9hytI4AAAggggAACCKRCgECTbDdUmUCzbds22b59uyxevFiGDRsm//znP+Wtt96Kr6kpaWnWrJn0798/Dj3ZS+/evWX16tXx0RoWBBBAAAEEEEAAAQQINMluA1Um0Jx44onxtS+6tG/fXvTamj3dFKBmzZrxNTM333xzsR4aOHBgHGbmz59fas+tXbtW1q1bV+zfv/zyS1m0aJEcdNBBUqNGjWR7ndYRQAABBBBAAIEcBbZs2SIrV66UY445RurUqZPjq6pWGYEm2f6uMoFGA4iGDL1z2ZgxY2TVqlVxwMlcH7NrN5Qn0Ogd1PTOaiwIIIAAAggggEBlEZgxY4Z07dq1snycCv0cBJoK5cx7ZVUm0GTLaLApKiqS888/f7dTyjJ15TnlrKQjNBqkTjrpJNHBoFWrVnl3FC9AAAEEEEAAAQSSEFi6dKl069YtPjulQ4cOSbyF1LdJoEm2i6pkoFFyPWyqNwZ44YUXSuwBvfBfb808derUYv+up6vp3onx48fn1XMaaA488EBZuHChtG3bNq/XUowAAggggAACCCQlwBzGlifQ2EaeFVUy0OjpZnq3sgsuuEDuvvvuEn1vv/12uf766+MAknlWzZw5c+S4446TiRMnSr9+/fLqFwaDvLgoRgABBBBAAIGUCDCHsTuCQGMbeVZU+kCjp5XpUZUjjzxS9t13X3n//fdl7NixsmLFCpk7d278bw899JBcdNFFMmXKlPiQqi6ff/55/GBNPYqj18Ns2rQpvkmA3hVNbwqQ74M1GQw8N2PWjQACCCCAAAJeAsxhbFkCjW3kWVHpA43edlkDiwYZDSV6/Yo+Y0aPvrRp0ya2nTBhggwaNCh+5oyeapZZ9KGa+uDN6dOnS/Xq1eWMM86Iw1Bpt3reU0cxGHhuxqwbAQQQQAABBLwEmMPYsgQa28izotIHGk+8fNbNYJCPFrUIIIAAAgggkBYB5jB2TxBobCPPCgKNp27WuhkMAkHTDAIIIIAAAghUqABzGJuTQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVZU+kDz5JNPyqOPPirz5s2T1atXS+vWreXMM8+UYcOGSb169Uq1nT59uvTo0WO3fz/iiCPkjTfeyLtPGAzyJuMFCCCAAAIIIJACAeYwdicQaGwjz4pKH2iOO+64OMT06dNHWrZsGYeRkSNHSseOHeWll16SatWqleibCTR33323HHXUUTtr6tatK506dcq7TxgM8ibjBQgggAACCCCQAgHmMHYnEGhsI8+KSh9o9KhMkyZNihk+8sgjct5558mMGTOka9eueww006ZNk+7du5e7DxgMyk3IChBAAAEEEEAgAQHmMDY6gcY28qyo9IGmJLz33ntPDj74YNFgc8455xBoPLcw1o0AAggggAACBS1AoLG7j0BjG3lWVMlAc99998mll14qr7/+uhx55JF7DDRNmzaVTz75RBo1aiS9e/eW0aNHS+PGjfPuEwaDvMl4AQIIIIAAAgikQIA5jN0JBBrbyLOiygWa5cuXS+fOneXoo4+W559/vlRbDTt6MwE9JU1vHvDKK6/ILbfcEl+PozcYqF27dqmvXbt2raxbt67Yvy9dulS6desmCxculLZt23r2KetGAAEEEEAAAQQqTIBAY1MSaGwjz4oqFWg2bNgQXw+zcuVKmTt3rrRo0SIv27/97W/xUZrx48fLoEGDSn3tiBEj4hsPlLQQaPIipxgBBBBAAAEEEhYg0NgdQKCxjTwrqkyg2bhxo5x++uny1ltvycyZM+O7nOW77NixQ+rXry8XXnih6N3PSls4QpOvLPUIIIAAAgggkFYBAo3dMwQa28izokoEmi1btkjfvn3j2zRPmTJFunTpUibTTKAZOHCgjBs3Lq91MBjkxUUxAggggAACCKREgDmM3REEGtvIs6LSB5rt27fLgAEDZNKkSfLcc89Jz549y+z5zDPPxMHoT3/6k1xwwQV5rYfBIC8uihFAAAEEEEAgJQLMYeyOINDYRp4VlT7QXHbZZXLvvffK0KFD44drZi/t2rWLn1Hz0EMPyUUXXRQfvdEL93U5//zz5cADD4wfqpm5KcBtt90m7du3lzlz5kjNmjXz6hcGg7y4KEYAAQQQQACBlAgwh7E7gkBjG3lWVPpAU1RUJIsXLy7R8MEHHxQ9fWzChAnxRf7ZD9HUO5rpc2r0tXr9TcuWLaVfv34yfPhw2WefffLuEwaDvMl4AQIIIIAAAgikQIA5jN0JBBrbyLOi0gcaT7x81s1gkI8WtQgggAACCCCQFgHmMHZPEGhsI88KAo2nbta6GQwCQdMMAggggAACCFSoAHMYm5NAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQKAwBLbt2CHbtm+X+M9vfrZHf+rPjugj6N99K/pzv1q1pEa1aoXxoXiXlV6AQGN3MYHGNvKsINB46hJoKlx307Zt8vnmzbJhy1ZpXLuWNKhZs8LbYIUIlCbwWbTtrd+8RbZHU894AhrNQPeq9i1pWbeuVPuWTkNZEChZ4JNNm2TS4iXy2iefxtuOtejW1KR2bWleZ+/op44023vv+P8bRz/71Kwh0eTJWkWZ/n3NV1/JV9E42zxqr6Q2dkTv/b3PPpd10e/CUY0bEbrKpFx4LyLQ2H1GoLGNPCsINJ66BJoy6X4affGv+HKjrNq4UT6OflZt3CSffrUpCjJbZHO0ZzOz6L7LjvvtJ8c1ayKdGjYM+sW6cetW2bt69TJ9Pl4U7YWO+lHDae3IcC+niVlFOG+J3ucH0eTtnXXr5P+uXScffflliavdr1ZNObFZMzmhebNosknIrgj7yrKODVu2yAtLl8mMFSvjoy8VseiRGw037RrUl29HY2CHffeR2nvtFa/6y2hsenvNWnnj0zWy4PPPpV6NGnEoahGFIg0p+t9Noz+zj/7odv7Gp5/KyytXyfzPPovX0yoK6d1aNJdjmjSWmtG69b2/HoWxF5ctl6VffBHXaLA6tWVLOTHa7q2jSeuioPTh+g3SKNoRpev2CmQV4cs6dhcg0NhbBYHGNvKsINB46hJoctLdHE1sdY/fO2vXytvRpHF1FGjyXepGE+PO0d7CpvHey5rxkRv9sm0SfXFX5IRZg8yf3/8gniwcEE0Qjo6+7PULX/eaZpb10QRm6YYNon9q4KofTSiq8rJswxcybcUKWRD1sYaYjdGPTqB0+frUmprSsFbt6EePuP1/K90TrEub+vWlc6OG0ZGQcKffrI/2Pk+OJqGvfLxq53vNpQ/1KM0RDfeTg/fdNy7PnEqkk70jo+2zqm8LuRimvUa3Sw22b0fj1cat2+IdG3tHE379s2bUz19tj7bx6O91rPg8GgNmR9uQbvO61Ir+vecB+8dH9HRc0u0l+0/N9vp3ut3ojpwVUTsro507Kzd+KZ9u+io+Ja2kpXr0mnYNGsSv1UBiHQHS3zv9fdOjPhp4/hN9Fg1CJS06tuqRmP8bhfpPovdQ0pIJNu2jgKW/1fo5tA092vPuus/inQEro51TmUWPrndu1Chab2NpXa9yhRv9PtPvscXRd4D6HhiZ6PdSoQc4Ao09MhFobCPPCgKNp27WutM+GKyNvngWfL5eFkZ79BauXy+boi/kttFA3D76kjxonwbx3sCKHpB1z+XTixbL3FWrZWsJey5r7VUt+iLYO/5SaLz316dZNKihYaVGNIGoHn/B6oSztL3myq+T5X5FRXJ09IVc3vevR4zufefdYl/MmS4uqlcvfl9Losm7noqRWepEk4H/KmojxzdrWu72S9pUdeKifacTjSaR0X5RkCvtc+oX7dqvNsvazV/Jmqh+bfQ+dQJ0aLR3t3X0/ivylCl9X/+J9hJP/eijOKyWd9F+7NGihXw32hPseWRMjaZ+tEL+T7QXWsNXZmkQTfo67revHBr96J7ueBL6zcRNTf+5cmUccve0B14nhme3ayvHRJO4XLZFPYqlM8OSArlOqhdFe7vnrF4dT15/0KplPEGt6ou65GKbq5OuT48KfxGd4rpq00Z569O18u81a6IjxiVP7Etbr0Zx3XZ/2LpVmU+T3Rq9Dw0IusPnkyjs6Lj3TjRxLu29aGj6drS96nb8dSjaKHrK5J4WDRcnREcaddx6KTqi9EH0fbDrokdXTm15QHyNz/NLl8aT9/Is+ru1b/T7Xa96jThc1atRPf5Tx/v634z3WlM/GtsqcudUed7zrq/V39V3oyA5b/Un8mY0DmSPHVqrv/ttox0zenRMQ2+tKADXjL7f9HtMj7I1ytohVpHvqyLXlfY5TEV+1rKui0BTVrmKeV2lDzRPPvmkPProozJv3jxZHX35t27dWs4880wZNmyY1IsmcXta9Bd48ODBMm3aNKkeDUi9evWSsWPHSqNoz1K+S+jBQL+Iv4j2uOlePT3fX/eWRfvN4j1nuifu4+gL7uPoS1En6SuivX86KdvTol8u+9epG1+3okcj9EcnUHWjLx8drPV0h1wnEvreXo0G/qcWfigbsvYK6qRVT5/oGO3dLooG/1zOE9d1LYtOf9BgoxNn/cLWz73rol8a/Q9sG0/cy7Lo3tjx7763c0+rnmKhR2D01I6SwtiubWgoPLd9uziclXXRL81lX3wZB079zLr3Vn++2vb/T8PTo/np/aQAACAASURBVFNt69eLvzx1UqKTmJVx3cZ4MlTaopMItdefVtGkRvvWOoWkpHVpSNU90jNXflzsSJtuI12aNpF9o/en20rt6ntFe6v3ivpqS7yN6nvTiZm+Pt5OdXuNNlY9lz/7iJ2+VieGJ0d7uSvy1K6vt8nV8syiJTsDqU6eukan3BzftKkcULeOuX3rtV26HerP12Ex2tsefRINirq3PtNLh0dHcAa0axdP4nTREKWn8OiRrPh3Mpo4r9bTLKOJq762TdSfuvf9wKhPNbS+FU2YZkc7AfR0zMyikyQNNSdFLmXpt7JukxX5Og2DH0UOC6MdKwuibVzHKA0TejQv86Pbpe7xVgs10TFCT2N6P5pMvh/9/utecT2dSoODOltjku64eXPNp9Fpheuj3+2t8Y4cPZqyKfpvHSc1yJT2+63mOqnXvs0+6qgmeiRGT6esE23nGixOb9VKmkWT2YpedLtdFW0nGmz0CLcaHhb9Dh8RHdEsaZKs71W3G/3RkKPjv479uo19NwoyLaPf/exFt8np0dFVXb8G+VNa7i8H77NPMddFUV9NXlJ6sNFx/ZBoTD80+tEjOLqt66lrOvHPHLnKxUXHBN1ppL/3Oo7otqBH4PU7SXd86ZiyPBofdWzUn4+i/941WOjvho5vuv3odqRH2Us78qs7CnQb0HFexwJtV4NIZtFT6GL3aMeaHoXa9QiX1uuYkMtJhi2ibSMz/up3VfWAR6Nzsdea0HOYXN9XmuoINMn2RqUPNMcdd1wcYvr06SMto3N933jjDRk5cqR07NhRXnrpJalWysCxPhqkO3XqJA2jazNGjRolG6OBf8iQIdK8eXOZNWtWqa8rrTu9BwOdyE+P9izr5E8nQ/rnroN5Lpta5rxs3Quu1w7oF0MuA7LugawTTYp1kqqDsX5xVI9mdHWiPVA6wdABW/dO6R6pv0ZHZfRLQBd9nZ6CoUcwSrsINZf3nV2jkx+9cFuD2t+ii3D1qIku+oV4bJMm8RdZ/MX4zd4/fa86EdAvMP1T94R+GU1s9AtKf3RP6JTlH8UOWnv+Qe3i9eiiEwT9YtafrTu2R1+W9eLzw3VPp/o/8sGCeMKli54WouekHxLtNc0Ejl0/m06o1kVHUPRUFf0M+qcegdG98TpZy5yqla/JrvXqvm/WZKyk9ekXcqOoRsPr/tGEXr/8W0R/7noUSN10EjozOkqhE5XsCaD2e4/995cu35yHn+/71gmb7iVW/39H4TGzLWo/aKjUPcXlDTZ6tOrhDz6IJyWZRU+H6RsdWdMAURGLTgz1VMXMtQd6itJh0YRbJ2AaSnP5HSvpfWgQ1UCb2S709/esA4uibbBePCnXbVB/NBhpmNY93dYkX9vRPtVJr9pqMPZatH/1FCntX+3n7HCeS5v6O12anQb7PlEfdogm4NmL/n7rRHRuFGDfirapfH6nNEDp9Xqd9LTCaL16bUlmyYQuDTMhT4/MxSlEjY5Teqqd3qtN+0QPuusOCA0cJW1z2g/zo985Hdd0R4bu3Ir/jELk+i2Zm2/4vnMdRzQcxaf6fbPzQd+9vgd9L7tuW/p5Mr9D2TsUMu9Sx0s9BfnY6Gf/6HtAvx907NadUB9GY6Qevd8cnZK4Ofqd1VMTS9redZuOx97ITUObhmYdLzRMafv6p/7o32mIi3cQffN3FXmUfVd57zmMb0+HWTuBJoxzaa1U+kCjR2WafDP5zCA88sgjct5558mMGTOka9euJdrccccdMnToUFmwYEEciHR55ZVX5IQTTpCnn35a+vbtm1fPeQ8GOin75bx/5fyeMheVNosmbBo42kQT8a8n+sUvaNYBWU9F04tL41Mdoh/do17SUZCcG/+mUCf957VvH+8x81p0YjZn1ap4z7uGg/IsDaM9jZccekgcWnJdtH2d6Gv72QFTv7Q04OnEU/cMa//pUYpc9lhqMNK9vhou9o9Chv7ol5/ucf0w+uLUL9BFG9bLluhLU/dgZl8Q/PWRta+vMdIvPz3qo3vD9UiTnkevR3KsRb88Naxu3b4jngzuepqVfjad9OnRDT2dLZcJtNWm/rvusZ8SncKmR4AyoUktTox2MuiNIXQyoZPvXNvTyfQ/oyNJExct2jmx0FMHz4wCge79r+hFrV+MJu7PRXuzS9rrn/07qf2m593rNqOTIf0dzJwupHuLdUJ9XHTkSE8p0knSUx8uik95s5adp3HqReJRGzrpymw/2pca6t6KTqnS0wV1z7Qu+j50D76OEQdFk/iK+H3NBBnds6+fLXvRz6dHUnV80G1Nj4SojYYEDX8anncNgXoEUE+PbR29z3nRmJ+9HeveeN1edZKq45ZOVHfdZvX3SY8kZE8OdVvSwFg3OhVK/1t3gmgo9Jw0Wv1Xlf5dx07tL72e7bNo545u/7qtx39GR5X0RjG68+6rrBvFqI/2ofZny2h83PWaNV2fjo9LohCVy5F1y1vHOt1W9XRU3UGh40eu44+uW3eY6fVFegaAnrqX+Z2z2i3p3/XIzjWHdyrLS3N6jfccJqc3kfIiAk2yHVTpA01JvO+9954cfPDBosHmnHPOKbEHevToEf+9nm6WvbSLThXp3r27PPDAA3n1nPdgoIP/za+9Ee/R0etNdE+t/uhEVycDurcss+csc6pEeb6YdSDWL5X4tIz41Iwt8Z+ZvZS6921L1KhOHnSirXuzMpMI3YPZq01r6b5/i2CTAw1mf4+ui3jtk0/iL8dc98rqF5YercqcMlbWi7r19AS9ZauGBp1Y5bpk9gjqqSB6VEcnZ/rf1mlFX99SeEfee4p1spAJrXrK0yfR+9bTUvT0DSts6Z5OPR3shOhom+5V9Fp0T7Be4zIrCiO7TkrUS38HdLvXgPP1f399emR86tc3pxXpdjsnOm0rc0cn9ewTaJvUyfikKOCqtYYDnRBpYMhcm1OSm/alBl79PdJ6vcZg10UnRo9Hp3GWtOfY6gsdE3RvdC6/F3o92plt2+48ZS573XokSk+Z050kOvnP3k71919Pf9Qjpi9//HGxIKNjlW43GiTVwtq+tf8ye7y1XkNZZjzTbV+Pvjy7eOker3XRoHZsdBqk7k3X98tSeAL6e6EhQHe26Tahv0P6e2+FCt3OdVvVHUD6Oj0dNHMDDx3zv76WR6/h+fqaHt129fdV77Spf+qRFd0BeEi0w6ak38WySGr7S6P3pGcE6Binp+Dqji4NcbpjQ0+/1Z/SjkhqqLri2x3L0nROr/Gew+T0JlJeRKBJtoOqZKC577775NJLL5XXX39djjzyyBJ7oFl0PnH//v1l3Lhxxf69d+/e8bU4erQmn6WqDwb6hZCZKOv1COU9TSgf+11r9UtQvyAyX1D63nbeaSjak6t7/TXE6F5ZnSCXJ/iV1LZ++epeZt3zrpNbvRi24TenF+jEW6+tiC+CjX6yT2kpz2cu72vVTL9Y9ctWj5Tol6ru9a7+ra/3nuvea917H/KiXQ2JGmz0KEt59rbqns0fH9S+UkxqdUdC5ohH5miDnpaiEyG9a1bmVugaevQoRkl7hDVcHB5dg6HXsm2IrnFa/M3pjhpEMoFH1607JfQonE7E9NkqL0XXWmROr9TtTU9rzAQb/V1bHm07uwYmbeu06NofDRYVve1oWy9H24ZerK2n59TVyWn0O61/Zk4LtSa+5f294fUIVKRA5iYV+vucOZ1UT1PW/947+j3XMdhrqepzmFxcCTS5KPnVVLlAs3z5cuncubMcffTR8vzzz5cqWzPa26zXzNx8883FagYOHBiHmfnz55f62rXRXvh131wjkilaGt0Nplu3brJw4UJpG+3dZEEAgYoR0C9zveuT7tHUo0rxDQaybjRQ2u1o9XqIUw44IOiRwor5xBW3Fj2d56Mo2GhQ1cmS7uXVIyslTfQ1IPw9upW1hshMgNRrpDQU5XPUUfeA606NntG1VR5BpuJ0WBMCCGQECDT2tkCgsY08K6pUoNkQnTerp4utjK5pmDt3rrSIbgNb2lKeQDNixIj4xgMlLQQaz82ZdSOwu4Cebpi5ta3uqdcjb3pRbUUeeatK7nqU538XLCx2EwX9/EXRqV9do+uZ9FoCPRqrpynGR/Sier3dup5epz8HRNc3ZB4CWZXc+KwIFLIAgcbuPQKNbeRZUWUCjd6l7PTTT5e33npLZs6cGd/lbE9LeU454wiN5ybLuhFAIGkBPZrzr+g0s6nRTQ70uoVu+zcv8y3Rk/4stI8AArYAgcY2ItDYRp4VVSLQbIlOidC7kultmqdMmSJdunQxTfVIjt7SeerUqcVq20d35dI7o40fP95cR3YBg0FeXBQjgAACCCCAQEoEmMPYHUGgsY08Kyp9oNkenfc9YMAAmTRpkjz33HPSs2fPnDxvv/12uf766+NrXvT5NbrMmTNH9Lk2EydOlH79+uW0nkwRg0FeXBQjgAACCCCAQEoEmMPYHUGgsY08Kyp9oLnsssvk3nvvjZ8pow/XzF70Fsz6jJqHHnpILrroovjojV64r8vn0XNX9MGajRs3jq+H2RSdE643CdB6vSlAaQ/kLK2zGAw8N2PWjQACCCCAAAJeAsxhbFkCjW3kWVHpA01RUZEsXry4RMMHH3xQ9K5lEyZMkEGDBsXPnNFTzTKLPlRz8ODBMn36dKkeXUh8xhlnyNixY3d7UGcuHcRgkIsSNQgggAACCCCQNgHmMHaPEGhsI8+KSh9oPPHyWTeDQT5a1CKAAAIIIIBAWgSYw9g9QaCxjTwrCDSeulnrZjAIBE0zCCCAAAIIIFChAsxhbE4CjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08KxINND179izTZ7vvvvvkoIMOKtNrk3oRg0FS8rSLAAIIIIAAAuURYA5j6xFobCPPikQDTbVq1aRz587SoEGDnD7jjh07ZObMmTJ37lw56qijcnpNWooYDNLSE7wPBBBAAAEEEMhHgDmMrUWgsY08KxIPNLNnz5YuXbrk9Bm3bt0qNWvWlHnz5hFochKjCAEEEEAAAQQQKJ8Agcb2I9DYRp4ViQaayy67TIYOHSpt2rTJ6TPqEZqf/exncsMNN0jLli1zek1aihgM0tITvA8EEEAAAQQQyEeAOYytRaCxjTwrEg00nh8sbetmMEhbj/B+EEAAAQQQQCAXAeYwthKBxjbyrCDQeOpmrZvBIBA0zSCAAAIIIIBAhQowh7E5CTS2kWdFqgLNmjVrZPLkybJ06VLZtGlTsc8dbSgycuRITwvXdTMYuPKycgQQQAABBBBwEmAOY8MSaGwjz4rUBJoXXnhB+vfvL1988YVoeNE7oGUv+nebN2/2tHBdN4OBKy8rRwABBBBAAAEnAeYwNiyBxjbyrEhNoOnYsaO0aNFCfv/738fPmNk10HgihFg3g0EIZdpAAAEEEEAAgYoWYA5jixJobCPPitQEmnr16slf//pXOfnkkz0/b2LrZjBIjJ6GEUAAAQQQQKAcAsxhbDwCjW3kWZGaQKNB5uyzz5aLL77Y8/Mmtm4Gg8ToaRgBBBBAAAEEyiHAHMbGI9DYRp4VqQk08+fPj6+hGT58uJxyyinSoEEDz88dfN0MBsHJaRABBBBAAAEEKkCAOYyNSKCxjTwrUhNoNm7cKJdeeqk8/PDDJX5evSnA1q1bPS1c181g4MrLyhFAAAEEEEDASYA5jA1LoLGNPCtSE2jOPfdcmThxovTp00cOOeQQqVmz5m6f+4YbbvC0cF03g4ErLytHAAEEEEAAAScB5jA2LIHGNvKsSE2gqV+/vtxyyy1yxRVXeH7exNbNYJAYPQ0jgAACCCCAQDkEmMPYeAQa28izIjWBpmXLlvLAAw/I97//fc/Pm9i6GQwSo6dhBBBAAAEEECiHAHMYG49AYxt5VqQm0OjRmddee02eeOIJz8+b2LoZDBKjp2EEEEAAAQQQKIcAcxgbj0BjG3lWpCbQjBgxQiZMmCB66pnewnm//fYr9rn1pgA33nijp4XruhkMXHlZOQIIIIAAAgg4CTCHsWEJNLaRZ0VqAk21atX2+Dk10Gzbts3TwnXdDAauvKwcAQQQQAABBJwEmMPYsAQa28izIjWBxvNDpmHdDAZp6AXeAwIIIIAAAgjkK8AcxhYj0NhGnhUEGk/drHUzGASCphkEEEAAAQQQqFAB5jA2J4HGNvKsSE2geemll8zP2bVrV7MmrQUMBmntGd4XAggggAACCOxJgDmMvX0QaGwjz4rUBBq9hkavk9nTwjU0npsC60YAAQQQQAABBHYXINDYWwWBxjbyrEhNoJk1a9Zun3PNmjXy3HPPyYsvvih33313QT+jhsHAczNm3QgggAACCCDgJcAcxpYl0NhGnhWpCTR7+pBDhgyRtWvXyv333+9p4bpuBgNXXlaOAAIIIIAAAk4CzGFsWAKNbeRZURCBZsqUKdK/f3/RIzaFujAYFGrP8b4RQAABBBCo2gLMYez+J9DYRp4VBRFobr31Vvntb38rK1as8LRwXTeDgSsvK0cAAQQQQAABJwHmMDYsgcY28qxITaAZNWrUbp9z8+bN8s4778izzz4rF198sYwbN87TwnXdDAauvKwcAQQQQAABBJwEmMPYsAQa28izIjWBRu9ytutSq1Ytad26tfzoRz+S66+/XmrXru1p4bpuBgNXXlaOAAIIIIAAAk4CzGFsWAKNbeRZkZpA4/kh07BuBoM09ALvAQEEEEAAAQTyFWAOY4sRaGwjzwoCjadu1roZDAJB0wwCCCCAAAIIVKgAcxibk0BjG3lWpCbQjB8/XpYuXSrDhw/f7fOOHDlSioqK5MILL/S0cF03g4ErLytHAAEEEEAAAScB5jA2LIHGNvKsSE2gOfzww+WSSy6Ryy+/fLfPe88998h9990nb7zxhqeF67oZDFx5WTkCCCCAAAIIOAkwh7FhCTS2kWdFagJN3bp147uZ9ejRY7fPO23aNOndu7esX7/e08J13QwGrrysHAEEEEAAAQScBJjD2LAEGtvIsyI1gaZhw4by+9//XgYMGLDb53300Uflsssuk3Xr1nlauK6bwcCVl5UjgAACCCCAgJMAcxgblkBjG3lWpCbQnHHGGfLxxx/Lyy+/LDVq1Nj5mbds2SLf/e53pUmTJjJ58mRPC9d1Mxi48rJyBBBAAAEEEHASYA5jwxJobCPPitQEmn/961/yve99T1q0aCE//vGPZf/995fly5fLX/7yF1mxYoXMnDlTjjrqKE8L13UzGLjysnIEEEAAAQQQcBJgDmPDEmhsI8+K1AQa/ZCzZ8+W6667Tl555RXZvn276MM29ejMmDFjpEuXLp4O7utmMHAnpgEEEEAAAQQQcBBgDmOjEmhsI8+KVAWazAfduHGjrF27Vvbbbz/Ze++9PT9/sHUzGASjpiEEEEAAAQQQqEAB5jA2JoHGNvKsSGWg8fzASa2bwSApedpFAAEEEEAAgfIIMIex9Qg0tpFnRaoCjd4UQO9o9t5778mmTZt2+9z68M1CXRgMCrXneN8IIIAAAghUbQHmMHb/E2hsI8+K1ASad955J75eplmzZvL++++LPmhTTztbsmSJtGzZUtq3by9Tp071tHBdN4OBKy8rRwABBBBAAAEnAeYwNiyBxjbyrEhNoPnhD38o++yzj/z5z3+Ob9s8b968+K5mGmL0rmf69z179vS0cF03g4ErLytHAAEEEEAAAScB5jA2LIHGNvKsSE2gad68uegpZT/4wQ+kevXqMmfOHDn22GPjz37PPffIhAkT4r/Ld1m2bJmMHj1aXn31VXnzzTdl8+bNsmPHDnM1ixYtkrZt2+5Wp6GrLA/4ZDAwySlAAAEEEEAAgRQKMIexO4VAYxt5VqQm0DRo0ED+9re/Sbdu3aRx48ZxuOndu3f82fUoTa9eveSLL77I22L69OlyzjnnxOFozZo1MmvWrLwCzS9/+UvRo0eZRcPWMccck/f7YDDIm4wXIIAAAggggEAKBJjD2J1AoLGNPCtSE2j09LJrr71Wzj333PjUMg04EydOjD/7hRdeKC+//LIsWLAgb4vM82z0hSNGjJCRI0fmFWgefPBBGThwYN7t7voCBoNyE7ICBBBAAAEEEEhAgDmMjU6gsY08K1ITaIYPHy4rVqyQP/zhD/KPf/wjPiqi19LstddesmHDBrnrrrvk8ssvL5cFgaZcfLwYAQQQQAABBKqgAIHG7nQCjW3kWZGaQLPrh3z99dflqaeeki+//DK+rubUU08tt0NZAo2e/qZ3W6tfv378HvR6nJKurbHeHIOBJcS/I4AAAggggEAaBZjD2L1CoLGNPCtSG2g8PnQ+gUaPFv3qV7+KQ0zDhg3jGwr8z//8j0QbbPzfTZs2LfUtagDa9cYBS5cuja8PWrhwYZkCkYcH60QAAQQQQAABBCwBAo0lJDo//JZdRYWXAIEmD9k33ngjviHADTfcEF+LU9qSCU4l/TuBJg9wShFAAAEEEEAgcQECjd0FBBrbyLMi0UDTsWNHeeyxx6RTp045fUa9wP+www6LT0U79NBDc3pNdlE+R2hKW7m+Zz3lbPLkyaW2zxGavLuGFyCAAAIIIIBASgUINHbHEGhsI8+KRANNtWrVij1vxvqg27ZtK/bQTat+13+vqEBz4IEHyrPPPptX8wwGeXFRjAACCCCAAAIpEWAOY3cEgcY28qxIPNCU5ZTDuXPnit7mOd+lvIHmtddeky5dushNN90U/+SzMBjko0UtAggggAACCKRFgDmM3RMEGtvIsyLRQLOn61D29KEvueQSad68ec4uTz75ZFz7+OOPyxNPPBH/6FJUVBRfEzNjxgw56aST4od5XnDBBfG/XXPNNfGfxx9/fHxTgLfeekt+/etfS+3atUXvwNaoUaOc29dCBoO8uChGAAEEEEAAgZQIMIexO4JAYxt5ViQaaDw/WPa6SzsKpA/snDBhgkyfPl169Ogh2Q/R1HDz+9//Pn6Ypz4Hp1mzZvHto0eNGiX7779/3m+dwSBvMl6AAAIIIIAAAikQYA5jdwKBxjbyrKgSgcYTMNd1MxjkKkUdAggggAACCKRJgDmM3RsEGtvIs4JA46mbtW4Gg0DQNIMAAggggAACFSrAHMbmJNDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWZGqQDN16tT4WTFLliyRTZs2FfvceuvlKVOmeFq4rpvBwJWXlSOAAAIIIICAkwBzGBuWQGMbeVakJtCMGzdOrrrqKmnatKl06NBBatWqtdvnfvHFFz0tXNfNYODKy8oRQAABBBBAwEmAOYwNS6CxjTwrUhNo2rdvL127dpX7779f9tprL8/PnMi6GQwSYadRBBBAAAEEECinAHMYG5BAYxt5VqQm0NSrV08mTZokPXv29Py8ia2bwSAxehpGAAEEEEAAgXIIMIex8Qg0tpFnRWoCzamnniq9evWSK6+80vPzJrZuBoPE6GkYAQQQQAABBMohwBzGxiPQ2EaeFakJNB988IGcddZZMmzYMPnBD34g++yzj+fnDr5uBoPg5DSIAAIIIIAAAhUgwBzGRiTQ2EaeFakJNNWqVYs/p97NrKRF/37r1q2eFq7rZjBw5WXlCCCAAAIIIOAkwBzGhiXQ2EaeFakJNCNGjCg1zGQAhg8f7mnhum4GA1deVo4AAggggAACTgLMYWxYAo1t5FmRmkDj+SHTsG4GgzT0Au8BAQQQQAABBPIVYA5jixFobCPPCgKNp27WuhkMAkHTDAIIIIAAAghUqABzGJuTQGMbeVYkGmguuugiufHGG6Vt27ai/20t48ePt0pS++8MBqntGt4YAggggAACCOxBgDmMvXkQaGwjz4pEA02PHj3knnvukUMOOUT0v61l2rRpVklq/53BILVdwxtDAAEEEEAAAQJNubYBAk25+Mr94kQDTbnffQGtgEBTQJ3FW0UAAQQQQACBnQLMYeyNgUBjG3lWEGg8dbPWzWAQCJpmEEAAAQQQQKBCBZjD2JwEGtvIsyLRQPPQQw/l9dkuuOCCvOrTVMxgkKbe4L0ggAACCCCAQK4CzGFsKQKNbeRZkWigyTxMM/MBMw/V3LFjx87PnP2gzW3btnlauK6bwcCVl5UjgAACCCCAgJMAcxgblkBjG3lWJBposj/Y22+/LX369JHLLrtMzj77bGnWrJl8/PHH8thjj8l9990nzzzzjHTs2NHTwnXdDAauvKwcAQQQQAABBJwEmMPYsAQa28izIjWBpnv37vLDH/5Qrrvuut0+75gxY+S5554T7nLmuSmwbgQQQAABBBBAYHcBAo29VRBobCPPitQEmjp16sRHYU455ZTdPu+LL74offv2lS+++MLTwnXdDAauvKwcAQQQQAABBJwEmMPYsAQa28izIjWBIl8JgwAAIABJREFUpnXr1tKrVy+5++67d/u8ehra5MmTZcmSJZ4WrutmMHDlZeUIIIAAAggg4CTAHMaGJdDYRp4VqQk0t99+uwwZMiQ+EnPmmWdK06ZNZdWqVfLkk0/KpEmTRE87u/rqqz0tXNfNYODKy8oRQAABBBBAwEmAOYwNS6CxjTwrUhNo9EPqxf8333yzLF++fOdnbtmypfzyl7+Uiy++2NPBfd0MBu7ENIAAAggggAACDgLMYWxUAo1t5FmRqkCjH1Rv2bx06VJZsWKFtGjRQlq1aiXZt272xPBcN4OBpy7rRgABBBBAAAEvAeYwtiyBxjbyrEhdoMnlw+rzaGrWrClz586Vo446KpeXJF7DYJB4F/AGEEAAAQQQQKAMAsxhbDQCjW3kWVGwgaZGjRoyb948Ao3n1sG6EUAAAQQQQKDKCxBo7E2AQGMbeVYQaDx1s9bNYBAImmYQQAABBBBAoEIFmMPYnAQa28izgkDjqUugCaRLMwgggAACCCDgJUCgsWUJNLaRZwWBxlOXQBNIl2YQQAABBBBAwEuAQGPLEmhsI88KAo2nLoEmkC7NIIAAAggggICXAIHGliXQ2EaeFQQaT10CTSBdmkEAAQQQQAABLwECjS1LoLGNPCsINJ66BJpAujSDAAIIIIAAAl4CBBpblkBjG3lWpDrQrF69Wvbdd1/RWzTvuixevFj233//Ev/NE6ys62YwKKscr0MAAQQQQACBJAWYw9j6BBrbyLMi0UCjz5GZM2eOXH755cU+45/+9Ce59tprZc2aNVK7dm258sorZfTo0Z4O7utmMHAnpgEEEEAAAQQQcBBgDmOjEmhsI8+KRAPNj370I/nss8/khRde2PkZZ8+eLSeeeKI0b95c9N/ffffd+N/vueceufjiiz0tXNfNYODKy8oRQAABBBBAwEmAOYwNS6CxjTwrEg007dq1kyFDhsgll1yy8zMOGjRIHnnkEXnnnXdE/12X8847TxYsWCAadgp1YTAo1J7jfSOAAAIIIFC1BZjD2P1PoLGNPCsSDTT16tWTSZMmSc+ePXd+Rr0upkOHDjJ9+vSdf6c1P/7xj+OjOYW6MBgUas/xvhFAAAEEEKjaAsxh7P4n0NhGnhWJBprGjRvLn//8ZznttNPiz6i/MHpUZujQofLrX/965+eeOXOmnHrqqbJx40ZPC9d1Mxi48rJyBBBAAAEEEHASYA5jwxJobCPPikQDjV4rc8QRR8jdd98df8Y777xTrr76apkyZYp079595+d++OGH5Ze//KUsWrTI08J13QwGrrysHAEEEEAAAQScBJjD2LAEGtvIsyLRQPPUU09J//7944v/mzZtKuPHj5eioiJ58803pVq1ajs/t15Ds2HDBnnmmWc8LVzXzWDgysvKEUAAAQQQQMBJgDmMDUugsY08KxINNPrBfvvb38pvfvOb+BbNXbp0ie9mdvDBB+/8zCtXrpTDDjssPgWNu5x5bgqsGwEEEEAAAQQQ2F2AQGNvFQQa28izIvFA4/nh0rRuBoM09QbvBQEEEEAAAQRyFWAOY0sRaGwjzwoCjadu1roZDAJB0wwCCCCAAAIIVKgAcxibk0BjG3lWEGg8dQk0gXRpBgEEEEAAAQS8BAg0tiyBxjbyrCDQeOoSaALp0gwCCCCAAAIIeAkQaGxZAo1t5FlBoPHUJdAE0qUZBBBAAAEEEPASINDYsgQa28izgkDjqUugCaRLMwgggAACCCDgJUCgsWUJNLaRZwWBxlOXQBNIl2YQQAABBBBAwEuAQGPLEmhsI88KAo2nLoEmkC7NIIAAAggggICXAIHGliXQ2EaeFQQaT10CTSBdmkEAAQQQQAABLwECjS1LoLGNPCsINJ66BJpAujSDAAIIIIAAAl4CBBpblkBjG3lWEGg8dQk0gXRpBgEEEEAAAQS8BAg0tiyBxjbyrCDQeOoSaALp0gwCCCCAAAIIeAkQaGxZAo1t5FlR6QPNsmXLZPTo0fLqq6/Km2++KZs3b5YdO3bkZLp69Wq5+uqr5dlnn5WtW7dKz5495c4775SioqKcXp9dxGCQNxkvQAABBBBAAIEUCDCHsTuBQGMbeVZU+kAzffp0Oeecc+TYY4+VNWvWyKxZs3IKNNu3b5fjjjtONNTcdtttUrt2bbnpppvks88+k3//+99St27dvPqFwSAvLooRQAABBBBAICUCzGHsjiDQ2EaeFZU+0GgwqVatWmw4YsQIGTlyZE6B5qmnnpKzzjpLXn75ZTn++OPj1y9ZskTatWsnY8aMkZ///Od59QuDQV5cFCOAAAIIIIBASgSYw9gdQaCxjTwrKn2gycbLJ9AMGjRI9OiO/hJnLyeddFL8v1OmTMmrXxgM8uKiGAEEEEAAAQRSIsAcxu4IAo1t5FlBoClF9zvf+Y40adIkvn4me7nqqqvkiSeekBUrVuTVLwwGeXFRjAACCCCAAAIpEWAOY3cEgcY28qwg0JSi26FDB+nSpYs8/PDDxSr0KM8tt9wiX331Van9snbtWlm3bl2xf1+6dKl069ZNFi5cKG3btvXsU9aNAAIIIIAAAghUmACBxqYk0NhGnhUEGodAkzm1raRVE2g8N2fWjQACCCCAAAIVLUCgsUUJNLaRZwWBphTd8pxyxhEaz02WdSOAAAIIIIBASAECja1NoLGNPCsINKXoDhw4UF566aX4FLHs5eSTTxa9c9rUqVPz6hcGg7y4KEYAAQQQQACBlAgwh7E7gkBjG3lWEGhK0X3yySelf//+Mnv2bNGjNbrodTB62+Zbb71VfvGLX+TVLwwGeXFRjAACCCCAAAIpEWAOY3cEgcY28qyoEoFGw4kujz/+eHyHMv3RpaioSI455hiZMWOG6O2Yx48fLxdccEH8b9u2bYtvCqCnj2UerDl8+PD44Zz6YM169erl1S8MBnlxUYwAAggggAACKRFgDmN3BIHGNvKsqBKBJtrISjS88MILZcKECfHzZnr06CEPPvig6KlmmWXVqlXxkZjJkyfL1q1b45q77rqrTHcpYzDw3IxZNwIIIIAAAgh4CTCHsWUJNLaRZ0WVCDSegLmum8EgVynqEEAAAQQQQCBNAsxh7N4g0NhGnhUEGk/drHUzGASCphkEEEAAAQQQqFAB5jA2J4HGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVYQaDx1CTSBdGkGAQQQQAABBLwECDS2LIHGNvKsINB46hJoAunSDAIIIIAAAgh4CRBobFkCjW3kWUGg8dQl0ATSpRkEEEAAAQQQ8BIg0NiyBBrbyLOCQOOpS6AJpEszCCCAAAIIIOAlQKCxZQk0tpFnBYHGU5dAE0iXZhBAAAEEEEDAS4BAY8sSaGwjzwoCjacugSaQLs0ggAACCCCAgJcAgcaWJdDYRp4VBBpPXQJNIF2aQQABBBBAAAEvAQKNLUugsY08Kwg0nroEmkC6NIMAAggggAACXgIEGluWQGMbeVZUiUCjv4iDBw+WadOmSfXq1aVXr14yduxYadSo0R5tJ0yYIIMGDdqtpk+fPvLXv/41r35hMMiLi2IEEEAAAQQQSIkAcxi7Iwg0tpFnRaUPNOvXr5dOnTpJw4YNZdSoUbJx40YZMmSING/eXGbNmiXVqlUr1TcTaCZOnCgtWrTYWafr6tChQ179wmCQFxfFCCCAAAIIIJASAeYwdkcQaGwjz4pKH2juuOMOGTp0qCxYsEBat24dW77yyitywgknyNNPPy19+/Y1A43+IhcVFZWrHxgMysXHixFAAAEEEEAgIQHmMDY8gcY28qyo9IGmR48esZ+ebpa9tGvXTrp37y4PPPAAgcZzC2PdCCCAAAIIIFDQAgQau/sINLaRZ0WlDzTNmjWT/v37y7hx44o59u7dW1avXh0frSltyZxypuvQWj3tbMCAAfGpa3Xq1MmrXxgM8uKiGAEEEEAAAQRSIsAcxu4IAo1t5FlR6QNNzZo142tmbr755mKOAwcOjMPM/PnzS/X9+9//LrNnz5bvfOc78c0EpkyZIr/5zW/ke9/7nvzjH/8o9XVr166VdevWFfv3pUuXSrdu3WThwoXStm1bzz5l3QgggAACCCCAQIUJEGhsSgKNbeRZQaDZQ6ApCf53v/udXHXVVTJ16lTJnM62a92IESNk5MiRJfYbgcZzc2bdCCCAAAIIIFDRAgQaW5RAYxt5VlT6QFOeU85Kgl+1apXoOm+77Ta57rrrSuwbjtB4brKsGwEEEEAAAQRCChBobG0CjW3kWVHpA41e+K+3ZtYjKtlL+/btpWvXrjJ+/Pi8fDOBZsyYMXLttdfm/FoGg5ypKEQAAQQQQACBFAkwh7E7g0BjG3lWVPpAc/vtt8v1118fX7vSsmXL2HLOnDly3HHHiT5fpl+/fnn53nnnnfLzn/9cZsyYEQeiXBcGg1ylqEMAAQQQQACBNAkwh7F7g0BjG3lWVPpA8/nnn8cP1mzcuHF8XcumTZvimwQ0adIkvilA5sGaeucy/dHn1bRp0yY2P/XUU6Vnz55y2GGHSY0aNeIbAWigOeWUU2Ty5Ml59QuDQV5cFCOAAAIIIIBASgSYw9gdQaCxjTwrKn2gUTwNKYMHD5bp06fHdys744wzZOzYsXGoySyZC/mzH6KpR2Kef/55Wb58uWzZsiW+O9k555wTP6izVq1aefULg0FeXBQjgAACCCCAQEoEmMPYHUGgsY08K6pEoPEEzHXdDAa5SlGHAAIIIIAAAmkSYA5j9waBxjbyrCDQeOpmrZvBIBA0zSCAAAIIIIBAhQowh7E5CTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWcFgcZTl0ATSJdmEEAAAQQQQMBLgEBjyxJobCPPCgKNpy6BJpAuzSCAAAIIIICAlwCBxpYl0NhGnhUEGk9dAk0gXZpBAAEEEEAAAS8BAo0tS6CxjTwrCDSeugSaQLo0gwACCCCAAAJeAgQaW5ZAYxt5VhBoPHUJNIF0aQYBBBBAAAEEvAQINLYsgcY28qwg0HjqEmgC6dIMAggggAACCHgJEGhsWQKNbeRZQaDx1CXQBNKlGQQQQAABBBDwEiDQ2LIEGtvIs4JA46lLoAmkSzMIIIAAAggg4CVAoLFlCTS2kWdFlQg0+os4ePBgmTZtmlSvXl169eolY8eOlUaNGpm2r7/+ulx99dUyZ84cqV+/vvzoRz+S0aNHS506dczXZhcwGOTFRTECCCCAAAIIpESAOYzdEQQa28izotIHmvXr10unTp2kYcOGMmrUKNm4caMMGTJEmjdvLrNmzZJq1aqV6rtkyRI54ogj5Oijj45f89FHH8k111wjJ598sjz22GN59QuDQV5cFCOAAAIIIIBASgSYw9gdQaCxjTwrKn2gueOOO2To0KGyYMECad26dWz5yiuvyAknnCBPP/209O3bt1TfK6+8Uh599FHRX2Q9OqOL/v+5554reuTmyCOPzLlvGAxypqIQAQQQQAABBFIkwBzG7gwCjW3kWVHpA02PHj1iPz3dLHtp166ddO/eXR544IFSfdu2bRvXPPjggztrNm/eLPvuu68MGzZMbrzxxpz7hsEgZyoKEUAAAQQQQCBFAsxh7M4g0NhGnhWVPtA0a9ZM+vfvL+PGjSvm2Lt3b1m9enV8tKak5csvv5R69erJbbfdJtdee22xksMPP1y+/e1vx0drcl0YDHKVog4BBBBAAAEE0iTAHMbuDQKNbeRZUekDTc2aNePrX26++eZijgMHDozDzPz580v01etlDjjgALn//vvlpz/9abEaPWpTq1Yt+fvf/17ia9euXSvr1q0r9m86GJx00kkyY8YMadWqlWefsm4EEEAAAQQQQKDCBJYuXSrdunWL50wdOnSosPVWphURaJLtTQKNQ6AZMWKEjBw5MtmepXUEEEAAAQQQQKACBXSnbNeuXStwjZVnVQSaZPuy0gea8pxyVrduXRkzZkzep5yVdIRGT2FbtGiRHHTQQVKjRo28ez2zd4QjPHnTBX0B/RSUu8yN0U9lpgv6QvopKHeZG6OfykwX7IXl7aMtW7bIypUr5Zhjjsn7sRXBPmTCDRFoku2ASh9o9PQwvTXz1KlTi0m3b98+3sswfvz4UnugqKhIevbsWawmc1MAvXPaTTfdFKz3OH81GHW5GqKfysUX7MX0UzDqcjVEP5WLL9iL6adg1GVuiD4qM13OLyTQ5EzlUljpA83tt98u119/vSxcuFBatmwZI+pDMo877jiZOHGi9OvXr1TYK664In7ejA4EeoMAXfT/BwwYIK+99pp07tzZpVNKWimDUTDqcjVEP5WLL9iL6adg1OVqiH4qF1+wF9NPwajL3BB9VGa6nF9IoMmZyqWw0geazz//PH6wZuPGjePrWjZt2hTfJKBJkybxTQEyD9bUh27qjz6vpk2bNjH24sWL4wdrHnvsscUerKlHfZ588kmXDiltpQxGQbnL3Bj9VGa6oC+kn4Jyl7kx+qnMdEFfSD8F5S5TY/RRmdjyehGBJi+uCi+u9IFGxTSkDB48WKZPny7Vq1eXM844Q8aOHRuHmsySuZBff+n1VLPMokdifvGLX8irr74aH6XRozOjR48Wvb4m5MJgFFK77G3RT2W3C/lK+imkdtnbop/KbhfylfRTSO2ytUUflc0tn1cRaPLRqvjaKhFoKp4t/Br1RgN33nlnHMz222+/8G+AFnMSoJ9yYkq8iH5KvAtyegP0U05MiRfRT4l3gfkG6COTqNwFBJpyE5ZrBQSacvHxYgQQQAABBBBAAIGqLkCgSXYLINAk60/rCCCAAAIIIIAAAgUuQKBJtgMJNMn60zoCCCCAAAIIIIBAgQsQaJLtQAJNsv60jgACCCCAAAIIIFDgAgSaZDuQQJOsv9m63plEbwQwbdq0+A5tvXr1iu/Q1qhRI/O1FIQR0Ft4P/roozJv3jxZvXq1tG7dWs4880wZNmzYzucXhXkntJKvwGmnnSYvvPCCDB8+XPROhyzpEXj66adlzJgx8uabb8Zj32GHHSZ/+MMf5Nvf/nZ63mQVfyczZ86Mf2+0j7Zu3SqHHHJI/IiD//qv/6riMsl8/GXLlsV3YdW7smqf6IPAd+zYsdub0e+pq6++Wp599tm43/QB4nrToew7vCbzCQq7VQJNsv1HoEnWf4+tr1+/Pn6GTsOGDeNn5GzcuDH+smjevLnMmjVr5zN0UvwRqsRb04e0aojp06dP/PDWN954I37mUceOHeWll16in1K6FTz++OPxzoKVK1cSaFLWR3fddZdcc8018S3zv//978tXX30VPxBZd+gcc8wxKXu3VfPt6IT5O9/5jnTt2lWuuuoqqVGjhvzxj3+Up556SiZNmhQ/HoElrIA+muKcc86Jn523Zs2aeJ6wa6DZvn17/GBxDTW33Xab1K5dW2666Sb57LPP5N///nfwR1KEFfJtjUC6B1VhAAASn0lEQVTj62utnUBjCSX473fccYcMHTo0fo6OTph10YeBnnDCCaJ7L/v27Zvgu6PpjIB+MWQ/00j//pFHHpHzzjtPZsyYEX/hs6RLQB+4q3uT9QjA+eefT6BJUffoeKc7A3T8u+KKK1L0zngr2QLXX399fLbAp59+KnXq1In/adu2bXLggQfG31F61JolrICGlczDwjPP1ts10GjgPOuss+Tll1+W448/Pn6DS5YskXbt2sXj4c9//vOwb7oStUagSbYzCTTJ+u+x9R49esT/rqebZS868HTv3l0eeOCBFL/7qv3W3nvvPTn44IPjYKN7zFjSJXDllVfGeyN1j2b0JUSgSVH33HDDDfHpLzpRrlWrVoreGW8lW+Daa6+V+++/X9atWxf/DmUWPTVQTwt87LHHAEtQoLRAM2jQoHjc09PZs5eTTjop/t8pU6Yk+K4Lu2kCTbL9R6BJ1n+PrTdr1kz69+8v48aNK1bXu3fv+HCxHq1hSafAfffdJ5deeqm8/vrrcuSRR6bzTVbRd6XXOp144onyr3/9K554EWjStSHojhw9gvazn/1Mbr75Zlm6dKkcdNBB8Wkx7BxIT1/pKWd66tJll10m//3f/x1f56Tjnp5u++KLL3JkOuGuKi3Q6GmCekaBXj+Tvehpg0888YSsWLEi4XdeuM0TaJLtOwJNsv57bL1mzZrxNTP6pZ69DBw4MA4z8+fPT/G7r7pvbfny5dK5c2c5+uij5fnnn6+6ECn85HpKTJcuXUQnzbfffnv8Dgk06eooPRVQf4f23ntvufXWW6VVq1bx0ej//d//jSfKJ598crrecBV+N3rakt4A4OOPP44V6tatGx+V1p1uLMkKlBZoOnToEI+BDz/8cLE3qPW33HJLfL0aS9kECDRlc6uoVxFoKkrSYT0EGgdU51Vu2LAhPh1QLzSfO3eutGjRwrlFVp+PgJ7KpOeJv/vuuzvvQEegyUfQv1YnXO+//36x6wT1OgA90rnvvvvG16WxJC+gfaR3x9J+0aNpe+21l/zlL3+J9/Lr3n/9N5bkBAg04e0JNOHNs1sk0CTrv8fWOeUsxZ1TwlvTu9Cdfvrp8tZbb4nezlQvbGZJj8Ann3wSX7CsR2bOPvvsnW9sv/32i0+Z0RtwNGjQgLvSJdxlehqT3tFM7/JYr169ne9G73o2YcKE+NoaluQF9HRoHevefvvt+HSzzKJHP/W6Gj3dliU5AU45C29PoAlvTqBJ1jzn1nVPv96xZOrUqcVe0759+/j85PHjx+e8Lgp9BbZs2RLfdU5v06wXVeohfZZ0CejttPVUwD0teqEsz2JItt9+8pOfxGNbSYHm3nvvlS+++CLZN0jrsYCeGnj44YeL3v48e7nuuuvkd7/7nWzatAmpBAVKCzR6yrp+Ty1cuLDYu9NTOfUuabvONxL8CAXXNIEm2S7jCE2y/ntsXfck660xdeDR55voonsudQ/mxIkTpV+/fil+91XnremXwIABA+JnLzz33HOcapHSrtfTAfWGALsuukf5wgsvFP2i198tfS4DS3IC+nukz3TS28tmHtCov2N6apM+k0vv0MSSvIDucPvoo4/knXfeKXaERv9eb+Sgt99mSU6gtECjD4LWo2uzZ8+OnyOki/aX3j1Vr1nTZz+xlE2AQFM2t4p6FYGmoiQd1qN3+tEHazZu3Di+c4zu8dKbBOgdSvSmAJn7zTs0zSrzENC7/OieYz1lSSdi2Yt+Sez6jJo8Vk1pAAGuoQmAnEcTer1Mt27d4omyXqSsz+DSBzbqThy9KQDXZuSB6Viq18roqZv6AM1LLrkkvoZGbwigF5vrtWp61yyW8AIaWHTRI2faR/qjix551ofSZm6Msnbt2p0P1hw+fHj8IE69lX32aZ7h331ht0igSbb/CDTJ+put614ufZq57pXU85T1y0MfZsYk2aQLVqBfFIsXLy6xvQcffDDe88+SXgECTfr6Rq/B0OuaNMTojp0jjjhCfvWrX8n3v//99L3ZKvyO9OJ/3auv4VMnynpDB30w47nnnluFVZL96NnPBMp+J3oUWq9B02XVqlXxkZjJkyfL1q1b47s+3nXXXdK2bdtk33yBt06gSbYDCTTJ+tM6AggggAACCCCAQIELEGiS7UACTbL+tI4AAggggAACCCBQ4AIEmmQ7kECTrD+tI4AAAggggAACCBS4AIEm2Q4k0CTrT+sIIIAAAggggAACBS5AoEm2Awk0yfrTOgIIIIAAAggggECBCxBoku1AAk2y/rSOAAIIIIAAAgggUOACBJpkO5BAk6w/rSOAAAIIIIAAAggUuACBJtkOJNAk60/rCCCAAAIIIIAAAgUuQKBJtgMJNMn60zoCCCCAAAIIIIBAgQsQaJLtQAJNsv60jgACCCCAAAIIIFDgAgSaZDuQQJOsP60jgEAlEYi+zMxP0q1bNxkxYoT06NFDPvzwQykqKjJf41mQ/Z4fffRRGTBgQE7NjR49WoYNGxbXtmnTRhYtWpTT6yhCAAEEKqsAgSbZniXQJOtP6wggUEkEZs+eXeyT9OvXT4466ii58cYbd/59gwYNpGXLlvLOO+9I586dpVatWol+eg00P/nJT+SnP/2pHHTQQdKoUaOc3s9HH30kS5YskV/96lfy9ttvE2hyUqMIAQQqswCBJtneJdAk60/rCCBQSQX06Ev37t1lwoQJqf2EGmiGDx8eHzUqyzJw4ECZPn06gaYseLwGAQQqlQCBJtnuJNAk60/rCCBQSQVKCzQaAHY95UyDxU033RQfsbn77rvls88+k169eskf//hHWbZsmfzsZz8TPQLUunVr+c1vfiOnnXZaMbUpU6bIqFGjZN68ebLXXnvJKaecImPHjo3r97SUFmjmzJkTn1L2+uuvy+bNm+WAAw6Q888/P36P2QuBppJuvHwsBBDIW4BAkzdZhb6AQFOhnKwMAQQQ+Fog30DTqlUrOfbYY+PTv95//3259tpr42taNFRcfvnlcuCBB4peu6JhY/HixdK4ceO4nUmTJome3ta/f/84dGzatCk+4vLll1/Km2++KfXr1y+1S0oKNOvXr4+D0PHHHx8HqTp16siCBQvkgw8+kFtvvfX/tXfHMDJuYRyHz90Q21k6lQghK6ESFQ2lUkJUCjWlkCiFhEotGo2gJCqNhEgkNAp0CoWOViFuztkQ3N2bmTeb/Wcmz1T37t0z793nneaXme8bQeMFToAAgVUEBE32ZSFosv6mEyAwpwLTBs3+/fvb27dv28LCwhA5depUe/jwYbt///745/54//59W15eHh9jO3v27PjZ7t27x88eP378S7Jf37J379528+bNdv78+amCpr/L08Oqx9DBgwf/dzveoZnTF68/iwCBqQUEzdRk63pA0KwrpycjQIDAisC0QXPhwoV269atX3z94139ovsvX760paWl8fPv37+3zZs3j4+XXblyZbyT08Pl7t277cyZM3/QHz58uO3Zs6c9ePBgqqD5+vXr+H/vgdVjqF8HtGPHjlWfQ9B4tRMgQGBFQNBkXwmCJutvOgECcyowbdD8fXH+1atXxx3Sfvz48YfQpk2b2qVLl1r/7y9evGhHjhxZU/DYsWOtX1+z1mOta2hev349ounp06fjo2uHDh0a7/b0uPn9IWjm9MXrzyJAYGoBQTM12boeEDTryunJCBAgsCKwEUHz7t278U7KjRs3xo0G/n7062f27ds3ddD8PNBvCPDy5csRVm/evBm3at6+ffuv5xM0Xu0ECBBYERA02VeCoMn6m06AwJwKbETQ9Hdvdu3a1Y4fP97u3LkzteSkt21+8uRJO3HiROvv3PTv1vn5EDRTkztAgMCcCgia7GIFTdbfdAIE5lRgI4Km0z169Gjc5azfEe3kyZNt27ZtrX/xZb89dA+d06dPrym8WtD0mwvcvn17PGf/G/o1PNevXx/P2e90tri4KGjm9DXrzyJAoC4gaOp263FS0KyHoucgQIDAXwIbFTR97PPnz8c1Nf27ar59+za+N+bo0aPt4sWL4w5oaz1WC5oPHz6Mj5i9evWqff78uW3dunVcp3Pt2rX/fHzNOzRe9gQIEFgREDTZV4KgyfqbToAAgZhAD5oeL/2Oav0LOfu/T/LoH3Xrd1w7d+5ce/bsWfv48eMkx/wOAQIE5lZA0GRXK2iy/qYTIEAgJvB7wNy7d298bG2SR/+Cz8uXL49f3blzp6CZBM3vECAw1wKCJrteQZP1N50AAQIxgf4lmj8f/Qs6+/U3kzz6R9E+ffo0fnXLli3twIEDkxzzOwQIEJhbAUGTXa2gyfqbToAAAQIECBAgMOMCgia7QEGT9TedAAECBAgQIEBgxgUETXaBgibrbzoBAgQIECBAgMCMCwia7AIFTdbfdAIECBAgQIAAgRkXEDTZBQqarL/pBAgQIECAAAECMy4gaLILFDRZf9MJECBAgAABAgRmXEDQZBcoaLL+phMgQIAAAQIECMy4gKDJLlDQZP1NJ0CAAAECBAgQmHEBQZNdoKDJ+ptOgAABAgQIECAw4wKCJrtAQZP1N50AAQIECBAgQGDGBQRNdoGCJutvOgECBAgQIECAwIwLCJrsAgVN1t90AgQIECBAgACBGRcQNNkF/pMdbzoBAgQIECBAgAABAgTqAoKmbuckAQIECBAgQIAAAQJhAUETXoDxBAgQIECAAAECBAjUBQRN3c5JAgQIECBAgAABAgTCAoImvADjCRAgQIAAAQIECBCoCwiaup2TBAgQIECAAAECBAiEBQRNeAHGEyBAgAABAgQIECBQFxA0dTsnCRAgQIAAAQIECBAICwia8AKMJ0CAAAECBAgQIECgLiBo6nZOEiBAgAABAgQIECAQFhA04QUYT4AAAQIECBAgQIBAXUDQ1O2cJECAAAECBAgQIEAgLCBowgswngABAgQIECBAgACBuoCgqds5SYAAAQIECBAgQIBAWEDQhBdgPAECBAgQIECAAAECdQFBU7dzkgABAgQIECBAgACBsICgCS/AeAIECBAgQIAAAQIE6gKCpm7nJAECBAgQIECAAAECYQFBE16A8QQIECBAgAABAgQI1AUETd3OSQIECBAgQIAAAQIEwgKCJrwA4wkQIECAAAECBAgQqAsImrqdkwQIECBAgAABAgQIhAUETXgBxhMgQIAAAQIECBAgUBcQNHU7JwkQIECAAAECBAgQCAsImvACjCdAgAABAgQIECBAoC4gaOp2ThIgQIAAAQIECBAgEBYQNOEFGE+AAAECBAgQIECAQF1A0NTtnCRAgAABAgQIECBAICwgaMILMJ4AAQIECBAgQIAAgbqAoKnbOUmAAAECBAgQIECAQFhA0IQXYDwBAgQIECBAgAABAnUBQVO3c5IAAQIECBAgQIAAgbCAoAkvwHgCBAgQIECAAAECBOoCgqZu5yQBAgQIECBAgAABAmEBQRNegPEECBAgQIAAAQIECNQFBE3dzkkCBAgQIECAAAECBMICgia8AOMJECBAgAABAgQIEKgLCJq6nZMECBAgQIAAAQIECIQFBE14AcYTIECAAAECBAgQIFAXEDR1OycJECBAgAABAgQIEAgLCJrwAownQIAAAQIECBAgQKAuIGjqdk4SIECAAAECBAgQIBAWEDThBRhPgAABAgQIECBAgEBdQNDU7ZwkQIAAAQIECBAgQCAsIGjCCzCeAAECBAgQIECAAIG6gKCp2zlJgAABAgQIECBAgEBYQNCEF2A8AQIECBAgQIAAAQJ1AUFTt3OSAAECBAgQIECAAIGwgKAJL8B4AgQIECBAgAABAgTqAoKmbuckAQIECBAgQIAAAQJhAUETXoDxBAgQIECAAAECBAjUBQRN3c5JAgQIECBAgAABAgTCAoImvADjCRAgQIAAAQIECBCoCwiaup2TBAgQIECAAAECBAiEBQRNeAHGEyBAgAABAgQIECBQFxA0dTsnCRAgQIAAAQIECBAICwia8AKMJ0CAAAECBAgQIECgLiBo6nZOEiBAgAABAgQIECAQFhA04QUYT4AAAQIECBAgQIBAXUDQ1O2cJECAAAECBAgQIEAgLCBowgswngABAgQIECBAgACBuoCgqds5SYAAAQIECBAgQIBAWEDQhBdgPAECBAgQIECAAAECdQFBU7dzkgABAgQIECBAgACBsICgCS/AeAIECBAgQIAAAQIE6gKCpm7nJAECBAgQIECAAAECYQFBE16A8QQIECBAgAABAgQI1AUETd3OSQIECBAgQIAAAQIEwgKCJrwA4wkQIECAAAECBAgQqAsImrqdkwQIECBAgAABAgQIhAUETXgBxhMgQIAAAQIECBAgUBcQNHU7JwkQIECAAAECBAgQCAv8CxTYSGVF0c44AAAAAElFTkSuQmCC\" width=\"724.3333333333334\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/plain": [
+       "(0.0, 3.0)"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "sharpness, time_axis = sharpness_din_perseg(sig, fs, nperseg=8192 * 2, noverlap=4096, weighting=\"din\")\n",
+    "plt.figure(2)\n",
+    "plt.plot(time_axis, sharpness, color=COLORS[0])\n",
+    "plt.xlabel(\"Time [s]\")\n",
+    "plt.ylabel(\"S_din [acum]\")\n",
+    "plt.ylim((0, 3))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Compute sharpness from loudness\n",
+    "In case you have already computed the loudness of a signal, you can use the sharpness_din_from_loudness function to compute the sharpnes. It takes the loudness and the specific loudness as input. The loudness can be computed per time segment or not."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "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,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BAgQIEBgxgUETXaBgibrbzoBAgQIECBAgMCMCwia7AIFTdbfdAIECBAgQIAAgRkXEDTZBQqarL/pBAgQIECAAAECMy4gaLILFDRZf9MJECBAgAABAgRmXEDQZBcoaLL+phMgQIAAAQIECMy4gKDJLlDQZP1NJ0CAAAECBAgQmHEBQZNdoKDJ+ptOgAABAgQIECAw4wKCJrtAQZP1N50AAQIECBAgQGDGBQRNdoGCJutvOgECBAgQIECAwIwLCJrsAgVN1t90AgQIECBAgACBGRcQNNkF/pMdbzoBAgQIECBAgAABAgTqAoKmbuckAQIECBAgQIAAAQJhAUETXoDxBAgQIECAAAECBAjUBQRN3c5JAgQIECBAgAABAgTCAoImvADjCRAgQIAAAQIECBCoCwiaup2TBAgQIECAAAECBAiEBQRNeAHGEyBAgAABAgQIECBQFxA0dTsnCRAgQIAAAQIECBAICwia8AKMJ0CAAAECBAgQIECgLiBo6nZOEiBAgAABAgQIECAQFhA04QUYT4AAAQIECBAgQIBAXUDQ1O2cJECAAAECBAgQIEAgLCBowgswngABAgQIECBAgACBuoCgqds5SYAAAQIECBAgQIBAWEDQhBdgPAECBAgQIECAAAECdQFBU7dzkgABAgQIECBAgACBsICgCS/AeAIECBAgQIAAAQIE6gKCpm7nJAECBAgQIECAAAECYQFBE16A8QQIECBAgAABAgQI1AUETd3OSQIECBAgQIAAAQIEwgKCJrwA4wkQIECAAAECBAgQqAsImrqdkwQIECBAgAABAgQIhAUETXgBxhMgQIAAAQIECBAgUBcQNHU7JwkQIECAAAECBAgQCAsImvACjCdAgAABAgQIECBAoC4gaOp2ThIgQIAAAQIECBAgEBYQNOEFGE+AAAECBAgQIECAQF1A0NTtnCRAgAABAgQIECBAICwgaMILMJ4AAQIECBAgQIAAgbqAoKnbOUmAAAECBAgQIECAQFhA0IQXYDwBAgQIECBAgAABAnUBQVO3c5IAAQIECBAgQIAAgbCAoAkvwHgCBAgQIECAAAECBOoCgqZu5yQBAgQIECBAgAABAmEBQRNegPEECBAgQIAAAQIECNQFBE3dzkkCBAgQIECAAAECBMICgia8AOMJECBAgAABAgQIEKgLCJq6nZMECBAgQIAAAQIECIQFBE14AcYTIECAAAECBAgQIFAXEDR1OycJECBAgAABAgQIEAgLCJrwAownQIAAAQIECBAgQKAuIGjqdk4SIECAAAECBAgQIBAWEDThBRhPgAABAgQIECBAgEBdQNDU7ZwkQIAAAQIECBAgQCAsIGjCCzCeAAECBAgQIECAAIG6gKCp2zlJgAABAgQIECBAgEBYQNCEF2A8AQIECBAgQIAAAQJ1AUFTt3OSAAECBAgQIECAAIGwgKAJL8B4AgQIECBAgAABAgTqAoKmbuckAQIECBAgQIAAAQJhAUETXoDxBAgQIECAAAECBAjUBQRN3c5JAgQIECBAgAABAgTCAoImvADjCRAgQIAAAQIECBCoCwiaup2TBAgQIECAAAECBAiEBQRNeAHGEyBAgAABAgQIECBQFxA0dTsnCRAgQIAAAQIECBAICwia8AKMJ0CAAAECBAgQIECgLiBo6nZOEiBAgAABAgQIECAQFhA04QUYT4AAAQIECBAgQIBAXUDQ1O2cJECAAAECBAgQIEAgLCBowgswngABAgQIECBAgACBuoCgqds5SYAAAQIECBAgQIBAWEDQhBdgPAECBAgQIECAAAECdQFBU7dzkgABAgQIECBAgACBsICgCS/AeAIECBAgQIAAAQIE6gKCpm7nJAECBAgQIECAAAECYQFBE16A8QQIECBAgAABAgQI1AUETd3OSQIECBAgQIAAAQIEwgKCJrwA4wkQIECAAAECBAgQqAsImrqdkwQIECBAgAABAgQIhAUETXgBxhMgQIAAAQIECBAgUBcQNHU7JwkQIECAAAECBAgQCAv8CxTYSGVF0c44AAAAAElFTkSuQmCC\" width=\"724.3333333333334\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/plain": [
+       "(0.0, 3.0)"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "N, N_specific, bark_axis, time_axis = loudness_zwst_perseg(\n",
+    "    sig, fs, nperseg=8192 * 2, noverlap=4096\n",
+    ")\n",
+    "sharpness = sharpness_din_from_loudness(N, N_specific, weighting='din')\n",
+    "plt.figure(3)\n",
+    "plt.plot(time_axis, sharpness, color=COLORS[0])\n",
+    "plt.xlabel(\"Time [s]\")\n",
+    "plt.ylabel(\"S_din [acum]\")\n",
+    "plt.ylim((0, 3))"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -1104,14 +3118,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Tutorial generation date: February 25, 2022\n"
+      "Tutorial generation date: March 24, 2022\n"
      ]
     }
    ],
diff --git a/validations/sq_metrics/loudness_ecma/valid_segmentation.py b/validations/sq_metrics/loudness_ecma/valid_segmentation.py
index df273b1c..4bfd5292 100644
--- a/validations/sq_metrics/loudness_ecma/valid_segmentation.py
+++ b/validations/sq_metrics/loudness_ecma/valid_segmentation.py
@@ -5,15 +5,12 @@
 except ImportError:
     raise RuntimeError(
         "In order to perform this validation you need the 'matplotlib' package."
-        )
+    )
 
 # Local application imports
-from mosqito.utils.sine_wave_generator import (
-    sine_wave_generator,
-)
-from mosqito.sq_metrics.loudness.loudness_ecma._segmentation_blocks import (
-    _segmentation_blocks,
-)
+from mosqito.utils import sine_wave_generator
+from mosqito.utils import time_segmentation
+
 
 signal, _ = sine_wave_generator(
     fs=48000,
@@ -21,14 +18,14 @@
     spl_value=60,
     freq=40,
 )
-blocks = _segmentation_blocks(signal, 8192, 2048)
+blocks, _ = time_segmentation(signal, 48000, 8192, 2048, is_ecma=True)
 
 plt.subplot(211)
 plt.plot(signal)
 plt.subplot(212)
-plt.plot(blocks[0], label="block 1")
-plt.plot(blocks[1], label="block 2")
-plt.plot(blocks[2], label="block 3")
-plt.plot(blocks[5], label="block 6")
+plt.plot(blocks[:, 0], label="block 1")
+plt.plot(blocks[:, 1], label="block 2")
+plt.plot(blocks[:, 2], label="block 3")
+plt.plot(blocks[:, 5], label="block 6")
 plt.legend()
 plt.show()
\ No newline at end of file
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 3 (1 kHz 60 dB).wav b/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 3 (1 kHz 60 dB).wav
deleted file mode 100644
index faea4fc7..00000000
Binary files a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 3 (1 kHz 60 dB).wav and /dev/null differ
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/PinkNoise_40dBpHz@1000Hz.wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/PinkNoise_40dBpHz@1000Hz.wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/PinkNoise_40dBpHz@1000Hz.wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/PinkNoise_40dBpHz@1000Hz.wav
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 11 (tone pulse 1 kHz 50 ms 70 dB).wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 11 (tone pulse 1 kHz 50 ms 70 dB).wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 11 (tone pulse 1 kHz 50 ms 70 dB).wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 11 (tone pulse 1 kHz 50 ms 70 dB).wav
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 13 (combined tone pulses 1 kHz).wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 13 (combined tone pulses 1 kHz).wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 13 (combined tone pulses 1 kHz).wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 13 (combined tone pulses 1 kHz).wav
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 2 (250 Hz 80 dB).wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 2 (250 Hz 80 dB).wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 2 (250 Hz 80 dB).wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 2 (250 Hz 80 dB).wav
diff --git a/tests/input/Test signal 3 (1 kHz 60 dB).wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 3 (1 kHz 60 dB).wav
similarity index 100%
rename from tests/input/Test signal 3 (1 kHz 60 dB).wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 3 (1 kHz 60 dB).wav
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 4 (4 kHz 40 dB).wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 4 (4 kHz 40 dB).wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 4 (4 kHz 40 dB).wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 4 (4 kHz 40 dB).wav
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 5 (pinknoise 60 dB).wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 5 (pinknoise 60 dB).wav
new file mode 100644
index 00000000..56c317f5
Binary files /dev/null and b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 5 (pinknoise 60 dB).wav differ
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 6 (tone 250 Hz 30 dB - 80 dB).wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 6 (tone 250 Hz 30 dB - 80 dB).wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 6 (tone 250 Hz 30 dB - 80 dB).wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 6 (tone 250 Hz 30 dB - 80 dB).wav
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/sinus_1000Hz_60dBSPL.wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/sinus_1000Hz_60dBSPL.wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/sinus_1000Hz_60dBSPL.wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/sinus_1000Hz_60dBSPL.wav
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/trafic.wav b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/trafic.wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/trafic.wav
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/trafic.wav
diff --git a/validations/sq_metrics/loudness_zwst/output/.DS_Store b/validations/sq_metrics/loudness_zwst/output/.DS_Store
new file mode 100644
index 00000000..5008ddfc
Binary files /dev/null and b/validations/sq_metrics/loudness_zwst/output/.DS_Store differ
diff --git a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_1.png b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_1.png
index 2afb673d..39a99dd2 100644
Binary files a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_1.png and b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_1.png differ
diff --git a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_2_(250_Hz_80_dB).png b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_2_(250_Hz_80_dB).png
index 36a02b46..1b0fc22b 100644
Binary files a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_2_(250_Hz_80_dB).png and b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_2_(250_Hz_80_dB).png differ
diff --git a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_3_(1_kHz_60_dB).png b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_3_(1_kHz_60_dB).png
index 5642d393..c2f85823 100644
Binary files a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_3_(1_kHz_60_dB).png and b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_3_(1_kHz_60_dB).png differ
diff --git a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_4_(4_kHz_40_dB).png b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_4_(4_kHz_40_dB).png
index 8170a2ad..802e8fa2 100644
Binary files a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_4_(4_kHz_40_dB).png and b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_4_(4_kHz_40_dB).png differ
diff --git a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_5_(pinknoise_60_dB).png b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_5_(pinknoise_60_dB).png
index 5786f641..9590dec0 100644
Binary files a/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_5_(pinknoise_60_dB).png and b/validations/sq_metrics/loudness_zwst/output/validation_loudness_zwst_Test_signal_5_(pinknoise_60_dB).png differ
diff --git a/validations/sq_metrics/loudness_zwst/validation_loudness_zwst.py b/validations/sq_metrics/loudness_zwst/validation_loudness_zwst.py
index 0ecc4a56..d7823424 100644
--- a/validations/sq_metrics/loudness_zwst/validation_loudness_zwst.py
+++ b/validations/sq_metrics/loudness_zwst/validation_loudness_zwst.py
@@ -10,13 +10,15 @@
 except ImportError:
     raise RuntimeError(
         "In order to perform this validation you need the 'matplotlib' package."
-        )
+    )
 
 # Third party imports
+from os.path import basename, splitext
 import numpy as np
 
 # Local application imports
 from mosqito.sq_metrics import loudness_zwst
+from mosqito.utils import isoclose
 from mosqito.utils import load
 from mosqito.sq_metrics.loudness.loudness_zwst._main_loudness import (
     _main_loudness,
@@ -24,6 +26,7 @@
 from mosqito.sq_metrics.loudness.loudness_zwst._calc_slopes import (
     _calc_slopes,
 )
+from validations.sq_metrics.loudness_zwst.input.ISO_532_1.test_signal_1 import test_signal_1
 
 
 def validation_loudness_zwst_3oct():
@@ -44,85 +47,33 @@ def validation_loudness_zwst_3oct():
     None
     """
     # Third octave levels as input for stationary loudness
-    # (from ISO 532-1 annex B2)
-    test_signal_1 = np.array(
-        [
-            -60,
-            -60,
-            78,
-            79,
-            89,
-            72,
-            80,
-            89,
-            75,
-            87,
-            85,
-            79,
-            86,
-            80,
-            71,
-            70,
-            72,
-            71,
-            72,
-            74,
-            69,
-            65,
-            67,
-            77,
-            68,
-            58,
-            45,
-            30.0,
-        ]
-    )
+    # (from ISO 532-1 annex B2) : test_signal_1
 
-    signal = {
-        "data_file": "Test signal 1.txt",
-        "N": 83.296,
-        "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_1.csv",
-    }
+    # Load ISO reference outputs
+    file_path = "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_1.csv"
+    N_iso = 83.296
+    N_specif_iso = np.genfromtxt(
+        file_path, skip_header=1
+    )
 
-    #
     # Compute loudness
     Nm = _main_loudness(test_signal_1, field_type="free")
     N, N_specific = _calc_slopes(Nm)
     loudness = {"values": N, "specific values": N_specific}
-    _ = _check_compliance(
-        loudness, signal, "./validations/sq_metrics/loudness_zwst/output/"
-    )
+    bark_axis = np.linspace(0.1, 24, int(24 / 0.1))
 
+    # Test
+    is_isoclose_N = isoclose(N_iso, N, rtol=5/100,
+                             atol=0.1, is_plot=False, xaxis=None)
+    is_isoclose_N_specific = isoclose(
+        N_specif_iso, N_specific, rtol=5/100, atol=0.1, is_plot=True, tol_label='ISO 532-1 tolerance', xaxis=bark_axis)
 
-#
-# Test signal as input for stationary loudness
-#  # (from ISO 532-1 annex B3)
-
-signal = np.zeros((4), dtype=dict)
-
-signal[0] = {
-    "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 2 (250 Hz 80 dB).wav",
-    "N": 14.655,
-    "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_2.csv",
-}
-signal[1] = {
-    "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 3 (1 kHz 60 dB).wav",
-    "N": 4.019,
-    "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_3.csv",
-}
-signal[2] = {
-    "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 4 (4 kHz 40 dB).wav",
-    "N": 1.549,
-    "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_4.csv",
-}
-signal[3] = {
-    "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 5 (pinknoise 60 dB).wav",
-    "N": 10.498,
-    "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_5.csv",
-}
-
-
-def validation_loudness_zwst(signal):
+    # Format and save validation plot
+    _format_plot(is_isoclose_N, is_isoclose_N_specific, N,
+                 N_iso, splitext(basename(file_path))[0])
+
+
+def validation_loudness_zwst():
     """Test function for the script loudness_zwicker_stationary
 
     Test function for the script loudness_zwicker_stationary with
@@ -139,22 +90,53 @@ def validation_loudness_zwst(signal):
     None
     """
 
-    # Load signal and compute third octave band spectrum
-    sig, fs = load(signal["data_file"], wav_calib=2 * 2 ** 0.5)
-
-    # Compute Loudness
-    N, N_specific, bark_axis = loudness_zwst(sig, fs)
-    loudness = {
-        "name": "Loudness",
-        "values": N,
-        "specific values": N_specific,
-        "freqs": bark_axis,
-    }
-
-    # Check ISO 532-1 compliance
-    _ = _check_compliance(
-        loudness, signal, "./validations/sq_metrics/loudness_zwst/output/"
-    )
+    #
+    # Test signal as input for stationary loudness
+    #  # (from ISO 532-1 annex B3)
+
+    signals = [
+        {
+            "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 2 (250 Hz 80 dB).wav",
+            "N": 14.655,
+            "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_2.csv",
+        },
+        {
+            "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 3 (1 kHz 60 dB).wav",
+            "N": 4.019,
+            "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_3.csv",
+        },
+        {
+            "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 4 (4 kHz 40 dB).wav",
+            "N": 1.549,
+            "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_4.csv",
+        },
+        {
+            "data_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/Test signal 5 (pinknoise 60 dB).wav",
+            "N": 10.498,
+            "N_specif_file": "./validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_5.csv",
+        },
+    ]
+
+    for signal in signals:
+        # Load signal and compute third octave band spectrum
+        sig, fs = load(signal["data_file"], wav_calib=2 * 2 ** 0.5)
+
+        # Compute Loudness
+        N, N_specific, bark_axis = loudness_zwst(sig, fs)
+
+        # Load reference N'
+        N_iso = signal["N"]
+        N_specif_iso = np.genfromtxt(signal["N_specif_file"], skip_header=1)
+
+        # Test
+        is_isoclose_N = isoclose(N_iso, N, rtol=5/100,
+                                 atol=0.1, is_plot=False, xaxis=None)
+        is_isoclose_N_specific = isoclose(
+            N_specif_iso, N_specific, rtol=5/100, atol=0.1, is_plot=True, tol_label='ISO 532-1 tolerance', xaxis=bark_axis)
+
+        # Format and save validation plot
+        _format_plot(is_isoclose_N, is_isoclose_N_specific, N,
+                     N_iso, splitext(basename(signal["data_file"]))[0])
 
 
 def _check_compliance(loudness, iso_ref, out_dir):
@@ -206,9 +188,11 @@ def _check_compliance(loudness, iso_ref, out_dir):
         and N <= N_iso + 0.1
     )
     tst_specif = (
-        N_specific >= np.amin([N_specif_iso * 0.95, N_specif_iso - 0.1], axis=0)
+        N_specific >= np.amin(
+            [N_specif_iso * 0.95, N_specif_iso - 0.1], axis=0)
     ).all() and (
-        N_specific <= np.amax([N_specif_iso * 1.05, N_specif_iso + 0.1], axis=0)
+        N_specific <= np.amax(
+            [N_specif_iso * 1.05, N_specif_iso + 0.1], axis=0)
     ).all()
     tst = tst_N and tst_specif
 
@@ -259,18 +243,55 @@ def _check_compliance(loudness, iso_ref, out_dir):
         clr = "green"
     else:
         clr = "red"
-    plt.title("N = " + str(N) + " sone (ISO ref. " + str(N_iso) + " sone)", color=clr)
+    plt.title("N = " + str(N) + " sone (ISO ref. " +
+              str(N_iso) + " sone)", color=clr)
     file_name = "_".join(iso_ref["data_file"].split(" "))
     plt.savefig(
-        out_dir + "validation_loudness_zwst_" + file_name.split("/")[-1][:-4] + ".png",
+        out_dir + "validation_loudness_zwst_" +
+        file_name.split("/")[-1][:-4] + ".png",
         format="png",
     )
     plt.clf()
     return tst
 
 
+def _format_plot(is_isoclose_N, is_isoclose_N_specific, N, N_iso, filename):
+    # Format plot
+    plt.xlabel('Critical band rate [Bark]')
+    plt.ylabel('N\'_zwst [sone/Bark]')
+    color = 'tab:green'
+    if is_isoclose_N:
+        txt_label = "N within tolerance (%.1f sone for an ISO value of %.1f sone)" % (
+            N, N_iso)
+    else:
+        txt_label = "N without tolerance (%.1f sone for an ISO value of %.1f sone)" % (
+            N, N_iso)
+        color = 'tab:red'
+    if is_isoclose_N_specific:
+        txt_label += '\n N\' within tolerance'
+    else:
+        txt_label += '\n N\' without tolerance'
+        color = 'tab:red'
+    props = dict(boxstyle='round', facecolor=color, alpha=0.3)
+    plt.text(
+        0.5,
+        0.05,
+        txt_label,
+        horizontalalignment="center",
+        verticalalignment="bottom",
+        transform=plt.gca().transAxes,
+        bbox=props,
+    )
+    out_dir = "./validations/sq_metrics/loudness_zwst/output/"
+    plt.savefig(
+        out_dir + 'validation_loudness_zwst_' +
+        "_".join(filename.split(" ")) + ".png",
+        format="png",
+    )
+    plt.close()
+
+
 # test de la fonction
 if __name__ == "__main__":
     validation_loudness_zwst_3oct()
-    for i in range(len(signal)):
-        validation_loudness_zwst(signal[i])
+    validation_loudness_zwst()
diff --git a/validations/sq_metrics/loudness_zwtv/output/FAILED_validation_loudness_zwtv_Test_signal_16_(hairdryer)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/FAILED_validation_loudness_zwtv_Test_signal_16_(hairdryer)_Loudness.png
deleted file mode 100644
index d10c1c4e..00000000
Binary files a/validations/sq_metrics/loudness_zwtv/output/FAILED_validation_loudness_zwtv_Test_signal_16_(hairdryer)_Loudness.png and /dev/null differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwicker_time_Test_signal_16_(hairdryer)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwicker_time_Test_signal_16_(hairdryer)_Loudness.png
deleted file mode 100644
index bea6229e..00000000
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwicker_time_Test_signal_16_(hairdryer)_Loudness.png and /dev/null differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_10_(tone_pulse_1_kHz_10_ms_70_dB)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_10_(tone_pulse_1_kHz_10_ms_70_dB)_Loudness.png
index 70c023e8..ede6568f 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_10_(tone_pulse_1_kHz_10_ms_70_dB)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_10_(tone_pulse_1_kHz_10_ms_70_dB)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_10_(tone_pulse_1_kHz_10_ms_70_dB)_Specific.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_10_(tone_pulse_1_kHz_10_ms_70_dB)_Specific.png
index d86720f8..04535ca2 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_10_(tone_pulse_1_kHz_10_ms_70_dB)_Specific.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_10_(tone_pulse_1_kHz_10_ms_70_dB)_Specific.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_11_(tone_pulse_1_kHz_50_ms_70_dB)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_11_(tone_pulse_1_kHz_50_ms_70_dB)_Loudness.png
index 0b541785..61239232 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_11_(tone_pulse_1_kHz_50_ms_70_dB)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_11_(tone_pulse_1_kHz_50_ms_70_dB)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_11_(tone_pulse_1_kHz_50_ms_70_dB)_Specific.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_11_(tone_pulse_1_kHz_50_ms_70_dB)_Specific.png
index 41570f2d..e990a970 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_11_(tone_pulse_1_kHz_50_ms_70_dB)_Specific.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_11_(tone_pulse_1_kHz_50_ms_70_dB)_Specific.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_12_(tone_pulse_1_kHz_500_ms_70_dB)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_12_(tone_pulse_1_kHz_500_ms_70_dB)_Loudness.png
index a4a255cb..56061f7f 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_12_(tone_pulse_1_kHz_500_ms_70_dB)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_12_(tone_pulse_1_kHz_500_ms_70_dB)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_12_(tone_pulse_1_kHz_500_ms_70_dB)_Specific.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_12_(tone_pulse_1_kHz_500_ms_70_dB)_Specific.png
index 6f84e176..ebb50fe3 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_12_(tone_pulse_1_kHz_500_ms_70_dB)_Specific.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_12_(tone_pulse_1_kHz_500_ms_70_dB)_Specific.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_13_(combined_tone_pulses_1_kHz)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_13_(combined_tone_pulses_1_kHz)_Loudness.png
index c6aa0f50..c2f897f9 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_13_(combined_tone_pulses_1_kHz)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_13_(combined_tone_pulses_1_kHz)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_13_(combined_tone_pulses_1_kHz)_Specific.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_13_(combined_tone_pulses_1_kHz)_Specific.png
index 07c1e533..f09ddac0 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_13_(combined_tone_pulses_1_kHz)_Specific.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_13_(combined_tone_pulses_1_kHz)_Specific.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_14_(propeller-driven_airplane)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_14_(propeller-driven_airplane)_Loudness.png
index 71bf9e66..3ec99e55 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_14_(propeller-driven_airplane)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_14_(propeller-driven_airplane)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_15_(vehicle_interior_40_kmh)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_15_(vehicle_interior_40_kmh)_Loudness.png
index 8ccb6dc8..5a39d7e9 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_15_(vehicle_interior_40_kmh)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_15_(vehicle_interior_40_kmh)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_16_(hairdryer)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_16_(hairdryer)_Loudness.png
index e0481a65..bea6229e 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_16_(hairdryer)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_16_(hairdryer)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_17_(machine_gun)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_17_(machine_gun)_Loudness.png
index 6567b461..2a9b8090 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_17_(machine_gun)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_17_(machine_gun)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_18_(hammer)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_18_(hammer)_Loudness.png
index eed1a85b..ee340592 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_18_(hammer)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_18_(hammer)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_19_(door_creak)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_19_(door_creak)_Loudness.png
index 221acb2c..57570887 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_19_(door_creak)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_19_(door_creak)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_20_(shaking_coins)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_20_(shaking_coins)_Loudness.png
index 80b3ee5f..ec969120 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_20_(shaking_coins)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_20_(shaking_coins)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_21_(jackhammer)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_21_(jackhammer)_Loudness.png
index a4ae2dd9..741de1f0 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_21_(jackhammer)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_21_(jackhammer)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_22_(ratchet_wheel_(large))_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_22_(ratchet_wheel_(large))_Loudness.png
index 3ef532b4..3674816f 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_22_(ratchet_wheel_(large))_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_22_(ratchet_wheel_(large))_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_23_(typewriter)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_23_(typewriter)_Loudness.png
index 67c18b1c..90d08fce 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_23_(typewriter)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_23_(typewriter)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_24_(woodpecker)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_24_(woodpecker)_Loudness.png
index b01e16e4..456540f9 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_24_(woodpecker)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_24_(woodpecker)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_25_(full_can_rattle)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_25_(full_can_rattle)_Loudness.png
index b6d323e5..d3009a40 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_25_(full_can_rattle)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_25_(full_can_rattle)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_6_(tone_250_Hz_30_dB_-_80_dB)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_6_(tone_250_Hz_30_dB_-_80_dB)_Loudness.png
index daf20f67..aed21016 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_6_(tone_250_Hz_30_dB_-_80_dB)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_6_(tone_250_Hz_30_dB_-_80_dB)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_6_(tone_250_Hz_30_dB_-_80_dB)_Specific.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_6_(tone_250_Hz_30_dB_-_80_dB)_Specific.png
index 87afcbb0..2f6b4096 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_6_(tone_250_Hz_30_dB_-_80_dB)_Specific.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_6_(tone_250_Hz_30_dB_-_80_dB)_Specific.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_7_(tone_1_kHz_30_dB_-_80_dB)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_7_(tone_1_kHz_30_dB_-_80_dB)_Loudness.png
index 57a5b83b..53fa63cf 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_7_(tone_1_kHz_30_dB_-_80_dB)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_7_(tone_1_kHz_30_dB_-_80_dB)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_7_(tone_1_kHz_30_dB_-_80_dB)_Specific.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_7_(tone_1_kHz_30_dB_-_80_dB)_Specific.png
index cb68d796..b1e1b189 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_7_(tone_1_kHz_30_dB_-_80_dB)_Specific.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_7_(tone_1_kHz_30_dB_-_80_dB)_Specific.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_8_(tone_4_kHz_30_dB_-_80_dB)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_8_(tone_4_kHz_30_dB_-_80_dB)_Loudness.png
index 26975cce..05eaad40 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_8_(tone_4_kHz_30_dB_-_80_dB)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_8_(tone_4_kHz_30_dB_-_80_dB)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_8_(tone_4_kHz_30_dB_-_80_dB)_Specific.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_8_(tone_4_kHz_30_dB_-_80_dB)_Specific.png
index 6a2b7337..43f7dc0f 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_8_(tone_4_kHz_30_dB_-_80_dB)_Specific.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_8_(tone_4_kHz_30_dB_-_80_dB)_Specific.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_9_(pink_noise_0_dB_-_50_dB)_Loudness.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_9_(pink_noise_0_dB_-_50_dB)_Loudness.png
index 98f92ae0..a50e1554 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_9_(pink_noise_0_dB_-_50_dB)_Loudness.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_9_(pink_noise_0_dB_-_50_dB)_Loudness.png differ
diff --git a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_9_(pink_noise_0_dB_-_50_dB)_Specific.png b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_9_(pink_noise_0_dB_-_50_dB)_Specific.png
index 9619e4e2..55be8e5d 100644
Binary files a/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_9_(pink_noise_0_dB_-_50_dB)_Specific.png and b/validations/sq_metrics/loudness_zwtv/output/validation_loudness_zwtv_Test_signal_9_(pink_noise_0_dB_-_50_dB)_Specific.png differ
diff --git a/validations/sq_metrics/sharpness_din/output/validation_sharpness_Broad-band_noise.png b/validations/sq_metrics/sharpness_din/output/validation_sharpness_Broad-band_noise.png
index 0a16c5da..b9d6211a 100644
Binary files a/validations/sq_metrics/sharpness_din/output/validation_sharpness_Broad-band_noise.png and b/validations/sq_metrics/sharpness_din/output/validation_sharpness_Broad-band_noise.png differ
diff --git a/validations/sq_metrics/sharpness_din/output/validation_sharpness_Narrow-band_noise.png b/validations/sq_metrics/sharpness_din/output/validation_sharpness_Narrow-band_noise.png
index 8fe8897b..2b6977c3 100644
Binary files a/validations/sq_metrics/sharpness_din/output/validation_sharpness_Narrow-band_noise.png and b/validations/sq_metrics/sharpness_din/output/validation_sharpness_Narrow-band_noise.png differ
diff --git a/validations/sq_metrics/sharpness_din/validation_sharpness_din.py b/validations/sq_metrics/sharpness_din/validation_sharpness_din.py
index 899a6cdd..ecf2b3e4 100644
--- a/validations/sq_metrics/sharpness_din/validation_sharpness_din.py
+++ b/validations/sq_metrics/sharpness_din/validation_sharpness_din.py
@@ -9,7 +9,7 @@
 except ImportError:
     raise RuntimeError(
         "In order to perform this validation you need the 'matplotlib' package."
-        )
+    )
 
 # Third party imports
 import numpy as np
@@ -219,7 +219,7 @@ def validation_sharpness_din(noise):
         sig, fs = load(noise[i]["data_file"], wav_calib=1)
 
         # Compute sharpness
-        S = sharpness_din(True, sig, fs, method="din")
+        S = sharpness_din(sig, fs, weighting="din")
         sharpness[i] = S
 
         # Load reference value


Test patch:
diff --git a/pytest.ini b/pytest.ini
index daf92e9f..b19bbafa 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -9,4 +9,5 @@ markers =
     tnr: marks tests related to tone-to-noise ratio 
     pr: marks tests related to prominence ratio
     audio: marks tests related to Audio methods
-    noct_spectrum: marks tests related to n_octave spectra
\ No newline at end of file
+    noct_spectrum: marks tests related to n_octave spectra
+    utils: marks tests related to utils functions
\ No newline at end of file
diff --git a/tests/input/1KHZ60DB.WAV b/tests/input/1KHZ60DB.WAV
deleted file mode 100644
index 023290e8..00000000
Binary files a/tests/input/1KHZ60DB.WAV and /dev/null differ
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 5 (pinknoise 60 dB).wav b/tests/input/Test signal 5 (pinknoise 60 dB).wav
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/Test signal 5 (pinknoise 60 dB).wav
rename to tests/input/Test signal 5 (pinknoise 60 dB).wav
diff --git a/tests/input/broadband_570.wav b/tests/input/broadband_570.wav
new file mode 100644
index 00000000..d5fab199
Binary files /dev/null and b/tests/input/broadband_570.wav differ
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_5.csv b/tests/input/test_signal_5.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_5.csv
rename to tests/input/test_signal_5.csv
diff --git a/tests/sound_level_meter/noct_spectrum/test_noct_spectrum.py b/tests/sound_level_meter/noct_spectrum/test_noct_spectrum.py
index 2094c067..f8482cd5 100644
--- a/tests/sound_level_meter/noct_spectrum/test_noct_spectrum.py
+++ b/tests/sound_level_meter/noct_spectrum/test_noct_spectrum.py
@@ -2,14 +2,10 @@
 try:
     import pytest
 except ImportError:
-    raise RuntimeError(
-        "In order to perform the tests you need the 'pytest' package."
-        )
+    raise RuntimeError("In order to perform the tests you need the 'pytest' package.")
 import numpy as np
 
-from mosqito.sound_level_meter.noct_spectrum.noct_spectrum import (
-    noct_spectrum,
-)
+from mosqito.sound_level_meter import noct_spectrum
 
 
 def _dB(amp):
diff --git a/tests/sq_metrics/loudness/test_loudness_zwst.py b/tests/sq_metrics/loudness/test_loudness_zwst.py
index 908a769b..d54b25b7 100644
--- a/tests/sq_metrics/loudness/test_loudness_zwst.py
+++ b/tests/sq_metrics/loudness/test_loudness_zwst.py
@@ -8,9 +8,7 @@
 try:
     import pytest
 except ImportError:
-    raise RuntimeError(
-        "In order to perform the tests you need the 'pytest' package."
-        )
+    raise RuntimeError("In order to perform the tests you need the 'pytest' package.")
 
 
 import numpy as np
@@ -18,6 +16,7 @@
 # Local application imports
 from mosqito.utils import load
 from mosqito.sq_metrics import loudness_zwst
+from mosqito.sq_metrics import loudness_zwst_perseg
 from mosqito.sq_metrics.loudness.loudness_zwst._main_loudness import (
     _main_loudness,
 )
@@ -31,7 +30,7 @@
 
 
 @pytest.mark.loudness_zwst  # to skip or run only loudness zwicker stationary tests
-def test_loudness_zwicker_3oct():
+def test_loudness_zwst_3oct():
     """Test function for the script loudness_zwst
 
     Test function for the script loudness_zwicker_stationary with
@@ -68,7 +67,7 @@ def test_loudness_zwicker_3oct():
 
 
 @pytest.mark.loudness_zwst  # to skip or run only loudness zwicker stationary tests
-def test_loudness_zwicker_wav():
+def test_loudness_zwst_wav():
     """Test function for the script loudness_zwicker_stationary
 
     Test function for the script loudness_zwicker_stationary with
@@ -87,12 +86,12 @@ def test_loudness_zwicker_wav():
     # Test signal as input for stationary loudness
     # (from ISO 532-1 annex B3)
     signal = {
-        "data_file": "tests/input/Test signal 3 (1 kHz 60 dB).wav",
-        "N": 4.019,
-        "N_specif_file": "tests/input/test_signal_3.csv",
+        "data_file": "tests/input/Test signal 5 (pinknoise 60 dB).wav",
+        "N": 10.498,
+        "N_specif_file": "tests/input/test_signal_5.csv",
     }
 
-    # Load signal and compute third octave band spectrum
+    # Load signal
     sig, fs = load(signal["data_file"], wav_calib=2 * 2 ** 0.5)
 
     # Compute Loudness
@@ -109,7 +108,7 @@ def test_loudness_zwicker_wav():
 
 
 @pytest.mark.loudness_zwst  # to skip or run only loudness zwicker stationary tests
-def test_loudness_zwicker_44100Hz():
+def test_loudness_zwst_44100Hz():
     """Test function for the script loudness_zwicker_stationary
     with input .wav file sampled at 44.1 kHz
     """
@@ -137,8 +136,25 @@ def test_loudness_zwicker_44100Hz():
     assert _check_compliance(loudness, signal, "./tests/output/")
 
 
+@pytest.mark.loudness_zwst
+def test_loudness_zwst_perseg():
+    # Load signal
+    sig, fs = load(
+        "tests/input/Test signal 5 (pinknoise 60 dB).wav", wav_calib=2 * 2 ** 0.5
+    )
+
+    # Compute Loudness
+    N, N_specific, bark_axis, time_axis = loudness_zwst_perseg(
+        sig, fs, nperseg=8192 * 2, noverlap=4096
+    )
+
+    # Check that all values are within the desired values +/- 5%
+    np.testing.assert_allclose(N, 10.498, rtol=0.05)
+
+
 # test de la fonction
 if __name__ == "__main__":
-    # test_loudness_zwicker_3oct()
-    test_loudness_zwicker_wav()
-    # test_loudness_zwicker_44100Hz()
+    # test_loudness_zwst_3oct()
+    # test_loudness_zwst_wav()
+    # test_loudness_zwst_44100Hz()
+    test_loudness_zwst_perseg()
\ No newline at end of file
diff --git a/tests/sq_metrics/sharpness/test_sharpness_din.py b/tests/sq_metrics/sharpness/test_sharpness_din.py
index 64047f51..eeb2402d 100644
--- a/tests/sq_metrics/sharpness/test_sharpness_din.py
+++ b/tests/sq_metrics/sharpness/test_sharpness_din.py
@@ -6,18 +6,18 @@
 """
 
 import numpy as np
+
 # Optional package import
 try:
     import pytest
 except ImportError:
-    raise RuntimeError(
-        "In order to perform the tests you need the 'pytest' package."
-        )
+    raise RuntimeError("In order to perform the tests you need the 'pytest' package.")
 
 
 # Local application imports
 from mosqito.utils import load
 from mosqito.sq_metrics import sharpness_din
+from mosqito.sq_metrics import sharpness_din_perseg
 
 
 @pytest.mark.sharpness_din  # to skip or run sharpness test
@@ -27,7 +27,6 @@ def test_sharpness_din():
     Test function for the function "comp_roughness" with 'din' method.
     The input signals come from DIN 45692_2009E. The compliance is assessed
     according to chapter 6 of the standard.
-    One .png compliance plot is generated.
 
     Parameters
     ----------
@@ -39,49 +38,53 @@ def test_sharpness_din():
     """
 
     # Input signal from DIN 45692_2009E
-    signal = {"data_file": "tests/input/1KHZ60DB.wav", "S": 1}
-
-    # Load signal
-    sig, fs = load(signal["data_file"], wav_calib=1)
+    sig, fs = load("tests/input/broadband_570.wav", wav_calib=1)
 
     # Compute sharpness
-    sharpness = sharpness_din(True, sig, fs, method="din")
+    sharpness = sharpness_din(sig, fs, weighting="aures")
+    sharpness = sharpness_din(sig, fs, weighting="bismarck")
+    sharpness = sharpness_din(sig, fs, weighting="fastl")
+    sharpness = sharpness_din(sig, fs, weighting="din")
 
-    assert check_compliance(sharpness, signal)
+    # Check that the value is within the desired values +/- 5%
+    # as per DIN 45692_2009E (chapter 6)
+    np.testing.assert_allclose(sharpness, 2.85, rtol=0.05)
 
 
-def check_compliance(S, signal):
-    """Check the comppiance of loudness calc. to ISO 532-1
+@pytest.mark.sharpness_din  # to skip or run sharpness test
+def test_sharpness_din_perseg():
+    """Test function for the sharpness calculation of an audio signal
 
-    The compliance is assessed according to chapter 6 of the
-    standard DIN 45692_2009E.
+    Test function for the function "comp_roughness" with 'din' method.
+    The input signals come from DIN 45692_2009E. The compliance is assessed
+    according to chapter 6 of the standard.
 
     Parameters
     ----------
-    S : float
-        computed sharpness value
-    signal : dict
-        {"data file" : <path to the standard file >
-         "S" : <sharpness reference value>
-         }
+    None
 
     Outputs
     -------
-    tst : bool
-        Compliance to the reference data
+    None
     """
 
-    # Load reference value
-    ref = signal["S"]
+    # Input signal from DIN 45692_2009E
+    sig, fs = load("tests/input/broadband_570.wav", wav_calib=1)
 
-    # Test for DIN 45692_2009E comformance (chapter 6)
-    tst = (S >= np.amax([ref * 0.95, ref - 0.05], axis=0)).all() and (
-        S <= np.amin([ref * 1.05, ref + 0.05], axis=0)
-    ).all()
+    # Compute sharpness
+    sharpness, _ = sharpness_din_perseg(sig, fs, nperseg=2 ** 14, weighting="aures")
+    sharpness, _ = sharpness_din_perseg(sig, fs, nperseg=2 ** 14, weighting="bismarck")
+    sharpness, _ = sharpness_din_perseg(sig, fs, nperseg=2 ** 14, weighting="fastl")
+    sharpness, time_axis = sharpness_din_perseg(
+        sig, fs, nperseg=2 ** 14, weighting="din"
+    )
 
-    return tst
+    # Check that the value is within the desired values +/- 5%
+    # as per DIN 45692_2009E (chapter 6)
+    np.testing.assert_allclose(sharpness, 2.85, rtol=0.05)
 
 
 # test de la fonction
 if __name__ == "__main__":
     test_sharpness_din()
+    test_sharpness_din_perseg()
diff --git a/tests/utils/test_time_segmentation.py b/tests/utils/test_time_segmentation.py
new file mode 100644
index 00000000..43851cb6
--- /dev/null
+++ b/tests/utils/test_time_segmentation.py
@@ -0,0 +1,32 @@
+# Optional package import
+try:
+    import pytest
+except ImportError:
+    raise RuntimeError("In order to perform the tests you need the 'pytest' package.")
+
+import numpy as np
+from mosqito.utils import sine_wave_generator
+from mosqito.utils import time_segmentation
+
+
+@pytest.mark.utils  # to skip or run only tests on utils module
+def test_time_segmentation():
+
+    fs = 48000
+    signal, _ = sine_wave_generator(
+        fs=fs,
+        t=1,
+        spl_value=60,
+        freq=40,
+    )
+
+    blocks, _ = time_segmentation(signal, fs, 8192, 2048, is_ecma=True)
+    np.testing.assert_array_equal(blocks.shape[1], 24)
+
+    blocks, _ = time_segmentation(signal, fs, 8192, 2048, is_ecma=False)
+    np.testing.assert_array_equal(blocks.shape[1], 20)
+
+
+# test de la fonction
+if __name__ == "__main__":
+    test_time_segmentation()
\ No newline at end of file
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_1.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_1.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_1.csv
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_1.csv
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_1.py b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_1.py
new file mode 100644
index 00000000..7dc59c69
--- /dev/null
+++ b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_1.py
@@ -0,0 +1,36 @@
+from numpy import array
+
+# Third octave levels as input for stationary loudness
+# (from ISO 532-1 annex B2)
+test_signal_1 = array(
+    [
+        -60,
+        -60,
+        78,
+        79,
+        89,
+        72,
+        80,
+        89,
+        75,
+        87,
+        85,
+        79,
+        86,
+        80,
+        71,
+        70,
+        72,
+        71,
+        72,
+        74,
+        69,
+        65,
+        67,
+        77,
+        68,
+        58,
+        45,
+        30.0,
+    ]
+)
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_13.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_13.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_13.csv
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_13.csv
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_13_spec.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_13_spec.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_13_spec.csv
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_13_spec.csv
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_2.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_2.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_2.csv
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_2.csv
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_3.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_3.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_3.csv
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_3.csv
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_4.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_4.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_4.csv
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_4.csv
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_5.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_5.csv
new file mode 100644
index 00000000..30cbcfc6
--- /dev/null
+++ b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_5.csv
@@ -0,0 +1,241 @@
+﻿# Loudness calculation according to ISO 532-1 for stationary sounds (free field)
+0.154
+0.154
+0.154
+0.154
+0.154
+0.154
+0.154
+0.154
+0.154
+0.451
+0.451
+0.451
+0.451
+0.451
+0.451
+0.451
+0.451
+0.451
+0.502
+0.502
+0.502
+0.502
+0.502
+0.502
+0.502
+0.502
+0.502
+0.502
+0.451
+0.451
+0.451
+0.451
+0.451
+0.451
+0.451
+0.449
+0.449
+0.449
+0.449
+0.449
+0.449
+0.449
+0.449
+0.449
+0.441
+0.441
+0.441
+0.441
+0.441
+0.441
+0.441
+0.441
+0.441
+0.441
+0.437
+0.437
+0.437
+0.437
+0.437
+0.437
+0.437
+0.437
+0.437
+0.437
+0.437
+0.437
+0.415
+0.415
+0.415
+0.415
+0.415
+0.415
+0.415
+0.415
+0.415
+0.415
+0.415
+0.415
+0.415
+0.408
+0.408
+0.408
+0.408
+0.408
+0.408
+0.408
+0.408
+0.408
+0.408
+0.408
+0.408
+0.408
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.404
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.413
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.446
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.499
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.582
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.600
+0.558
+0.546
+0.546
+0.546
+0.546
+0.546
+0.546
+0.546
+0.546
+0.546
+0.546
+0.546
+0.505
+0.477
+0.477
+0.477
+0.477
+0.477
+0.477
+0.477
+0.477
+0.477
+0.477
+0.477
+0.477
+0.435
+0.406
+0.384
+0.382
+0.382
+0.382
+0.382
+0.382
+0.382
+0.382
+0.382
+0.382
+0.360
+0.338
+0.323
+0.323
+0.323
+0.323
+0.323
+0.323
+0.323
+0.301
+0.283
+0.266
+0.249
+0.232
+0.217
+0.206
+0.197
+0.197
+0.186
+0.175
+0.164
+0.153
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_6.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_6.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_6.csv
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_6.csv
diff --git a/validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_6_spec.csv b/validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_6_spec.csv
similarity index 100%
rename from validations/sq_metrics/loudness_zwst/input/ISO_532-1/test_signal_6_spec.csv
rename to validations/sq_metrics/loudness_zwst/input/ISO_532_1/test_signal_6_spec.csv