|
1 |
| -from symengine import Symbol, sin, cos, sqrt, Add, Mul, function_symbol, Integer, log, E, symbols |
| 1 | +from symengine import (Symbol, sin, cos, sqrt, Add, Mul, function_symbol, Integer, log, E, symbols, I, |
| 2 | + Rational) |
2 | 3 | from symengine.lib.symengine_wrapper import (Subs, Derivative, LambertW, zeta, dirichlet_eta,
|
3 | 4 | zoo, pi, KroneckerDelta, LeviCivita, erf, erfc,
|
4 | 5 | oo, lowergamma, uppergamma, exp, loggamma, beta,
|
5 |
| - polygamma, digamma, trigamma, EulerGamma) |
| 6 | + polygamma, digamma, trigamma, EulerGamma, sign, |
| 7 | + floor, ceiling, conjugate, nan, Float) |
6 | 8 |
|
7 | 9 |
|
8 | 10 | def test_sin():
|
@@ -140,64 +142,230 @@ def test_log():
|
140 | 142 | assert log(x, x) == 1
|
141 | 143 | assert log(x, y) == log(x) / log(y)
|
142 | 144 |
|
| 145 | + |
143 | 146 | def test_lambertw():
|
144 | 147 | assert LambertW(0) == 0
|
145 | 148 | assert LambertW(E) == 1
|
| 149 | + assert LambertW(-1/E) == -1 |
| 150 | + assert LambertW(-log(2)/2) == -log(2) |
| 151 | + |
146 | 152 |
|
147 | 153 | def test_zeta():
|
148 | 154 | x = Symbol("x")
|
149 | 155 | assert zeta(1) == zoo
|
150 | 156 | assert zeta(1, x) == zoo
|
151 | 157 |
|
| 158 | + assert zeta(0) == Rational(-1, 2) |
| 159 | + assert zeta(0, x) == Rational(1, 2) - x |
| 160 | + |
| 161 | + assert zeta(1, 2) == zoo |
| 162 | + assert zeta(1, -7) == zoo |
| 163 | + |
| 164 | + assert zeta(2, 1) == pi**2/6 |
| 165 | + |
| 166 | + assert zeta(2) == pi**2/6 |
| 167 | + assert zeta(4) == pi**4/90 |
| 168 | + assert zeta(6) == pi**6/945 |
| 169 | + |
| 170 | + assert zeta(2, 2) == pi**2/6 - 1 |
| 171 | + assert zeta(4, 3) == pi**4/90 - Rational(17, 16) |
| 172 | + assert zeta(6, 4) == pi**6/945 - Rational(47449, 46656) |
| 173 | + |
| 174 | + assert zeta(-1) == -Rational(1, 12) |
| 175 | + assert zeta(-2) == 0 |
| 176 | + assert zeta(-3) == Rational(1, 120) |
| 177 | + assert zeta(-4) == 0 |
| 178 | + assert zeta(-5) == -Rational(1, 252) |
| 179 | + |
| 180 | + assert zeta(-1, 3) == -Rational(37, 12) |
| 181 | + assert zeta(-1, 7) == -Rational(253, 12) |
| 182 | + assert zeta(-1, -4) == Rational(119, 12) |
| 183 | + assert zeta(-1, -9) == Rational(539, 12) |
| 184 | + |
| 185 | + assert zeta(-4, 3) == -17 |
| 186 | + assert zeta(-4, -8) == 8772 |
| 187 | + |
| 188 | + assert zeta(0, 1) == -Rational(1, 2) |
| 189 | + assert zeta(0, -1) == Rational(3, 2) |
| 190 | + |
| 191 | + assert zeta(0, 2) == -Rational(3, 2) |
| 192 | + assert zeta(0, -2) == Rational(5, 2) |
| 193 | + |
| 194 | + |
152 | 195 | def test_dirichlet_eta():
|
| 196 | + assert dirichlet_eta(0) == Rational(1, 2) |
| 197 | + assert dirichlet_eta(-1) == Rational(1, 4) |
153 | 198 | assert dirichlet_eta(1) == log(2)
|
154 | 199 | assert dirichlet_eta(2) == pi**2/12
|
| 200 | + assert dirichlet_eta(4) == pi**4*Rational(7, 720) |
| 201 | + |
155 | 202 |
|
156 | 203 | def test_kronecker_delta():
|
157 | 204 | x = Symbol("x")
|
| 205 | + y = Symbol("y") |
158 | 206 | assert KroneckerDelta(1, 1) == 1
|
159 | 207 | assert KroneckerDelta(1, 2) == 0
|
160 | 208 | assert KroneckerDelta(x, x) == 1
|
| 209 | + assert KroneckerDelta(x**2 - y**2, x**2 - y**2) == 1 |
| 210 | + assert KroneckerDelta(0, 0) == 1 |
| 211 | + assert KroneckerDelta(0, 1) == 0 |
| 212 | + |
161 | 213 |
|
162 | 214 | def test_levi_civita():
|
| 215 | + i = Symbol("i") |
| 216 | + j = Symbol("j") |
163 | 217 | assert LeviCivita(1, 2, 3) == 1
|
164 | 218 | assert LeviCivita(1, 3, 2) == -1
|
165 | 219 | assert LeviCivita(1, 2, 2) == 0
|
| 220 | + assert LeviCivita(i, j, i) == 0 |
| 221 | + assert LeviCivita(1, i, i) == 0 |
| 222 | + assert LeviCivita(1, 2, 3, 1) == 0 |
| 223 | + assert LeviCivita(4, 5, 1, 2, 3) == 1 |
| 224 | + assert LeviCivita(4, 5, 2, 1, 3) == -1 |
| 225 | + |
166 | 226 |
|
167 | 227 | def test_erf():
|
168 |
| - assert erf(0) == 0 |
| 228 | + x = Symbol("x") |
| 229 | + y = Symbol("y") |
| 230 | + assert erf(nan) == nan |
169 | 231 | assert erf(oo) == 1
|
| 232 | + assert erf(-oo) == -1 |
| 233 | + assert erf(0) == 0 |
| 234 | + assert erf(-2) == -erf(2) |
| 235 | + assert erf(-x*y) == -erf(x*y) |
| 236 | + assert erf(-x - y) == -erf(x + y) |
| 237 | + |
170 | 238 |
|
171 | 239 | def test_erfc():
|
172 |
| - assert erfc(0) == 1 |
| 240 | + assert erfc(nan) == nan |
173 | 241 | assert erfc(oo) == 0
|
| 242 | + assert erfc(-oo) == 2 |
| 243 | + assert erfc(0) == 1 |
| 244 | + |
174 | 245 |
|
175 | 246 | def test_lowergamma():
|
176 | 247 | assert lowergamma(1, 2) == 1 - exp(-2)
|
177 | 248 |
|
| 249 | + |
178 | 250 | def test_uppergamma():
|
179 | 251 | assert uppergamma(1, 2) == exp(-2)
|
180 | 252 | assert uppergamma(4, 0) == 6
|
181 | 253 |
|
| 254 | + |
182 | 255 | def test_loggamma():
|
183 | 256 | assert loggamma(-1) == oo
|
| 257 | + assert loggamma(-2) == oo |
184 | 258 | assert loggamma(0) == oo
|
185 | 259 | assert loggamma(1) == 0
|
| 260 | + assert loggamma(2) == 0 |
186 | 261 | assert loggamma(3) == log(2)
|
187 | 262 |
|
| 263 | + |
188 | 264 | def test_beta():
|
189 | 265 | assert beta(3, 2) == beta(2, 3)
|
190 | 266 |
|
| 267 | + |
191 | 268 | def test_polygamma():
|
| 269 | + assert polygamma(0, -9) == zoo |
| 270 | + assert polygamma(0, -9) == zoo |
| 271 | + assert polygamma(0, -1) == zoo |
192 | 272 | assert polygamma(0, 0) == zoo
|
| 273 | + assert polygamma(0, 1) == -EulerGamma |
| 274 | + assert polygamma(0, 7) == Rational(49, 20) - EulerGamma |
| 275 | + assert polygamma(1, 1) == pi**2/6 |
| 276 | + assert polygamma(1, 2) == pi**2/6 - 1 |
| 277 | + assert polygamma(1, 3) == pi**2/6 - Rational(5, 4) |
| 278 | + assert polygamma(3, 1) == pi**4 / 15 |
| 279 | + assert polygamma(3, 5) == 6*(Rational(-22369, 20736) + pi**4/90) |
| 280 | + assert polygamma(5, 1) == 8 * pi**6 / 63 |
| 281 | + |
193 | 282 |
|
194 | 283 | def test_digamma():
|
195 | 284 | x = Symbol("x")
|
196 | 285 | assert digamma(x) == polygamma(0, x)
|
197 | 286 | assert digamma(0) == zoo
|
198 | 287 | assert digamma(1) == -EulerGamma
|
199 | 288 |
|
| 289 | + |
200 | 290 | def test_trigamma():
|
201 | 291 | x = Symbol("x")
|
202 | 292 | assert trigamma(-2) == zoo
|
203 | 293 | assert trigamma(x) == polygamma(1, x)
|
| 294 | + |
| 295 | + |
| 296 | +def test_sign(): |
| 297 | + assert sign(1.2) == 1 |
| 298 | + assert sign(-1.2) == -1 |
| 299 | + assert sign(3*I) == I |
| 300 | + assert sign(-3*I) == -I |
| 301 | + assert sign(0) == 0 |
| 302 | + assert sign(nan) == nan |
| 303 | + |
| 304 | + |
| 305 | +def test_floor(): |
| 306 | + x = Symbol("x") |
| 307 | + y = Symbol("y") |
| 308 | + assert floor(nan) == nan |
| 309 | + assert floor(oo) == oo |
| 310 | + assert floor(-oo) == -oo |
| 311 | + assert floor(0) == 0 |
| 312 | + assert floor(1) == 1 |
| 313 | + assert floor(-1) == -1 |
| 314 | + assert floor(E) == 2 |
| 315 | + assert floor(pi) == 3 |
| 316 | + assert floor(Rational(1, 2)) == 0 |
| 317 | + assert floor(-Rational(1, 2)) == -1 |
| 318 | + assert floor(Rational(7, 3)) == 2 |
| 319 | + assert floor(-Rational(7, 3)) == -3 |
| 320 | + assert floor(Float(17.0)) == 17 |
| 321 | + assert floor(-Float(17.0)) == -17 |
| 322 | + assert floor(Float(7.69)) == 7 |
| 323 | + assert floor(-Float(7.69)) == -8 |
| 324 | + assert floor(I) == I |
| 325 | + assert floor(-I) == -I |
| 326 | + assert floor(2*I) == 2*I |
| 327 | + assert floor(-2*I) == -2*I |
| 328 | + assert floor(E + pi) == floor(E + pi) |
| 329 | + assert floor(I + pi) == floor(I + pi) |
| 330 | + assert floor(floor(pi)) == 3 |
| 331 | + assert floor(floor(y)) == floor(y) |
| 332 | + assert floor(floor(x)) == floor(floor(x)) |
| 333 | + assert floor(x) == floor(x) |
| 334 | + assert floor(2*x) == floor(2*x) |
| 335 | + |
| 336 | + |
| 337 | +def test_ceiling(): |
| 338 | + x = Symbol("x") |
| 339 | + y = Symbol("y") |
| 340 | + assert ceiling(nan) == nan |
| 341 | + assert ceiling(oo) == oo |
| 342 | + assert ceiling(-oo) == -oo |
| 343 | + assert ceiling(0) == 0 |
| 344 | + assert ceiling(1) == 1 |
| 345 | + assert ceiling(-1) == -1 |
| 346 | + assert ceiling(E) == 3 |
| 347 | + assert ceiling(pi) == 4 |
| 348 | + assert ceiling(Rational(1, 2)) == 1 |
| 349 | + assert ceiling(-Rational(1, 2)) == 0 |
| 350 | + assert ceiling(Rational(7, 3)) == 3 |
| 351 | + assert ceiling(-Rational(7, 3)) == -2 |
| 352 | + assert ceiling(Float(17.0)) == 17 |
| 353 | + assert ceiling(-Float(17.0)) == -17 |
| 354 | + assert ceiling(Float(7.69)) == 8 |
| 355 | + assert ceiling(-Float(7.69)) == -7 |
| 356 | + assert ceiling(I) == I |
| 357 | + assert ceiling(-I) == -I |
| 358 | + assert ceiling(2*I) == 2*I |
| 359 | + assert ceiling(-2*I) == -2*I |
| 360 | + assert ceiling(E + pi) == ceiling(E + pi) |
| 361 | + assert ceiling(I + pi) == ceiling(I + pi) |
| 362 | + assert ceiling(ceiling(pi)) == 4 |
| 363 | + assert ceiling(ceiling(y)) == ceiling(y) |
| 364 | + assert ceiling(ceiling(x)) == ceiling(ceiling(x)) |
| 365 | + assert ceiling(x) == ceiling(x) |
| 366 | + assert ceiling(2*x) == ceiling(2*x) |
| 367 | + |
| 368 | + |
| 369 | +def test_conjugate(): |
| 370 | + assert conjugate(pi) == pi |
| 371 | + assert conjugate(I) == -I |
0 commit comments