The major part of changes in this release are not visible directly via public API. For example, the [Poly](https://diofant.readthedocs.io/en/v0.11.0/modules/polys.html#diofant.polys.polytools.Poly) class now uses the sparse polynomial representation (via [PolyElement](https://diofant.readthedocs.io/en/v0.11.0/internals/polys.html#diofant.polys.rings.PolyElement)):
python
In [1]: Poly(x**2 + x*y)
Out[1]: Poly(x**2 + x*y, x, y, domain='ZZ')
In [2]: type(_1.rep)
Out[2]: abc.PolyElement
A noticiable exception is finite fields of prime powers. Now it's possible to represent ones:
python
In [3]: F4 = FF(4)
In [4]: F4(2)
Out[4]: GF(2, [1, 1, 1])(2)
In [5]: _ + F4(1)
Out[5]: GF(2, [1, 1, 1])(3)
and univariate polynomial algorithms are ported to support such fields:
python
In [6]: factor(x**3 + 3*x + 2, modulus=4)
Out[6]:
⎛ 2 ⎞
(x + 1)⋅⎝x + x + 2⎠
This release also continues to improve solvers, now multivariate equations with surds are solved correctly:
python
In [7]: %time solve([sqrt(x) + y + 2, sqrt(y)*x - 1], x, y)
CPU times: user 1min 22s, sys: 496 ms, total: 1min 22s
Wall time: 1min 37s
Out[7]:
⎡⎧ 2
⎢⎨ ⎛ 5 3 ⎞ ⎛ 5 3
⎣⎩x: 4 + 4⋅RootOf⎝a₁ + 4⋅a₁ + 4⋅a₁ - 1, 3⎠ + RootOf⎝a₁ + 4⋅a₁ + 4⋅a₁ - 1,
4 2⎫ ⎧
⎞ ⎛ 5 3 ⎞ ⎬ ⎨ ⎛ 5 3
3⎠ , y: RootOf⎝a₁ + 4⋅a₁ + 4⋅a₁ - 1, 3⎠ ⎭, ⎩x: 4 + RootOf⎝a₁ + 4⋅a₁ + 4⋅a
4 2
⎞ ⎛ 5 3 ⎞ ⎛ 5 3
₁ - 1, 4⎠ + 4⋅RootOf⎝a₁ + 4⋅a₁ + 4⋅a₁ - 1, 4⎠ , y: RootOf⎝a₁ + 4⋅a₁ + 4⋅a
2⎫⎤
⎞ ⎬⎥
₁ - 1, 4⎠ ⎭⎦
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3760329.svg)](https://doi.org/10.5281/zenodo.3760329)
See [release notes](https://diofant.readthedocs.io/en/latest/release/notes-0.11.html).