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.

Reply via email to