This page lists Change logs of all official simuPOP releases. If you would like to see what has been changed since the last official release, you can check the ChangeLog of the development version of simuPOP.

On this page... (hide)

  1. 1. Version 1.1.9 -- (Under development)
  2. 2. Version 1.1.8 -- (Feb, 10, 2017)
  3. 3. Version 1.1.7 -- (Jan 20, 2016)
  4. 4. Version 1.1.6 -- (Apr 30, 2015)
  5. 5. Version 1.1.5 -- (Apr 20, 2015)
  6. 6. Version 1.1.4 -- Rev 4951 (Oct, 15, 2014)
  7. 7. Version 1.1.3 -- Rev 4915 (July 29, 2014)
  8. 8. Version 1.1.2 -- Rev 4825 (Feb 16, 2014)
  9. 9. Version 1.1.1 - Rev 4774 (May 13, 2013)
  10. 10. Version 1.1.0 -Rev 4744 (Feb 11, 2013)
  11. 11. version 1.0.9 - Rev 4720 (Dec 6, 2012)
  12. 12. Version 1.0.8 - Rev 4649 (Sep, 5th, 2012)
  13. 13. version 1.0.7 - Rev 4596 (Apr. 6, 2012) -- use 1.0.8 instead
  14. 14. version 1.0.6 - Rev 4260 (July 11, 2011) -- use 1.0.8 instead
  15. 15. version 1.0.5 - Rev 3915 (Nov. 22, 2010)
  16. 16. version 1.0.4 - Rev 3815 (Sep. 7, 2010)
  17. 17. version 1.0.3 - Rev 3592 (Jun. 8, 2010)
  18. 18. version 1.0.2 - Rev 3503 (Apr. 1, 2010)
  19. 19. version 1.0.1 - Rev 3473 (Feb 24, 2010)
  20. 20. Upgrade guide from previous versions of simuPOP.
  21. 21. version 1.0.0 - Rev 3373 (Jan 8, 2010)
  22. 22. version 0.9.9 - Rev 3204 (Dec 10, 2009)
  23. 23. version 0.9.8 - Rev 3074 (Oct 28, 2009)
  24. 24. version 0.9.7 - Rev 2983 (Sep 26, 2009)
  25. 25. version 0.9.6 - Rev 2849 (Aug 6, 2009)
  26. 26. version 0.9.5 - Revision 2740 (Jun 22, 2009)
  27. 27. version 0.9.4 - (Rev 2674) May 20, 2009
  28. 28. version 0.9.3 - (Rev 2601) Apr 3, 2009
  29. 29. version 0.9.2 - (Rev 2472) Feb 20, 2009
  30. 30. Version 0.9.1 - (Rev 2330) Jan 13, 2009
  31. 31. Version 0.9.0 - (Rev 2130) Dec 15, 2008 (tagged, but not publically released)
  32. 32. Version 0.8.9 - (Rev 1948) Nov 18, 2008 (tagged, but not publically released)
  33. 33. Version 0.8.8 - (Rev 1787) Oct 24, 2008
  34. 34. Version 0.8.7 - (Rev 1755) Aug 29, 2008
  35. 35. Version 0.8.6 - (Rev 1666) Jun 20, 2008
  36. 36. Version 0.8.5 - (Rev 1488) Apr 3, 2008
  37. 37. Version 0.8.4 - (Rev 1456) Mar 8, 2008
  38. 38. Version 0.8.3 - (Rev 1412) Jan 17, 2008
  39. 39. Version 0.8.2 - (Rev 1370) Nov 19, 2007
  40. 40. Version 0.8.1 - (Rev 1254) Oct 05, 2007
  41. 41. Version 0.8.0 - (Rev 1215) Aug 14, 2007
  42. 42. Version 0.7.11 - (Rev 1133) July 26, 2007
  43. 43. Version 0.7.10 - (Rev 987) May 20, 2007
  44. 44. Version 0.7.9 - (Rev 885) Apr 3, 2007
  45. 45. Version 0.7.8 - (Rev 833) Mar 2, 2007
  46. 46. Version 0.7.7 - (Rev 786) Feb 1, 2007
  47. 47. Version 0.7.6 - (Rev 674) Dec 25, 2006
  48. 48. Version 0.7.5 - (Rev 576) Dec 8, 2006
  49. 49. Version 0.7.4 - (Rev 518) Nov 5, 2006
  50. 50. Version 0.7.3 - (Rev 470) Oct 2, 2006
  51. 51. Version 0.7.2 - (Rev 412) - Not publically released
  52. 52. Version 0.7.1 - (Rev 378) - Aug 20, 2006
  53. 53. Version 0.7.0 - (Release 0.6.15, July, 2006)
  54. 54. Version 0.6.14 - (Rev 341) - June 06, 2006
  55. 55. Version 0.6.13 - (Rev 278) - Apr. 20, 2006
  56. 56. Version 0.6.12 - (Rev 186) - Feb 18, 2006
  57. 57. Version 0.6.11 - (Rev 119) - Jan 19, 2006
  58. 58. Version 0.6.10 (Rev90) - Dec, 20th, 2005
  59. 59. Version 0.6.9 (Rev71) - Nov, 19th, 2005
  60. 60. Version 0.6.8 - Sep 21st, 2005
  61. 61. Version 0.6.7 - Aug, 1st, 2005
  62. 62. Version 0.6.6 - various GUI / wxPython improvements. Not released.
  63. 63. Version 0.6.5 - userfriendliness (simuPOP scripts). May 1st, 2005
  64. 64. Version 0.6.4 - efficiency and usability. Not released
  65. 65. Version 0.6.3 - Ancestral populations Apr. 5, 2005
  66. 66. Version 0.6.2 - better usage of vars Mar, 23, 2005
  67. 67. Version 0.6.1 * usability and real applications Feb, 12, 2005
  68. 68. Version 0.6.0 - validation and distribution, Jan, 1st, 2005
  69. 69. Version 0.5.9 - performance boost, dynamic population size Dec. 12th, 2004
  70. 70. Version 0.5.8 - selection Dec. 5nd, 2004
  71. 71. Version 0.5.7 - serialization Nov. 24, 2004
  72. 72. Version 0.5.6 - expression. Nov. 19, 2004
  73. 73. Version 0.5.5, - more clean up, more examples. Nov. 10, 2004
  74. 74. Version 0.5.4, Nov. 7, 2004 - clean the code. still working on the code base
  75. 75. Version 0.5.3 Oct 10, 2004 -- some interesting new features
  76. 76. Version 0.5.2 -- windows port, smaller distribution, better help()
  77. 77. Version 0.5.1
  78. 78. Version 0.5
  79. 79. Version 0.1 Friday 18, June 2004

