Fixes
- Guarantee that sampler._reproject always returns a feasible point
and will not attempt to reproject already feasible
points. [564](https://github.com/opencobra/cobrapy/pull/564)
- `Model.summary` no longer fails when calling after the model has
changed. Fixed by letting the summary function re-compute a solution
(default) or letting user supply a prior computed solution
object. [566](https://github.com/opencobra/cobrapy/pull/566)
- Metabolites must now have valid identifiers before being added to a
model or `ValueError` is raised.
- Fix use of underscores in key/value pairs in legacy sbml
notes. [547](https://github.com/opencobra/cobrapy/issues/547)
Backwards incompatible changes
- the Solution class no longer contains links progenitor model's
reactions and metabolites. Removed since it those can change after
the solution has been computed making them erroneous. This of course
implies that `Solution` constructor changes to:
def __init__(self, objective_value, status, fluxes, reduced_costs=None,
shadow_prices=None, **kwargs):