There are many places where Sage provides a nice frontend class while the 
actual computation is implemented differently. Of course you could just use 
libsingular directly to compute with polynomial, right? ;-)

In particular, it would be perfectly reasonable to have a "frontend" class 
that acts as a parent (like Set) and deals with the whole translation of 
arbitrary symbols into range(n) and non-time-critical constructions. Then a 
specialized "backend" code just works with lists of lists of integers, say. 
And once you find that the backend isn't fast enough you can switch to C++ 
and use std::set, say. Without having to deprecate the user interface.




On Saturday, June 7, 2014 8:14:41 AM UTC+1, vdelecroix wrote:
>
> > Actually, I was kind of surprised that they were just lists of lists 
> when I 
> > was looking at the code.  Surely one wants more structure than that, or 
> > don't they have more structure?  This is exactly the kind of thing we 
> are 
> > just talking about with the game theory code - we want a class because 
> you 
> > want to *do* something with it.  Tab-completion rules!  But I suppose 
> it's 
> > possible that all these designs really are just lists of lists. 
>
> Yes, a combinatorial design is basically a set of subsets. The current 
> code of combinatorial design is intended to do lengthy computation for 
> constructing them. It is already a lot of time to run the code. 
> Involving some badly designed class would be at the moment the worse 
> thing to do. As an example 
>
> sage: timeit("for s in Subsets(range(5)): pass")  # return Set 
> 125 loops, best of 3: 3.97 ms per loop 
> sage: timeit("for s in subsets(range(5)): pass")  # return list 
> 625 loops, best of 3: 53.3 µs per loop 
>
> I am not saying that we do not need a proper class (note: there is 
> already IncidenceStructure). There are many things that one would like 
> to do with an orthogonal array: 
>  - getting various graphs from it 
>  - computing automorphism groups 
>  - comparing isomorphism with another one 
>  - looking for substructures 
>  - etc 
>
> But right now, what Nathann is trying to do is rather orthogonal to 
> these questions. If somebody comes with a nice class that *does not* 
> slow down his construction code, everybody will be happy. Sage is open 
> to contributions and not only to critics ;-P 
>
> >> It is still largely possible to refactor the code, especially the 
> >> functions that are available from the global namespace. And it can be 
> >> done easily as it is just about modifying "design_catalog.py" which is 
> >> rather independent from the coming tickets. 
> > 
> > 
> >> For the internals, many constructions in combinatorial designs are 
> >> recursive and complicated. So separating the existence from 
> >> construction means do an exact copy of the code. The boolean answer is 
> >> just intended to cut the actual construction (the object are rather 
> >> big). So we can not live with two functions. On the other hand, this 
> >> function can be hidden from the global namespace. 
> > 
> > I guess I'm just surprised you need two functions; why can't you have 
> one 
> > (underscore?) function that both of them call?  That is what was 
> surprising 
> > to me, if it really is an *exact* copy of the code? 
>
> more precisely: 
> {{{ 
>    if construction_X_is_possible(k,n): 
>       if existence: return True 
>       else: return build_the_design_with_X(k,n)   # long time 
> }}} 
> But see Volker proposal about a function which returns None or functions 
> as in 
> {{{ 
>     if construction_X_is_possible(k,n): 
>         return build_the_design_with_X 
> }}} 
>
> > Thanks both Nathann and Vincent for explaining some of the more 
> technical 
> > details. 
>
> Thanks for having a look into this. 
>
> Vincent 
>

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