Hello all,

I want to build a class to describe a generating function (as used in
the context of discrete probability distributions).  It would have
exactly the functionality of the Poly class, have a normalization
constraint on the coefficients, have a few more special methods that
I'd define, and be created with a different set of arguments.  I want
to be able to write

>>> gf = GeneratingFunction(10,4,4,2) #  0.5 + 0.2 x + 0.2 x^2 + 0.1 x^3
>>> print sum(gf.coeffs)  # normalized coefficients
1.0
>>> print gf.expected_value() # a method i've written
0.9
>>> two_moment = gf * gf # usual arithmetic for Poly instances
>>> print sum(two_moment.coeffs)
1.0
>>> print two_moment.expected_value()
1.8

My first thought was to subclass the Poly class, force the
coefficients to be normalized, pass appropriate arguments to
Poly.__init__, and write methods like GeneratingFunction.expected_value
() for the added functionality I want.

But there seems to be no Poly.__init__ method for me to override.  If
I override Poly.__new__ to accept the syntax I want to use (where the
kth argument is the count of the kth item in the collection -- perfect
for probability problems) then arithmetic for my generating functions
breaks, as the __add__, __mul__, &c. methods call a "class method"
which expect the arguments usually passed to Poly.__new__ and none
other.

Can I get the functionality I want by forcing
GeneratingFunction.__new__ to perform all the same checks and magic on
its argument that Poly.__new__ is already doing?  Is there an easier
way?

Thanks for any help!

Dhruv Bansal
Center for Nonlinear Dynamics, UT Austin
dh...@ph.utexas.edu
http://dhruvbansal.com

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sympy@googlegroups.com
To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sympy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to