Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Convert a Wolfram Language function to a Python function
ResourceFunction["ToPythonFunction"][func] gives a string of Python code corresponding to the Wolfram Language function func. | |
ResourceFunction["ToPythonFunction"][session,func,…] deploys the function in the running Python session and returns an ExternalFunction object. |
| body& | pure functions in formal parameters #,#2,… |
| Function[{x,y,…},body,…] | pure functions in named arguments |
| f | function f defined in the Wolfram Language or C code |
| "code" | Python code string |
| Method | Automatic | method to use |
| Prolog | {} | Python commands executed before deploying the function |
| Epilog | {} | Python functions applied to the result |
| "BuiltIns" | attempt to use Python built-in functions and the standard library |
| "Callback" | execute a callback to the Wolfram Language session |
| "numpy" or "np" | use the numpy package, if possible; otherwise "BuiltIns" |
| Automatic | "BuiltIns", if possible; otherwise "Callback" |
Convert a pure function to a Python lambda function:
| In[1]:= |
| Out[1]= |
Deploy a Wolfram Language function in a Python session:
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
| In[4]:= |
| Out[4]= |
Evaluate the function value in Python:
| In[5]:= |
| Out[5]= |
Compare with the result in the Wolfram Language:
| In[6]:= |
| Out[6]= |
Clean up by closing the Python session:
| In[7]:= |
Elementary functions are convertible to Python using the Python standard library:
| In[8]:= |
| Out[8]= |
Special functions are computed by a Wolfram Language callback:
| In[9]:= |
| Out[9]= |
Pure functions in formal parameters # (#1), #2,…:
| In[10]:= |
| Out[10]= |
| In[11]:= |
| Out[11]= |
Pure functions in named arguments:
| In[12]:= |
| Out[12]= |
| In[13]:= |
| Out[13]= |
Vector arguments:
| In[14]:= |
| Out[14]= |
Built-in Wolfram Language functions:
| In[15]:= |
| Out[15]= |
User-defined functions:
| In[16]:= |
| In[17]:= |
| Out[17]= |
Python code strings:
| In[18]:= |
| Out[18]= |
| In[19]:= |
| Out[19]= |
| In[20]:= |
| Out[20]= |
| In[21]:= |
Specify whether to use "math" or "cmath" module on the Python side by giving the optional argument domain:
| In[22]:= |
| Out[22]= |
| In[23]:= |
| Out[23]= |
Decide heuristically, depending whether the function body contains explicit complex values:
| In[24]:= |
| Out[24]= |
| In[25]:= |
| Out[25]= |
Use a Python-side function from the standard library:
| In[26]:= |
| Out[26]= |
Implement a callback into a WolframLangauge session to compute the function:
| In[27]:= |
| Out[27]= |
Use the Python package numpy:
| In[28]:= |
| Out[28]= |
Use the default heuristic to decide between the methods:
| In[29]:= |
| Out[29]= |
| In[30]:= |
| Out[30]= |
Use the Prolog option to ensure that the Python interpreter meets the requirements before deploying the function:
| In[31]:= |
| Out[31]= |
| In[32]:= | ![]() |
| Out[32]= |
| In[33]:= |
Create a function which returns a Python array:
| In[34]:= |
| Out[34]= |
| In[35]:= |
| Out[35]= |
| In[36]:= |
| Out[36]= |
Use the Epilog option to convert the result to numpy.array:
| In[37]:= |
| Out[37]= |
| In[38]:= |
| Out[38]= |
| In[39]:= |
| Out[39]= |
| In[40]:= |
Start a Python session and create a PythonObject for the Probabilistic Numerics Python package ProbNum:
| In[41]:= |
| Out[41]= |
| In[42]:= |
| Out[42]= | ![]() |
Deploy a Python function describing an ODE vector field:
| In[43]:= |
| Out[43]= |
Pass the deployed Wolfram Language function f back to Python as a field to solve the logistic ODE:
| In[44]:= |
| In[45]:= |
| Out[45]= | ![]() |
Plot the solution:
| In[46]:= | ![]() |
| Out[46]= | ![]() |
| In[47]:= |
Callback functions contain a template slot for the Wolfram Language session defined on the Python side:
| In[48]:= |
| Out[48]= |
Given such a string as an argument, ToPythonFunction automatically fills the slot with the variable wl_session defined in the Python session:
| In[49]:= |
| Out[49]= |
| In[50]:= |
| Out[50]= |
Alternatively, you can fill the slot with the name of another variable of your choice:
| In[51]:= | ![]() |
| Out[51]= |
Call the function:
| In[52]:= |
| Out[52]= |
Clean up:
| In[53]:= |
For Method→"BuiltIns" only functions with a single downvalue are currently supported:
| In[54]:= |
| Out[54]= |
| In[55]:= |
| In[56]:= |
| Out[56]= |
Use callback into the Wolfram Language to define the function successfully:
| In[57]:= |
| Out[57]= |
| In[58]:= |
| Out[58]= |
| In[59]:= |
Method→"BuiltIns" and Method→"numpy" automatically handle only a subset of functions convertible to Python code:
| In[60]:= |
| Out[60]= |
| In[61]:= |
| In[62]:= |
| Out[62]= |
Deploy the function manually:
| In[63]:= |
| Out[63]= |
Verify against the direct computation in the Wolfram Language:
| In[64]:= |
| Out[64]= |
| In[65]:= |
| Out[65]= |
Clean up:
| In[66]:= |
Functions with lists on the left-hand side in downvalues are currently processed with a callback:
| In[67]:= |
| In[68]:= |
| Out[68]= |
Extract values on the right-hand side of the function to compute the function in Python without callback:
| In[69]:= |
| In[70]:= |
| Out[70]= |
For Method→"Callback", functions in the contexts other than "Global`" or "System`" are not currently supported:
| In[71]:= |
| Out[71]= |
| In[72]:= |
| Out[72]= |
Export the function by redefining it in the "Global`" context:
| In[73]:= |
| In[74]:= |
| Out[74]= |
Use the Python function:
| In[75]:= |
| Out[75]= |
| In[76]:= |
This work is licensed under a Creative Commons Attribution 4.0 International License