#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.

Reply via email to