
    !gNO                        d Z ddlZddlZddlZddlmc mZ ddl	Z
ddlmZmZ ddlmZ ej"                  j%                  ej"                  j'                  e            ZdZej"                  j/                  ede      Z e
j2                  e      Zg dZ ej8                  ddgd	d
gg      ed<    ej8                  g dg dg dg dg      ed<    ej8                  g dg dg dg      ed<   d Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d  Z)d! Z*d" Z+ G d# d$      Z, G d% d&e,      Z- G d' d(e,      Z. G d) d*e,      Z/ G d+ d,      Z0 G d- d.e0      Z1y)/z'
Tests for contingency table analyses.
    N)assert_allcloseassert_equalzcontingency_table_r_results.csvresults)NNN            )   !   T   ~   )            )r   r         )r   r         r   )   
   r   )      r   )r   r   (   r   c            	         t        t              D ]  \  } }t        j                  j	                  |d      }|j                         }t        |j                  t        j                  | df          t        |j                  t        j                  | df          |j                  d      }t        |j                  |j                  d|j                  |j                         z  z
  z          y )NFshift_zeros
homog_stathomog_dfbhapkar)methodr   )	enumeratetablessmstatsSquareTablehomogeneityr   	statistic	r_resultslocdfsum)ktablesthmhmbs        l/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/stats/tests/test_contingency_tables.pytest_homogeneityr3   "   s    V$ X%XX!!%U!;^^immA|O&DEy}}Q
];< nnIn.r||q2<<%))+;U7U'VWX    c                     t         j                  j                  d       t        j                  t        d      ddg      } t         j                  j                  ddd      | d<   t         j                  j                  ddd      | d<   t        j                  | d   | d         }t        j                  |      }t        j                  j                  |       }t        j                  t        j                  |            }t        |j                         j                         |j                         j                                t        |j                         j                         |j                         j                                t        |      }t        |j!                  d      d	       t        |j"                  d
   d       y )Ni  d   v1v2indexcolumnsr   r   z$A 5x5 contingency table with counts:Tr   r   g       @)nprandomseedpd	DataFramerangerandintcrosstabctabr&   	from_dataasarrayr   summaryas_textstr
startswithr.   )r+   r.   rslt1rslt2rslt3ss         r2   test_SquareTable_from_datarP   /   sC   IINN3	E#Jt	=Byy  As+BtHyy  As+BtHKK4"T(+EU#E&&r*ERZZ./E((*((*, ((*((*, 	E
ADEtLT"B'r4   c                     g dg dg dg} t        j                  | g dg d      }t        j                  |d      }t	        j
                  g d	g d
g dg dgt        j                        }t        ||j                         y )N)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r9   Fr   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   dtype)	r@   rA   rE   r&   r=   rG   float64r   r.   )tabr+   df2es       r2   test_SquareTable_nonsquarerX   F   sb    i
+C	cI	>B


25
1C


L,lK	%A CIIr4   c                  P   g dg dg dg} t        j                  |       } t        j                  |       }|j                  }t        |d   dt        d      z         t        |d   dt        d	      z  d
d
       t        t        j                  |      |j                  d
d
       y )Nr   r   r   r   r   r         	   r<      7   r   r   -   H   h㈵>atolrtol)	r=   rG   rE   Tablecumulative_oddsratiosr   floatlogcumulative_log_oddsratios)r.   tbl_objcum_oddss      r2   test_cumulative_oddsrp   S   s    	9-EJJuEjjG,,HHTNBv$67HTNVuV}$<4BFF8$g&G&GD*r4   c                  8   g dg dg dg} t        j                  |       } t        j                  |       }|j                  }t        |d   d       t        |d   dt        d      z  d	d	
       t        t        j                  |      |j                  d	d	
       y )NrZ   r[   r\   r<   g      ?rb      r   re   rf   )	r=   rG   rE   ri   local_oddsratiosr   rk   rl   local_log_oddsratios)r.   rn   loc_oddss      r2   test_local_oddsrv   a   s    	9-EJJuEjjG''HHTNF+HTNBrNBFF8$g&B&BD*r4   c                     t        j                  dt         j                        } t        j                  dd      }t	        t        j                  | d      j                  |        t	        t        j                  | d      j                  |       t        j                  g dg dg d	gt         j                        } t        j                  g d
