You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hello, when I use PyCall to pass a Julia function into a Python function, it seems that PyCall does not handle the Bool (true & false) values correctly.
Specifically, I use Python's sklearn.feature_selection.SequentialFeatureSelector to do some feature selection. and in this selector, it gets an argument scoring which is a callable function. So in my Julia code, I use pystring py""" """ to wrap the selector and pass my Julia function into it. Here is my code:
functionsequentialfs(mdl, fun, X, y)
X =Array(X)
y =Array(y)
score =fun(mdl, X, y)
# j = fun(y)py"""import sklearn.feature_selection as fsdeftest(mdl, fun, X, y): score = fun(mdl, X, y) # situation 1: the fun can run well if been called from herereturn score# sfs = fs.SequentialFeatureSelector(# mdl,# n_features_to_select="auto",# direction="forward",# scoring=fun # situation 2: the fun cannot run if been passed deeper. # )# sfs.fit(X, y)# return sfs.get_support(indices=true)"""
score =py"test"(mdl, fun, X, y)
return score
endfunctioncustom_score(estimator, X, y_true)
y_pred = estimator.predict(X) # Python sklearn predict function
score =1-sum(abs.(y_pred - y_true)) /length(y_true)
return score
end
iris_X, iris_y =get_some_data()
mdl =function_return_a_sklearn_classifier(iris_X, iris_y)
sequentialfs(mdl, custom_score, iris_X, iris_y)
In situation 1, if the fun (julia -> julia -> Python and run) could be called well, in situation 2, the fun (julia -> julia -> Python -> Python) does not run well, and there is a Python TypeError:
ERROR: PyError ($(Expr(:escape, :(ccall(#= C:\Users\Public\xxxxxx\.julia\dev\PyCall\src\pyfncall.jl:43 =# @pysym(:PyObject_Call), PyPtr, (PyPtr, PyPtr, PyPtr), o, pyargsptr, kw))))) <class 'NameError'>
NameError("name 'true' is not defined")
File "C:\Users\xxxxxx\TongYuan\.julia\dev\PyCall\src\pyeval.jl", line 12, in test
ns = PyDict{String,PyObject}()
The text was updated successfully, but these errors were encountered:
Environment:
Hello, when I use PyCall to pass a Julia function into a Python function, it seems that PyCall does not handle the Bool (true & false) values correctly.
The call chain is seemly like this:
Specifically, I use Python's
sklearn.feature_selection.SequentialFeatureSelector
to do some feature selection. and in this selector, it gets an argumentscoring
which is a callable function. So in my Julia code, I use pystringpy""" """
to wrap the selector and pass my Julia function into it. Here is my code:In situation 1, if the fun (julia -> julia -> Python and run) could be called well, in situation 2, the fun (julia -> julia -> Python -> Python) does not run well, and there is a Python TypeError:
The text was updated successfully, but these errors were encountered: