human
I wrote the below code

    W = shared_normal(n_visible, n_hidden, 0.01)
    bv = shared_zeros(n_visible)
    bh = shared_zeros(n_hidden)
    Wuh = shared_normal(n_hidden_recurrent, n_hidden, 0.0001)
    Wuv = shared_normal(n_hidden_recurrent, n_visible, 0.0001)
    Wvu = shared_normal(n_visible, n_hidden_recurrent, 0.0001)
    Wuu = shared_normal(n_hidden_recurrent, n_hidden_recurrent, 0.0001)
    bu = shared_zeros(n_hidden_recurrent)
    params = (W, bv, bh, Wuh, Wuv, Wvu, Wuu, bu)
    v = T.matrix()
    u0 = T.zeros((n_hidden_recurrent,))
    def recurrence(v_t, u_tm1):
        bv_t = (bv + T.dot(u_tm1, Wuv))
        bh_t = (bh + T.dot(u_tm1, Wuh))
        generate = (v_t is None)
        if generate:
            (v_t, _, _, updates) = build_rbm(T.zeros((n_visible,)), W, bv_t, bh_t, k=25)
        u_t = T.tanh(((bu + T.dot(v_t, Wvu)) + T.dot(u_tm1, Wuu)))
        return (([v_t, u_t], updates) if generate else [u_t, bv_t, bh_t])
    ((u_t, bv_t, bh_t), updates_train) = theano.scan((lambda v_t, u_tm1, *_: recurrence(v_t, u_tm1)), sequences=v, outputs_info=[u0, None, None], non_sequences=params)
    (v_sample, cost, monitor, updates_rbm) = build_rbm(v, W, bv_t[:], bh_t[:], k=15)
    updates_train.update(updates_rbm)
    ((v_t, u_t), updates_generate) = theano.scan((lambda u_tm1, *_: recurrence(None, u_tm1)), outputs_info=[None, u0], non_sequences=params, n_steps=200)
    return (v, v_sample, cost, monitor, params, updates_train, v_t, updates_generate)

What's a good function header?
 ... Here's a good function header?
assistant
#Here's a good function header.

def build_rnnrbm(n_visible, n_hidden, n_hidden_recurrent):