g dg dgt         j                        }t	        t        j                  |       j                  |       t	        t        j                  | d      j                  |       y )N)r   r   rR         ?Fr   T)r   r   r   )r   r   r   )r   r   r   )rx   r   r   )r   rx   r   )r   r   rx   )	r=   zerosrT   fullr   rE   ri   r.   rG   )tresultrs      r2   test_shiftingr~   o   s    
rzz*AWWVS!FA5177;A4066?


I&(jj	2A 	

K!(*

	4A A$$a(A4066:r4   c                  D   ddgddggddgddggddgddggg} t        j                  |       j                  }t        j                  |       }t        j                  |      }t        |j                  |j                         t        |j                  |j                         y )Nr^   r_   r   r]   r   r      )r=   rG   TrE   StratifiedTabler   oddsratio_pooledlogodds_pooled)tab1tab2ct1ct2s       r2   test_stratified_table_cuber      s     VaV1v1v.!Q!R0ABD::dD


t
$C


t
$CC((#*>*>?C&&(:(:;r4   c                     g dg dg} g dg dg}g dg dg}t        j                  g dg dg      }t        j                  g d	g d
g      }t        j                  |       }t	        |j
                  |dd       t	        |j                  |dd       t	        |j                  |dd       t	        |j                  |dd       y )N)rr   r^   r	   )   )i3     i     )gh|?6@gh|?1@gS㥛D@@g?5^I3@)gQr@g=
ףpm@g(\W{@g33333p@)g|a2U0j@g1Z@g(\?gNbX96@)g'?gw/?g_vOv?gh o?)g|ns;*g=yHg u5;ѿg}6`F@)g8~?g]:?gW̲?g6)gU朎hg-ջ.gW!<7ֿg0L@)gU朎h@g-ջ.@gW!<7?g0L-C6?rf   )	r=   arrayrE   ri   r   fittedvalueschi2_contribsresid_pearsonstandardized_resids)r.   fitc2prsrrU   s         r2   test_residsr      s     23E ,*,C
)
*
,B 
GGI 
JB	GGI 
JB **U
CC$$c4@C%%r4@C%%r4@C++RdFr4   c                     t        t              D ]P  \  } }dt        j                  |j                  d         z   }dt        j                  |j                  d         z   }t        j                  |d      j                  ||      }t        |j                  t        j                  | df          t        |j                  t        j                  | df          t        |j                  dz  t        j                  | df          t        |j                  dz  t        j                  | d	f   d
d
       t        |j                  t        j                  | df   d
d
       t        j                  |d      j                  ||dz        }t        |j                  t        j                  | df          t        |j                  t        j                  | df          t        |j                  dz  t        j                  | df          t        |j                  dz  t        j                  | df          t        |j                  t        j                  | df   d
d
       S y )Nr   r   Fr   lbl_stat
lbl_expvalr   lbl_varlbl_chi2re   rh   rg   
lbl_pvalue	lbl2_statlbl2_expvallbl2_var	lbl2_chi2lbl2_pvalue)r"   r#   r=   arangeshaperE   ri   test_ordinal_associationr   r(   r)   r*   	null_meannull_sdzscorepvalue)r-   r.   
row_scores
col_scoresrslts        r2   r   r      s   V$ \%5;;q>22
5;;q>22
 zz%U3LLZYcd	am(DE	ao(FGaq)|)DEQ	am(D4VZ[Y]]1l?%C$UYZ zz%U3LLZYcefYfg	an(EF	a6F(GHaq*})EFQ	an(EFY]]1m3C%D4VZ['\r4   c                  L   t         j                  j                  d       t         j                  j                  ddd      } ddlm}  ||       }t        j                  |       j                         }t        |j                  |d          t        |j                  |d          y )	Ni'"  r   r   )r   r   )sizer   )chi2_contingencyr   )r=   r>   r?   rC   scipy.statsr   rE   ri   test_nominal_associationr   r(   r   )r.   r   
rslt_scipybs       r2   test_chi2_associationr      su    IINN4IIb"62E,!%(J

5224AAKKA/AHHjm,r4   c                     t        t              D ]  \  } }t        j                  j	                  |d      }|j                         }t        |j                  t        j                  | df          t        |j                  t        j                  | df          t        |j                  t        j                  | df           y )NFr   bowker_stat	bowker_dfbowker_pvalue)r"   r#   r$   r%   r&   symmetryr   r(   r)   r*   r   r+   r   )r-   r.   r/   r   s       r2   test_symmetryr      s    V$ E%XX!!%U!;KKMY]]1m3C%DEQTT9==K89)--?0B"CDEr4   c                  0   t        j                  t        d   dd      } t        j                  j                  t        d         }|j                         }t        | j                  |j                         t        |j                  d       t        j                  t        d   dd      }t        |j                  t        j                  d          t        j                  t        d   d      }t        |j                  t        j                  d          y )	Nr   Fexact
correctionr   T)r   homog_cont_p)r   )r   homog_binom_p)rE   mcnemarr#   r$   r%   r&   r'   r   r(   r   r+   r   r)   r*   )b1r/   b2b3b4s        r2   test_mcnemarr      s     
fQiu	?B			fQi	(B		BBLL",,/ 
fQiu	>BBIIy}}->?@ 
fQit	,BBIIy}}-?@Ar4   c                     t        j                  g dg dg dg      j                  } t        j                  ddgddggddgddggg      }t
        j                  j                  ddd|       }t        |j                  |       t
        j                  j                  dddt        j                  |             }t        |j                  |       y )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )
