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.