Let's not mix everything here. In FindStat, we do use a database for
statistics (not maps) but that's not what we're talking about here. We're
just talking about flagging some object methods as maps with some semantic
information.

If we were to use a sage database for those maps (I've never used one, I
don't know how it works), how we would do? Are we talking about something
persistent here? I was more thinking of just storing some data  when the
object is created, which means where the decorator is called.

What I have in mind (and I think what Nathan had in mind) is

def map_decorator(f, args):
    # storing the info
    return f

my only question is what "storing the info" means. I understand Nathan is
suggestiong I just put it in some database object somewhere, and then my
permutation object would just ask this object whenever it needs to give the
list of maps. Am I right here?


2014-05-28 0:24 GMT+02:00 Paul-Olivier Dehaye <
paul-olivier.deh...@math.uzh.ch>:

> For anyone involved in findstat, there are several layers of complexity.
> This is my assessment from outside the findstat collaboration:
>  - they also deal with Mathematica code
>  - they also deal with user-generated information that is not code
>  - they also develop some of the code and would thus 1) prefer to maintain
> one rather than two separate objects (code and database) 2) like to easily
> and flexibly be able to develop the code as they intend to use it (i.e.
> equipped with everything, cf. monkey patching)
>  - some of the information they want is added/could easily be added by
> others in sage code
>  - just like the LMFDB, the database term is a misnomer. They want their
> thing to be data and code. The code is partly their data, either directly
> (class dependencies) or indirectly (the code is run to produce the data).
>
> Paul
>
>
> Paul-Olivier Dehaye
> SNF Professor of Mathematics
> University of Zurich
> skype: lokami_lokami (preferred)
> phone: +41 76 407 57 96
> chat: pauloliv...@gmail.com
> twitter: podehaye
> freenode irc: pdehaye
>
>
> On Wed, May 28, 2014 at 12:13 AM, Simon King <simon.k...@uni-jena.de>wrote:
>
>> Hi Viviane,
>>
>> On 2014-05-27, Viviane Pons <vivianep...@gmail.com> wrote:
>> > The way it works: the decorator replaces the tagged methods by
>> instances of
>> > combinatorial map class, the functions only checks which methods are
>> indeed
>> > instances of this class.
>>
>> And, if I understand correctly, it is this kind of things that makes
>> Nathann ask for removal of the decorator.
>>
>> What you *want* to do is create a database that handles requests of the
>> type "what combinatorial maps are provided by a class C?", or perhaps even
>> better "what combinatorial maps are provided by a sub-category S of
>> Sets().Finite()?". This could very well be a (SQLAlchemy?) database that
>> is
>> stored somewhere, perhaps even in a remote location.
>>
>> But what you *do* is to encode this database via the *type* of methods.
>> The information is not put into an external database, but the
>> information is stored *implicitly* by changing Sage code.
>>
>> I agree with Nathann: This is intrusive! And when your decorator
>> replaces methods by "instances of some class" then certainly the
>> overhead of calling these methods will increase. Applying your decorator
>> to a frequently (recursively?) used method may result in a slow-down, as
>> it seems.
>>
>> Even when trying to take your perspective, I still don't understand why
>> you might want the decorator to work in that way.
>> Certainly a proper database (relying on a dedicated database engine) is
>> faster and easier to search and thus more useful for you than an ad-hoc
>> function that ultimately relies on listing attributes and determining
>> their types.
>>
>> So, what is the rationale for *not* using a database for your database of
>> combinatorial maps?
>>
>> > It is partly the information you need even so I'm not sure it's a good
>> way
>> > to have it.
>>
>> I see no reason how this could be a good way to have it.
>>
>> > And also, this function is hidden somewhere and not accessible
>> > from the object or the parent itself.
>>
>> "Hidden somewhere" is bad for a user interface.
>>
>> > About Nathan's suggestion to have a flag, I don't know if it's such a
>> good
>> > idea. The idea is to provide this semantic information to any user of
>> Sage
>> > not machines.
>>
>> It seems to me that you are argueing *against* the current decorator.
>> Calling a function that is hidden somewhere and relies on introspection
>> (listing attributes, type check) is for machines. A user of Sage should
>> have a database with a proper interface.
>>
>> > The way I see this, *because* of the FindStat use case, the
>> > combinatorial_map decorator has been introduced and many Sage developers
>> > have been devoted time into adding semantic information into sage
>> methods.
>> > Of course, we could remove this all together, but this would be a great
>> > loss for Sage as this semantic information is useful for users. And
>> Here, I
>> > speak as a combinatorist person working with these objects every day.
>> >
>> > So, our concern should be: how to make this information easily
>> available to
>> > users and how could we store this without impacting efficiency of the
>> > program.
>>
>> Do not store information by a decorator that changes code. Migrate it to
>> a proper database, that may be stored in SAGE_SHARE. The decorator
>> should write information into the database (or perhaps even pull
>> information from it?) and, when done, simply return the unaltered
>> method. In that way, it would not be intrusive, and the database would
>> provide a not-so-hidden single point of entry.
>>
>> Best regards,
>> Simon
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sage-combinat-devel" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to sage-combinat-devel+unsubscr...@googlegroups.com.
>> To post to this group, send email to sage-combinat-de...@googlegroups.com
>> .
>> Visit this group at http://groups.google.com/group/sage-combinat-devel.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> 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.
>

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