1.  Version 1.1.9 -- (Under development)


  • Allow operator DiscardIf to accept a probability to discard individuals. (#31)

2.  Version 1.1.8 -- (Feb, 10, 2017)


  • Fix a crash bug when `Population.setSubPopByIndIf` is passed with an empty population (#19)
  • Fix a crash caused by cyclic reference handling (#14)
  • Fix a bug with dynamic evaluation of parameter `output` of `exporter` (#13)


  • Allow passing operators in the format of set, iterators etc, in addition to lists (#9).
  • Add parameter genotypes to operator InitGenotype (#20).
  • Suppress progress bar for gui mode batch (#21).

3.  Version 1.1.7 -- (Jan 20, 2016)


  • Adding a BackwardMigrator operator and associated backwardMigrate function to perform migration according to specified backward migration matrices.


  • Change file format to allow saving and loading population variables of arbitrary pickle-able type, which includes numpy and pandas objects.
  • Statically link to libstdc++ so that the linux distributions are less dependent on versions of kernel and gcc.
  • Removal of all rpy/rpy2 related code.
  • Allow parameter freq and prop to accept a function to return locus and subpopulation dependent frequency list.

4.  Version 1.1.6 -- (Apr 30, 2015)


  • Properly fix a memory leak bug that are not completely fixed in 1.1.5.


  • Remove dependency on distribute for anaconda release of simuPOP.

5.  Version 1.1.5 -- (Apr 20, 2015)


  • Fix a memory leak bug (caused by circular reference) that was incorrectly fixed in 1.1.2.


  • support installation through command pip (pypi)
  • create binary distributions for conda.
  • Add parameter allowSelfing to CombinedParentsChooser
  • Add HermaphroditicMating
  • Allow the use of parameter infoFields to specify which information fields to output for operator Dumper and function dump.
  • Add parameter reverse=false to function Population.sortIndividuals() to allow sorting individuals in reverse order.

6.  Version 1.1.4 -- Rev 4951 (Oct, 15, 2014)


  • Expose type defdict so that users can use this type directly.
  • Add event based demographic models.


  • Fix a bug with MultiStageModel when the population does not start from generation 0.

7.  Version 1.1.3 -- Rev 4915 (July 29, 2014)


  • Add a new mating scheme ConditionalMating to apply different matings schemes to populations with different properties. (Example)
  • Allow the passing of mutants (non-zero alleles) as a dictionary to user-provided function in call-back functions of PySelector, PyQuanTrait, and PyPenetrance. This can be more efficient for large genomes with few mutants.
  • Allow the use of (chr,pos) pair to specify loci when parameter loci is accepted.
  • Allow the pass of a function to parameter loci of many operators. This allows dynamic determination of loci to be applied. (Example)
  • Add an operator RevertIf to revert the evolving population to a saved state. (Example)


  • Support compiling simuPOP using clang under MacOSX Maverick
  • Allow function passed to PyMutator to accept parameter locus.
  • Allow the use of varying recombination rates rates=[...] with loci=ALL_AVAIL in operator Recombinator.
  • Raise an error if a demographic function returns a negative population size.
  • Expose the chooseParents interface of parent choosers so that they could be used in PyParentsChooser. (Example)
  • Add parameter scale to demographic functions in module simuPOP.demography.
  • Output actual segregating sites and fixed sites using variable segSites in stat(numOfSegSite) operator.
  • Performance improvement for recombination with fine-scale recombination rate.
  • save float point numbers in variables with high prevision.
  • Optimize calculation of allele frequency for mutant modules.
  • Add function PopulationAdmixtureModel to module simuPOP.demography.
  • Allow the output parameter of operators to accept a file object (or any Python object with a write function).
  • Add function WithMode to allow simuPOP output in binary mode.


  • Fix a bug for random parent chooser (single parent) without replacement.
  • Fix a memory leak bug for PyParentChooser.
  • Fix a crash when apply operator Stat(minOfInfo, maxOfInfo) to an empty subpopulation.
  • Fix a crash when applying Recombinator to populations with only one of the sex chromosomes.
  • Fix a bug that prevents the PyOperator from using parameter subPops.
  • Fix a crash when recombination and mutation are applied to a population without any locus.
  • Fix calculation of segregating sites for sex chromosomes.

8.  Version 1.1.2 -- Rev 4825 (Feb 16, 2014)


  • Add a new module simuPOP.demography, move migr functions from simuPOP.utils to this module and add a migration matrix generating function for 2D stepping stone model. Add demographic models InstantChangeModel, LinearGrowthModel, ExponentialGrowthModel and MultiStageModel, OutofAfricaModel, and SettlementOfNewWorldModel.


  • Fix a bug in Population.addLoci when a locus is added to an empty chromosome (with 0 locus).
  • Stop output details of mutations by default (> was set as default).
  • Fix the use of virtual subpopulation in import/export functions.
  • Add only one field if duplicated information fields are added.


  • Add support for format ms to functions simuPOP.utils.importPopulation and simuPOP.utils.export.
  • Add support for matplotlib in module simuPOP.plotter. Only VarPlotter is supported because other statistics related operators (e.g. BoxPlotter) reply on rpy for statistical analysis.
  • Stop an evolutionary process if the demographic function returns an empty list. This allows the demographic models to stop evolution.
  • Allow the passing of duplicated information fields to allow more flexibility in the design of external modules.

9.  Version 1.1.1 - Rev 4774 (May 13, 2013)


  • Add an operator OffspringTagger to track the index of offspring in their familes.
  • Allow mutators to output details of each mutant.
  • Add parameter byName to function Population.addLociFrom.
  • Use R package kinship2 instead of kinship in simuPOP.sampling because the kinship package is now deprecated.

10.  Version 1.1.0 -Rev 4744 (Feb 11, 2013)


  • Implement temporal estimates of effective population size for sampling plan 1. Add variables Ne_tempoFS_P1, Ne_tempoFS_P2, Ne_waples97_P1 and Ne_waples97_P2. Variables Ne_tempoFS and Ne_waples97 are now deprecated.
  • A new file format to improve efficiency and reduce memory footprint of save/load of simuPOP populations.


  • Fix setOption(version) for minor simuPOP releases with version string ending with a, b, etc.
  • Fix lociPos for positions that are very close to each other.
  • Fix a bug in mutator that crashes with low mutation rate.
  • Fix a bug in recombinator that crashes with low recombination intensity.

11.  version 1.0.9 - Rev 4720 (Dec 6, 2012)

Major New Features:

  • Add parameter effectiveSize to operator Stat to calculate effective population size. Currently based on the moment method of Waples 1989, TempoFS method of Jorde & Ryman 2007, a LD-based method from Waples 2006, and an esimate of the demographic effectize size.

New Feature:

  • Rename PER_LOCI to PER_ALLELE in InitLineage. PER_LOCI can still be used for backward compatibility.
  • Allow empty value list in InitLineage. In this case, unique values will be provided for each case.
  • Allow export in PED, MAP and Phylip format in operator utils.Exporter and function utils.export.


  • Fix a HWE test crash when one of the homozygote count is zero.
  • Result of homoFreq should be a dictionary. A list is returned in the current version.
  • Fix InitGenotype(haplotypes) in multi-thread mode of the binary module

12.  Version 1.0.8 - Rev 4649 (Sep, 5th, 2012)

Major New Features:

  • Add an operator Exporter and function export to export a simuPOP population in STRUCTURE, GenePop, FStat and CSV formats.


  • Fix a bug that prevents females from selected correctly during random mating. The bug was introduced in simuPOP 1.0.6.


  • Quit with proper error message when fails to write
  • Fix a bug where applicability parameters in operators in parameter ops for operators MlSelector and MlPenetrance are ignored.
  • Results from Stat(heteroFreq) are now set one by one, and not as a default dictionary
  • Fix a bug in Population.removeLoci() that will lead to incorrect population genotype.
  • Fix compatibility bug with SWIG 2.0.8
  • Allow IdTagger to work properly in Self mating when two parents have the same IDs

13.  version 1.0.7 - Rev 4596 (Apr. 6, 2012) -- use 1.0.8 instead

Major New features:

  • Add MITOCHONDRIAL as a natural chromosome type so that operators such as Stat can handle them correctly.
  • A new allele type mutant that saves only non-zero alleles for efficient simulation of a large number of rare variants.
  • A new allele type lineage to track the lineage (origin of alleles) of alleles during evolution.
  • A new file format is introduced to accommodate the new features. This file format cannot be recognized by older versions of simuPOP.

New features:

  • New option numOfSegSites to operator Stat to calculate the number of segragating sites.
  • New option numOfMutants to operator Stat to count the number of mutants (non-zero alleles).
  • Extend Stat(structure) to handle haploid population and non-autosomal chromosomes.
  • New functions Individual.mutants() and Population.mutants() to return an iterator to iterate through all mutants of an individual or population.
  • New functions Individuals.alleleLineage(), Individuals.lineage(), Individual.setAlleleLineage(), Individual.setLineage(), Population.lineage(), and Population.setLineage() to handle allelic lineage in lineage modules.


  • Fix a bug that prevents the correct handling of population structure when evolving populations with changing population structure.
  • Fix a bug that prevents MlPenetrance from being used in the evolve function.
  • Ensure 2^64 maximum allele states for the long module under 64 bit system
  • Fix a bug for the appending of suffix to subpopulation variables.
  • Allow parameter subPop of function Population.indInfo to accept (virtual) subpop names.
  • CloneGenoTransmitter also transmits affection status.

14.  version 1.0.6 - Rev 4260 (July 11, 2011) -- use 1.0.8 instead

Major new feature:

  • Multi-thread support that allows simuPOP to take advantage of multi-core CPUs.

New features:

  • Expose function Population::virtualSplitter
  • Allow single input for parameters cutoff and values of operator InfoSplitter.
  • Allow the use of vsp name in function Population.individuals().
  • Support boost 1.45.0, 1.46.0. and 1.46.1.
  • Add option haploHomoFreq and haploHeteroFreq to calculate observed haplotype homozygosity and heterozygosity.
  • Let operator PyEval and PyExec support parameter subPops, which evaluates expressions in each subpopulation's local namespace.


  • Fix a bug when population.removeLoci(keep=[]) fails to clear all loci.
  • Fix a bug where populations saved in binary module on a 64 bit system cannot be loaded under 32 bit systems.
  • Fix a bug in the handling of single input for list type when the parameter is not processed using GUI.

15.  version 1.0.5 - Rev 3915 (Nov. 22, 2010)

New features:

  • Support parameter subPops in during mating operators so that different operators can be applied to offspring with different opportunities.
  • Add operator DiscardIf to discard individuals if some condition is met.
  • Callback functions for PyOperator must return either True or False. A RuntimeError will be returned otherwise.
  • Allow simuOpt.valueOneOf(t1, t2, t3) in addition to simuOpt.valueOneOf(list).
  • Allow simuOpt.valueNot(value) in addition to simuOpt.valueNot(validator).
  • Add function Trajectory.mutants() in simuPOP.utils.
  • Allow operator SavePopulation to take an empty string.
  • Allow operator PyOperator to accept a function that is applied to each individual.
  • Add parameter stopAfter to operator TicToc to stop the evolution after specified time, and allow this operator to be used during-mating.


  • Fix a bug in the handling of obsolete key 'arg' in parameter specification dictionary.
  • Fix a bug in the identifying of OUTBRED_SPOUSE when parentship of parents is unknown.
  • Fix a bug during the loading of tuples in a population's local name space.

Minor adjustment:

  • Parameter of type 'filename' and 'dirname' does not have to be a valid file or directory name.
  • Produce a warning message when one of the mating schemes in a heterogeneous mating scheme produces no offspring.

16.  version 1.0.4 - Rev 3815 (Sep. 7, 2010)

New features:

  • Add module simuPOP.sandbox as a place to store experimental and specialized classes and functions.
  • Add operators InfSitesSelector and InfSitesMutator to support mutation and selection in mutational space.
  • Population.recodeAllele does not raise an error if newAllele is not defined for an allele. A warning will be given if DBG_WARNING is defined.
  • Add option 'batch' to --gui, which will use default values for unspecified parameters.
  • Allow user-specified function for operator PySelector and PyPenetrance to accept parameter pop.
  • Beautify wxPython based parameter dialog.
  • Add validation function valueSumTo.
  • Allow the use of expressions to validate options.
  • Add name, type and validator to parameter definition dictionary. - Add mode --gui=interactive which is repsented by --gui=False in previous versions of simuPOP.
  • Add mode EXPONENTIAL to MlSelector.
  • Support Python 2.7, Python 3.0, boost 1.44.0 and swig 2.0. - Allow the use of subpopulation and virtual subpopulation names in parameter subPops and functions Population.subPopSize, Population.genotype, Population.setGenotype, Population.setIndInfo.


  • Regression: version 1.0.3 disallow invalid default value in parameter specification dictionary. This seemed to be a logic change but it turned out that invalid default value cannot always be avoided (e.g. a valid filename that cannot have a valid default value). This version allows invalid default value again.
  • Fix a bug that prevents types.TupleType and types.ListType of being used alone in allowedTypes of simuOpt.
  • Fix a bug in the parameter input dialog.
  • (core) Fix a bug that prevents proper iteration through individuals in virtual subpopulations under certain condition.

Regression (minor):

  • User provided function in function Population.recodeAlleles will be called once for each existing allele so it is now not possible to emit random alleles for the same allele.
  • The second parameter of function applyToIndividual, if specified, should now be a population reference.
  • Parameter usePopVars is now obsolete in operators InfoEval and InfoExec.
  • Statements specified in operator InfoEval will also change values of individual information fields.
  • Mark validate, arg, longarg, chooseFrom, chooseOneOf in parameter definition dictionary obsolete
  • Mark parameter revision in simuOpt.setOptions as obsolete.

17.  version 1.0.3 - Rev 3592 (Jun. 8, 2010)

BUGS (minor):

  • Fix error handling in the conversion of commandline input with incorrect allowedTypes.
  • Raise an error when SequentialParentsChooser is applied to a population only male or female individuals.
  • Display 'None' instead of '' for default value None in parameter dialogs of module simuOpt.
  • Clear parent IDs if a parent is not sampled in function sampling.plotPedigree.

New features:

  • Add a CombinedParentsChooser that uses two parent choosers to choose parents from potentially different virtual subpopulations.
  • Add paremeter sexChoice to parent choosers SequentialParentChooser and RandomParentChooser.
  • Allow parameter loci to accept loci names in addition to loci indexes so that they can handle remove correct loci when loci indexes are variable.

New features (minor):

  • Allow mixed number and sequence specification of matrix. For example, [1, 2, (1,2)] will be intepretted as [(1,), (2,), (1,2)].
  • Add optional parameter start and stop to carray.index().
  • Support gcc < 4.0 even if those compilers do not support tr1.
  • Output warning for mismatch of genotype or haplotype length in operator InitGenotype.
  • Silently ignore alleles n or higher in a MatrixMutator and KAlleleMutator if their mutation rates are undefined (e.g. mutation matrix only has n rows). An error was triggered in the previous version.
  • Add parameter size to simuOpt.valueIsList and simuOpt.valueListOf to allow validation of sequences according to sequence length.
  • Make parameter loci in PySelector, PyQuanTrait and PyPenetrance accept value ALL_AVAIL.
  • Allow parameter count in function utils.ProgressBar.update(count) to be None, meaning update by an increment of 1.
  • Allow parameter filter in Population.removeIndividuals and Population.extractIndividuals to accept information fields as parameters.
  • Allow parameters in Population.addChrom, Population.addLoci to accept single input for vector parameters.
  • Support Python 2.6.5 (fix
  • Add SEQUENCE_OF_SEX and GLOBAL_SEQUENCE_OF_SEX to option sexMode of class OffspringGenerator.
  • Parameter sexMode and numOffspring in OffspringGenerator now accepts a generator function.
  • Allow the use of single input in functions Population.setGenotype and Individual.setGenotype.

18.  version 1.0.2 - Rev 3503 (Apr. 1, 2010)


  • The shifted distribution implemented for POISSON_DISTRIBUTION and BINOMIAL_DISTRIBUTION for the specification of random number of offspring is replaced with truncated distributions.

New features:

  • Add parameter haplotypes to operator InitGenotype to allow initialization by haplotype frequencies.
  • Add parameter chroms to operator CloneGenoTransmitter to control which chromosomes to copy.


  • Random number of offspring using Poisson and Binomial distribution with get different distributions due to reinterpretation of these parameters.

New features (minor):

  • Expose class WeightedSampler to the user interface.
  • Perform a limited number of parameter checkings in optimized modules, provided that they do not hinder system performance.
  • Add gsl_cdf_poisson_P, gsl_cdf_poisson_Q and gsl_ran_poisson_pdf to module simuPOP.gsl.
  • Add a debug code DBG_WARNING that output warnings for certain use of simuPOP.
  • Output warning messages for the use of Individual.genotype() and Population.genotype.

19.  version 1.0.1 - Rev 3473 (Feb 24, 2010)


  • Fix a typo that breaks the dryrun parameter of Population.evolve().
  • Fix a bug in population.recodeAlleles when a single locus is specified.
  • Fix a memory leak bug when modifying an existing genotype structure.
  • Fix parameter revision of function simuOpt.setOptions.
  • Fix a bug for getting integer chooseFrom values and the setting of default True/False value. using Tkinter based parameter input dialog (simuOpt.Params),
  • Fix a bug that crashes simuPOP when the recombination rate between two loci are really small (e.g. 1e-17).
  • Fix a bug and expand the use of parameter header in function utils.saveCSV.
  • Fix a bug that prevents proper cloning of Pedigree objects.

New features:

  • Add parameter 'version' to function simuOpt.setOptions.
  • Add pdf and cdf functions for binomial and beta distributions to module simuPOP.gsl.
  • Accept ALL_AVAIL in sp or vsp in a virtual subpopulation list to go through specific or all virtual subpopulation of specific or all subpopulations.
  • Add functions Pedigree.identifyAncestors and Pedigree.identifyOffspring and
  • Add a mating scheme PedigreeMating.
  • Allow operator PedigreeTagger to be applied to a population.
  • Add function loadPedigree to load pedigrees saved by operator PedigreeTaggerand function
  • Operator IfElse now accepts a user-defined function.
  • Add parameter ancGen to functions Population.popSize, Population.subPopSizes and Population.subPopSize.

Regression (minor):

  • Additional columns are added to files saved by operator PedigreeTagger.

New features (minor):

  • Document base mating scheme MatingScheme and allow it to be used explicitly.
  • Accept float numbers as input when a list of integers is required.
  • simuPOP.utils.migrSteppingStoneRates returns 1? when n=1 (instead of raising an Error).
  • Send a proper error message when condition of an IfElse operator is failed to evaluate.
  • Allow trajectory simulation program to handle float population size because float population size is accepted in simuPOP core.
  • Logging more useful information for the simulation of allele frequency trajectory.
  • Add parameter infoFormatter to function utils.saveCSV. Rename parameters genoCode, sexCode, and affectionCode to genoFormatter, sexFormatter,and affectionFormatter. The old parameters can still be used.
  • Allow the backward trajectory simulation algorithm to simulate from fixed alleles.
  • Allow --param=True/False/1/0/true/false from command line for true/false options.
  • Raise a ValueError when the number of rows of a migration matrix does not matchthe number of subpopulations.

20.  Upgrade guide from previous versions of simuPOP.

  • Change all class names from mixedCase style to CapWords style. For example,
        population --> Population
        initInfo --> InitInfo
        randomMating --> RandomMating
        recombinator --> Recombinator
        sexSplitter --> SexSplitter
        dumper --> Dumper
        varPlotter --> VarPlotter
  • Change all global function names from CapWords to mixedCase style. For example,
        InitInfo --> initInfo
        LoadPopulation --> loadPopulation
        Dump --> dump
        ModuleInfo --> moduleInfo
  • Change all constants from CapWords to ALL_CAPTICAL style. For example,
        ChromosomeX --> CHROMOSOME_X
        GeometricDistribution --> GEOMETRIC_DISTRIBUTION
  • Rename of operators
        initByFreq --> InitGenotype(freq=
        initByValue --> InitGenotype(genotype=
        kamMutator --> KAlleleMutator
        smmMutator --> StepwiseMutator
        snpMutator --> SNPMutator
  • Renames in module simuOpt
        simuParam --> Params
  • Renames in module simuPOP.utils
        simuProgress --> ProgressBar
  • Change of simulator:
        Move mating scheme to the evolve member function.
  • Change of evolve function (From version 0.9.x)
        1. Add matingSchem = mating scheme previously defined in a simulator.
        2. Move all operators in parameter duringOps (or during mating
           operators from the ops parameter if from version 0.8.8) to
           the parameter ops of the mating scheme. You will have to add
           proper genotype transmitter (most likely MendelianGenoTransmitter())
           to this parameter as well.
  • External functions that are used in operators such as PyOperator and PyTagger now accept fixed parameter names such as pop and off.
  • Major change from version 0.8.8:
        1. Module simuUtil is replaced by modules simuPOP.utils.
        2. Operator varPlotter is now in simuPOP.plotter as VarPlotter
           with new interface
        3. Trajectory simulation functions are now in simuPOP.utils    
        4. All sampling functions and classed are now in simuPOP.sampling
        5. Initialization of sex needs a separate operator InitSex()
  • Change of evolve function (From version 0.8.8)
        1. Remove the stage parameter of all operators
        2. Rename preOps to initOps
        3. Rename postOps to finalOps
        4. Move operators in parameter ops to parameters preOps (if
           applied before mating) and postOps (if applied after mating).

If your script still does not work, please check the simuPOP user's guide and reference manual, or send an email to the simuPOP mailing list.

21.  version 1.0.0 - Rev 3373 (Jan 8, 2010)

  • BUG: Fix a bug in simuOpt.valueListOf when a list of values is passed.
  • CHG: Using a new method to communicate with user-provided Python functions. Basically, parameter names are now used to tell simuPOP what information to sent to these functions. This leads to the removal of parameter offspringOnly from pyOperator.
  • CHG: pyPenetrance, pyQuanTrait and pySelector now accept functions with parameters ind.
  • CHG: Allow a penetrance operator to be applied to single individuals.
  • NEW: Add class withArgs to specify names of arguments when they cannot be specified from parameter names.
  • CHG: Remove functions AvailableRNGs() and DebugCodes(). The former is now ModuleInfo()['availableRNGs'], the latter is ModuleINfo()['debug'].keys().
  • CHG: Move mating scheme from simulator() to simulator.evolve(). This change simplifies the used of during mating operators but will cripple every simuPOP script again. :-(
  • NEW: The first parameter of simulator now accepts a list of populations.
  • NEW: Add global function Describe.
  • CHG: Remove rarely used operators turnOnDebug, turnOffDebug and setAncestralDepth.
  • CHG: Except for function form of operators, rename all global functions so that they start with small letter (LoadPopulation -> loadPopulation, ModuleInfo -> moduleInfo). This makes simuPOP conforms to the Python style guide better.
  • CHG: Merge initByFreq and initByValue to initGenotype.
  • CHG: Rename simuOpt.simuParam to simuOpt.Params and utils.simuProgress to utils.ProgressBar.
  • NEW: Enhance functions Indivdual.genotype and Individual.setGenotype.
  • CHG: Remove functions Individual.sexChar and Individual.affectionChar.
  • CHG: Remove alpha mating because it is merely a special kind of natural selection model.
  • NEW: Add parameter dryrun back to function evolve.
  • CHG: Remove global function setRNG.
  • NEW: Extend population.removeIndividuals and population.extractIndividuals.
  • NEW: Allow pedigree class to use many population functions that add/remove individuals.
  • NEW: Add parameter stealPop to the pedigree class.
  • CHG: Replace parameter ancGen to ancGens in many places.
  • NEW: Add function pedigree.identifyFamilies.
  • NEW: Add functions pedigree.asPopulation and population.asPedigree.

22.  version 0.9.9 - Rev 3204 (Dec 10, 2009)

  • NEW: Allow controlledRandomMating to fall back to random mating if there is no locus to control.
  • NEW: Allow the use of a fixed value in operator ifElse, and allow the use of applicability parameters in ifOps and elseOps operators.
  • NEW: Allow Ctrl-C to interrupt an evolving process. (The solution does not work under windows).
  • NEW: Add simuOpt.param() to allow a function style of inputting parameter specification dictionaries. Allow single value input for key allowedTypes in parameter specification dictionaries.
  • CHG: Remove parameter dryrun from simulator.describe() and add simulator.describe() to describe an evolutionary process, including complex mating schemes.
  • NEW: Allow double index for population.individual, population.ancestor and population.indByID. This makes it easier to locate individuals using index or ID stored in information fields.
  • CHG: Change the way binary genotypes are saved to make the archive more portable.
  • NEW: Improve the precision of the ticToc operator (0.01s now).
  • NEW: Add utility module simuPOP.gsl.
  • BUG: Fix a bug in the activation of VSP defined by combinedSplitter.
  • NEW: Produce a warning when parameter subPopSize is used in a homogeneous mating scheme in a heterogeneous mating scheme.
  • NEW: Add relationship OutbredSpouse to pedigree.locateRelatives. Replace relationship SpouseAndOffspring with CommonOffspring.
  • CHG: Adjust the pedigree class. All function interfaces have been changed.
  • CHG: Add function population.removeInfoFields.
  • NEW: Allow nested use of vsp in population.individuals().
  • NEW: Add function population.extractIndividuals, population.extractSubPops, remove population.extract.
  • NEW: Disable population manipulation functions of an pedigree object.
  • NEW: Add functions IndexToID, DrawPedigree and samplers nuclearFamilySampler, threeGenFamilySampler, combinedSampler and their sampling functions to the simuPOP.sampling class.
  • CHG: temporarily remove infoParentsChooser, consanguineousMating and pedigreeMating. There is not enough time to implement these features nicely.
  • CHG: Rename ..OfMale to ..OfMales and ..OfFemale to ..OfFemales.
  • CHG: Capitalize all global constant variables.
  • CHG: Stop loading submodules when simuPOP is imported using 'from simuPOP import *'.

23.  version 0.9.8 - Rev 3074 (Oct 28, 2009)

  • BUG: Fix a memory leak bug in pyParentsChooser.
  • CHG: mapSelector now accepts a dictionary of tuples, instead of strings.
  • CHG: mapPenetrance now accepts a dictionary of tuples, instead of strings.
  • CHG: Remove function individual.intInfo.
  • CHG: cloneGenoTransmitter accepts a list of information fields to be copied from parents to offspring. Default to all information fields.
  • CHG: Remove the stage feature of operators. Instead, operators should be passed explicitly to parameters preOps, duringOps, postOps of the evolve function. The existing preOps and postOps parameters are renamed to initOps and finalOps.
  • CHG: The second parameter of a demographic function is now the parental population itself, instead of parental population sizes.
  • CHG: Treat ancGen in population.indByID as suggested generation and will continue to check other generations if an individual with specified ID is not found in the suggested generation.
  • CHG: separate additional fields from infoFields to paramFields in operator pySelector.
  • CHG: Change parameter selectors to ops in operator pySelector.
  • CHG: Add support for virtual subpopulations to all penetrance operators.
  • CHG: Change parameter subPop to subPops in mating schemes.
  • CHG: Remove all quantitative trait opeartors except pyQuanTrait. Mofidy the interface of pyQuanTrait so that it can handle multiple trait fields and be applied during mating.
  • CHG: More sampling operators and functions to submodule sampling.
  • NEW: during-mating operators used in a mating scheme now supports parameters begin, step, end, at and reps.
  • NEW: add parameter vspMap to combinedSplitter that can define VSPs by union of VSPs.
  • NEW: add parameter ranges to infoSplitter.
  • NEW: add productSplitter that define VSPs by intersections of VSPs.
  • NEW: allow access individual information fields as attributes.
  • NEW: Add Chi-Squared distribution to the RNG() class. Remove some rarely used memeber functions of this class.
  • NEW: Allow selectors to be applied during mating to allow for natural selection through the selection of offspring.
  • NEW: Allow the specification of VSP names in splitters.
  • NEW: Add parameter freq to operator initByValue.
  • NEW: Add parameter maleProp to operator initSex.
  • NEW: Add support for haplodiploid population and sex chromosomes to mapSelector.
  • NEW: Add support of haploid population to maSelector.

24.  version 0.9.7 - Rev 2983 (Sep 26, 2009)

  • CHG: Rename module simuUtil to simuPOP.utils, simuRPy to simuPOP.plotter.
  • CHG: Rename class simuOpt.simuOpt to simuOpt.simuParam to avoid name conflict.
  • CHG: Merge functions AlleleType(), Optimized(), simuVer(), simuRev() to ModuleInfo().
  • CHG: move initSex() out of initByFreq and initByValue so initByFreq and initByValue no longer initialize sex by default.
  • CHG: Change long allele module to 32 bits to simulate infinite-sites models.
  • CHG: TurnOnDebug/turnOnDebug and TurnOffDebug/turnOffDebug now accept string instead of constants as input.
  • CHG: Change how during mating operators are handled. Briefly, the rules have been simplifed to a): during mating operators in mating schemes are applied first. b): during mating operators in simulator.evolve are applied after. There is no difference between a regular operator and a genotype transmitter.
  • CHG: Remove tagger. Expand and document inheritTagger.
  • CHG: Remove parentTagger and tidy up parentsTagger.
  • CHG: Revise trajectory simulation classes and functions. Adjust how controlledOffspringGenerator takes input.
  • NEW: Add population.recodeAlleles to recode alleles.
  • NEW: Allow the specification of locus-specific allele names. This affects functions population, population.addChrom, population.addChromFrom, population.recodeAlleles, population.addLoci, population.addLociFrom, and genotructure trait functions alleleName and alleleNames.
  • NEW: Use AllAvail as default parameters for parameters loci, reps and subPops and use [] for its intended meaning: nothing.
  • NEW: Add pedigreeTagger.
  • NEW: Add operator initInfo and its function form InitInfo.
  • NEW: Add operator summaryTagger.
  • NEW: Add function population.indByID to identify individuals, even ancestors, by individual ID.
  • NEW: Add support for VSP to pointMutator.
  • BUG: Fix a population.extract() bug with the copy of existing information fields when parameter pedFields is specified.
  • BUG: Install to dist-packages instead of built-in site-packages under ubuntu/python2.6.
  • BUG: Fix a bug in Dumper() when ancestral generations have different numbers of subpopulations than the current generation.
  • BUG: Fix a bug for the calculation of Armitage trend tests.
  • BUG: Fix the save/load of default dictionaries.

25.  version 0.9.6 - Rev 2849 (Aug 6, 2009)

  • NEW: Add a global function closeOutput to close '>>' or '>>>' output files used in the function form of an operator.
  • BUG: Fix a memory leak of LoadPopulation.
  • CHG: Rename function rng() to GetRNG() for consistent naming of functions.
  • NEW: Merge overloaded functions of population::setIndInfo, population::indInfo, population::individual, population::individuals, population::vars, simulator::vars, individual::setGenotype, individual::genotype, individual::allele, individual::setAllele, individual::alleleChar, individual::info, individual::setInfo to one function with more complex input type and default parameter. This change allows keyword arguments for all these functions.
  • CHG: the parameter order of function population::ancestor has been changed!
  • CHG: stat(popSize=True) accepts subPops parameter. It now output 'popSize' (a number), 'subPopSize' (a list) and subPop[vsp]['popSize'] (a number). By default, it does not calculate population size for (virtual) subpopulations.
  • CHG: Introduce parameter vars to operator stator. It will be used to replace all blah_param parameters.
  • CHG: Remove numOfAllele parameter of stat() operator.
  • CHG: Parameter subPops now treats [] as no subpopulation, and accept AllSubPops as its usual default parameter.
  • CHG: Rename parameter rep to reps in all operators. This parameter now treats input [] as no replicate and use AllReps as its default input.
  • CHG: Remove expHetero statistics. Remove allele-level heterozygosity variable. Rename heterozygosity variables.
  • CHG: statGenoFreq now uses tuple (instead of string) as genotype indexes. Parameter phase has been removed.
  • CHG: statHaploFreq now uses tuple (instead of string) as loci and haplotype indexes.
  • NEW: Add statInfo to calculate sum, mean, var, max and min of information fields.
  • CHG: rewrite statLD and change how primary alleles are handled. Please refer to user's guide for details.
  • NEW: add relationship SpouseAndOffspring to pedigree::locateRelatives.
  • NEW: add parameter pedFields to population::extract.
  • NEW: Introduce new type defdict for allele, genotype and haplotype counts and frequencies.
  • CHG: Disallow the use of nested list for parameter lociPos of population().
  • NEW: Allow single-form parameter for parameters of function population().
  • CHG: Rename paramter Fst of operator stat to structure, change associated variable names. This leaves room for the implementation of other structure related statistics.
  • NEW: Add Nei's 1973 Gst statistics.
  • NEW: Add parameter suffix to operator stator.

26.  version 0.9.5 - Revision 2740 (Jun 22, 2009)

  • NEW: Supports SWIG 1.3.39.
  • BUG: Fix a bug when using simuRPy for R version <= 0.9.0 under windows.
  • CHG: Do not set default loci name to "locX-Y". Empty string will be returned if lociNames are not set. This also changes the behavior of functions locusByName and lociByNames.
  • CHG: Do not set default subpopulation name to "Unnamed". Empty string will be returned if lociNames are not set. population::subPopName() is changed accordingly.
  • NEW: Add matrixMutator and an early form of actgMutator.
  • NEW: Add mapIn and mapOut feature to all mutators.
  • NEW: Add parameter name to population::mergeSubPops and operator mergeSubPops
  • NEW: Add parameter names to population::splitSubPop and operator splitSubPops.
  • NEW: Allow parameter infoFields to take single form values. Remove population::addInfoField() because addInfoFields() now accepts single input.
  • BUG: Fix a bug with persistent dirty signature.
  • CHG: Replace parameter maxAllele in operator kamMutator with k (= maxAllele + 1), and rename parameter rate to rates.
  • CHG: Merge operator gsmMutator to smmMutator and pyMutator.
  • CHG: Rename parameter rate to rates for operator recombinator.
  • NEW: Mutators now supports virtual subpopulations (parameter VSP).
  • NEW: ifElse operator now accepts lists of ifOps and elseOps.
  • NEW: Allow single form input for operator lists.
  • CHG: Operators are now copied to simulator::evolve. This makes counting functions such as recombinator::recCount useless so they are removed.
  • NEW: Add a hierarchical island migration model to
  • NEW: Add a mixedMutator to simulated mixed mutation models.
  • NEW: Move trajectory simulation functions out of the simuPOP core. They will be reimplemented in simuUtil.
  • NEW: Add a context-dependent mutator contextMutator and context support for pyMutator.
  • NEW: Allow mitochondrialGenoTransmitter to be used in haploid populations.
  • NEW: Add links to download examples to the online user's guide.

27.  version 0.9.4 - (Rev 2674) May 20, 2009

  • BUG: Fix the handling of proportions in splitSubPops.
  • BUG: Fix randomParentChooser when there is subpopulation structure.
  • BUG: Fix a bug that concerns mutation at invalid (unused) locations.
  • NEW: Allow Python parent choosers to return individual(s) directly.
  • CHG: Remove image plottype from varPlotter, with simplified code and enhanced functions.
  • NEW: Add scatterPlotter that plots information fields.
  • NEW: Add infoPlotter and two special cases histPlotter and qqPlotter.
  • NEW: Add boxPlotter to plot boxplots of information fields.
  • NEW: Introducing derivedArgs with expression values.

28.  version 0.9.3 - (Rev 2601) Apr 3, 2009

  • BUG: Fix a bug with population::removeLoci when given keep loci are not in order.
  • NEW: Prevent the use of greater than one probabilities in Bernulli trails.
  • NEW: Add a Tkinter implementation for simuProgress.
  • BUG: Fix a bug where subpopulation names of merged population are not properly merged.
  • NEW: Allow specifying non-string values in 'chooseFrom' and 'chooseOneOf' in simuOpt parameter specification.
  • NEW: Allow operators to output to a Python function.
  • NEW: Allow the use of double-click to open a browse dialog for file and directory input in simuOpt.
  • BUG: Fix a memory leak bug related to infoEval and infoExec. Optimize infoExec for some simple statements.
  • CHG: change parameter formOffGenotype of pyOperator to isTransmitter as a result of merging concepts 'primary during mating operator' and 'genotype transmitter'.
  • CHG: Move all scripts under the scripts directory to online cookbook.
  • CHG: Change relatedness calculations in operator stat.
  • NEW: Add calculation of HWE p-value to the stat operator.
  • NEW: Test individual index in population::removeIndividuals
  • BUG: Fix a bug when no subpopulation is given in splitSubPops.
  • CHG: Merge stat(association) to stat(LD), in preparation for case-control association tests.
  • NEW: (experimental) Add case/control association chisq test to stat.
  • NEW: (experimental) Add Tajima's pi statistics (mean pairwise difference) to the stat() operator.

29.  version 0.9.2 - (Rev 2472) Feb 20, 2009

  • NEW: Allow populations in a simulator to have different genotype structure.
  • CHG: A simulator can no longer access genotypic structure information.
  • NEW: Add simulator::add to add new populations to a simulator.
  • CHG: Remove simulator::addInfoField and other functions because they can be applied to individual populations.
  • NEW: Allow the use of single form parameter in population::removeSubPops, removeIndividuals, addLoci, removeLoci and resize.
  • BUG: Fix a bug in adding locus to a population without any locus.
  • NEW: Alow the use of single form parameter in controlledOffspringGenerator. Handle single return value of allele frequency trajectory function.
  • NEW: Rename parameter fromSubPop to subPops and toSubPop to toSubPops for migrator, for naming consistency.
  • NEW: Add mode = ByIndInfo to migrator so that users can explicitly set migrate_to informatin field and migrate.
  • NEW: Remove pyMigrator from the core. The varying migration rate migrator can be easily implemented in a Python operator. The indFunc mode is not at all useful because it can be done by a Python operator plus mode=ByIndInfo.
  • NEW: Allow unordered lociPos specification in population(), lociNames will be rearranged accordingly.
  • NEW: Allow single parameter to parameters loci, ploidy in initByValue and initByFreq.
  • NEW: Remove parameter chrom from dumper(), allow single parameter input for parameter loci in this operator.
  • NEW: Add pause operator to accept specified keys.
  • CHG: Remove rarely used parameters preStmts and postStmts from operators pyEval and pyExec.
  • CHG: Polish operator infoEval and infoExec (they now supports virtual subpopulations). Document them in detail in user's guide and reference manual.
  • CHG: Remove hapMapUtil from the core. These functions belong more to the simuPOP cookbook than the core.
  • CHG: Move scripts/loadHapMap to simuPOP online cookbook.
  • CHG: Polish and document simuOpt. getParam function now belongs to the simuOpt class.
  • CHG: Remove jump and jumpIfFalse from parameter specification.
  • CHG: Replace --noDialog with --gui=False (and allow for values such as Tkinter).
  • CHG: Polish operator splitSubPop, replace which to subPops, and add the feature to split subpopulations by information field. Rename this operator to splitSubPops.
  • CHG: population::splitSubPop can no longer split by proportion. Please use operator splitSubPops and its function form SplitSubPops instead.

30.  Version 0.9.1 - (Rev 2330) Jan 13, 2009

  • NEW: Improve allele iterator so that stat(alleleFreq) can handle chromosome x and y.
  • CHG: Raise an error when there is no male or female in a diploid parents chooser.
  • CHG: Remove parameter newSubPopSizeExpr and rename newSubPopSize to subPopSize, and newSubPopSizeFunc to subPopSizeFunc.
  • CHG: Merge parameters subPopSize and subPopSizeFunc. This parameter can now take both a list and a function.
  • BUG: Fix population load/save under windows, add simulator equality test (__cmp__).
  • CHG: Merge parameters numOffspringFunc, numOffspringParam and mode to numOffspring in offspringGenerator.
  • CHG: Merge parameter sexParam to sexMode in offspringGenerator.
  • CHG: Rename mating scheme binomialSelection to randomSelection.
  • CHG: Merge parameters convProb, convMode and convParam to convMode in recombinator.
  • BUG: Fix option shuffleOffspring in heteroMating().
  • CHG: Change the default output of parentsTagger when only one parent is passed.
  • CHG: Remove parameter numParents from offspringGenerator and parent choosers.
  • CHG: Rename pyMating to homoMating. Remove unused parameters subPop and weight from heteroMating.
  • NEW: Allow a demographic function to return a number if there is only one subpopulation.
  • NEW: Allow pedigreeMating to set sex, affection status and some information fields from the pedigree object.
  • NEW: Allow random parent(s) choosers to set name of information field fitness.
  • CHG: Change interface for pedigree::locateRelatives. Rename setIndexOfRelatives to traceRelatives.
  • NEW: Allow replicate numbers in a simulator to refer to the last several active populations.
  • CHG: Merge parameter output and outputExpr and use '!expr' for the expression case.
  • NEW: Allow parameter baseOperator::at to take a single number in addition to a list.
  • NEW: Disallow parameter alias locus to parameter loci in penetrance, selection and quantitative trait operators. Allow loci to accept a number.
  • NEW: Support other device types in varPlotter::saveAs.
  • NEW: dumper now supports virtual subpopulations.

31.  Version 0.9.0 - (Rev 2130) Dec 15, 2008 (tagged, but not publically released)

  • CHG: add population::setSubPopByIndInfo to allow flexible migration.
  • CHG: migrator now uses an information field "migrate_to".
  • CHG: Add function population::extract.
  • CHG: Remove parameter ancGen from population::clone().
  • NEW: Dump() also display information fields.
  • NEW: Expose population::pushAndDiscard(pop) as population::push().
  • NEW: Add parameter subPops to all operators.
  • CHG: Move operators pySubset(), randomSample(), caseControlSample() and affectedSibpairSample from simuPOP core to Remove src/sampler.*.
  • CHG: Remove infoTagger, sexTagger and affectionTagger and will replace them by pedigreeTagger.
  • CHG: Remove population::removeEmptySubPops().
  • NEW: Add support for subpopulation names.
  • CHG: Remove intializer, spread and pyInit operators.
  • CHG: Add parameter initSex to initByFreq and initByValue.
  • NEW: Initializers now support virtual subpopulations.
  • CHG: Recombiantor no longer supports recombination by sex, and haplodiploid chromosomes.
  • CHG: Recombinator now supports different types of chromosomes.
  • NEW: Add ops parameter to mating schemes.
  • NEW: add mitochondrialGenoTransmitter.
  • NEW: add population::updateInfoFieldsFrom.
  • NEW: Add two examples in doc/cookbook, demonstrating the use of customized genotype transmitters and mitochondrialGenoTransmitter.

32.  Version 0.8.9 - (Rev 1948) Nov 18, 2008 (tagged, but not publically released)

  • DOC: Adjust reference output for simuPOP classes.
  • CHG: Rename genoStruTrait::haplodiploid to isHaplodiploid.
  • CHG: Rename genoStruTrait::sexChrom to hasSexChrom.
  • CHG: Remove the maxAllele parameter of population.
  • CHG: Remove outputHelper operator, which has been replaced by pyOutput.
  • CHG: Remove read support for XML and Binary formats.
  • CHG: Completely change the way sex chromosomes are handled, and add initial support for customized chromosome.
  • CHG: Rename class vsp to vspID.
  • CHG: Merge population::subPopSize and population::virtualSubPopSize.
  • CHG: Change parameter of population::virtualSubPopName().
  • CHG: Merge population::individuals(sp) and population::individuals(sp, vsp).
  • CHG: Remove genoStruTrait::maxAllele(). Use MaxAllele() instead.
  • CHG: Make pedigree a subclass of population and move population::locateRelatives and population::setRelativeIndex to this class.
  • CHG: Temporarily disable all pedigree related features such as pedigree parent chooser, pedigree mating scheme, and all samplers.
  • CHG: Rename population::useAncestralPop to population::useAncestralGen.
  • CHG: Replace population::mergePopulation by population::addIndFromPop.
  • CHG: Replace population::mergePopulationByLoci by population::addChromFromPop and population::addLociFromPop.
  • CHG: Remove removeEmptySubPops parameter from population::mergeSubPops.
  • CHG: Adjust interface to population::removeLoci.
  • CHG: Adjust interface to population::removeSubPops.
  • NEW: Allow indInfo, setInfo etc to access virtual subpopulation.
  • CHG: Merge parameter virtualSubPop with subPop in mating schemes.
  • NEW: Add simuProgress class to simuUtl.
  • CHG: Remove simulator::applyOpToStoppedReps and simulator::stopIfOneRepStops
  • NEW: Add StopEvolution exception and add simulator::stopIfOneRepStops to terminators.
  • CHG: Remove operator terminator and continueIf.
  • CHG: Reset file format number. No longer support previous file formats.
  • NEW: add simulator::populations().
  • NEW: Allow the use of multiple replicates for an operator. Remove REP_ALL (now []), and REP_LAST (now -1).
  • CHG: Replace simulator::getPopulation by simulator::population and simulator::extract.

33.  Version 0.8.8 - (Rev 1787) Oct 24, 2008

  • CHG: Remove the replicate group feature.
  • NEW: Allow mapSelector to work for all ploidy.
  • DOC: Add keyword applicability to indicate applicability of operators.
  • DOC: Document applicability of mating schemes.
  • DOC: Fix bibtex references of user's guide and reference manual.
  • CHG: indiviudal::arrGenotype, individual::arrInfo are marked obsolete and will be removed later.
  • NEW: add individual::genotype (previously called arrGenotype) and individual::arrGenotype.
  • CHG: genoStruTrait::arrLociPos is marked obsolete and will be removed later.
  • CHG: population arrGenotype are marked obsolete and will be removed later.
  • NEW: add population::genotype and population::setGenoytpe.
  • BUG: Fix a bug in that prevents varPlotter from plotting images.
  • NEW: Support Python 2.6.

34.  Version 0.8.7 - (Rev 1755) Aug 29, 2008

  • NEW: allow the use of a list to specify a virtual subpopulation.
  • NEW: change the return type of allele() so that no boolean value (True or False) will be returned from the binary modules.
  • DOC: Correct documentation about variables related to genotype and heterozygote frequency.
  • BUG: Fix a bug when a zero-sized virtual subpopulation has weight -1.
  • BUG: Fix a bug when calculating expected heterozygosity with increased number of subpopulations.
  • BUG: Fix a bug in controlled random mating where number of affected alleles are calculated from current instead of offspring populations.
  • CHG: Only write (compressed if possible) in text format. simuPOP can still read binary and xml formats.
  • BUG: Fix a bug that is related to the calculation of Fst in populations with unordered individuals.
  • BUG: Fix activation and deactivation of combinedVirtualSplitter.
  • BUG: Fix a bug that prevents simuPOP from compressing population files.
  • NEW: Make boost 1.36.0 the default built-in boost version.
  • BUG: Fix a carray genotype slice assignment bug under windows and python2.5.
  • NEW: Stop distributing zlib1.dll by building zlib from source under windows.

35.  Version 0.8.6 - (Rev 1666) Jun 20, 2008

  • NEW: Polish command line arguments output in a configuration file.
  • NEW: add a function ForwardFreqTrajetory to simulate trajectory of varying population size and selection pressure.
  • BUG: Fix a minor simuOpt::saveConfigFile bug
  • BUG: reveal RNG::randMultinomial and RNG::randMultinomialVar
  • BUG: fix a bug that is related to reference count of loaded lists.
  • CHG: allow sample size > population size (give a warning rather than error)
  • CHG: allow recombination rate > 0.5 (adjust to 0.5 and issue a warning)
  • NEW: allow longarg names in option jump and jumpIfFalse in
  • NEW: load fine-scale recombinate rate and set variable genDist in loaded HapMap populations. (
  • CHG: polish tkInter and wxPython parameter input dialog.
  • CHG: Remove parameter order from information field related functions.
  • BUG: Fix a information field + migration bug.
  • NEW: add operation resizeSubPops.
  • BUG: Fix a NuclearfamilySample bug regarding parameter minAffected.
  • NEW: separate sex initialization from initByFreq, initByValue and pyInit and add a new operator initSex.
  • BUG: Fix a iterator bug that affects populations with ancestralDepth > 1 during evolution.
  • CHG: Remove subpopulation specific virtual subpopulation. This is no longer needed with combined virtual splitter.
  • NEW: Add population::ancestor(ind, gen) and population::ancestor(ind, subPop, gen) to access an individual in an ancestory generation directly.
  • NEW: support virtual subpopulation in fromSubPop parameter of a migrator. This allows sex-specific migraton and more complicated migration schemes.
  • NEW: add functions population::locateRelatives and population::setIndexesOfRelatives
  • NEW: add functions individual::indInfo(idx) and individual::indInfo(name)
  • NEW: add a new parent chooser infoParentsChooser and a new mating scheme consanguineousMating, along with an example doc/cookbook/

36.  Version 0.8.5 - (Rev 1488) Apr 3, 2008

  • BUG: fix a bug that prevents a cloned simulator from evolving again.
  • NEW: add parameter numMale and sexMode to all offspring generator and mating schemes, to control the sex of offspring exactly.
  • NEW: add gene conversion to recombinator, using parameter convMode, convProb and convParam.
  • NEW: add convenience functions GenoStruTrait::distLeft and GenoStruTrait::lociLeft.
  • NEW: add random parent chooser without replacement and/or with alpha individuals, haplodiploidOffspringGenerator, monogamousMating, polygamousMating, alphaMating, and haplodiploidMating mating schemes.
  • NEW: add haplodiploid option to GenoStructure. Recombinator now handles such populations correctly.
  • CHG: make the subPop parameter of population() function obsolete.
  • CHG: add parameter gen, and make parameter end in simulator::evolve obsolete.

37.  Version 0.8.4 - (Rev 1456) Mar 8, 2008

  • NEW: add support for other posix systems like HP-UX
  • NEW: automatically download HapMap data in and
  • NEW: add two operators infoEval and infoExec that can be used to manipulate

information fields during evolution.

  • NEW: operator stator popSize=True also calculates virtual subpop size using variable virtualPopSize.
  • BUG: fix a bug in the re-initialization of pyParentsChooser.
  • CHG: inheritTagger will inherit the first, instead of the second, information field from mother in TAG_Maternal mode.
  • CHG: population::numVirtualSubPop() returns 0 instead 1 when there is no virtual subpopulation.
  • NEW: allow multiple genotype in the same virtual subpopulation split by genotypeSplitter
  • NEW: add combinedSplitter

38.  Version 0.8.3 - (Rev 1412) Jan 17, 2008

  • NEW: allow taggers to write pedigree files
  • NEW: introduce pedigreeParentsChooser to choose parents according to a given pedigree
  • NEW: introduce pedigreeMating to mate according to a given pedigree
  • NEW: add infoTagger, sexTagger, affectionTagger
  • NEW: add pedigree information handling functions
  • CHG: add more options to functions in
  • CHG: remove MPI related setup, build and source code (revert to r1393 to retrieve the MPI related code).
  • BUG: Fix a bug of setting individual visibility of populations loaded from disk file.
  • NEW: improve the efficiency of MergePopulations and MergePopulationsByLoci when a lot of populaitons are involved.

39.  Version 0.8.2 - (Rev 1370) Nov 19, 2007

  • BUG: Fix saveFstat in
  • NEW/CHG: rewrite pyMating, which now accepts a parents chooser, and an offspring generator.
  • NEW: add heteroMating to allow allow different mating scheme used for different subpopulations, or proportions of individuals
  • NEW: add selfMating mating scheme.
  • NEW: add various parent choosers.
  • NEW: add various offspring generators.
  • NEW: add null, duplicate, info, genotype, proportion splitters
  • NEW: add splitter interface to populations.

40.  Version 0.8.1 - (Rev 1254) Oct 05, 2007

  • NEW: Allow len(pops) == 1 in MergePopulationsByLoci(pops) and


  • BUG: Use /dev/urandom for unix users. os.path.isfile('/dev/urandom') returns false even if this file does exist.
  • BUG: Fix the handling of binary option in command line, and handling of short arguments.
  • NEW: Use a checkbox for binary options in the parameter dialogs.
  • NEW: make use of second to last inforFields passed to pyPenetrance and pySelector to pass specified information fields to user-defined functions.
  • BUG: Fix a few functions in
  • BUG: stop displaying full path name in the title of the parameter dialog.
  • NEW: add chromName(), chromNames(), chromByName() to genotypic structure, and chromNames parameter to population constructor.
  • NEW: Some documentation improvement.

41.  Version 0.8.0 - (Rev 1215) Aug 14, 2007

  • Reference manual overhaul
  • Rename outputHelper to pyOutput, and alleleType to AlleleType for consistency.
  • NEW: Respect environmental variable GSL_RNG_TYPE for the choice of RNG

42.  Version 0.7.11 - (Rev 1133) July 26, 2007

  • NEW: add subPop(s) parameters to selectors, allowing different selection pressure in different subpopulations
  • NEW: add subPops parameter to intializers, working the same as subPop
  • NEW: extending pyIndOperator with handling of loci and infoFields
  • BUG: fix a crash of postOps in dryrun mode by applying operator in the order given.
  • BUG: fix scripts/
  • NEW: add optional option destructive=False to simulator::getPopulation, as a way to retrieve a population more efficiently.
  • NEW: rewrite pyMigrator to allow for changing migration rates, and more subtle control of migration using individual genotype.
  • NEW: rename parameter atLoci to loci for all mutators (atLoci becomes obsolete, but is still usable)
  • BUG: fix a mutator crash when locus index difference exceeds the range of integer, for cases, for example, with 10k loci and 100k individuals.
  • NEW: add src/ to add some utility functions to handle HapMap data
  • NEW: add parameter byChromosome to population::mergePopulationByLoci and MergePopulationsByLoci to allow chromosome to chromosome merge.

43.  Version 0.7.10 - (Rev 987) May 20, 2007

  • BUG: fix a memory leak bug with LoadPopulation
  • BUG: fix a newPopByIndID bug where keepAncestralPops is not respected.
  • NEW: nuclearFamilySampler operator and function
  • NEW: add MATE_UniformDistribution number of offspring type
  • BUG: fix a useAncestralGen bug in largePedigreeSample (Does not affect output).
  • BUG: fix a typo in function SaveLinkage, I really need to test these functions as well.
  • BUG: fix a SWIG option bug that prevents help messages of member functions to display.
  • BUG: fix a memory leak bug with stat operator during allele frequency calculation
  • NEW: make sure alleleFreq[x][0] and alleleFreq[x][1] exist, even if there is no allele 1. This is avoid trouble in binary form. (maybe not a good idea).
  • NEW: throw an exception when multiple selectors are applied at the same time.
  • NEW: add population::mergePopulation, population::mergePopulationByLoci, MergePopulations, MergePopulationsByLoci, population::resize
  • NEW: add population::insertLoci, population::insertLocus, population::appendLoci, population::appendLocus
  • NEW: add genoStruTrait::locusByName, genoStruTrait::lociByName
  • NEW: swig 1.3.32 compatibility
  • NEW: add scripts/
  • NEW: add pyTagger operator, which can be used to trace trait values.
  • NEW: update comments, in preparation for the 0.8.0 release
  • NEW: disallow change of genotypic structure of populations in a simulator.
  • NEW: add simulator::addInfoField, simulator::addInfoFields, simulator::setAncestralDepth and related tests and documents.
  • BUG: fix a bug when stat() tries to remove non-existings variables caused by population split.

44.  Version 0.7.9 - (Rev 885) Apr 3, 2007

  • BUG (build): add solaris support. This OS does not have stdint.h.
  • BUG (build): add support for python 2.5 on 64 bit machines (new Py_ssize_t type for python2.5)
  • NEW: add SaveSolarFrqFile in
  • NEW: separate SaveQTDT in SaveMerlinDatFile, SaveMerlinMapFile and SaveMerlinPedFile SaveQTDT now calls these three functions.
  • NEW: rewrite newPopByIndID and speed up sample generation considerably.
  • NEW: add scripts/ that demonstrate the temorary deviation from HWE in a population with unequal male and female allele frequencies, from Yaji Xu.
  • BUG: fix a bug in the calculation of D'
  • NEW: add LD measurement delta^2
  • NEW: add LD_param parameter to have finer control over how LD is calculated
  • NEW: add exphetero_param, Fst_param, alleleFreq_param etc to have better control over the calculation of these statistics.
  • CHG: midValues of LD is replaced by LD_param={'midValues':True}
  • NEW: add association statistics (ChiSq, UC_U, CramerV)
  • BUG: fix passing of relMethod parameter of stat operator
  • CHG: NO_CONVERSION is no longer the default for rpy

45.  Version 0.7.8 - (Rev 833) Mar 2, 2007

  • BUG: fix broken user interactive input
  • BUG: fix help feature of tkinter dialog
  • NEW: bundle boost 1.33.1 with source package
  • BUG (build): fix a SConstruct bug with MSVC environment variables
  • NEW: add other LD measurements to
  • NEW: optionally add header to QTDT ped file
  • BUG: fix the combine parameter of SaveQTDT

46.  Version 0.7.7 - (Rev 786) Feb 1, 2007

  • NEW (build): bring scons build system on par with python
  • NEW (build): scons build now accepts options prefix, include-dirs and library-dirs
  • NEW (build): try really hard to search proper boost libraries. One usually does not have to specify boost inc and lib paths to build simuPOP.
  • NEW (build): prune files from source package
  • NEW: add ancestralGen to penetrance and qtrait operators
  • NEW: change pySelector and allow a second parameter gen for the fitness function This allows varying selection pressure.
  • CHG: individual comparison does not compare information fields
  • CHG: adjust individual representation (actually output genotype)
  • BUG: fix a bug in loading some files saved in binary module from standard modules
  • BUG: fix an affected sibpair sampler bug introduced in 0.7.5 MPI modules
  • NEW: add hasInfoField() function
  • NEW: MPI module pass 00, 01, 06 test scripts
  • NEW: Only head node can print to cout

47.  Version 0.7.6 - (Rev 674) Dec 25, 2006

  • NEW: change file format for binary modules, resulting much faster save/load.
  • NEW: fix adjustGenotype (efficiency)
  • BUG: fix simulator::clone(), introduced in 0.7.5
  • NEW: disable compression under windows due to a boost bug.
  • BUG: make simuRPy works with the latest R and rpy.
  • NEW: several new chapters in the user's guide.

48.  Version 0.7.5 - (Rev 576) Dec 8, 2006

  • NEW: experimental MPI modules.
  • BUG: None is treated as False now in Py_Object_As_Bool.
  • NEW: (internal) Optimize binary allele handling. Copying of alleles are now faster than regular alleles.
  • NEW (internal): Optimize BernulliTrials and recombination. Recombination under certain conditions is 1/3 faster now.
  • NEW (internal): Using vector<bool> instead of dynamic_bitset for BernulliTrials cache internal point for performance purposes. This also fixes a windows dynamic_bitset related bug (never figure out what was wrong).
  • NEW: add the missing simulator.clone() function
  • CHG: stop embedding zlib since the source does not work under windows. The installation process is changed as well.

49.  Version 0.7.4 - (Rev 518) Nov 5, 2006

  • BUG: fix simulator.population() function
  • NEW/CHG: add order parameter to population arr function series. Changed functions are:
    	C++ level: population::genoBegin(true), genoBegin(sp, true)
    		population::infoBegin(idx, order), infoBegin(idx, subPop, order)
    	Python level: population::arrGenotype(True), arrGenotype(sp, True)
    		population::indInfo(idx, order), indInfo(idx, subPop, order)
    		population::arrIndInfo(order), arrIndInfo(subPop, order)
  • NEW: test/test_21_performance is added to keep track of performance


  • NEW: (minor) performance improvement of randomMating and maSelector.
  • NEW: significant performance improvement of mating schemes.

controlled randomMating: typically 150s => 90s

  • NEW: add instruction for using intel c++ compiler, which usually improve performance by 20% to 30%.
  • BUG: recombinator set sex in a wrong way.
  • NEW: experimental large pedigree sampling largePedigreeSample
  • NEW: experimental support for merlin/vc and merlin regression
  • CHG (internal): overhaul of ascertainment operators and file save stuff.
  • NEW: add 'useDefault' option to simuOpt paramter specification.

50.  Version 0.7.3 - (Rev 470) Oct 2, 2006

  • CHG: change the allele type of long module to unsigned short, since 2^16 seems to be enough even for long allele cases.
  • NEW: add -c option to to allow it to se command instead of the default qaub
  • NEW: add reference count debugging in simulator.evolve (require specially built python.)
  • BUG: fix memory leaks in stator, util.cpp (pyExec) and simuPOP_common.i
  • NEW: add pyMating operator
  • NEW: add population::individuals() function that can be used to iterate through all individuals (or in a subpopulation).
  • NEW: add pyIndOperator

51.  Version 0.7.2 - (Rev 412) - Not publically released

  • CHG: remove demo and support for scipy's gplt package.
  • NEW: add infoFields parameter to population and operators
  • CHG: all populations must now explicitly state the information fields for each individual.
  • CHG: all qtrait and penetrance oeprators now use info fields of individuals (they use variable before). penetrance field is optional.
  • CHG: (Internal) selectors now use info field (fitness) rather than using its own population variable.
  • NEW: add --useDefault parameter to use default parameters instead of reading from stdin, if they can not be obtained from other methods.
  • NEW: now subst environmental variables, and stops if there is remaining $ in the script.
  • CHG: make 'configName' and 'prompt' of simuOpt options obsolete, use 'label' instead.
  • BUG: fix starting allele problem in

52.  Version 0.7.1 - (Rev 378) - Aug 20, 2006

  • BUG: Fix a bug in backward trajectory simulation
  • CHG: change the release/snapsot generating process
  • NEW: add script/ which assists submission of jobs on cluster machines.
  • BUG: fix a random number generator bug on 64 bit machines.
  • NEW: random number seed is generated in a much better way, and is retrievable.
  • NEW: fix which was not up to date with

53.  Version 0.7.0 - (Release 0.6.15, July, 2006)

  • Check all scripts and test cases
  • Check document
  • release

54.  Version 0.6.14 - (Rev 341) - June 06, 2006

  • CHG: user's guide and reference manual revision
  • NEW: add a local scons build system for developers
  • BUG: fix the variable update bug.
  • BUG: fix setRNG(seed) bug.
  • CHG: rename setRNG() to SetRNG(), and listAllRNG() to ListAllRNG()

55.  Version 0.6.13 - (Rev 278) - Apr. 20, 2006

  • NEW: Add trajectory simulation functions follows those from selSim and geneArtisan.
  • NEW: Add controlledMating that accept an generation only if allele frequency at specified locus/loci fail in specified range.
  • NEW: add test case for controlledMating. (No doc is avaiable yet.)
  • NEW: implement trajectory simulation follows Slatkin 2001. This works better than methods from both selSim and geneArtisan.
  • CHG: (internal change) abort the original template design. This will make the source less flexible but can dramatically improve development time.
  • CHG: add separator to simuOpt's parameter specification.
  • NEW: add controlledRandomMating and controlledBinomialSelection which implement a quicker alternative to controlledMating.
  • CHG: has been re-written.
  • NEW: add TurnOnDebugWithName(name) and the ability to set SIMUDEBUG to turn on certain debug mode.
  • BUG: fixed a bug about s_shallowCopied flag of population.
  • CHG: Remove starting allele and let all allele start from 0. tests and scripts have been modified. These changes can make binary and other modules behave the same.
  • CHG: (internal change) upgrade to boost 1.33.1. This allows me to use boost::iostream for instant file compression.
  • NEW: File format change that compress population genotype before it is saved. This will greatly reduce the file size of saved populations.
  • NEW: add compress=True option to savePopulation(). For a large file:
             Before: txt: 496M, 58s load, 24s write
    	         xml: 169M, 19s load, ? write
    	 Now:    txt: 66M,  25s load, 125s save
    	         bin: 51M,  10s load, 70s write
    	 Since load operation tends to happen more often than save,
    	 this increased write time seems to be acceptable.
  • NEW: let simuPOP handles file.txt.gz extensions directly. Using .gz will be equilivalent to compress=True (although compress=True does not add .gz extension to the filename supplied. )

56.  Version 0.6.12 - (Rev 186) - Feb 18, 2006

  • CHG: 'not enough case/control' in caseControlSample now generates a warning message, rather than exception.
  • CHG: set the default sample saveAs format to 'auto', instead of 'bin' 'bin' was used before 'auto' was introduced
  • NEW: the format parameter of loadPopulation, loadSimulator are obsolete. File type will be automatically determined.
  • NEW: the wrap files will be automatically generated if any of the source files is modified. This is useful mostly for svn users.
  • NEW: simuUtil/SaveLinkage is improved in efficiency
  • CHG: simuUtil/SaveLinkage: if pre is True, the output is filename.pre instead of filename.ped, which will be used when pre is False.
  • CHG: (internal cleaning) fitness is implemented differently.
  • CHG: (internal cleaning) randomMating sex determination no longer use bt.
  • CHG: (internal cleaning) isMale class is replaced by a less fancier solution.
  • CHG: (internal) change the use of pointer to iterator, in preparation for compact presentation of binary alleles.
  • NEW: add a compilable (imcomplete) binary library. All alleles are 0 or 1 and are stored internally as bits to save spaces.
  • CHG: carray can now read/write binary allele. However, it can no longer be a standalone type. It should always be only a reference to a piece of memory. This simplifies the design since we do not have to
         worry about extending, slicing etc.
  • NEW: (important) addition of ba, baop modules for binary allele. Extensive tests are needed but it is in working status now, including the arrGenotype
         function series.
  • NEW: you can now directly compare individuals and populations in python.
  • CHG: carray is no longer a standalone type. (You can not create it in python)
  • NEW: under DBG_MATING, size of each family is outputed as pop.dvars().famSizes
  • NEW: initByFreq now recognize binary library and set 0,1 instead of 1,2,...
  • NEW: Complete test cases for all operators.
  • CHG: remove sep parameter of operators. Users need separator between output of operators can use a output() operator manually. (sep is originally a bad idea.)
  • NEW: (internal) Adapt the interface file and swig commands to SWIG 1.3.28.
  • CHG: uses binary modules for SNP markers.

57.  Version 0.6.11 - (Rev 119) - Jan 19, 2006

  • DOC: add examples of penetrance operators to the reference manual.
  • DOC: document using pyOperator to build pure-python operators
  • NEW: check return value of pyPenetrance function to be within [0,1]
  • NEW: add operator continueIf, in addition to terminateIf
  • NEW: add 's' behavior to operator pause, which will invoke an interactive python shell. Current population is by default exposed to the main dictionary as variable 'pop. This can be controled by parameter
         exposePop and popName.
  • NEW: add test case
  • NEW: add name parameter to population::exposeInfo and population::exposeAffectedness
  • NEW: add subPop parameter to population::removeIndividual
  • DOC: add full member function of population object list to reference manual
  • DOC: add genotypic structure function list to reference manual
  • DOC: add individual function list to refernce manual
  • CHG: rename basicPentrance, basicSelector and basicQuanTrait to
         mapPenetrance etc
  • NEW: add multi-locus support to mapPenetrance, maPenetrance (and selector, quantrait) except for locus, you can specify loci, and a longer map or array of values.
  • NEW: pyOperator can now be a during-mating operator. Pass a python function func(pop, offspring, dad, mom, param) and set stage=DuringMating will do.
  • BUG: fix another memory leak problem when an internal population is exposed
  • NEW: improve the efficiency of dynamic type finding of population and individual Decent performance boost for pyOperator, especially to the DuringMating mode.
  • NEW: use the new swig -external-runtime feature to generate swigpyrun.h, this allows me to relocate some utility functions from the interface file to utility.h
  • NEW: let also trace and display the change of total allele frequency.
  • NEW: add passOffspringOnly to pyOperator to speed up duringMating pyOperator.
  • DOC: add simuPOP coding convension to simuPOP reference manual
  • NEW: add simuOpt.valueOr, valueNot and valueAnd to
  • NEW: give correct prompt for pause operator regarding exported population name
  • BUG: fix a bug in affectedSibpairSample, which will generate the wrong sample if an operator is used a second time (So AffectedSibpairSample is not affected).

58.  Version 0.6.10 (Rev90) - Dec, 20th, 2005

  • NEW: add recCount(loc) and recCount() to recombinator to track the number of recombination event.
  • NEW: add mutationCount(loc) and mutationCounts() to muators to track the number of mutation event.
  • NEW: add atPloidy=[0] to pointMutator.
  • CHG: replace lociDist and locusDist by lociPos and locusPos. This kind of term change should be done as soon as possible.
  • NEW: add which is used to generate SNP sample that can be used to estimate recombination rate between markers.
  • NEW: convert to unittest framework.
  • NEW: add DBG_DEVEL for developer-level debug information.
  • CHG: Make adjustment to how genotype structure is accessed from individual and limit the number of subpopulations to 2^31. Save 8 bytes (24->16) for each individual without noticable performance penalty.
  • BUG: fix a tiny bug about optimization mode reporting
  • NEW: test_population is better now, but still way to go.
  • CHG: separate into and The first script will run simulation and generate a population saved in binary format. The second script will run the old analyses (apply penetrance function, plot figures, apply genehunter etc.)
  • NEW: add more info to saved config file. (Add a command line script)
  • CHG: simuOpt does not load wx automatically when --noDialog is used.
  • BUG: fix a memory leak problem with genotype structure introduced in 0.6.9.
  • BUG: fix a memory leak problem with PyObject->double conversion.
  • CHG: change listVars to ListVars for naming consistency. (Captal for standalone function)

59.  Version 0.6.9 (Rev71) - Nov, 19th, 2005

  • add pyOperator, the ultimate hybrid operator, this will considerably simplify many coomplicated tasks
  • start to convert all test cases to PyUnit. This means better test cases and more thorough testing. I expect that code 0.7.0 is a version with much less bugs due to this change.
  • fix a bug in initializer (parameter proportion)
  • fix a bug in recombinator concerning direct chrom copy.
  • remove autoconf, Makefile.icc stuff to avoid confusion.
  • fix a bug in migrator/MigrByCounts, which is introduced in 0.6.8
  • add subversion revision number to doc and binary releases for better tracking of changes.
  • fix windows binary import problem caused by mingw/msvcrt. Details please see INSTALL.
  • fix a bug in AffectedSibpairSample with countOnly parameter. (Not able to handle None return.)
  • add parameter --resampleOnly and --reAnalyzeOnly
  • remove --optimzied --optimized etc from sys.argv after processing in
  • add (module and command) that can load and view popularion property, calculate statistics etc.

60.  Version 0.6.8 - Sep 21st, 2005

  • fix a reporting bug in
  • support sex chromosome and sex chromosome related mating, recombination issues.
    • sexChrom() in population::population(),
    • stop recombination between XY of male individual
    • determine sex in random mating by sex chromosome
  • add parameters atPloidy, sex to initializers. Now, you can initialize individuals at ploidy level and control assignment of sex. Now, with so many options, these initializers are overly complicated.
  • add support for sex-specific recombination rate. (parameter maleIntensity, maleRate, and maleAfterLoci.)
  • modify some features of
  • release 0.6.8 and set up daily snapshots

61.  Version 0.6.7 - Aug, 1st, 2005

  • Add help() infor for the function version of operators and member functions.
  • use Walker's alias algorithm for weighted sampling. Random mating with selection should be only slightly slower than without selection. The performance of increased by 15% using this algorithm. This method will use a lot of RAM when population size is large (8*N bytes).
  • add compiler info to Welcome message. (to see if it matches that of Python.)
  • change the use of logfile in
  • fix a bug in operator InitByFreq.

62.  Version 0.6.6 - various GUI / wxPython improvements. Not released.

  • add wxGetParam. Will be used when wxPython is available.
  • add wxPython version of listVars. Much better than the text version when wxPython is available.
  • add some demographic functions in
  • use grid for tkinter box
  • add migrIslandRates() and migrStepstoneRates() in
  • find an uncaptured out of memory exception.
  • is better, with log file.
  • stop using global variable gen. Add gen() function to individual population and "gen" to local variable space. (Avoid using modular level global variable) If this breaks anything, please let me know.
  • Change penetrance from 1,1-s,1-2s to 1,1-s/2,1-s in and This is more natural.
  • Add tooltip to the wxPython version of getParam.

63.  Version 0.6.5 - userfriendliness (simuPOP scripts). May 1st, 2005

  • separate user's guide and reference manual
  • streamline getParam, usage, help etc.
  • add scripts folder for common simupop templates
  • add quiet option to simuPOP to suppress initial input
  • add tk support for easy inputing of variables. This is a major enhancement for userfriendliness. A first glimpse of a GUI
  • fix a bug in saving shared variables. Exam saved format. Full backward compatibility should start from here.
  • It uses almost all features of simuPOP
  • remove headers support for object. They are not very useful and hard to use.

64.  Version 0.6.4 - efficiency and usability. Not released

  • savePopulation saves local variables as well. This is used to save special info like disease susceptibility loci.
  • Label save population with max allowed allele number.
  • merge some parameters through python code. Now, parameters like rate can be either a number or an array. Same is true for value, indRange.
  • caseControlSample can takes array cases/controls parameters.
  • optimized genoStructure access, fix a bug about transferring the structure
  • add LoadRandFam ( not easy :-)
  • add parameters loci, chrom, indRange, subPop to dumper() and Dump() Dump() is finally useful now.
  • more efficient handling of ancestral pops

65.  Version 0.6.3 - Ancestral populations Apr. 5, 2005

  • add simulator::getPopulation get a copy of population
  • add simuOpt to control simuPOP behavior, hide other modules
  • add pointMutator
  • change the meaning of rate in recombinator, add parameter intensity
  • IMPORTANT: population can contain multiple generations. add: population.pushAndDiscard (CPPONLY), Lots of work. parameter ancestry for population.__init__ parameter ancestry for dumper
  • add SavePopulations and LoadPopulations function.
  • add stat(homoFreq and expHetero)
  • fix a small bug with end < 0 and step > 1
  • add splitSubPop(ByProportion), mergeSubPops member functions, operators and functions.
  • make duringMating oeprators re-order automatically
  • add numOffspringsFunc, mode=MATE_NumOffsprings, MATE_GeometricDistribution etc
  • add affected sibpair sampling scheme
  • export to linkage format (affected sibpair samples)
  • export to randfam format
  • test parentsTagger, successfully track pedigree info

66.  Version 0.6.2 - better usage of vars Mar, 23, 2005

  • variables are now population associated. (pop.evaluate(...)
  • add quantitative trait and penetrance support
  • add dryrun parameter to apply and evolve
  • dvars() function. (Automatic dictionary wrapper class)
  • add more flexibility to initializers. (indRanges, subPop, atLoci etc)
  • varPlotter becomes an operator.
  • add D, D' and r2 measures
  • add newSubPopSizeFunc option to Mating schemes
  • change haploFreq to count all haplotypes.
  • add multi-allele Fst, LD etc. (average)
  • fixes all memory leak and reference count problems
  • save/load auto format according to file extension.
  • fix a small bug of unclosed files.
  • finsh LoadSimulatorFromFiles (uses in pair with savePopulation operator)
  • fix two bugs in AvgLD calculation and in recombinator.

67.  Version 0.6.1 * usability and real applications Feb, 12, 2005

  • add simuPOP_la library for long alleles.
  • add exposePop option to pyEval (better pure-python operator support)
  • better treatment for carray. (fix a bug)
  • more statistics: Fst, Rst, H_est, H_obs etc
  • read/write, FSTAT format
  • use simple string instead of list to store statements.
  • merge alleleCounter and popStat since alleleCounter may depend on popStat
  • add operator pause for presentation purpose new operator is called 'basicStat'
  • Genomic control (use R/gap package, simple subpop vs subpop version)

68.  Version 0.6.0 - validation and distribution, Jan, 1st, 2005

  • bug fixes
  • better distribution process and binaries.
  • remove internal language and use Python expression only
  • more mutation models
  • some hybrid operators added
  • simuPOP website

69.  Version 0.5.9 - performance boost, dynamic population size Dec. 12th, 2004

  • re-write Bernulli-trials and gain 10x performance boost
  • dynamic population size through newSubPopSizeExpr="".
  • re-write migration to allow migration between subset of subpopulations
  • ability to create new subpopulation through migration
  • tagging x-y location.
  • visualize migration

70.  Version 0.5.8 - selection Dec. 5nd, 2004

  • add selection.
  • better matings.
  • bug fixes
  • migration and selection examples

71.  Version 0.5.7 - serialization Nov. 24, 2004

  • add serialization of simulator. Now I can save population/simulator into a file and load it later.
  • text, xml and binary formats are supported. XML support is especially useful since the data can then be easily loaded into other applications.

72.  Version 0.5.6 - expression. Nov. 19, 2004

  • better shared variable interface
  • (IMPORTANT!) implement a C/Matlab like language to calculate statistics. Terminator has been re-written. Many applicaitons are expected to be done easily.
  • add more functions (abs etc) to inline expression)
  • fixed some bugs.

73.  Version 0.5.5, - more clean up, more examples. Nov. 10, 2004

  • clean the code. Use unsigned long when applicable. Elimilate all compiling warnings.
  • add some more test cases to cover all user features.
  • Some real examples

74.  Version 0.5.4, Nov. 7, 2004 - clean the code. still working on the code base

  • return default value for SharedVariable::getVar(name, default) and display warning when in debug mode.
  • shared variables can take string, double, array and dictionary.
  • varParser can now take all kind of shared variables, using double, %array[index], %dictionary{key}
  • DataProvider is separated from Operator and is put in utility.h
  • DataSource is separated from Visualizer so that other operators can also use such sources.
  • VarDataSource is provided so Visualizer etc can visaulize/display shared variables directly.

75.  Version 0.5.3 Oct 10, 2004 -- some interesting new features

  • shared variables (operators can store and retrieve variables by name)
  • better written outputHelper. Now can print shared variables. for example %(gen)+%shvar
  • add "memory file" to improve efficiency under certain circumstances.
  • overhaul of operator's filename parser (can take shared var now)
  • provide binary distribution for linux, mac and solaris.
  • create a batch file to build win32 binary. (Much easier to use) distribute win32 binary.

76.  Version 0.5.2 -- windows port, smaller distribution, better help()

  • help(class/function) now uses doxygen generated document.
  • distribute tools like .emacs.python.el and swig.xsl
  • remove all unnecessary files from boost and gsl distribution this is done by some perl scripts testing the usefulness of each file.
  • ported to windows. see INSTALL.win32 for details fixed two windows specific bugs.
  • make DEBUG the default library (optimized will be used less frequently.)

77.  Version 0.5.1

  • better suport of GSL. add setRNG()
  • better debug debug(code) instead of debug(level)
  • better macOS support

78.  Version 0.5

  • a working distribution with lots of test cases
  • ported to macOS, solaris

79.  Version 0.1 Friday 18, June 2004

  • Customize doxygen and direct output to
  • change README and make it doxygen mainpage
  • create todo list and many other documents
  • implement exception classes with error message sent to Python
  • change most arrays to vector so that they can be accessed through python
  • find the right way to do keyword argument from python. Very useful.
  • Population basic structure is finished with basic operations.
  • Operator start-every-end-at is implemented.
  • genetic drifting sample program went fine.