Something like this should work:
import numpy as np
from juliacall import Main as jl
jl.seval("using SimpleChains")
mlpd = jl.seval('SimpleChain(static(8), TurboDense(tanh, 64), TurboDense(tanh, 64), TurboDense(tanh, 64), TurboDense(identity, 4))')
p = jl.SimpleChains.init_params(mlpd)
input_test = np.random.rand(8)
mlpd(jl.collect(input_test), p)
What’s going on is that when the numpy array is passed to a Julia function, it is automatically converted to a PyArray (which wraps the underlying data as an AbstractArray). From the error you posted, it appears that your model requires a strided array as input. Now PyArray is a strided array, but ArrayInterface.jl does not know this, hence the error.
The above code calls collect on the PyArray, which will convert it to a normal Array, which should work in your model.
Alternatively you can convert straight to Array (skipping the intermediate PyArray) like so:
from juliacall import convert as jlconvert
mlpd(jlconvert(jl.Array, input_test), p)
This way is more verbose, but also more explicit about what conversion is happening.
The real solution is for PythonCall to define the right overloads for ArrayInterface so that it knows PyArray is strided. There’s an issue for it here: Use ArrayInterface.jl? · Issue #61 · cjdoris/PythonCall.jl · GitHub.