Skip to content

Deprecate MixedIntegerLinearProgram.gen(), __call__, linear_function, which do not do anything useful; add default_variable method #20602

@mkoeppe

Description

@mkoeppe

As observed in the comments in #20461:

sage: mip = MixedIntegerLinearProgram(solver='GLPK')
sage: mip.gen(0)           ### Names a variable, but does not create it in the backend
x_0
sage: mip.number_of_variables()
0
sage: mip[0]                  ### This now creates a variable. It prints the same as the result of gen(0), but is different.
x_0
sage: mip.get_values(mip.gen(0))
[...]
TypeError: Not a MIPVariable: x_0
sage: mip.is_real(mip.gen(0))
[...]
KeyError: x_0
sage: mip.is_real(mip[0])
True

To summarize, the gen method pretends that it can refer to backend variables (and so do linear_function and the special __call__ method that is identical to linear_function). In reality, these methods cannot be use for anything except for what is tested in the docstring: printing some meaningless stuff.

This patch deprecates these three methods and removes the corresponding confusing and useless examples from the class documentation.

In return, the notion of the "default MIP variable" (which __getitem__ refers to) is explained; and it is exposed to the user by new method default_variable.

CC: @nbruin @dimpase @videlec @jdemeyer @fchapoton @novoselt

Component: numerical

Author: Matthias Koeppe

Branch/Commit: 684e91c

Reviewer: Dima Pasechnik

Issue created by migration from https://trac.sagemath.org/ticket/20602

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions