In that case, it would be better to model your object after Predicate and AppliedPredicate, which work the same way (except in Boolean expressions).
Aaron Meurer > On Feb 5, 2016, at 5:37 PM, Bogdan Opanchuk <manti...@gmail.com> wrote: > > Hi Aaron, > > Thank you for your reply. > >> If you want to give the fields names I guess you should use >> UndefinedFunction. Note that UndefinedFunction('f') dynamically creates a >> subclass of AppliedUndef called "f". > > The problem is that I need this object to participate in expressions even > without being applied (that is, both `f` and `f(x)` should be usable in > expressions), and UndefinedFunction cannot do that. I was thinking about > subclassing a Symbol and overriding __call__ to return an applied function > (that's where the error checking will happen, too). Another variant would be > to give the user a function applied to native dimensions right away, and > override __call__ in the UndefinedFunction derivative (that would make > printing more verbose than necessary, but I can live with that). Which way do > you think fits better in sympy design? > >> I think what you are doing is right, although let us know if you run into >> issues (SymPy has many bugs where things don't work correctly if you >> subclass things). It's clear to me that we should make this sort of thing >> easier, though. > > The main problem is that I do not know which conventions should my subclassed > objects conform to (besides the primary invariant). For instance, do I > understand it correctly that sympy caches objects purely for performance > reasons, and for two objects to be equal it is enough to have equal > _hashable_content()? If I want a custom differentiation behavior (e.g. > `f.diff(x)` equivalent to `f(x).diff(x)`), do I need to override diff(), or > some underscored method? > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > Visit this group at https://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/ab71d1a9-8f3e-4006-8cbd-7632dedcb4a1%40googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/54697D30-C37C-411A-B7C4-ABA6C0CEEA27%40gmail.com. For more options, visit https://groups.google.com/d/optout.