Python functions can be called from Origin C using the syntax
Python.function_name(arg1, arg2...)
By default the .py file should be placed in the same folder as the C/CPP or XF file. The name of the file should be origin.py.
Example - Python Function to perform Bayesian regression:
import numpy as np import pandas as pd import originpro as op from sklearn import linear_model def bayesian(vX, vY): blr = linear_model.BayesianRidge(tol=1e-6, fit_intercept=True, compute_score=False, alpha_init=1, lambda_init=1e-3) blr.fit(np.vander(vX, 10), vY) mean = blr.predict(np.vander(vX, 10)) return mean
The function can then be called from OC code:
void bayesian_reg() { // Have a worksheet active, with three columns // Columns 1 and 2 have the X and Y data for fitting // Column 3 will have the fit curve result Worksheet wks=Project.ActiveLayer(); Dataset dsx, dsy, dsypred; dsx.Attach(wks, 0); dsy.Attach(wks, 1); dsypred.Attach(wks, 2); dsypred = Python.bayesian(dsx, dsy); }
Multiple variables can be returned from Python function through arguments. & sign before the argument name indicates it's a returned variable.
Python.function_name(arg1, arg2..., & ret1, & ret2...)
Example - Python Function to perform Bayesian regression to return both fitted values and fitted errors:
import numpy as np import pandas as pd import originpro as op from sklearn import linear_model def bayesian(vX, vY, vYmean, vYstd): blr = linear_model.BayesianRidge(tol=1e-6, fit_intercept=True, compute_score=False, alpha_init=1, lambda_init=1e-3) blr.fit(np.vander(vX, 10), vY) mean, std = blr.predict(np.vander(vX, 10), return_std=True) vYmean[:] = mean # pass mean values to variable vYmean vYstd[:] = std # pass error values to variable vYstd
The function can then be called from OC code:
void bayesian_reg() { // Have a worksheet active, with four columns // Columns 1 and 2 have the X and Y data for fitting // Column 3 and column 4 will have the fit curve result, and fitted error. Worksheet wks=Project.ActiveLayer(); Dataset dsx, dsy, dsypred, dsystd; dsx.Attach(wks, 0); dsy.Attach(wks, 1); dsypred.Attach(wks, 2); dsystd.Attach(wks, 3); vector vYmean, vYstd; Python.bayesian(dsx, dsy, &vYmean, &vYstd); dsypred = vYmean; dsystd = vYstd; }
To change the file location, you can set the LabTalk Python object property: Python.OCWD$ to the full path of the desired folder (the working directory).
To change the file name, you can set the LabTalk Python object property: Python.OCWF$ to the name of the desired Python file in the working directory.