<s> """<STR_LIT>""" <EOL> import numpy as np <EOL> import scipy <EOL> from bayespy . nodes import ( Multinomial , <EOL> Dirichlet , <EOL> Mixture ) <EOL> from bayespy . utils import random <EOL> from bayespy . utils . misc import TestCase <EOL> class TestMultinomial ( TestCase ) : <EOL> """<STR_LIT>""" <EOL> def test_init ( self ) : <EOL> """<STR_LIT>""" <EOL> X = Multinomial ( <NUM_LIT:10> , [ <NUM_LIT:0.1> , <NUM_LIT> , <NUM_LIT> ] ) <EOL> X = Multinomial ( <NUM_LIT:10> , Dirichlet ( [ <NUM_LIT:5> , <NUM_LIT:4> , <NUM_LIT:3> ] ) ) <EOL> X = Multinomial ( <NUM_LIT:10> , [ <NUM_LIT:0.1> , <NUM_LIT> , <NUM_LIT> ] , plates = ( <NUM_LIT:3> , <NUM_LIT:4> ) ) <EOL> self . assertEqual ( X . plates , <EOL> ( <NUM_LIT:3> , <NUM_LIT:4> ) ) <EOL> X = Multinomial ( <NUM_LIT:10> , <NUM_LIT> * np . ones ( ( <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> ) ) ) <EOL> self . assertEqual ( X . plates , <EOL> ( <NUM_LIT:2> , <NUM_LIT:3> ) ) <EOL> n = <NUM_LIT:10> * np . ones ( ( <NUM_LIT:3> , <NUM_LIT:4> ) , dtype = np . int ) <EOL> X = Multinomial ( n , [ <NUM_LIT:0.1> , <NUM_LIT> , <NUM_LIT> ] ) <EOL> self . assertEqual ( X . plates , <EOL> ( <NUM_LIT:3> , <NUM_LIT:4> ) ) <EOL> X = Multinomial ( n , Dirichlet ( [ <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:9> ] , plates = ( <NUM_LIT:3> , <NUM_LIT:4> ) ) ) <EOL> self . assertEqual ( X . plates , <EOL> ( <NUM_LIT:3> , <NUM_LIT:4> ) ) <EOL> self . assertRaises ( ValueError , <EOL> Multinomial , <EOL> <NUM_LIT:10> , <EOL> <NUM_LIT:0.5> ) <EOL> self . assertRaises ( ValueError , <EOL> Multinomial , <EOL> <NUM_LIT:10> , <EOL> [ - <NUM_LIT:0.5> , <NUM_LIT> ] ) <EOL> self . assertRaises ( ValueError , <EOL> Multinomial , <EOL> <NUM_LIT:10> , <EOL> [ <NUM_LIT:0.5> , <NUM_LIT> ] ) <EOL> self . assertRaises ( ValueError , <EOL> Multinomial , <EOL> - <NUM_LIT:1> , <EOL> [ <NUM_LIT:0.5> , <NUM_LIT:0.5> ] ) <EOL> self . assertRaises ( ValueError , <EOL> Multinomial , <EOL> <NUM_LIT> , <EOL> [ <NUM_LIT:0.5> , <NUM_LIT:0.5> ] ) <EOL> self . assertRaises ( ValueError , <EOL> Multinomial , <EOL> <NUM_LIT:10> , <EOL> <NUM_LIT> * np . ones ( ( <NUM_LIT:2> , <NUM_LIT:4> ) ) , <EOL> plates = ( <NUM_LIT:3> , ) ) <EOL> self . assertRaises ( ValueError , <EOL> Multinomial , <EOL> <NUM_LIT:10> , <EOL> <NUM_LIT> * np . ones ( ( <NUM_LIT:2> , <NUM_LIT:4> ) ) , <EOL> plates = ( <NUM_LIT:1> , ) ) <EOL> pass <EOL> def test_moments ( self ) : <EOL> """<STR_LIT>""" <EOL> X = Multinomial ( <NUM_LIT:1> , [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0.1> ] ) <EOL> u = X . _message_to_child ( ) <EOL> self . assertEqual ( len ( u ) , <NUM_LIT:1> ) <EOL> self . assertAllClose ( u [ <NUM_LIT:0> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0.1> ] ) <EOL> X = Multinomial ( <NUM_LIT:10> , [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0.1> ] ) <EOL> u = X . _message_to_child ( ) <EOL> self . assertAllClose ( u [ <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT:2> , <NUM_LIT:1> ] ) <EOL> n = np . random . randint ( <NUM_LIT:1> , <NUM_LIT:10> ) <EOL> p = np . random . dirichlet ( [ <NUM_LIT:1> , <NUM_LIT:1> ] , size = <NUM_LIT:3> ) <EOL> X = Multinomial ( n , p ) <EOL> u = X . _message_to_child ( ) <EOL> self . assertAllClose ( u [ <NUM_LIT:0> ] , <EOL> p * n ) <EOL> n = np . random . randint ( <NUM_LIT:1> , <NUM_LIT:10> , size = ( <NUM_LIT:3> , ) ) <EOL> p = np . random . dirichlet ( [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] ) <EOL> X = Multinomial ( n , p ) <EOL> u = X . _message_to_child ( ) <EOL> self . assertAllClose ( u [ <NUM_LIT:0> ] , <EOL> p * n [ : , None ] ) <EOL> n = np . random . randint ( <NUM_LIT:1> , <NUM_LIT:10> , size = ( <NUM_LIT:4> , <NUM_LIT:1> ) ) <EOL> p = np . random . dirichlet ( [ <NUM_LIT:1> , <NUM_LIT:1> ] , size = <NUM_LIT:3> ) <EOL> X = Multinomial ( n , p ) <EOL> u = X . _message_to_child ( ) <EOL> self . assertAllClose ( u [ <NUM_LIT:0> ] , <EOL> p * n [ ... , None ] ) <EOL> P = Dirichlet ( [ <NUM_LIT:7> , <NUM_LIT:3> ] ) <EOL> logp = P . _message_to_child ( ) [ <NUM_LIT:0> ] <EOL> p0 = np . exp ( logp [ <NUM_LIT:0> ] ) / ( np . exp ( logp [ <NUM_LIT:0> ] ) + np . exp ( logp [ <NUM_LIT:1> ] ) ) <EOL> p1 = np . exp ( logp [ <NUM_LIT:1> ] ) / ( np . exp ( logp [ <NUM_LIT:0> ] ) + np . exp ( logp [ <NUM_LIT:1> ] ) ) <EOL> X = Multinomial ( <NUM_LIT:1> , P ) <EOL> u = X . _message_to_child ( ) <EOL> p = np . array ( [ p0 , p1 ] ) <EOL> self . assertAllClose ( u [ <NUM_LIT:0> ] , <EOL> p ) <EOL> P = Dirichlet ( [ <NUM_LIT:7> , <NUM_LIT:3> ] , plates = ( <NUM_LIT:10> , ) ) <EOL> X = Multinomial ( <NUM_LIT:5> , P ) <EOL> u = X . _message_to_child ( ) <EOL> self . assertAllClose ( u [ <NUM_LIT:0> ] * np . ones ( X . get_shape ( <NUM_LIT:0> ) ) , <EOL> <NUM_LIT:5> * p * np . ones ( ( <NUM_LIT:10> , <NUM_LIT:1> ) ) ) <EOL> pass <EOL> def test_lower_bound ( self ) : <EOL> """<STR_LIT>""" <EOL> X = Multinomial ( <NUM_LIT:10> , [ <NUM_LIT> , <NUM_LIT:0.5> , <NUM_LIT> ] ) <EOL> l = X . lower_bound_contribution ( ) <EOL> self . assertAllClose ( l , <NUM_LIT:0.0> ) <EOL> pass <EOL> def test_mixture ( self ) : <EOL> """<STR_LIT>""" <EOL> p0 = [ <NUM_LIT:0.1> , <NUM_LIT:0.5> , <NUM_LIT> , <NUM_LIT> ] <EOL> p1 = [ <NUM_LIT:0.5> , <NUM_LIT:0.1> , <NUM_LIT:0.1> , <NUM_LIT> ] <EOL> p2 = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0.1> , <NUM_LIT> ] <EOL> X = Mixture ( <NUM_LIT:2> , Multinomial , <NUM_LIT:10> , [ p0 , p1 , p2 ] ) <EOL> u = X . _message_to_child ( ) <EOL> self . assertAllClose ( u [ <NUM_LIT:0> ] , <EOL> <NUM_LIT:10> * np . array ( p2 ) ) <EOL> pass </s>
