struct UniformPolicy <: Network
    net::Network
end

initial_inference(n::UniformPolicy, game::MuZeroGame) = initial_inference(n, game.game)
# @todo just have initial_inference(x::UniformPolicy, args...)
initial_inference(x::UniformPolicy, game::AbstractEnv) = initial_inference(x.net, game)
initial_inference(x::UniformPolicy, games::Vector{<:AbstractEnv}) = initial_inference(x.net, games)
initial_inference(x::UniformPolicy, hidden_state::AbstractArray{Float32, 4}) = initial_inference(x.net, hidden_state)

function recurrent_inference(x::UniformPolicy, hidden_state::AbstractArray{Float32, 3}, action::Integer)
    recurrent_inference(x.net, hidden_state, action)
end

function recurrent_inference(x::UniformPolicy, hidden_state::Array{Float32, 4}, action::Array{Float32, 4})
    recurrent_inference(x.net, hidden_state, action)
end

function prediction(x::UniformPolicy, hidden_state::AbstractArray{Float32})
    policy_logits, state_values = prediction(x.net, hidden_state)
    zeros(Float32, size(policy_logits)...), state_values
end