Optimizing a parameter for an outside function

@brandonwillard

Thanks! I think this worked.

I changed both functions:

from theano.compile.ops import as_op
import theano.tensor as tt

@as_op(itypes=[tt.dvector,tt.dscalar], otypes=[tt.dvector])
def adstock(x,rate=0.09):
    return (recursive_filter(x,rate))

@as_op(itypes=[tt.dvector], otypes=[tt.dvector])
def normalize(x):
    min_=0
    max_=100
    min_x=np.min(x)
    max_x=np.max(x)
    z=(max_-min_)/(max_x-min_x)*(x-max_x)+max_
   
    return(z) 

Created these as shared variables

sales=shared(pd_sales.sales.values)
advert=shared(pd_sales.advert.values)


with pm.Model() as mod_as:
    a = pm.Normal('a', mu=1000, sd=500)
    bA = pm.Normal('bA', mu=0, sd=2)
    sigma = pm.Uniform('sigma', lower=0, upper=10)
    ad_rate = pm.Uniform('ad_rate', lower=0, upper=1)
    
    mu = a + bA * normalize(adstock(advert,ad_rate))
    sales_hat = pm.Normal('sales', mu=mu, sd=sigma, observed=sales)

    trace_5_3_S = pm.sample(1000, tune=1000)