previous commit was premature!
added spread(seq, N, K) generator...

...plus extended other functions (e.g. partition) to strings.
[MERGE WITH PREVIOUS COMMIT]
[merge with 0115510f]
small utility for introspection
first pass at scatterplot implementation
use square aspect ratio for scatterplot
initial rough implementation of signature plot
try implementing signature plot with patches
scatterplot finalized
testbed for NUI pathway interface
change the dev data directory
checkpoint - fix view compile errors from smallmolecule_batch additions
- smallmolecule view still in development, but works
Merge branch 'master' of https://github.com/hmslincs/hmslincs

> Please enter a commit message to explain why this merge is necessary,
                                               ^^^^^^^^^^^^^^^^^^^^^^^
> especially if it merges an updated upstream into a topic branch.

I'm as mystified as ever by this directive...  What I want to know is
why this commit message is necessary.
Merge branch 'master' of https://github.com/jmuhlich/hmslincs

> Please enter a commit message to explain why this merge is necessary,
> especially if it merges an updated upstream into a topic branch.

whatever
Merge remote-tracking branch 'hmslincs/master'
moving salt_id field back to the canonical information (smallmolecule)
table per discussion with Caroline today.
Merge remote-tracking branch 'upstream/master'
data + some changes to signature.py

Summary of changes:

1. renamed the attribute maxtested of the SignatureData class to
   testedrange; now its value is expected to be a minmax pair of
   floats; made changes elsewhere accordingly;

2. added the attribute isprimary to the SignatureData class; (the
   signature method's *cough* signature could now be simplified by
   substituting a single parameter, compounds, for the parameters
   primary_compounds and nonprimary_compounds; the function can then
   generate the primary_compounds and nonprimary_compounds sequences
   from the compounds parameter by testing on the value of the
   isprimary attribute; I did not carry out this refactoring, though)

3. added the sequence CELL_LINES holding the names of the 6 cell lines
   used for the new data; these lines were chosen at-random-ish (that
   is, after culling some obvious losers from the pool, etc.)

4. added the dict LATEST, whose keys are targets, and whose values are
   lists of SignatureData tuples for various compounds that have the
   key as their target.

   NOTE: SOME OF THESE DATA ARE PLACEHOLDERS; I.E. THEY'RE FAKE!

   Specifically: the values for the isclinical, isselective, and
   isprimary flag were set randomly:

        isclinical = rn.random() < ISCLINICAL_CUTOFF
        isselective = rn.random() < ISSELECTIVE_CUTOFF
        isprimary = rn.random() < ISPRIMARY_CUTOFF

   with

        ISCLINICAL_CUTOFF = 2/3
        ISSELECTIVE_CUTOFF = 2/3
        ISPRIMARY_CUTOFF = 1/2

   The rest of the attributes come from real data files, although some
   of the values given for the testedrange attribute are very
   questionable; (in fact, for some drugs I was not able to make a
   reasonable guess for this attribute, so I set it to None);
Merge branch 'master' of https://github.com/hmslincs/hmslincs

> Please enter a commit message to explain why this merge is necessary,
> especially if it merges an updated upstream into a topic branch.

blahblahblah