r@   rA   r   r=   rG   rE   r   rF   r   r.   r+   rW   r   s      r2   test_from_data_stratifiedr      s    	/1I/1 
223! 


aVaV$1v1v&678A ))!Q26DQ ))!Q2::b>BDQr4   c                     t        j                  g dg dg      j                  } t        j                  ddgddgg      }t
        j                  j                  | d      }t        |j                  |       t
        j                  j                  t        j                  |       d      }t        |j                  |       y )Nr   r   r   r   r   Fr   )
r@   rA   r   r=   rG   rE   Table2x2rF   r   r.   r   s      r2   test_from_data_2x2r      s    	/1IJ	K	M	MB


QFQF#$A ==""25"9DQ ==""2::b>u"EDQr4   c            
      F   g dg dg dg dg dg dg dg dg dg	} t        j                  |       } t        j                  | d      \  }}}t	        |d	       t	        |d
       g dg dg dg dg dg dg dg dg dg	} t        j                  |       } t        j                  | d      \  }}}t	        |dd       t	        |d       | d d ddf   }t        j                  t        j                  |d d df   |d d df               }t        j                  |d      }t        j                  |dd      }t	        |j                  |j                         t	        |j                  |j                         t        t        |      j                  d      d       y )N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   F)return_objectg@r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   g
h"lxz?r   )rh   r   r   r   r   Tr   zdf          1
pvalue      0.65)r=   rG   rE   
cochrans_qr   r@   rD   r   r(   r   r   rJ   rK   )r.   statr   r+   dataxtabr   r   s           r2   test_cochranqr     s^   . E JJuEuEBD&"D#BE JJuEuEBD&"D&t,B AaC=D::bkk$q!t*d1a4j9:D	T	2B	d%E	:BBLL",,/BIIryy) R##$EFMr4   c                   N    e Zd Zedd       Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zy
)CheckStratifiedMixinc                 $   |s|nt        j                  |      }t        j                  |      | _        t        j                  |d      | _        |D cg c]  }t        j                  |       }}t        j                  |      | _        y c c}w )NTr   )	r=   dstackrE   r   r   rslt_0r@   rA   rslt_pandas)clsr#   use_arrtables1xtables_pandass         r2   
initializezCheckStratifiedMixin.initializeH  sl     '&RYYv->''0))&dC
289Qa99..}= :s   Bc                 ^    t        | j                  j                  | j                  dd       y Nr   r   )r   r   r   selfs    r2   test_oddsratio_pooledz*CheckStratifiedMixin.test_oddsratio_pooledQ  s#    		22D4I4I!	.r4   c                 ^    t        | j                  j                  | j                  dd       y r   )r   r   r   r   s    r2   test_logodds_pooledz(CheckStratifiedMixin.test_logodds_pooledV  s#    		00$2E2E!	.r4   c                     | j                   j                  d      }t        |j                  | j                  dd       t        |j
                  | j                  dd       y )NT)r   r   re   r   )r   test_null_oddsr   r(   mh_statr   	mh_pvaluer   r   s     r2   r   z#CheckStratifiedMixin.test_null_odds[  sE    yy''4'84dKT^^$TJr4   c                     | j                   j                         \  }}t        || j                  dd       t        || j                  dd       y r   )r   oddsratio_pooled_confintr   or_lcbor_ucbr   lcbucbs      r2   test_oddsratio_pooled_confintz2CheckStratifiedMixin.test_oddsratio_pooled_confinta  s<    99557ST[[t$?T[[t$?r4   c                     | j                   j                         \  }}t        |t        j                  | j
                        dd       t        |t        j                  | j                        dd       y r   )r   logodds_pooled_confintr   r=   rl   r   r   r   s      r2   test_logodds_pooled_confintz0CheckStratifiedMixin.test_logodds_pooled_confintg  sT    99335SRVVDKK0t!	#RVVDKK0t!	#r4   c                    t        | d      sy | j                  j                  d      }t        |j                  | j
                  dd       t        |j                  | j                  dd       | j                  j                  d      }t        |j                  | j                  dd       t        |j                  | j                  dd       y )Nor_homogF)adjustr   r   T)
