Below is the Python script which gives identical results to the C++ program for balanced excitatory-inhibitory input
import Populist
from Populist import *
# Set the neuron parameters of the output population
#
par=OrnsteinUhlenbeckParameter()
par._theta = 20e-3
par._tau = 10e-3
par._V_reversal = 0.0
par._V_reset = 0.0
#
# Set mu and sigma
mu = 17e-3 # (V)
sigma = 2e-3 # (V)
#
# In order to approximate a diffusion process set a small value for input
# weights (small relative to theta).
#
J= 0.01* par._theta
#
# Now convert mu and sigma to input rates of an excitatory and inhibitory
# population.
#
nu_e = (J*mu + sigma*sigma)/(2*J*J*par._tau)
nu_i = (sigma*sigma - J*mu)/(2*J*J*par._tau)
#
# some parameters specific to the algorithm
#
V_min = -10e-3
n_bins = 10000
n_add = 1
f_exp = 1.1
rebinner = InterpolationRebinner()
ratealg = IntegralRateComputation()
density = InitialDensityParameter(par._V_reversal,0)
par_spec = PopulistSpecificParameter(V_min,n_bins,n_add,density,f_exp,rebinner,ratealg,SINGLE_POPULATION_MODE)
#
# Now create the network
#
net = Pop_Net()
par_pop = PopulistParameter(par,par_spec)
alg_pop = PopulationAlgorithm(par_pop)
id_pop = net.AddNode(alg_pop,EXCITATORY)
#
# Create input populations and add them to the network
#
alg_rate_exc=OURateAlgorithm(nu_e)
id_e = net.AddNode(alg_rate_exc,EXCITATORY)
con_e = OrnsteinUhlenbeckConnection(1,J)
alg_rate_inh=OURateAlgorithm(nu_i)
id_i = net.AddNode(alg_rate_inh,INHIBITORY)
con_i = OrnsteinUhlenbeckConnection(1,-J)
net.MakeFirstInputOfSecond(id_e,id_pop,con_e)
net.MakeFirstInputOfSecond(id_i,id_pop,con_i)
#
handler=RootReportHandler("data.root",1,1)
handler.SetFrequencyRange(0,20)
handler.SetDensityRange(-0.01,10)
handler.SetTimeRange(0,0.3)
handler.SetPotentialRange(-0.001,0.020)
handler.AddNodeToCanvas(id_pop)
#
# Configure the simulation
#
par_run = SimulationRunParameter(handler,100000,0.,0.3,1e-3,1e-3,1e-3,"simulation.log")
net.ConfigureSimulation(par_run)
net.Evolve()