Hello,

I'm planning to use sympy for a project I'm working on and I have a few 
questions...

Basically I want to be able to associate a value with a symbol and then be 
able to evaluate any function using that symbol for the value it's been 
given. This would allow me to define properties in my classes as symbolic 
functions but also be able to get the numeric value for the function at the 
value specified for each symbol.

Question 1: Is there already a built in way to do this without having to 
call .subs() and .evalf() all over the place? (I'm pretty sure the answer 
is "no" but I could have overlooked something....)

Question 2: If not does this seem generally useful? Like something worth 
incorporating into sympy?

Question 3a: If it DOES seem like something worth incorporating: how can I 
help? (I'm somewhat new to programming and don't have any formal 
training...should I do a pull request and just do what I think is right?)

Question 3b: If it DOES NOT seem like something worth incorporating: I 
implemented this functionality by creating my own Symbol class and Monkey 
patching the Expr class (copied the code below). Am I missing something 
important here? I don't think this will break sympy... Is there a better 
way to approach this? I'm a beginner so any feedback would be appreciated!



CODE:

class dSymbol(Symbol):
    """
    Add a default value to Symbols
    """

    def __new__(cls, name, value, **assumptions):
        return super().__new__(cls, name, **assumptions)

    def __init__(self, name, value, **assumptions):
        self.default = value

"""
Monkey patch the Expr class (inherited by Mul, Add,... all the function 
classes in sympy i'm interested in using)
Add methods:
symvalue
value
"""

def symvalue(self):
    """
    returns the expression evaluated at the default value for each dSymbol
    the result is still symbolic in that pi will be displayed as 'pi' not 
'3.14159'...
    """
    s = self.atoms(dSymbol)
    for i in s:
        self = self.subs(i, i.default)
    return self

def value(self, *args, **kwargs):
    """
    returns the expression evaluated at the default value for each dSymbol
    the result will be numeric (assuming it doesn't contain any 'Symbol') 
    """
    return self.symvalue().evalf(*args, **kwargs)

Expr.symvalue = symvalue
Expr.value = value

-- 
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 http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/b12b7e28-aff2-4168-a3a2-c9f5ee67e1ad%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to