class People(pars, strict=True, **kwargs)[source]#

Bases: BasePeople

A class to perform all the operations on the people – usually not invoked directly.

This class is usually created automatically by the sim. The only required input argument is the population size, but typically the full parameters dictionary will get passed instead since it will be needed before the People object is initialized. However, ages, contacts, etc. will need to be created separately – see cv.make_people() instead.

Note that this class handles the mechanics of updating the actual people, while cv.BasePeople takes care of housekeeping (saving, loading, exporting, etc.). Please see the BasePeople class for additional methods.

  • pars (dict) – the sim parameters, e.g. – alternatively, if a number, interpreted as pop_size

  • strict (bool) – whether or not to only create keys that are already in self.meta.person; otherwise, let any key be set

  • kwargs (dict) – the actual data, e.g. from a popdict, being specified


ppl1 = cv.People(2000)

sim = cv.Sim()
ppl2 = cv.People(



Initialize flows to be zero


Perform initializations


Set the prognoses for each person based on age during initialization. Need to reset the seed because viral loads are drawn stochastically.


Perform all state updates at the current timestep


Perform post-timestep updates


Refresh dynamic contacts, e.g. community

check_inds(current, date, filter_inds=None)[source]#

Return indices for which the current state is false and which meet the date criterion


Check if they become infectious


Check for new progressions to symptomatic


Check for new progressions to severe


Check for new progressions to critical

check_recovery(inds=None, filter_inds='is_exp')[source]#

Check for recovery.

More complex than other functions to allow for recovery to be manually imposed for a specified set of indices.


Check whether or not this person died on this timestep


Check for new diagnoses. Since most data are reported with diagnoses on the date of the test, this function reports counts not for the number of people who received a positive test result on a day, but rather, the number of people who were tested on that day who are schedule to be diagnosed in the future.


Update quarantine state


End isolation for anyone due to exit isolation

make_naive(inds, reset_vx=False)[source]#

Make a set of people naive. This is used during dynamic resampling.

  • inds (array) – list of people to make naive

  • reset_vx (bool) – whether to reset vaccine-derived immunity

make_nonnaive(inds, set_recovered=False, date_recovered=0)[source]#

Make a set of people non-naive.

This can be done either by setting only susceptible and naive states, or else by setting them as if they have been infected and recovered.

infect(inds, hosp_max=None, icu_max=None, source=None, layer=None, variant=0)[source]#

Infect people and determine their eventual outcomes.

  • Every infected person can infect other people, regardless of whether they develop symptoms

  • Infected people that develop symptoms are disaggregated into mild vs. severe (=requires hospitalization) vs. critical (=requires ICU)

  • Every asymptomatic, mildly symptomatic, and severely symptomatic person recovers

  • Critical cases either recover or die

  • If the simulation is being run with waning, this method also sets/updates agents’ neutralizing antibody levels

Method also deduplicates input arrays in case one agent is infected many times and stores who infected whom in infection_log list.

  • inds (array) – array of people to infect

  • hosp_max (bool) – whether or not there is an acute bed available for this person

  • icu_max (bool) – whether or not there is an ICU bed available for this person

  • source (array) – source indices of the people who transmitted this infection (None if an importation or seed infection)

  • layer (str) – contact layer this infection was transmitted on

  • variant (int) – the variant people are being infected by


number of people infected

Return type:

count (int)

test(inds, test_sensitivity=1.0, loss_prob=0.0, test_delay=0)[source]#

Method to test people. Typically not to be called by the user directly; see the test_num() and test_prob() interventions.

  • inds – indices of who to test

  • test_sensitivity (float) – probability of a true positive

  • loss_prob (float) – probability of loss to follow-up

  • test_delay (int) – number of days before test results are ready

schedule_quarantine(inds, start_date=None, period=None)[source]#

Schedule a quarantine. Typically not called by the user directly except via a custom intervention; see the contact_tracing() intervention instead.

This function will create a request to quarantine a person on the start_date for a period of time. Whether they are on an existing quarantine that gets extended, or whether they are no longer eligible for quarantine, will be checked when the start_date is reached.

  • inds (int) – indices of who to quarantine, specified by check_quar()

  • start_date (int) – day to begin quarantine (defaults to the current day, sim.t)

  • period (int) – quarantine duration (defaults to pars['quar_period'])

plot(*args, **kwargs)[source]#

Plot statistics of the population – age distribution, numbers of contacts, and overall weight of contacts (number of contacts multiplied by beta per layer).

  • bins (arr) – age bins to use (default, 0-100 in one-year bins)

  • width (float) – bar width

  • font_size (float) – size of font

  • alpha (float) – transparency of the plots

  • fig_args (dict) – passed to pl.figure()

  • axis_args (dict) – passed to pl.subplots_adjust()

  • plot_args (dict) – passed to pl.plot()

  • do_show (bool) – whether to show the plot

  • fig (fig) – handle of existing figure to plot into

story(uid, *args)[source]#

Print out a short history of events in the life of the specified individual.

  • uid (int/list) – the person or people whose story is being regaled

  • args (list) – these people will tell their stories too


sim = cv.Sim(pop_type='hybrid', verbose=0)