From 9e0792ee08e4f7ef7a770410f93b77ac41643aa6 Mon Sep 17 00:00:00 2001 From: Marcel Milcent Date: Sun, 23 May 2021 17:24:07 -0300 Subject: [PATCH 1/2] Bumped version --- Demo.ipynb | 4 ++-- README-pypi.md | 2 +- README.md | 2 +- __init__.py | 2 +- benford/__init__.py | 2 +- setup.py | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Demo.ipynb b/Demo.ipynb index e5a7654..e482783 100644 --- a/Demo.ipynb +++ b/Demo.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Current version: 0.3.3" + "### Current version: 0.4.2" ] }, { @@ -36,7 +36,7 @@ "metadata": {}, "source": [ "### Or you can cd into the site-packages subfolder of your python distribution (or environment) and clone from there:\n", - "##### `$ git clone http://github.com/milcent/Benford_py.git`" + "##### `$ git clone http://github.com/milcent/benford_py.git`" ] }, { diff --git a/README-pypi.md b/README-pypi.md index 66a5ca0..c6b344f 100644 --- a/README-pypi.md +++ b/README-pypi.md @@ -20,7 +20,7 @@ If you find *Benford_py* useful in your research, please consider adding the fol -------------------------------------------------------------------------------- -`current version = 0.4.1` +`current version = 0.4.2` ### See [release notes](https://github.com/milcent/benford_py/releases/) for features in this and in older versions diff --git a/README.md b/README.md index 6b3cf16..35c3cf4 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ If you find *Benford_py* useful in your research, please consider adding the fol -------------------------------------------------------------------------------- -`current version = 0.4.1` +`current version = 0.4.2` ### See [release notes](https://github.com/milcent/benford_py/releases/) for features in this and in older versions diff --git a/__init__.py b/__init__.py index 907d273..ab28a02 100644 --- a/__init__.py +++ b/__init__.py @@ -1,2 +1,2 @@ '''Benfords law module''' -__version__ = "0.4.1" +__version__ = "0.4.2" diff --git a/benford/__init__.py b/benford/__init__.py index f621e4b..b47dd4d 100644 --- a/benford/__init__.py +++ b/benford/__init__.py @@ -24,4 +24,4 @@ from .benford import * -__version__ = '0.4.1' +__version__ = '0.4.2' diff --git a/setup.py b/setup.py index 95f61c3..61fe828 100644 --- a/setup.py +++ b/setup.py @@ -7,12 +7,12 @@ long_description = f.read() setup(name='benford_py', - version='0.4.1', + version='0.4.2', description='A library for testing data sets with Bendford\'s Law', long_description=long_description, long_description_content_type='text/markdown', url='https://github.com/milcent/benford_py', - download_url='https://github.com/milcent/benford_py/archive/v0.4.1.tar.gz', + download_url='https://github.com/milcent/benford_py/archive/v0.4.2.tar.gz', author='Marcel Milcent', author_email='marcelmilcent@gmail.com', license='BSD 3-Clause', From 051d6f057dd3361335355f13e1eab66a7613f637 Mon Sep 17 00:00:00 2001 From: Marcel Milcent Date: Sun, 23 May 2021 17:24:22 -0300 Subject: [PATCH 2/2] new version docs --- docs/build/doctrees/environment.pickle | Bin 155304 -> 155445 bytes docs/build/html/_modules/benford/benford.html | 73 +++++++++--------- docs/build/html/_modules/benford/stats.html | 23 +++--- docs/build/html/_modules/benford/viz.html | 56 +++++++------- 4 files changed, 78 insertions(+), 74 deletions(-) diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 57aa6a95a00a1e0ea746199ac82ecdf59a183549..3cd02deaa2970d86883805d44e765b0eeb129b08 100644 GIT binary patch delta 10057 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 diff --git a/docs/build/html/_modules/benford/benford.html b/docs/build/html/_modules/benford/benford.html index 0e07ed9..d98afb3 100644 --- a/docs/build/html/_modules/benford/benford.html +++ b/docs/build/html/_modules/benford/benford.html @@ -154,8 +154,8 @@

Source code for benford.benford

 import warnings
 from pandas import Series, DataFrame
 from numpy import arange, log10, ones, abs, cos, sin, pi, mean
