<s> import numpy as np <EOL> import mahotas as mh <EOL> from mahotas . features . moments import moments <EOL> def _slow ( A , p0 , p1 , cm ) : <EOL> c0 , c1 = cm <EOL> I , J = np . meshgrid ( np . arange ( A . shape [ <NUM_LIT:0> ] , dtype = float ) , np . arange ( A . shape [ <NUM_LIT:1> ] , dtype = float ) ) <EOL> I -= c0 <EOL> J -= c1 <EOL> I **= p0 <EOL> J **= p1 <EOL> return ( I . T * J . T * A ) . sum ( ) <EOL> def test_smoke ( ) : <EOL> assert moments ( np . zeros ( ( <NUM_LIT:100> , <NUM_LIT> ) ) , <NUM_LIT:2> , <NUM_LIT:2> ) == <NUM_LIT:0.0> <EOL> assert moments ( np . ones ( ( <NUM_LIT:100> , <NUM_LIT> ) ) , <NUM_LIT:2> , <NUM_LIT:2> ) != <NUM_LIT:0.0> <EOL> assert moments ( np . ones ( ( <NUM_LIT:100> , <NUM_LIT> ) ) , <NUM_LIT:0> , <NUM_LIT:0> ) == <NUM_LIT:100> * <NUM_LIT> <EOL> assert moments ( np . ones ( ( <NUM_LIT:100> , <NUM_LIT> ) ) , <NUM_LIT:2> , <NUM_LIT:2> ) != moments ( np . ones ( ( <NUM_LIT:100> , <NUM_LIT> ) ) , <NUM_LIT:2> , <NUM_LIT:2> , cm = ( <NUM_LIT:50> , <NUM_LIT:12> ) ) <EOL> def test_against_slow ( ) : <EOL> def perform ( p0 , p1 , cm , A ) : <EOL> assert moments ( A , p0 , p1 , cm ) == _slow ( A , p0 , p1 , cm ) <EOL> A = ( np . arange ( <NUM_LIT> ) % <NUM_LIT> ) . reshape ( ( <NUM_LIT:32> , - <NUM_LIT:1> ) ) <EOL> yield perform , <NUM_LIT:2> , <NUM_LIT:2> , ( <NUM_LIT> , <NUM_LIT> ) , A <EOL> yield perform , <NUM_LIT:2> , <NUM_LIT:2> , ( <NUM_LIT:20> , <NUM_LIT> ) , A <EOL> yield perform , <NUM_LIT:2> , <NUM_LIT:2> , ( <NUM_LIT:0> , <NUM_LIT:0> ) , A <EOL> yield perform , <NUM_LIT:1> , <NUM_LIT:2> , ( <NUM_LIT:0> , <NUM_LIT:0> ) , A <EOL> yield perform , <NUM_LIT:1> , <NUM_LIT:0> , ( <NUM_LIT:0> , <NUM_LIT:0> ) , A <EOL> def test_normalize ( ) : <EOL> A , B = np . meshgrid ( np . arange ( <NUM_LIT> ) , np . arange ( <NUM_LIT> ) ) <EOL> for p0 , p1 in [ ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:2> ) , ( <NUM_LIT:2> , <NUM_LIT:1> ) , ( <NUM_LIT:2> , <NUM_LIT:2> ) ] : <EOL> def f ( im ) : <EOL> return moments ( im , p0 , p1 , cm = mh . center_of_mass ( im ) , normalize = <NUM_LIT:1> ) <EOL> im = A + B <EOL> fs = [ f ( im ) , f ( im [ : : <NUM_LIT:2> ] ) , f ( im [ : , : : <NUM_LIT:2> ] ) , f ( im [ : : <NUM_LIT:2> , : : <NUM_LIT:2> ] ) ] <EOL> assert np . var ( fs ) < np . mean ( np . abs ( fs ) ) / <NUM_LIT:10> <EOL> def test_moments01 ( ) : <EOL> im = np . zeros ( ( <NUM_LIT:16> , <NUM_LIT:16> ) ) <EOL> im += np . arange ( <NUM_LIT:16> ) <EOL> im -= im . mean ( ) <EOL> assert np . abs ( mh . moments ( im , <NUM_LIT:1> , <NUM_LIT:0> ) ) < <NUM_LIT:0.1> <EOL> def test_expression ( ) : <EOL> import mahotas as mh <EOL> import numpy as np <EOL> im = ( np . zeros ( ( <NUM_LIT:12> , <NUM_LIT:16> ) ) + np . arange ( <NUM_LIT:16> ) ) <EOL> im -= im . mean ( ) <EOL> c0 , c1 = <NUM_LIT:4> , <NUM_LIT:7> <EOL> p0 , p1 = <NUM_LIT:2> , <NUM_LIT:3> <EOL> for p0 , p1 in [ ( <NUM_LIT:0> , <NUM_LIT:1> ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:2> ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:2> ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:0> ) ] : <EOL> sum_r = sum ( ( im [ i , j ] * ( i - c0 ) ** p0 * ( j - c1 ) ** p1 ) for i in range ( im . shape [ <NUM_LIT:0> ] ) for j in range ( im . shape [ <NUM_LIT:1> ] ) ) <EOL> mm_r = mh . moments ( im , p0 , p1 , cm = ( c0 , c1 ) ) <EOL> assert np . abs ( mm_r - sum_r ) < <NUM_LIT:1.> </s>
