Finally got a few moments to put the implicit subs syntax code
together and get it ready to submit. Here it is.

-Lance

# HG changeset patch
# User [EMAIL PROTECTED]
# Date 1228878177 25200
# Node ID dc86dcc8d059f0a2cd3eb498b595c8a45775aa92
# Parent  d1019a5c66d12d524fe64359c1bd8054cab0cfa9
Substitution syntax extension - implements f({x:1,y:2}) as shorthand
for f.subs({x:1,y:2})

diff -r d1019a5c66d1 -r dc86dcc8d059 sympy/core/basic.py
--- a/sympy/core/basic.py       Tue Nov 18 17:36:24 2008 +0100
+++ b/sympy/core/basic.py       Tue Dec 09 20:02:57 2008 -0700
@@ -1932,9 +1932,25 @@
         from sympy.integrals import integrate
         return integrate(self, *args, **kwargs)

-    #XXX fix the removeme
-    def __call__(self, *args, **removeme):
-        return Function(self[0])(*args)
+    def __call__(self, subs_dict):
+        '''
+        Implements a convenient way to call the subs method. A
dictionary object
+        is accepted where the ductionary key is the value to be
replaced, and
+        the value is what the key expression will be replaced with.
+
+        Example:
+        >>> x,y,z = symbols('xyz')
+        >>> f = x+y+x*y
+        >>> f({x:z})
+        z + y + z*y
+        >>> f({x*y,z})
+        x + y + z
+
+        This is equivalent to calling f.subs({...})
+        '''
+        if not isinstance(sequence, dict):
+            raise TypeError('A dictionary object is expected for
making substitutions.')
+        return self.subs(subs_dict)

     def __float__(self):
         result = self.evalf()
diff -r d1019a5c66d1 -r dc86dcc8d059 sympy/core/tests/test_subs.py
--- a/sympy/core/tests/test_subs.py     Tue Nov 18 17:36:24 2008 +0100
+++ b/sympy/core/tests/test_subs.py     Tue Dec 09 20:02:57 2008 -0700
@@ -169,3 +169,10 @@
     assert (f(x,y)).subs(f,sin) == f(x,y)
     assert (sin(x)+atan2(x,y)).subs([[atan2,f],[sin,g]]) == f(x,y) + g
(x)
     assert (g(f(x+y, x))).subs([[f, l], [g, exp]]) == exp(x + sin(x +
y))
+
+def test_implicit_subs_syntax():
+    x, y, z = map(Symbol, 'xyz')
+    f = x + y + x*y
+    assert f({x:z}) == f.subs({x:z})
+    assert f({x:z}) == z + y + z*y
+    assert f({x*y:z}) == x + y + z

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

Reply via email to