-from .constants import confs, digs_dict, sec_order_dict, rev_digs, names, \
-    mad_dict, crit_chi2, KS_crit
+from .constants import CONFS, DIGS, SEC_ORDER_DIGS, REV_DIGS, TEST_NAMES, \
+    MAD_CONFORM, CRIT_CHI2, CRIT_KS
 from .checks import _check_digs_, _check_confidence_, _check_test_, \
     _check_num_array_, _check_high_Z_
 from .utils import _set_N_, input_data, prepare, \
@@ -222,9 +222,9 @@ 

Source code for benford.benford

                 self['ZN'] = (ab * (10 ** decimals)).astype(int)
         # First digits
         for col in ['F1D', 'F2D', 'F3D']:
-            temp = self.ZN.loc[self.ZN >= 10 ** (rev_digs[col] - 1)]
+            temp = self.ZN.loc[self.ZN >= 10 ** (REV_DIGS[col] - 1)]
             self[col] = (temp // 10 ** ((log10(temp).astype(int)) -
-                                        (rev_digs[col] - 1)))
+                                        (REV_DIGS[col] - 1)))
             # fill NANs with -1, which is a non-usable value for digits,
             # to be discarded later.
             self[col] = self[col].fillna(-1).astype(int)
@@ -269,9 +269,9 @@ 

Source code for benford.benford

         # create a separated Expected distributions object
         super(Test, self).__init__(_get_expected_digits_(digs))
         # create column with occurrences of the digits in the base
-        self['Counts'] = base[digs_dict[digs]].value_counts()
+        self['Counts'] = base[DIGS[digs]].value_counts()
         # create column with relative frequencies
-        self['Found'] = base[digs_dict[digs]].value_counts(normalize=True)
+        self['Found'] = base[DIGS[digs]].value_counts(normalize=True)
         self.fillna(0, inplace=True)
         # create column with absolute differences
         self['Dif'] = self.Found - self.Expected
@@ -294,9 +294,9 @@ 

Source code for benford.benford

         self.sec_order = sec_order
 
         if sec_order:
-            self.name = names[sec_order_dict[digs]]
+            self.name = TEST_NAMES[SEC_ORDER_DIGS[digs]]
         else:
-            self.name = names[digs_dict[digs]]
+            self.name = TEST_NAMES[DIGS[digs]]
 
 
[docs] def update_confidence(self, new_conf, check=True): """Sets a new confidence level for the Benford object, so as to be used to @@ -317,11 +317,12 @@

Source code for benford.benford

     def critical_values(self):
         """dict: a dictionary with the critical values for the test at hand,
             according to the current confidence level."""
-        return {'Z': confs[self.confidence],
-                'KS': KS_crit[self.confidence] / (self.N ** 0.5),
-                'chi2': crit_chi2[self.ddf][self.confidence],
-                'MAD': mad_dict[self.digs]
-                }
+        crit_ks = CRIT_KS[self.confidence] / (self.N ** 0.5) if self.confidence\
+            else None
+        return {'Z': CONFS[self.confidence],
+                'KS': crit_ks,
+                'chi2': CRIT_CHI2[self.ddf][self.confidence],
+                'MAD': MAD_CONFORM[self.digs]}
 
 
[docs] def show_plot(self, save_plot=None, save_plot_kwargs=None): """Draws the test plot. @@ -338,7 +339,7 @@

Source code for benford.benford

         """
         x, figsize, text_x = _get_plot_args(self.digs)
         plot_digs(self, x=x, y_Exp=self.Expected, y_Found=self.Found,
-                    N=self.N, figsize=figsize, conf_Z=confs[self.confidence],
+                    N=self.N, figsize=figsize, conf_Z=CONFS[self.confidence],
                     text_x=text_x, save_plot=save_plot, save_plot_kwargs=save_plot_kwargs
                     )
@@ -395,9 +396,9 @@

Source code for benford.benford

         #: Confidence level to consider when setting some critical values
         self.confidence = None
         # (int): numerical representation of the test at hand
-        self.digs = rev_digs[test]
+        self.digs = REV_DIGS[test]
         # (str): the name of the Summation test.
-        self.name = names[f'{test}_Summ']
+        self.name = TEST_NAMES[f'{test}_Summ']
 
 
[docs] def show_plot(self, save_plot=None, save_plot_kwargs=None): """Draws the Summation test plot @@ -591,7 +592,7 @@

