# Release notes for cobrapy 0.9.0

## Fixes

- `Model.compartment` is now a dynamic property fetching the
  compartments from all metabolites therefore always
  up-to-date. Assigning a dictionary to the same property updates the
  internal dictionary of compartment descriptions. This change removes
  the need for the check for missing compartments from
  `validation.check_metabolite_compartment_formula`.
- Excessively long output of html representations in jupyter notebooks are now abbreviated [#577](https://github.com/opencobra/cobrapy/pull/577).
- Reaction forward and reverse variables are no longer cached with those object. No visible effect but simplifies the code.
- Fix bug in summary methods when used with exchange reaction sas objective. [#595](https://github.com/opencobra/cobrapy/pull/595).

## New features

- `Model.objective_direction` is a new revertible property to set maximization / minimization using the context manager.
- Change output of `production_envelope` to wide data frame format [#587](https://github.com/opencobra/cobrapy/pull/587). Also allow multiple carbon source reactions and better handling of zero-division exceptions.
- Enable summing lists of reactions, see [#596](https://github.com/opencobra/cobrapy/pull/596)

## Deprecated features

- `Model.get_metabolite_compartments` is deprecated (use
  `Model.compartments` instead).
- `Reaction.get_compartments` is deprecated (use
  `Reaction.compartments` instead).

## Backwards incompatible changes

- The format of the dataframe `production_envelope` changed listing max and min on different columns instead of the same.