hasattrr   test_equal_oddsr   r(   r   r   
or_homog_por_homog_adjor_homog_adj_pr   s     r2   r   z$CheckStratifiedMixin.test_equal_oddso  s    tZ(yy(((6DtLT__4dKyy(((5(9(94PT%8%8t$Or4   c                 :   t        j                         5  t        j                  dt               t	        | j
                  j                         j                         | j                  j                         j                                d d d        y # 1 sw Y   y xY w)Nignore)	warningscatch_warningssimplefilterRuntimeWarningr   r   rH   rI   r   r   s    r2   test_pandasz CheckStratifiedMixin.test_pandas}  sn    $$& 	?!!(N;**,446))113;;=?	? 	? 	?s   A3BBc           	      n   t         j                  j                  d       t        j                  t        d      d      }t         j                  j                  ddd      |d<   t         j                  j                  ddd      |d<   t        j                  t        j                  d	      t        j                  d	            |d
<   g }t        d	      D ]d  }t        j                  d	|z  d	|dz   z        }|j                  t        j                  |j                  |df   |j                  |df                f t        j                  |      }t        j                  j                  ddd
|      }t!        |j#                         j%                         |j#                         j%                                y )N   r6   )r7   r8   stratr9   r   r   r7   r8   r   r  r   )r=   r>   r?   r@   rA   rB   rC   kronr   onesappendrD   r*   rE   r   rF   r   rH   rI   )r   r+   r#   r-   iirL   rM   s          r2   test_from_dataz#CheckStratifiedMixin.test_from_data  s@   
		s\\c
4IJ99$$Q3/499$$Q3/4ggbiimRWWR[97r 	KA2a4QqS*BMM"++bffRX&6r4x8HIJ	K $$V,$$..tT7BGU]]_,,.0G0G0IJr4   N)F)__name__
__module____qualname__classmethodr   r   r   r   r   r   r   r	  r   r4   r2   r   r   F  s@    > >.
.
K@#P?Kr4   r   c                        e Zd ZdZed        Zy)TestStratified1z
    data = array(c(0, 0, 6, 5,
                   3, 0, 3, 6,
                   6, 2, 0, 4,
                   5, 6, 1, 0,
                   2, 5, 0, 0),
                   dim=c(2, 2, 5))
    rslt = mantelhaen.test(data)
    c                    d gdz  }t        j                  ddgddgg      |d<   t        j                  ddgddgg      |d<   t        j                  ddgddgg      |d<   t        j                  ddgddgg      |d<   t        j                  ddgddgg      |d<   | j                  |       d| _        t        j                  d      | _        d	| _        d
| _        d| _        d| _	        y )Nr   r   r   r   r   r   r   r]   gY8m@gM?g|Vjm?g |(G@)
r=   r   r   r   rl   r   r   r   r   r   r   r#   s     r2   setup_classzTestStratified1.setup_class  s    !HHq!fq!f-.q	HHq!fq!f-.q	HHq!fq!f-.q	HHq!fq!f-.q	HHq!fq!f-.q	v VVAY

r4   Nr  r  r  __doc__r  r  r  r4   r2   r  r    s      r4   r  c                        e Zd ZdZed        Zy)TestStratified2a_  
    library(DescTools)
    data = array(c(20, 14, 10, 24,
                   15, 12, 3, 15,
                   3, 2, 3, 2,
                   12, 3, 7, 5,
                   1, 0, 3, 2),
                   dim=c(2, 2, 5))
    rslt = mantelhaen.test(data)
    bd1 = BreslowDayTest(data, correct=FALSE)
    bd2 = BreslowDayTest(data, correct=TRUE)
    c                    d gdz  }t        j                  ddgddgg      |d<   t        j                  ddgd	dgg      |d
