
MEET LARRY

    Larry is a labeled Numpy array. Here's a 2d larry, y, in schematic form:
    
                                   date1    date2    date3
                          'AAPL'   123.45   127.23   132.60
                     y =  'IBM'    234.56   234.56   234.56
                          'DELL'   456.67   460.07   458.23
                
    Larry stores the data as a Numpy array and the labels as a list of lists
    (one list for each dimension):
    
        y.label = [['AAPL', 'IBM', 'DELL'], [date1, date2, date3]]
        y.x = np.array([[123.45, 127.23, 132.60],
                        [234.56, 234.56, 234.56],
                        [456.67, 460.07, 458.23]])               
    
    A larry can have any number of dimensions except zero. Here, for example,
    is one way to create a one-dimensional larry:

    >>> import la
    >>> y = la.larry([1, 2, 3])
    
    The list is converted to a Numpy array and the labels default to range(n),
    where n in this case is 3.
    
    Larry has many builtin methods such as movingsum, ranking, merge, shuffle,
    zscore, demean, lag as well as typical Numpy methods like sum, max, std,
    sign, clip. NaNs are treated as missing data.
    
    Alignment is automatic when you add (or subtract, multiply, divide) two
    larrys.
    
    You can archive larrys in HDF5 format using a dictionary-like interface:
    
    >>> io = la.IO('/tmp/dataset.hdf5')
    >>> io['y'] = y   # <--- save
    >>> z = io['y']   # <--- load
    >>> del io['y']   # <--- delete from archive
       
    For the most part larry acts like a Numpy array. And, whenever you want,
    you have direct access to the Numpy array that holds your data. For
    example if you have a function, myfunc, that works on Numpy arrays and
    doesn't change the shape of the array, then you can use it on a larry, y,
    like this:
    
                           y.x = myfunc(y.x)
    
    Larry adds the convenience of labels, provides many builtin functions, and
    let's you use your exisiting array functions.       

INSTALLATION

    The la package requires Python and Numpy. Numpy 1.4 or newer is
    recommended for its improved NaN handling. Also some of the unit tests in
    the la package require Numpy 1.4 or newer.

    To save and load larrys in HDF5 format, you need h5py with HDF5 1.8.
            
    The la package currently contains no extensions, just Python code, so
    there is nothing to compile. You can just save the la package and make
    sure Python can find it.
        
    Atlernatively, you can install the traditional way:

        $ python setup.py build
        $ sudo python setup.py install
        
    Or, if you wish to specify where la is installed, for example inside
    /usr/local:
        
        $ python setup.py build
        $ sudo python setup.py install --prefix=/usr/local
        
    After you have installed la, run the suite of unit tests:
    
        >>> import la
        >>> la.test()

