This might be of general interest, even if this specific example is just
for lattices.
On Fri, 10 Oct 2014, Nathann Cohen wrote:
About using hasse diagrams directly: Is it possible to do for example
Posets.ChainPoset(500) without 10 seconds of cpu time?
That such a thing takes so long does not make the slightest sense.
"%prun -s cumulative" says that a call to "copy" takes a lot of time,
and the call to 'meet' too. But whatever is called is clearly wasting
ressouces.
ChainPoset() is oneliner:
return LatticePoset((range(n), [[x,x+1] for x in range(n-1)]))
This does
P = Poset(data...)
if not P.is_lattice():
raise ValueError("Not a lattice.")
return FiniteLatticePoset(P...)
So first it checks that given data really is a poset (i.e. has no loops).
After that it checks if poset is also lattice --- and it does so by really
calculating meet- and join-matrices. For n=500 that means matrix with
500*500=250000 entries, because there is no support for lower or upper
triangular matrices.
Well, I guess we have shortcut: use FiniteLatticePoset directly. But
n=500
P=Poset((range(n), [[x,x+1] for x in range(n-1)]))
L=FiniteLatticePosets(P)
gives AssertionError.
* * *
Is this a general pattern? It is good to check arguments also in
"internal" use, so that we find programming errors easily. But sometimes
there should be shortcuts to pass lenghty checks when we really know what
we are doing. It this thinked on other parts of Sage?
--
Jori Mäntysalo
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.