def sufficientStats( cls, x, constParams=None ): # Compute T( x ). This is for when we're treating this class as P( x, y | Ѳ ) if( cls.dataN( x ) > 1 ): t = [ 0, 0, 0, 0, 0, 0, 0, 0 ] for _x, _ys in zip( *x ): s = cls.sufficientStats( ( _x, _ys ), constParams=constParams ) for i in range( 8 ): t[ i ] += s[ i ] return tuple( t ) ( x, ys ) = x u = constParams xIn = x[ :-1 ] xOut = x[ 1: ] - u[ :-1 ] t1, t2, t3 = Regression.sufficientStats( x=( xIn, xOut ), constParams=constParams ) t4, t5, t6 = Regression.sufficientStats( x=( x, ys ), constParams=constParams ) t7, t8 = Normal.sufficientStats( x=x[ 0 ], constParams=constParams ) return t1, t2, t3, t4, t5, t6, t7, t8
def initialStats( cls, x, constParams=None ): # Assumes that only a single element is passed in assert x.ndim == 1 return Normal.sufficientStats( x=x, constParams=constParams )