**Dependency constraints:**
To work around incompatibilities in our TensorFlow dependencies, GPflow 2.1.0 has the following new version requirements (1522, 1537, 1551): `tensorflow<2.3`, `tensorflow_probability>=0.10.1,<0.11`, `cloudpickle==1.3.0`.
**We have restored compatibility with TensorFlow 2.3 and tensorflow_probability>=0.11 in the GPflow 2.1.1 patch release.**
Key improvements
- `gpflow.Parameter` finally plays well with TensorFlow's saving; instead of pretending to be a `tf.Variable`, we're now building on top of `tfp.util.TransformedVariable` (1518) - *see backwards incompatibilities below*
- Gauss-Hermite quadrature code was heavily refactored. The old function `gpflow.quadrature.ndiagquad` has been replaced by the `gpflow.quadrature.NDiagGHQuadrature` class - we strongly recommend upgrading (note that the dimensions of quadrature points have been moved from the end to the start for better broadcasting); `ndiagquad` will eventually be deprecated (1505, 1542).
Minor changes
- Add `base_conditional_with_lm` function that gets passed cholesky(K) instead of computing it explicitly (1528)
- Update to use stock rather than custom Docker image for CI (1545)
- Check dependency versions are valid on CI (1536)
- Docs: Readme updated to include new project that is using GPflow (1530)
Bug Fixes
- Restore pytest-xdist compatibility for parallelizing local tests (1541)
- Fix for quadrature failure mode when autograph was set to False (1548)
- Fix formatting in docs (intro.md) and restore link removed by 1498 (1520)
- Fix bug in varying_noise notebook (1526)
- Fix: separate_independent_conditional now correctly handles `q_sqrt=None`. (1533)
Backwards incompatibilities
* `gpflow.Parameter` is no longer pretending to be a `tf.Variable`, but instead subclasses tensorflow_probability's `TransformedVariable`. Several of the Variable-specific attributes/methods disappeared. Specifically, if you had previously called a Parameter's `value()` or `read_value()` methods, you should simply remove these.