These are the four exercises on the logistic map from

http://www.physics.cornell.edu/sethna/StatMech/ComputerExercises/ChaosLyapunov/ChaosLyapunov.html
http://www.physics.cornell.edu/sethna/StatMech/ComputerExercises/InvariantMeasure/InvariantMeasure.html
http://www.physics.cornell.edu/sethna/StatMech/ComputerExercises/PeriodDoubling/PeriodDoubling.html
http://www.physics.cornell.edu/sethna/StatMech/ComputerExercises/FractalDimensions/FractalDimensions.html

The src_ori.tgz contains the original Python sources only, without any of
the exercise PDF sheets.


Changes notes
=============

C. Myers is interested in improvements to their code.  Let's keep track here
of what why we do certain things, to have a mini-changelog for them later.

- Use docstrings with the first line being non-empty, and non-continuing.
Many automated tools extract the first docstring line for library summaries.

- the args=() trick is non-standard (for the case of map definitions).  Better
use *args if needed.  But the map examples are much more cleanly done via a
closure or a callable class.  I've implemented them as a trivial closure,
because the code is simpler, but a callable class will do equally well and is
better if complex state needs to be held.

- Instead of scipy.arange, use scipy.linspace.  It's easier to use, and it
defaults to closed intervals so there's no need to have warnings about edge
effects.  Also, look at pylab.frange, which allows stepsize specifications.

- 'from foo import *' considered harmful.  Don't do it.  Really.

- don't rely on importing main packages from others via the above.  For
example, if package A contains:

import scipy

in package B, don't do:

from A import scipy

but rather use

import scipy

in B as well.  This prevents artificial dependencies between packages.

