On Thu, Jan 26, 2012 at 3:51 PM, Tom Boothby <tomas.boot...@gmail.com> wrote:
> On Thu, Jan 26, 2012 at 3:21 PM, Robert Bradshaw
> <rober...@math.washington.edu> wrote:
>> On Thu, Jan 26, 2012 at 3:08 PM, Tom Boothby <tomas.boot...@gmail.com> wrote:
>>> On Thu, Jan 26, 2012 at 2:36 PM, Robert Bradshaw
>>> <rober...@math.washington.edu> wrote:
>>>> On Thu, Jan 26, 2012 at 1:51 PM, Michael Orlitzky <mich...@orlitzky.com> 
>>>> wrote:
>>>>> On 01/26/12 16:36, William Stein wrote:
>>>>>>>
>>>>>>> Why *not* use it?
>>>>>>
>>>>>> The standard argument against preparser stuff like this is that you
>>>>>> have to be careful to not use it when writing .py code for the Sage
>>>>>> core library.     But at least this matrix notation will always result
>>>>>> in a SyntaxError if used in Python code.
>>>>>
>>>>> A better reason is that, once implemented, someone has to maintain it
>>>>> forever.
>>>>>
>>>>> This is a fairly invasive preparse, and will likely cause more than a
>>>>> few bugs (see implicit multiplication for examples).
>>>>
>>>> I'd say it's a fairly simple preparse. The only tricky part is
>>>> multi-line handling in the face of iPython (where each line needs to
>>>> be pre-parsed individually, and that IMHO should be handled better at
>>>> a higher level where we buffer lines until we have a complete
>>>> statement and then preparse them as a whole). In any case, I'm willing
>>>> to maintain it for the next 5 years (which I expect will be trivial).
>>>>
>>>>> It also risks suggesting that sage matrices behave like Matlab ones, 
>>>>> which could cause confusion.
>>>>
>>>> Or suggest they behave like Pari matrices which use the same syntax,
>>>> but I don't think that's any more of an issue than say integers or
>>>> division in Matlab vs Sage.
>>>>
>>>>> Furthermore, some preparses are mutually exclusive: if you implement
>>>>> this one now, and Mathematica comes out with a killer feature a year
>>>>> from now using similar syntax ([do; my; homework; for; me;]), you can't
>>>>> preparse that.
>>>>
>>>> If we found such a feature useful, we probably wouldn't try to embed
>>>> it into our syntax.
>>>>
>>>>> Some preparses are worth it, obviously; I wouldn't throw them both out
>>>>> because they might conflict with one another. But the bar for inclusion
>>>>> should be pretty high.
>>>>
>>>> I totally agree with you here, the bar for adding to the preparser
>>>> should be high. I think it's a good candidate here because (1) It's
>>>> easy to understand what it means (2) it's illegal Python syntax, and
>>>> (3) Python doesn't even have the notion of matrices, so it's doubly
>>>> clear (perhaps once you get the SyntaxError) that it's a Sage-only
>>>> feature.
>>>>
>>>>
>>>>
>>>> On Thu, Jan 26, 2012 at 12:30 PM, Tom Boothby <tomas.boot...@gmail.com> 
>>>> wrote:
>>>>> On Thu, Jan 26, 2012 at 12:09 PM, Jason Grout
>>>>> <jason-s...@creativetrax.com> wrote:
>>>>>
>>>>>> Another option would be:
>>>>>>
>>>>>> [QQ: 1,2,3; 4,5,6]
>>>>>
>>>>> QQ:1 is a slice...
>>>>>
>>>>>> or, as Robert suggests:
>>>>>>
>>>>>> [1,2,3; 4,5,6, base_ring=QQ] -- but then it looks like base_ring=QQ is
>>>>>> another element.
>>>>>
>>>>> assignments aren't literals... but I don't like this.
>>>>>
>>>>> My thought for R[1,2,3;4,5,6] is that just as we preparse
>>>>>
>>>>> '[1..2]' to 'ellipsis_range(Integer(1),Ellipsis,Integer(2))', we'd 
>>>>> preparse
>>>>>
>>>>> '[1,2,3;4,5,6]' to 'matrix_literal((1,2,3),(4,5,6))'
>>>>>
>>>>> where
>>>>>
>>>>> Ring.__getitem__(self, x)
>>>>>
>>>>> could have a fast option for matrix literals -> matrices.
>>>>
>>>> Interesting idea, but then we'd have to detect whether the brackets
>>>> were creating a list vs. acting as an index operator and prepares
>>>> differently in the two situations lest we have R[...;...] ->
>>>> R[matrix_literal(...)] forcing [...;...] -> [matrix_literal(...)], a
>>>> list of one item.
>>>
>>> Yeah, I had my doubts about that, too.  Perhaps
>>>
>>> R[[...;...]]
>>>
>>> would be better, but I'm not really happy with this either.
>>>
>>>> One also has [a, b; c, d].change_ring(R). The exact notation for
>>>> specifying the basering can be deferred, though it does highlight the
>>>> importance of choosing a default according to the "principle of least
>>>> surprise."
>>>
>>> I'd like whatever notation we arrive at to be efficient.  If we preparse
>>>
>>> RDF[1,2,3;4,5,6] -> Matrix(RDF,[[Integer(1),Integer(2),...]])
>>>
>>> or use
>>>
>>> [...;...].change_ring(R)
>>>
>>> then we're gonna waste a lot of time, creating useless Integers and /
>>> or computing a common parent.
>>
>> I'm not extremely concerned about efficiency. These are literal
>> matrices after all, so presumably someone's typing them in by hand.
>
> Fair enough.
>
>> (If they're programmatically generated, construct the matrix directly
>> or vai a better constructor if you're worried about efficiency.
>> Conversion of ZZ to QQ is much faster than the parsing or even str ->
>> ZZ in the first place). But if the basering can be worked into the
>> original constructor, that's a plus. It'd be nice to be able to pass
>> arbitrary keywords into the constructor for the same reason.
>>
>>> What of a new keyword,
>>>
>>> [1,2...;...] over R -> Matrix(R,[[R(1),R(2)...],[...]])
>>>
>>> or perhaps something like
>>>
>>> [R$1,2,3;4,5,6]
>>>
>>> or
>>>
>>> [1,2,3;4,5,6]@R
>>>
>>> I'm not particularly attached to any idea.
>>
>> It's much simpler (technically and conceptually) to pick out the ring
>> if it lies entirely in the brackets. I'd go for a colon over # or @.
>
> Another issue: do we allow [1..10; 10..20]?

We probably shouldn't go to extra effort to support it.

> I can't seem to construct
> matrices with matrix entries (this is not absurd) -- but should the
> preparser grok it? [[1..10; 10..20] ; [2..12; 14..24]]

Yes, for sure. And [[1..10; 10..20].det() ; [2..12; 14..24].det()]

- Robert

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to