<s> """<STR_LIT>""" <EOL> from sympy . polys . distributedmodules import ( <EOL> sdm_monomial_mul , sdm_monomial_deg , sdm_monomial_divides , <EOL> sdm_add , sdm_LM , sdm_LT , sdm_mul_term , sdm_zero , sdm_deg , <EOL> sdm_LC , sdm_from_dict , <EOL> sdm_spoly , sdm_ecart , sdm_nf_mora , sdm_groebner , <EOL> sdm_from_vector , sdm_to_vector , sdm_monomial_lcm <EOL> ) <EOL> from sympy . polys . orderings import lex , grlex , InverseOrder <EOL> from sympy . polys . domains import QQ <EOL> from sympy . abc import x , y , z <EOL> from sympy . core . compatibility import range <EOL> def test_sdm_monomial_mul ( ) : <EOL> assert sdm_monomial_mul ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:3> ) ) == ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) <EOL> def test_sdm_monomial_deg ( ) : <EOL> assert sdm_monomial_deg ( ( <NUM_LIT:5> , <NUM_LIT:2> , <NUM_LIT:1> ) ) == <NUM_LIT:3> <EOL> def test_sdm_monomial_lcm ( ) : <EOL> assert sdm_monomial_lcm ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) , ( <NUM_LIT:1> , <NUM_LIT:5> , <NUM_LIT:0> ) ) == ( <NUM_LIT:1> , <NUM_LIT:5> , <NUM_LIT:3> ) <EOL> def test_sdm_monomial_divides ( ) : <EOL> assert sdm_monomial_divides ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) ) is True <EOL> assert sdm_monomial_divides ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> ) ) is True <EOL> assert sdm_monomial_divides ( ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:5> , <NUM_LIT:2> , <NUM_LIT:1> ) ) is True <EOL> assert sdm_monomial_divides ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:0> ) ) is False <EOL> assert sdm_monomial_divides ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) ) is False <EOL> assert sdm_monomial_divides ( ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:2> ) , ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:1> ) ) is False <EOL> def test_sdm_LC ( ) : <EOL> assert sdm_LC ( [ ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) , QQ ( <NUM_LIT:5> ) ) ] , QQ ) == QQ ( <NUM_LIT:5> ) <EOL> def test_sdm_from_dict ( ) : <EOL> dic = { ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:1> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:1> ) : QQ ( <NUM_LIT:1> ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) : QQ ( <NUM_LIT:1> ) } <EOL> assert sdm_from_dict ( dic , grlex ) == [ ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) , <EOL> ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> def test_sdm_add ( ) : <EOL> assert sdm_add ( [ ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] , [ ( ( <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] , lex , QQ ) == [ ( ( <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> assert sdm_add ( [ ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] , [ ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( - <NUM_LIT:1> ) ) ] , lex , QQ ) == [ ] <EOL> assert sdm_add ( [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] , [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:2> ) ) ] , lex , QQ ) == [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:3> ) ) ] <EOL> assert sdm_add ( [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] , [ ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] , lex , QQ ) == [ ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> def test_sdm_LM ( ) : <EOL> dic = { ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:0> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:1> ) : QQ ( <NUM_LIT:1> ) } <EOL> assert sdm_LM ( sdm_from_dict ( dic , lex ) ) == ( <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:1> ) <EOL> def test_sdm_LT ( ) : <EOL> dic = { ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:0> ) : QQ ( <NUM_LIT:2> ) , ( <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:1> ) : QQ ( <NUM_LIT:3> ) } <EOL> assert sdm_LT ( sdm_from_dict ( dic , lex ) ) == ( ( <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:3> ) ) <EOL> def test_sdm_mul_term ( ) : <EOL> assert sdm_mul_term ( [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] , ( ( <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:0> ) ) , lex , QQ ) == [ ] <EOL> assert sdm_mul_term ( [ ] , ( ( <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) , lex , QQ ) == [ ] <EOL> assert sdm_mul_term ( [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] , ( ( <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) , lex , QQ ) == [ ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> f = [ ( ( <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:4> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:3> ) ) ] <EOL> assert sdm_mul_term ( f , ( ( <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:2> ) ) , lex , QQ ) == [ ( ( <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:2> ) , QQ ( <NUM_LIT:8> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:6> ) ) ] <EOL> def test_sdm_zero ( ) : <EOL> assert sdm_zero ( ) == [ ] <EOL> def test_sdm_deg ( ) : <EOL> assert sdm_deg ( [ ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) , <NUM_LIT:1> ) , ( ( <NUM_LIT:10> , <NUM_LIT:0> , <NUM_LIT:1> ) , <NUM_LIT:1> ) , ( ( <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> ) , <NUM_LIT:4> ) ] ) == <NUM_LIT:7> <EOL> def test_sdm_spoly ( ) : <EOL> f = [ ( ( <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> g = [ ( ( <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> h = [ ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> assert sdm_spoly ( f , h , lex , QQ ) == [ ] <EOL> assert sdm_spoly ( f , g , lex , QQ ) == [ ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> def test_sdm_ecart ( ) : <EOL> assert sdm_ecart ( [ ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ) , <NUM_LIT:1> ) , ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , <NUM_LIT:1> ) ] ) == <NUM_LIT:0> <EOL> assert sdm_ecart ( [ ( ( <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:1> ) , <NUM_LIT:1> ) , ( ( <NUM_LIT:1> , <NUM_LIT:5> , <NUM_LIT:1> ) , <NUM_LIT:1> ) ] ) == <NUM_LIT:3> <EOL> def test_sdm_nf_mora ( ) : <EOL> f = sdm_from_dict ( { ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:1> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:1> ) : QQ ( <NUM_LIT:1> ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:1> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) : QQ ( <NUM_LIT:1> ) } , <EOL> grlex ) <EOL> f1 = sdm_from_dict ( { ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) : QQ ( <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:0> ) : QQ ( <NUM_LIT:1> ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) : QQ ( - <NUM_LIT:1> ) } , grlex ) <EOL> f2 = sdm_from_dict ( { ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) : QQ ( <NUM_LIT:1> ) } , grlex ) <EOL> ( id0 , id1 , id2 ) = [ sdm_from_dict ( { ( i , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) : QQ ( <NUM_LIT:1> ) } , grlex ) <EOL> for i in range ( <NUM_LIT:3> ) ] <EOL> assert sdm_nf_mora ( f , [ f1 , f2 ] , grlex , QQ , phantom = ( id0 , [ id1 , id2 ] ) ) == ( [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) , <EOL> ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] , <EOL> [ ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( - <NUM_LIT:1> ) ) , ( ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] ) <EOL> assert sdm_nf_mora ( f , [ f2 , f1 ] , grlex , QQ , phantom = ( id0 , [ id2 , id1 ] ) ) == ( [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] , <EOL> [ ( ( <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( - <NUM_LIT:1> ) ) , ( ( <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( - <NUM_LIT:1> ) ) , ( ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] ) <EOL> f = sdm_from_vector ( [ x * z , y ** <NUM_LIT:2> + y * z - z , y ] , lex , QQ , gens = [ x , y , z ] ) <EOL> f1 = sdm_from_vector ( [ x , y , <NUM_LIT:1> ] , lex , QQ , gens = [ x , y , z ] ) <EOL> f2 = sdm_from_vector ( [ x * y , z , z ** <NUM_LIT:2> ] , lex , QQ , gens = [ x , y , z ] ) <EOL> assert sdm_nf_mora ( f , [ f1 , f2 ] , lex , QQ ) == sdm_nf_mora ( f , [ f2 , f1 ] , lex , QQ ) == [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( - <NUM_LIT:1> ) ) , ( ( <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( - <NUM_LIT:1> ) ) , <EOL> ( ( <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> def test_conversion ( ) : <EOL> f = [ x ** <NUM_LIT:2> + y ** <NUM_LIT:2> , <NUM_LIT:2> * z ] <EOL> g = [ ( ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:2> ) ) , ( ( <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> assert sdm_to_vector ( g , [ x , y , z ] , QQ ) == f <EOL> assert sdm_from_vector ( f , lex , QQ ) == g <EOL> assert sdm_from_vector ( <EOL> [ x , <NUM_LIT:1> ] , lex , QQ ) == [ ( ( <NUM_LIT:1> , <NUM_LIT:0> ) , QQ ( <NUM_LIT:1> ) ) , ( ( <NUM_LIT:0> , <NUM_LIT:1> ) , QQ ( <NUM_LIT:1> ) ) ] <EOL> assert sdm_to_vector ( [ ( ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , <NUM_LIT:1> ) ] , [ x , y , z ] , QQ , n = <NUM_LIT:3> ) == [ <NUM_LIT:0> , x , <NUM_LIT:0> ] <EOL> assert sdm_from_vector ( [ <NUM_LIT:0> , <NUM_LIT:0> ] , lex , QQ , gens = [ x , y ] ) == sdm_zero ( ) <EOL> def test_nontrivial ( ) : <EOL> gens = [ x , y , z ] <EOL> def contains ( I , f ) : <EOL> S = [ sdm_from_vector ( [ g ] , lex , QQ , gens = gens ) for g in I ] <EOL> G = sdm_groebner ( S , sdm_nf_mora , lex , QQ ) <EOL> return sdm_nf_mora ( sdm_from_vector ( [ f ] , lex , QQ , gens = gens ) , <EOL> G , lex , QQ ) == sdm_zero ( ) <EOL> assert contains ( [ x , y ] , x ) <EOL> assert contains ( [ x , y ] , x + y ) <EOL> assert not contains ( [ x , y ] , <NUM_LIT:1> ) <EOL> assert not contains ( [ x , y ] , z ) <EOL> assert contains ( [ x ** <NUM_LIT:2> + y , x ** <NUM_LIT:2> + x ] , x - y ) <EOL> assert not contains ( [ x + y + z , x * y + x * z + y * z , x * y * z ] , x ** <NUM_LIT:2> ) <EOL> assert contains ( [ x + y + z , x * y + x * z + y * z , x * y * z ] , x ** <NUM_LIT:3> ) <EOL> assert contains ( [ x + y + z , x * y + x * z + y * z , x * y * z ] , x ** <NUM_LIT:4> ) <EOL> assert not contains ( [ x + y + z , x * y + x * z + y * z , x * y * z ] , x * y ** <NUM_LIT:2> ) <EOL> assert contains ( [ x + y + z , x * y + x * z + y * z , x * y * z ] , x ** <NUM_LIT:4> + y ** <NUM_LIT:3> + <NUM_LIT:2> * z * y * x ) <EOL> assert contains ( [ x + y + z , x * y + x * z + y * z , x * y * z ] , x * y * z ) <EOL> assert contains ( [ x , <NUM_LIT:1> + x + y , <NUM_LIT:5> - <NUM_LIT:7> * y ] , <NUM_LIT:1> ) <EOL> assert contains ( <EOL> [ x ** <NUM_LIT:3> + y ** <NUM_LIT:3> , y ** <NUM_LIT:3> + z ** <NUM_LIT:3> , z ** <NUM_LIT:3> + x ** <NUM_LIT:3> , x ** <NUM_LIT:2> * y + x ** <NUM_LIT:2> * z + y ** <NUM_LIT:2> * z ] , <EOL> x ** <NUM_LIT:3> ) <EOL> assert not contains ( <EOL> [ x ** <NUM_LIT:3> + y ** <NUM_LIT:3> , y ** <NUM_LIT:3> + z ** <NUM_LIT:3> , z ** <NUM_LIT:3> + x ** <NUM_LIT:3> , x ** <NUM_LIT:2> * y + x ** <NUM_LIT:2> * z + y ** <NUM_LIT:2> * z ] , <EOL> x ** <NUM_LIT:2> + y ** <NUM_LIT:2> ) <EOL> assert not contains ( [ x * ( <NUM_LIT:1> + x + y ) , y * ( <NUM_LIT:1> + z ) ] , x ) <EOL> assert not contains ( [ x * ( <NUM_LIT:1> + x + y ) , y * ( <NUM_LIT:1> + z ) ] , x + y ) <EOL> def test_local ( ) : <EOL> igrlex = InverseOrder ( grlex ) <EOL> gens = [ x , y , z ] <EOL> def contains ( I , f ) : <EOL> S = [ sdm_from_vector ( [ g ] , igrlex , QQ , gens = gens ) for g in I ] <EOL> G = sdm_groebner ( S , sdm_nf_mora , igrlex , QQ ) <EOL> return sdm_nf_mora ( sdm_from_vector ( [ f ] , lex , QQ , gens = gens ) , <EOL> G , lex , QQ ) == sdm_zero ( ) <EOL> assert contains ( [ x , y ] , x ) <EOL> assert contains ( [ x , y ] , x + y ) <EOL> assert not contains ( [ x , y ] , <NUM_LIT:1> ) <EOL> assert not contains ( [ x , y ] , z ) <EOL> assert contains ( [ x ** <NUM_LIT:2> + y , x ** <NUM_LIT:2> + x ] , x - y ) <EOL> assert not contains ( [ x + y + z , x * y + x * z + y * z , x * y * z ] , x ** <NUM_LIT:2> ) <EOL> assert contains ( [ x * ( <NUM_LIT:1> + x + y ) , y * ( <NUM_LIT:1> + z ) ] , x ) <EOL> assert contains ( [ x * ( <NUM_LIT:1> + x + y ) , y * ( <NUM_LIT:1> + z ) ] , x + y ) <EOL> def test_uncovered_line ( ) : <EOL> gens = [ x , y ] <EOL> f1 = sdm_zero ( ) <EOL> f2 = sdm_from_vector ( [ x , <NUM_LIT:0> ] , lex , QQ , gens = gens ) <EOL> f3 = sdm_from_vector ( [ <NUM_LIT:0> , y ] , lex , QQ , gens = gens ) <EOL> assert sdm_spoly ( f1 , f2 , lex , QQ ) == sdm_zero ( ) <EOL> assert sdm_spoly ( f3 , f2 , lex , QQ ) == sdm_zero ( ) <EOL> def test_chain_criterion ( ) : <EOL> gens = [ x ] <EOL> f1 = sdm_from_vector ( [ <NUM_LIT:1> , x ] , grlex , QQ , gens = gens ) <EOL> f2 = sdm_from_vector ( [ <NUM_LIT:0> , x - <NUM_LIT:2> ] , grlex , QQ , gens = gens ) <EOL> assert len ( sdm_groebner ( [ f1 , f2 ] , sdm_nf_mora , grlex , QQ ) ) == <NUM_LIT:2> </s>