<   t        j                  d	dgd	dgg      |d<   t        j                  dd	gddgg      |d	<   t        j                  d
dgd	dgg      |d<   | j                  |d       d| _        t        j                  d      | _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        y )Nr   r   r   r      r   r   rr   r   r   r   r]   r   T)r   g_)Ǻ@g48'@gq?FB?g,i?g}ZEh@g9m4?gX9v?gV}b?r=   r   r   r   rl   r   r   r   r   r   r   r   r  r  r  s     r2   r  zTestStratified2.setup_class  s   !HHr2hR12q	HHr2hB01q	HHq!fq!f-.q	HHr1g1v./q	HHq!fq!f-.q	 	vt,%VVF^!

  "#r4   Nr  r  r4   r2   r  r    s     $ $r4   r  c                        e Zd ZdZed        Zy)TestStratified3a  
    library(DescTools)
    data = array(c(313, 512, 19, 89,
                   207, 353, 8, 17,
                   205, 120, 391, 202,
                   278, 139, 244, 131,
                   138, 53, 299, 94,
                   351, 22, 317, 24),
                   dim=c(2, 2, 6))
    rslt = mantelhaen.test(data)
    bd1 = BreslowDayTest(data, correct=FALSE)
    bd2 = BreslowDayTest(data, correct=TRUE)
    c                 L   d gdz  }t        j                  ddgddgg      |d<   t        j                  ddgd	d
gg      |d<   t        j                  ddgddgg      |d<   t        j                  ddgddgg      |d<   t        j                  ddgddgg      |d<   t        j                  ddgddgg      |d<   | j                  |       d | _        t        j                  d       | _        d!| _        d"| _        d#| _        d$| _	        d%| _
        d&| _        d%| _        d&| _        y )'Nr   i9  i   r   Y   r      ia  r^      r      x   i     r   i           r      5   i+  ^   r   i_     i=  r!  r   gcK?gOec?g6>W[?gZ ?gA%Pi?g=2@g+`?r"  r  s     r2   r  zTestStratified3.setup_class  s*   !HHsCj2r(34q	HHsCj1b'23q	HHsCj3*56q	HHsCj3*56q	HHsBi#r34q	HHsBi#r34q	v'VVH-

  $ $(r4   Nr  r  r4   r2   r$  r$    s     ) )r4   r$  c                   j    e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zy)Check2x2Mixinc                     t        j                  | j                        | _        t         j                  j	                  | j
                        | _        y N)rE   r   r.   rn   rF   r   tbl_data_obj)r   s    r2   r   zCheck2x2Mixin.initialize  s1    mmCII.==22388<r4   c                 X    t        | j                  j                  | j                         y r6  )r   rn   	oddsratior   s    r2   test_oddsratiozCheck2x2Mixin.test_oddsratio      ..?r4   c                 X    t        | j                  j                  | j                         y r6  )r   rn   log_oddsratior   s    r2   test_log_oddsratioz Check2x2Mixin.test_log_oddsratio      22D4F4FGr4   c                 X    t        | j                  j                  | j                         y r6  )r   rn   log_oddsratio_ser   s    r2   test_log_oddsratio_sez#Check2x2Mixin.test_log_oddsratio_se      55t7L7LMr4   c                 `    t        | j                  j                         | j                         y r6  )r   rn   oddsratio_pvaluer   s    r2   test_oddsratio_pvaluez#Check2x2Mixin.test_oddsratio_pvalue       5579N9NOr4   c                     | j                   j                  d      \  }}| j                  \  }}t        ||       t        ||       y Ng?)rn   oddsratio_confintr   r   lcb1ucb1lcb2ucb2s        r2   test_oddsratio_confintz$Check2x2Mixin.test_oddsratio_confint$  =    \\33D9
