#20602: Deprecate MixedIntegerLinearProgram.gen(), __call__, linear_function,
which
do not do anything useful; add default_variable method
-----------------------------------+------------------------
Reporter: mkoeppe | Owner:
Type: defect | Status: new
Priority: major | Milestone: sage-7.3
Component: numerical | Resolution:
Keywords: lp | Merged in:
Authors: Matthias Koeppe | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
Dependencies: | Stopgaps:
-----------------------------------+------------------------
Changes (by {'newvalue': u'Matthias Koeppe', 'oldvalue': ''}):
* cc: chapoton, novoselt (added)
* author: => Matthias Koeppe
Old description:
> 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
> }}}
>
> I think mip.gen(i) should simply return the same variable that mip[i]
> returns (and like mip[i], it should create this variable in the backend
> if it does not exist yet).
New description:
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`.
--
--
Ticket URL: <https://trac.sagemath.org/ticket/20602#comment:2>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.