>
> Yes, I must agree that in Pythonic world 
> sage: Permutation((1,2,3)) 
>
 

must be equal to 
> sage: Permutation([1,2,3]) 
>
 

And if you mean the cyclic permutation (1,2,3) this should be 
> sage: Permutation([(1,2,3)]) 


So to be pythonic, because a tuple should be the same as a list by what 
you're saying, we must have

sage: [1, 2].append(3) == (1, 2).append(3)

or perhaps you mean because they are both iterable, so

sage: Permutation([(1,2,3)])

should be a permutation on the set { (1,2,3) } because checking types is 
not pythonic?

   The point I'm making is that it is pythonic to handle different input 
types differently. That's what Permutation is doing, and there are examples 
which demonstrate this behavior. Now does it need to be better 
documentation, perhaps, but the programmer needs to be careful about what 
types are being used, even more so in weakly typed languages. Refining duck 
typing is not evil: you're only counting Mallards, not all ducks.
 

> Also, I agree Nathan has a point with the cycle notation. It shouln't be a 
>> single cycle but a list. There is still the problem of backward compatibily.
>>
> I don't consider that we have to stay backward-compatible with past bugs. 
> But we can have the usual 1-year 'deprecationwarning' whenever anybody 
> creates a Permutation from a tuple. I find it worse, but that's the Sage 
> way.
>

   I'm for keeping it (it's a natural shorthand) as I understand, and can 
easily teach people (mainly using the first example above), that a list and 
a tuple are different and there's an example which clearly shows they are 
handled differently. This difference between lists and tuples is something 
we have to work with a lot in Sage when dealing with hashing. Again, 
perhaps better documentation is useful.

> Nathan, I would be glad if you could  give *some* credit to the people who 
>> use permutations the way they are and listen when we tell you: we need them 
>> to start at 1!!
>>
> This thread has been created because Nicolas is implementing a workaround 
> for this "standard" in Matrices. Doesn't it scream that the standard is bad 
> ? A workaround in the very same software !
>

   I'm for making the users' lives easier if programmers are willing to 
work a little bit more. In other words no, it just says that these objects 
have different standards for different reasons and we (the programmers) 
need to bridge this.

>
> If I were a reviewer for this patch, I would set the ticket to needs_work 
> only because "the matrix file is no place to parse permutation input. Use 
> the class that already exists for that. If it does not do what you want 
> then update it, but this code does not belong to the matrix files".
>
> Still left unanswered:
>
> sage: Permutation([1,2,3])[1]
> 2
> sage: Permutation([1,2,3])(1)
> 1
>
> Is there a consensus here that this is a sound behaviour ? How do you want 
> me to believe that the current 1-based syntax is the best to not confuse 
> beginners when it creates behaviours like that ?
>

   I think you should teach the beginners that what you've done P[i] vs. 
P(i) are two *completely* different operations. In math terms, you're doing 
1 + 1 vs 1 * 1. Plus as mentioned (I think by you), we need to teach people 
that lists and other list-like objects are 0-based. Both of these are easy 
concepts that people pick up easily.

Best,
Travis

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to