Source code for benford.benford

         self.tests = []
 
         # Create a DatFrame for each Test
-        for key, val in digs_dict.items():
+        for key, val in DIGS.items():
             test = Test(self.base.loc[self.base[val] != -1],
                         digs=key, confidence=self.confidence,
                         limit_N=self.limit_N)
@@ -599,9 +600,9 @@ 

Source code for benford.benford

             self.tests.append(val)
         # dict with the numbers of discarded entries for each test column
         self._discarded = {key: val for (key, val) in
-                           zip(digs_dict.values(),
+                           zip(DIGS.values(),
                                [len(self.base[col].loc[self.base[col] == -1])
-                                for col in digs_dict.values()])}
+                                for col in DIGS.values()])}
 
         if self.verbose:
             print('\n', ' Benford Object Instantiated '.center(50, '#'), '\n')
@@ -684,18 +685,18 @@ 

Source code for benford.benford

         #: Base instance of the differences between the ordered sample
         self.base_sec = Base(subtract_sorted(self.chosen),
                              decimals=self.decimals, sign=self.sign)
-        for key, val in digs_dict.items():
+        for key, val in DIGS.items():
             test = Test(self.base_sec.loc[self.base_sec[val] != -1],
                         digs=key, confidence=self.confidence,
                         limit_N=self.limit_N, sec_order=True)
-            setattr(self, sec_order_dict[key], test)
+            setattr(self, SEC_ORDER_DIGS[key], test)
             self.tests.append(f'{val}_sec')
             # No need to populate crit_vals dict, since they are the
             # same and do not depend on N
             self._discarded_sec = {key: val for (key, val) in zip(
-                                   sec_order_dict.values(),
+                                   SEC_ORDER_DIGS.values(),
                                    [sum(self.base_sec[col] == -1) for col in
-                                    digs_dict.values()])}
+                                    DIGS.values()])}
         if self.verbose:
             print(f'\nSecond order tests run in {len(self.base_sec)} '
                   'registries.\n\nNumber of discarded entries for second order'
@@ -878,10 +879,10 @@ 

Source code for benford.benford

         # Check on the possible values for confidence levels
         confidence = _check_confidence_(confidence)
         # Check on possible digits
-        _check_test_(digs)
+        _check_digs_(digs)
 
         temp = self.loc[self.ZN >= 10 ** (digs - 1)]
-        temp[digs_dict[digs]] = (temp.ZN // 10 ** ((log10(temp.ZN).astype(
+        temp[DIGS[digs]] = (temp.ZN // 10 ** ((log10(temp.ZN).astype(
                                                    int)) - (digs - 1))).astype(
                                                        int)
         n, m = 10 ** (digs - 1), 10 ** (digs)
@@ -890,10 +891,10 @@ 

Source code for benford.benford

         if simple:
             self.verbose = False
             show_plot = False