d++
dd#d#r4   c                 X    t        | j                  j                  | j                         y r6  )r   rn   	riskratior   s    r2   test_riskratiozCheck2x2Mixin.test_riskratio+  r;  r4   c                 X    t        | j                  j                  | j                         y r6  )r   rn   log_riskratior   s    r2   test_log_riskratioz Check2x2Mixin.test_log_riskratio/  r?  r4   c                 X    t        | j                  j                  | j                         y r6  )r   rn   log_riskratio_ser   s    r2   test_log_riskratio_sez#Check2x2Mixin.test_log_riskratio_se3  rC  r4   c                 `    t        | j                  j                         | j                         y r6  )r   rn   riskratio_pvaluer   s    r2   test_riskratio_pvaluez#Check2x2Mixin.test_riskratio_pvalue7  rG  r4   c                     | j                   j                  d      \  }}| j                  \  }}t        ||       t        ||       y rI  )rn   riskratio_confintr   rK  s        r2   test_riskratio_confintz$Check2x2Mixin.test_riskratio_confint;  rQ  r4   c                     | j                   j                  d      \  }}| j                  \  }}t        ||       t        ||       y rI  )rn   log_riskratio_confintr   rK  s        r2   test_log_riskratio_confintz(Check2x2Mixin.test_log_riskratio_confintB  s=    \\77=
d//
dd#d#r4   c                     t        | j                  j                         j                         | j                  j                         j                                y r6  )r   rn   rH   rI   r7  r   s    r2   r  zCheck2x2Mixin.test_from_dataI  s=    T\\))+335&&..088:	<r4   c                 |    t        | j                  j                         j                         | j                         y r6  )r   rn   rH   rI   summary_stringr   s    r2   test_summaryzCheck2x2Mixin.test_summaryM  s+    T\\))+335((	*r4   N)r  r  r  r  r   r:  r>  rB  rF  rP  rT  rW  rZ  r]  r`  rc  r  rg  r  r4   r2   r4  r4    s]    = =@HNP$@HNP$$<*r4   r4  c                       e Zd Zed        Zy)	Test2x2_1c                    t        j                  d      }g d|d d df<   g d|d d df<   t        j                  |      | _        t        j                  ddgddgg      | _        d| _        d| _        t        j                  d      | _        d	d
g| _	        d| _
        d| _        d| _        dt        j                  d      z  | _        d| _        ddg| _        ddg| _        g d}dj#                  |      | _        | j'                          y )N)r^   r   )r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   g      ?g        gU3?g~3/@gvc?gL%@g,},g,},?)z3               Estimate   SE   LCB    UCB   p-value3---------------------------------------------------z3Odds ratio        1.000        0.063 15.988   1.000z3Log odds ratio    0.000 1.414 -2.772  2.772   1.000z3Risk ratio        1.000        0.250  3.998   1.000z3Log risk ratio    0.000 0.707 -1.386  1.386   1.000rk  
)r=   ry   rG   r   r.   r9  r=  sqrtrA  rJ  rE  rS  rV  rY  r\  r_  rb  joinrf  r   )r   r   sss      r2   r  zTest2x2_1.setup_classU  s    xx-QT
-QT
::d#JJAA/0	!wwqz!57I J! 2771:~!!4"4!6%8&8%:!G "YYr]r4   N)r  r  r  r  r  r  r4   r2   ri  ri  S  s     r4   ri  )2r  osr  numpyr=   $statsmodels.stats.contingency_tablesr%   contingency_tablesrE   pandasr@   numpy.testingr   r   statsmodels.apiapir$   pathdirnameabspath__file__cur_dirfnamern  fpathread_csvr)   r#   rG   r3   rP   rX   rp   rv   r~   r   r   r   r   r   r   r   r   r   r   r  r  r$  r4  ri  r  r4   r2   <module>r     s   
   3 3  7 
''//"''//(3
4)
Wi/BKK	 
BJJR2r(+,q	BJJ*&%$& 'q	
 BJJ#"$ %q	

X(.
**;"<G0\0-EB$  >NBOK OKd* <)$* )$X*)* *)XB* B*J r4   