<s> from sympy import exp , integrate , oo , S , simplify , sqrt , symbols <EOL> from sympy . core . compatibility import range <EOL> from sympy . physics . hydrogen import R_nl , E_nl , E_nl_dirac <EOL> from sympy . utilities . pytest import raises <EOL> n , r , Z = symbols ( '<STR_LIT>' ) <EOL> def feq ( a , b , max_relative_error = <NUM_LIT> , max_absolute_error = <NUM_LIT> ) : <EOL> a = float ( a ) <EOL> b = float ( b ) <EOL> if abs ( a - b ) < max_absolute_error : <EOL> return True <EOL> if abs ( b ) > abs ( a ) : <EOL> relative_error = abs ( ( a - b ) / b ) <EOL> else : <EOL> relative_error = abs ( ( a - b ) / a ) <EOL> return relative_error <= max_relative_error <EOL> def test_wavefunction ( ) : <EOL> a = <NUM_LIT:1> / Z <EOL> R = { <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> ) : <NUM_LIT:2> * sqrt ( <NUM_LIT:1> / a ** <NUM_LIT:3> ) * exp ( - r / a ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:0> ) : sqrt ( <NUM_LIT:1> / ( <NUM_LIT:2> * a ** <NUM_LIT:3> ) ) * exp ( - r / ( <NUM_LIT:2> * a ) ) * ( <NUM_LIT:1> - r / ( <NUM_LIT:2> * a ) ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:1> ) : S ( <NUM_LIT:1> ) / <NUM_LIT:2> * sqrt ( <NUM_LIT:1> / ( <NUM_LIT:6> * a ** <NUM_LIT:3> ) ) * exp ( - r / ( <NUM_LIT:2> * a ) ) * r / a , <EOL> ( <NUM_LIT:3> , <NUM_LIT:0> ) : S ( <NUM_LIT:2> ) / <NUM_LIT:3> * sqrt ( <NUM_LIT:1> / ( <NUM_LIT:3> * a ** <NUM_LIT:3> ) ) * exp ( - r / ( <NUM_LIT:3> * a ) ) * <EOL> ( <NUM_LIT:1> - <NUM_LIT:2> * r / ( <NUM_LIT:3> * a ) + S ( <NUM_LIT:2> ) / <NUM_LIT> * ( r / a ) ** <NUM_LIT:2> ) , <EOL> ( <NUM_LIT:3> , <NUM_LIT:1> ) : S ( <NUM_LIT:4> ) / <NUM_LIT> * sqrt ( <NUM_LIT:2> / ( <NUM_LIT:3> * a ** <NUM_LIT:3> ) ) * exp ( - r / ( <NUM_LIT:3> * a ) ) * <EOL> ( <NUM_LIT:1> - r / ( <NUM_LIT:6> * a ) ) * r / a , <EOL> ( <NUM_LIT:3> , <NUM_LIT:2> ) : S ( <NUM_LIT:2> ) / <NUM_LIT> * sqrt ( <NUM_LIT:2> / ( <NUM_LIT:15> * a ** <NUM_LIT:3> ) ) * exp ( - r / ( <NUM_LIT:3> * a ) ) * ( r / a ) ** <NUM_LIT:2> , <EOL> ( <NUM_LIT:4> , <NUM_LIT:0> ) : S ( <NUM_LIT:1> ) / <NUM_LIT:4> * sqrt ( <NUM_LIT:1> / a ** <NUM_LIT:3> ) * exp ( - r / ( <NUM_LIT:4> * a ) ) * <EOL> ( <NUM_LIT:1> - <NUM_LIT:3> * r / ( <NUM_LIT:4> * a ) + S ( <NUM_LIT:1> ) / <NUM_LIT:8> * ( r / a ) ** <NUM_LIT:2> - S ( <NUM_LIT:1> ) / <NUM_LIT> * ( r / a ) ** <NUM_LIT:3> ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:1> ) : S ( <NUM_LIT:1> ) / <NUM_LIT:16> * sqrt ( <NUM_LIT:5> / ( <NUM_LIT:3> * a ** <NUM_LIT:3> ) ) * exp ( - r / ( <NUM_LIT:4> * a ) ) * <EOL> ( <NUM_LIT:1> - r / ( <NUM_LIT:4> * a ) + S ( <NUM_LIT:1> ) / <NUM_LIT> * ( r / a ) ** <NUM_LIT:2> ) * ( r / a ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:2> ) : S ( <NUM_LIT:1> ) / <NUM_LIT:64> * sqrt ( <NUM_LIT:1> / ( <NUM_LIT:5> * a ** <NUM_LIT:3> ) ) * exp ( - r / ( <NUM_LIT:4> * a ) ) * <EOL> ( <NUM_LIT:1> - r / ( <NUM_LIT:12> * a ) ) * ( r / a ) ** <NUM_LIT:2> , <EOL> ( <NUM_LIT:4> , <NUM_LIT:3> ) : S ( <NUM_LIT:1> ) / <NUM_LIT> * sqrt ( <NUM_LIT:1> / ( <NUM_LIT> * a ** <NUM_LIT:3> ) ) * exp ( - r / ( <NUM_LIT:4> * a ) ) * ( r / a ) ** <NUM_LIT:3> , <EOL> } <EOL> for n , l in R : <EOL> assert simplify ( R_nl ( n , l , r , Z ) - R [ ( n , l ) ] ) == <NUM_LIT:0> <EOL> def test_norm ( ) : <EOL> n_max = <NUM_LIT:2> <EOL> for n in range ( n_max + <NUM_LIT:1> ) : <EOL> for l in range ( n ) : <EOL> assert integrate ( R_nl ( n , l , r ) ** <NUM_LIT:2> * r ** <NUM_LIT:2> , ( r , <NUM_LIT:0> , oo ) ) == <NUM_LIT:1> <EOL> def test_hydrogen_energies ( ) : <EOL> assert E_nl ( n , Z ) == - Z ** <NUM_LIT:2> / ( <NUM_LIT:2> * n ** <NUM_LIT:2> ) <EOL> assert E_nl ( n ) == - <NUM_LIT:1> / ( <NUM_LIT:2> * n ** <NUM_LIT:2> ) <EOL> assert E_nl ( <NUM_LIT:1> , <NUM_LIT> ) == - S ( <NUM_LIT> ) ** <NUM_LIT:2> / ( <NUM_LIT:2> * <NUM_LIT:1> ** <NUM_LIT:2> ) <EOL> assert E_nl ( <NUM_LIT:2> , <NUM_LIT> ) == - S ( <NUM_LIT> ) ** <NUM_LIT:2> / ( <NUM_LIT:2> * <NUM_LIT:2> ** <NUM_LIT:2> ) <EOL> assert E_nl ( <NUM_LIT:1> ) == - S ( <NUM_LIT:1> ) / ( <NUM_LIT:2> * <NUM_LIT:1> ** <NUM_LIT:2> ) <EOL> assert E_nl ( <NUM_LIT:2> ) == - S ( <NUM_LIT:1> ) / ( <NUM_LIT:2> * <NUM_LIT:2> ** <NUM_LIT:2> ) <EOL> assert E_nl ( <NUM_LIT:3> ) == - S ( <NUM_LIT:1> ) / ( <NUM_LIT:2> * <NUM_LIT:3> ** <NUM_LIT:2> ) <EOL> assert E_nl ( <NUM_LIT:4> ) == - S ( <NUM_LIT:1> ) / ( <NUM_LIT:2> * <NUM_LIT:4> ** <NUM_LIT:2> ) <EOL> assert E_nl ( <NUM_LIT:100> ) == - S ( <NUM_LIT:1> ) / ( <NUM_LIT:2> * <NUM_LIT:100> ** <NUM_LIT:2> ) <EOL> raises ( ValueError , lambda : E_nl ( <NUM_LIT:0> ) ) <EOL> def test_hydrogen_energies_relat ( ) : <EOL> assert E_nl_dirac ( <NUM_LIT:2> , <NUM_LIT:0> , Z = <NUM_LIT:1> , c = <NUM_LIT:1> ) == <NUM_LIT:1> / sqrt ( <NUM_LIT:2> ) - <NUM_LIT:1> <EOL> assert simplify ( E_nl_dirac ( <NUM_LIT:2> , <NUM_LIT:0> , Z = <NUM_LIT:1> , c = <NUM_LIT:2> ) - ( ( <NUM_LIT:8> * sqrt ( <NUM_LIT:3> ) + <NUM_LIT:16> ) <EOL> / sqrt ( <NUM_LIT:16> * sqrt ( <NUM_LIT:3> ) + <NUM_LIT:32> ) - <NUM_LIT:4> ) ) == <NUM_LIT:0> <EOL> assert simplify ( E_nl_dirac ( <NUM_LIT:2> , <NUM_LIT:0> , Z = <NUM_LIT:1> , c = <NUM_LIT:3> ) - ( ( <NUM_LIT> * sqrt ( <NUM_LIT:2> ) + <NUM_LIT> ) <EOL> / sqrt ( <NUM_LIT> * sqrt ( <NUM_LIT:2> ) + <NUM_LIT> ) - <NUM_LIT:9> ) ) == <NUM_LIT:0> <EOL> assert simplify ( E_nl_dirac ( <NUM_LIT:2> , <NUM_LIT:0> , Z = <NUM_LIT:1> , c = <NUM_LIT> ) - ( ( <NUM_LIT> + <NUM_LIT> * <EOL> sqrt ( <NUM_LIT> ) ) / sqrt ( <NUM_LIT> + <NUM_LIT> * sqrt ( <NUM_LIT> ) ) - <NUM_LIT> ) ) == <NUM_LIT:0> <EOL> assert simplify ( E_nl_dirac ( <NUM_LIT:2> , <NUM_LIT:0> , Z = <NUM_LIT> , c = <NUM_LIT> ) - ( ( <NUM_LIT> + <NUM_LIT> * <EOL> sqrt ( <NUM_LIT> ) ) / sqrt ( <NUM_LIT> + <NUM_LIT> * sqrt ( <NUM_LIT> ) ) - <NUM_LIT> ) ) == <NUM_LIT:0> <EOL> for n in range ( <NUM_LIT:1> , <NUM_LIT:5> ) : <EOL> for l in range ( n ) : <EOL> assert feq ( E_nl_dirac ( n , l ) , E_nl ( n ) , <NUM_LIT> , <NUM_LIT> ) <EOL> if l > <NUM_LIT:0> : <EOL> assert feq ( E_nl_dirac ( n , l , False ) , E_nl ( n ) , <NUM_LIT> , <NUM_LIT> ) <EOL> Z = <NUM_LIT:2> <EOL> for n in range ( <NUM_LIT:1> , <NUM_LIT:5> ) : <EOL> for l in range ( n ) : <EOL> assert feq ( E_nl_dirac ( n , l , Z = Z ) , E_nl ( n , Z ) , <NUM_LIT> , <NUM_LIT> ) <EOL> if l > <NUM_LIT:0> : <EOL> assert feq ( E_nl_dirac ( n , l , False , Z ) , E_nl ( n , Z ) , <NUM_LIT> , <NUM_LIT> ) <EOL> Z = <NUM_LIT:3> <EOL> for n in range ( <NUM_LIT:1> , <NUM_LIT:5> ) : <EOL> for l in range ( n ) : <EOL> assert feq ( E_nl_dirac ( n , l , Z = Z ) , E_nl ( n , Z ) , <NUM_LIT> , <NUM_LIT> ) <EOL> if l > <NUM_LIT:0> : <EOL> assert feq ( E_nl_dirac ( n , l , False , Z ) , E_nl ( n , Z ) , <NUM_LIT> , <NUM_LIT> ) <EOL> raises ( ValueError , lambda : E_nl_dirac ( <NUM_LIT:0> , <NUM_LIT:0> ) ) <EOL> raises ( ValueError , lambda : E_nl_dirac ( <NUM_LIT:1> , - <NUM_LIT:1> ) ) <EOL> raises ( ValueError , lambda : E_nl_dirac ( <NUM_LIT:1> , <NUM_LIT:0> , False ) ) </s>