-            df = prepare(temp[digs_dict[digs]], digs, limit_N=limit_N,
+            df = prepare(temp[DIGS[digs]], digs, limit_N=limit_N,
                          simple=True)
         else:
-            N, df = prepare(temp[digs_dict[digs]], digs, limit_N=limit_N,
+            N, df = prepare(temp[DIGS[digs]], digs, limit_N=limit_N,
                             simple=False)
 
         if self.verbose:
@@ -901,7 +902,7 @@ 

Source code for benford.benford

                   f"Discarded {len(self) - len(temp)} records < {10 ** (digs - 1)}"
                   " after preparation.")
             if confidence is not None:
-                _inform_(df, high_Z=high_Z, conf=confs[confidence])
+                _inform_(df, high_Z=high_Z, conf=CONFS[confidence])
 
         # Mean absolute difference
         if MAD:
@@ -939,7 +940,7 @@ 

Source code for benford.benford

         if show_plot:
             plot_digs(df, x=x, y_Exp=df.Expected, y_Found=df.Found, N=N,
                        figsize=(2 * (digs ** 2 + 5), 1.5 * (digs ** 2 + 5)),
-                       conf_Z=confs[confidence], save_plot=save_plot,
+                       conf_Z=CONFS[confidence], save_plot=save_plot,
                        save_plot_kwargs=save_plot_kwargs)
         if ret_df:
             return df
@@ -999,7 +1000,7 @@

Source code for benford.benford

         """
         confidence = _check_confidence_(confidence)
 
-        conf = confs[confidence]
+        conf = CONFS[confidence]
 
         temp = self.loc[self.ZN >= 10, :]
         temp['SD'] = (temp.ZN // 10 ** ((log10(temp.ZN)).astype(
@@ -1110,7 +1111,7 @@ 

Source code for benford.benford

                 the differences
         """
         confidence = _check_confidence_(confidence)
-        conf = confs[confidence]
+        conf = CONFS[confidence]
 
         temp = self.loc[self.ZN >= 1000]
         temp['L2D'] = temp.ZN % 100
@@ -1196,7 +1197,7 @@ 

Source code for benford.benford

         if digs == 1:
             top = 9
         # Call the dict for F1D, F2D, F3D
-        d = digs_dict[digs]
+        d = DIGS[digs]
         if d not in self.columns:
             self[d] = self.ZN.astype(str).str[:digs].astype(int)
         # Call the expected proportion according to digs
@@ -1396,7 +1397,7 @@ 

Source code for benford.benford

 
         Exp, ind = prep_to_roll(data, self.test)
 
-        self.roll_series = data[digs_dict[test]].rolling(
+        self.roll_series = data[DIGS[test]].rolling(
                                 window=window).apply(mad_to_roll, 
                                     args=(Exp, ind), raw=False)
         self.roll_series.dropna(inplace=True)
@@ -1448,7 +1449,7 @@ 

Source code for benford.benford

 
         Exp, ind = prep_to_roll(data, test)
 
-        self.roll_series = data[digs_dict[test]].rolling(
+        self.roll_series = data[DIGS[test]].rolling(
                                 window=window).apply(mse_to_roll, 
                                     args=(Exp, ind), raw=False)
         self.roll_series.dropna(inplace=True)
@@ -1937,12 +1938,12 @@ 

Source code for benford.benford

 
     start = Source(data, sign=sign, decimals=decimals, verbose=verbose)
     temp = start.loc[start.ZN >= 10 ** (test - 1)]
-    temp[digs_dict[test]] = (temp.ZN // 10 ** ((log10(temp.ZN).astype(
+    temp[DIGS[test]] = (temp.ZN // 10 ** ((log10(temp.ZN).astype(
                                                 int)) - (test - 1))).astype(
                                                     int)
     li = 1. / (9 * (10 ** (test - 1)))
 
-    df = temp.groupby(digs_dict[test]).sum()
+    df = temp.groupby(DIGS[test]).sum()
     return mean(abs(df.ZN / df.ZN.sum() - li))
diff --git a/docs/build/html/_modules/benford/stats.html b/docs/build/html/_modules/benford/stats.html index f75f844..a83bd66 100644 --- a/docs/build/html/_modules/benford/stats.html +++ b/docs/build/html/_modules/benford/stats.html @@ -151,8 +151,8 @@

Source code for benford.stats

-from numpy import sqrt, log, where
-from .constants import crit_chi2, KS_crit, mad_dict, digs_dict
+from numpy import errstate, log, sqrt, where
+from .constants import CRIT_CHI2, CRIT_KS, MAD_CONFORM, DIGS
 
 
 
[docs]def Z_score(frame, N): @@ -194,7 +194,7 @@

Source code for benford.stats

         exp_counts = frame.Counts.sum() * frame.Expected
         dif_counts = frame.Counts - exp_counts
         found_chi = (dif_counts ** 2 / exp_counts).sum()
-        crit_chi = crit_chi2[ddf][confidence]
+        crit_chi = CRIT_CHI2[ddf][confidence]
         if verbose:
             print(f"\nThe Chi-square statistic is {found_chi:.4f}.\n"
                   f"Critical Chi-square for this series: {crit_chi}.")
@@ -241,7 +241,7 @@ 

Source code for benford.stats

         # finding the supremum - the largest cumul dist difference
         suprem = ((ks_frame.Found - ks_frame.Expected).abs()).max()
         # calculating the crittical value according to confidence
-        crit_KS = KS_crit[confidence] / sqrt(N)
+        crit_KS = CRIT_KS[confidence] / sqrt(N)
 
         if verbose:
             print(f"\nThe Kolmogorov-Smirnov statistic is {suprem:.4f}.\n"
@@ -285,11 +285,11 @@ 

Source code for benford.stats

         print(f"\nThe Mean Absolute Deviation is {mad}")
 
         if test != -2:
-            print(f"For the {mad_dict[digs_dict[test]]}:\n\
-            - 0.0000 to {mad_dict[test][0]}: Close Conformity\n\
-            - {mad_dict[test][0]} to {mad_dict[test][1]}: Acceptable Conformity\n\
-            - {mad_dict[test][1]} to {mad_dict[test][2]}: Marginally Acceptable Conformity\n\
-            - Above {mad_dict[test][2]}: Nonconformity")
+            print(f"For the {MAD_CONFORM[DIGS[test]]}:\n\
+            - 0.0000 to {MAD_CONFORM[test][0]}: Close Conformity\n\
+            - {MAD_CONFORM[test][0]} to {MAD_CONFORM[test][1]}: Acceptable Conformity\n\
+            - {MAD_CONFORM[test][1]} to {MAD_CONFORM[test][2]}: Marginally Acceptable Conformity\n\
+            - Above {MAD_CONFORM[test][2]}: Nonconformity")
         else:
             pass
     return mad
@@ -358,7 +358,10 @@

Source code for benford.stats

     Returns:
         kulb_leib_diverg (float)        
     """
-    return (log((dist_1 / dist_2), where=(dist_1 != 0)) * dist_1).sum()
+    # ignore divide by zero warning in np.where
+    with errstate(divide='ignore'):
+        kl_d = (log((dist_1 / dist_2), where=(dist_1 != 0)) * dist_1).sum()
+    return kl_d
 
diff --git a/docs/build/html/_modules/benford/viz.html b/docs/build/html/_modules/benford/viz.html index 1548a0e..8558559 100644 --- a/docs/build/html/_modules/benford/viz.html +++ b/docs/build/html/_modules/benford/viz.html @@ -154,7 +154,7 @@

Source code for benford.viz

 from numpy import array, arange, maximum, sqrt, ones
 import matplotlib.pyplot as plt
 from matplotlib.text import Annotation
-from .constants import colors, mad_dict
+from .constants import COLORS, MAD_CONFORM
 
 
 
[docs]def plot_expected(df, digs, save_plot=None, save_plot_kwargs=None): @@ -183,9 +183,9 @@

Source code for benford.viz

     plt.title('Expected Benford Distributions', size='xx-large')
     plt.xlabel(df.index.name, size='x-large')
     plt.ylabel('Distribution (%)', size='x-large')
-    ax.set_facecolor(colors['b'])
+    ax.set_facecolor(COLORS['b'])
     ax.set_ylim(0, y_max)
-    ax.bar(df.index, df.Expected * 100, color=colors['t'], align='center')
+    ax.bar(df.index, df.Expected * 100, color=COLORS['t'], align='center')
     ax.set_xticks(df.index)
     ax.set_xticklabels(df.index)
 
@@ -254,22 +254,22 @@ 

Source code for benford.viz

         lower_zeros = array([0]*len(upper))
         lower = maximum(y_Exp - sig - (1 / (2 * N)), lower_zeros)
         u = (y_Found < lower) | (y_Found > upper)
-        c = array([colors['m']] * len(u))
-        c[u] = colors['af']
+        c = array([COLORS['m']] * len(u))
+        c[u] = COLORS['af']
         lower *= 100.
         upper *= 100.
-        ax.plot(x, upper, color=colors['s'], zorder=5)
-        ax.plot(x, lower, color=colors['s'], zorder=5)
-        ax.fill_between(x, upper, lower, color=colors['s'],
-                        alpha=.3, label='Conf')
+        ax.plot(x, upper, color=COLORS['s'], zorder=5)
+        ax.plot(x, lower, color=COLORS['s'], zorder=5)
+        ax.fill_between(x, upper, lower, color=COLORS['s'],
+                        alpha=.3, label='Conf')
     else:
-        c = colors['m']
+        c = COLORS['m']
     ax.bar(x, y_Found * 100., color=c, label='Found', zorder=3, align='center')
-    ax.plot(x, y_Exp * 100., color=colors['s'], linewidth=2.5,
+    ax.plot(x, y_Exp * 100., color=COLORS['s'], linewidth=2.5,
             label='Benford', zorder=4)
     ax.set_xticks(x)
     ax.set_xticklabels(x, rotation=rotation)
-    ax.set_facecolor(colors['b'])
+    ax.set_facecolor(COLORS['b'])
     if text_x:
         ind = array(df.index).astype(str)
         ind[:10] = array(['00', '01', '02', '03', '04', '05',
@@ -308,13 +308,13 @@ 

Source code for benford.viz

     plt.title('Expected vs. Found Sums')
     plt.xlabel('Digits')
     plt.ylabel('Sums')
-    ax.bar(x, df.Percent, color=colors['m'],
+    ax.bar(x, df.Percent, color=COLORS['m'],
            label='Found Sums', zorder=3, align='center')
     ax.set_xlim(x[0] - 1, x[-1] + 1)
-    ax.axhline(li, color=colors['s'], linewidth=2, label='Expected', zorder=4)
+    ax.axhline(li, color=COLORS['s'], linewidth=2, label='Expected', zorder=4)
     ax.set_xticks(x)
     ax.set_xticklabels(x, rotation=rotation)
-    ax.set_facecolor(colors['b'])
+    ax.set_facecolor(COLORS['b'])
     if text_x:
         ind = array(x).astype(str)
         ind[:10] = array(['00', '01', '02', '03', '04', '05',
@@ -351,12 +351,12 @@ 

Source code for benford.viz

     fig = plt.figure(figsize=figsize)
     ax = fig.add_subplot(111)
     ax.plot(x, col.sort_values(), linestyle='--',
-            color=colors['s'], linewidth=3, label='Mantissas')
-    ax.plot(x, n.cumsum(), color=colors['m'],
+            color=COLORS['s'], linewidth=3, label='Mantissas')
+    ax.plot(x, n.cumsum(), color=COLORS['m'],
             linewidth=2, label='Expected')
     plt.ylim((0, 1.))
     plt.xlim((1, ld + 1))
-    ax.set_facecolor(colors['b'])
+    ax.set_facecolor(COLORS['b'])
     ax.set_title("Ordered Mantissas")
     plt.legend(loc='upper left')
 
@@ -388,11 +388,11 @@ 

Source code for benford.viz

     """
     fig = plt.figure(figsize=(figsize, figsize))
     ax = plt.subplot()
-    ax.set_facecolor(colors['b'])
+    ax.set_facecolor(COLORS['b'])
     ax.scatter(df.mant_x, df.mant_y, label="ARC TEST",
-               color=colors['m'])
+               color=COLORS['m'])
     ax.scatter(gravity_center[0], gravity_center[1],
-               color=colors['s'])
+               color=COLORS['s'])
     text_annotation = Annotation(
         "  Gravity Center: "
         f"x({round(gravity_center[0], 3)}),"
@@ -428,8 +428,8 @@ 

Source code for benford.viz

             https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html
     """
     fig, ax = plt.subplots(figsize=figsize)
-    ax.set_facecolor(colors['b'])
-    ax.plot(roll_series, color=colors['m'])
+    ax.set_facecolor(COLORS['b'])
+    ax.plot(roll_series, color=COLORS['m'])
 
     if save_plot:
         if not save_plot_kwargs:
@@ -452,13 +452,13 @@ 

Source code for benford.viz

             https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html
     """
     fig, ax = plt.subplots(figsize=figsize)
-    ax.set_facecolor(colors['b'])
-    ax.plot(roll_mad.roll_series, color=colors['m'])
+    ax.set_facecolor(COLORS['b'])
+    ax.plot(roll_mad.roll_series, color=COLORS['m'])
 
     if roll_mad.test != -2:
-        plt.axhline(y=mad_dict[roll_mad.test][0], color=colors['af'], linewidth=3)
-        plt.axhline(y=mad_dict[roll_mad.test][1], color=colors['h2'], linewidth=3)
-        plt.axhline(y=mad_dict[roll_mad.test][2], color=colors['s'], linewidth=3)
+        plt.axhline(y=MAD_CONFORM[roll_mad.test][0], color=COLORS['af'], linewidth=3)
+        plt.axhline(y=MAD_CONFORM[roll_mad.test][1], color=COLORS['h2'], linewidth=3)
+        plt.axhline(y=MAD_CONFORM[roll_mad.test][2], color=COLORS['s'], linewidth=3)
 
     if save_plot:
         if not save_plot_kwargs: