[pysal] 04/17: Imported Upstream version 1.11.0

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Sat Jun 11 20:44:24 UTC 2016


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository pysal.

commit b4b8900c4c834ebeae4aa4f85a2f8433b5a3b48d
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sat Jun 11 17:11:49 2016 +0200

    Imported Upstream version 1.11.0
---
 .gitignore                                         |    24 +
 .travis.yml                                        |    22 +-
 .travis_testing.sh                                 |     5 +
 CHANGELOG.txt                                      |  2423 +
 README.md                                          |   106 -
 README.rst                                         |   137 +
 THANKS.txt                                         |     1 +
 doc/source/conf.py                                 |     4 +-
 doc/source/developers/py3k.rst                     |   107 +-
 doc/source/developers/release.rst                  |    52 +-
 doc/source/index.rst                               |     4 +-
 doc/source/library/contrib/index.rst               |    20 +-
 doc/source/library/spreg/index.rst                 |     1 +
 doc/source/references.rst                          |     1 +
 figs/lisamaps.png                                  |   Bin 0 -> 501034 bytes
 figs/lisamaps7.png                                 |   Bin 0 -> 501034 bytes
 mk2                                                |     2 +
 mk3                                                |     4 +
 pysal/COPYING                                      |     2 +-
 pysal/__init__.py                                  |    24 +-
 pysal/common.py                                    |     1 +
 pysal/contrib/{README => README.rst}               |    33 +-
 pysal/contrib/clusterpy/__init__.py                |     1 +
 pysal/contrib/clusterpy/clusterpy.ipynb            |  6735 +-
 pysal/contrib/clusterpy/clusterpy_ext.py           |    52 +-
 pysal/contrib/githooks/pre-commit                  |     6 +
 pysal/contrib/handler/Explaining the Handler.ipynb |   830 +
 pysal/contrib/handler/__init__.py                  |     1 +
 pysal/contrib/handler/handler.py                   |   101 +
 pysal/contrib/handler/registry.py                  |    55 +
 .../handler}/tests/test_diagnostics.py             |    11 +-
 .../handler}/tests/test_diagnostics_sp.py          |    11 +-
 .../handler}/tests/test_diagnostics_tsls.py        |    11 +-
 .../handler}/tests/test_error_sp.py                |   210 +-
 .../handler}/tests/test_error_sp_regimes.py        |    33 +-
 .../handler}/tests/test_error_sp_sparse.py         |   212 +-
 .../handler/tests/test_error_spet.py}              |    22 +-
 .../handler/tests/test_error_spet_regimes.py}      |    12 +-
 .../handler/tests/test_error_spet_sparse.py}       |    24 +-
 .../handler/tests/test_error_spom.py}              |    24 +-
 .../handler/tests/test_error_spom_regimes.py}      |    36 +-
 .../handler/tests/test_error_spom_sparse.py}       |    72 +-
 .../handler}/tests/test_ml_error.py                |    43 +-
 .../handler}/tests/test_ml_error_regimes.py        |    66 +-
 .../handler}/tests/test_ml_lag.py                  |     7 +-
 .../handler}/tests/test_ml_lag_regimes.py          |    10 +-
 pysal/{spreg => contrib/handler}/tests/test_ols.py |    16 +-
 .../handler}/tests/test_ols_regimes.py             |    10 +-
 .../handler}/tests/test_ols_sparse.py              |    12 +-
 .../handler}/tests/test_probit.py                  |    12 +-
 .../handler}/tests/test_twosls.py                  |     7 +-
 .../handler}/tests/test_twosls_regimes.py          |    10 +-
 .../handler}/tests/test_twosls_sp.py               |     8 +-
 .../handler}/tests/test_twosls_sp_regimes.py       |    10 +-
 .../handler}/tests/test_twosls_sp_sparse.py        |     7 +-
 .../handler}/tests/test_twosls_sparse.py           |     7 +-
 pysal/contrib/pdutilities/__init__.py              |     4 +
 pysal/contrib/pdutilities/dbf_utilities.py         |     4 -
 pysal/contrib/pdutilities/file_utilities.py        |    65 +
 pysal/contrib/pdutilities/shp_utilities.py         |    21 +
 pysal/contrib/viz/mapping.py                       |    63 +-
 pysal/contrib/viz/mapping_guide.ipynb              |   642 +-
 pysal/core/IOHandlers/arcgis_swm.py                |     4 +-
 pysal/core/IOHandlers/csvWrapper.py                |     5 +-
 pysal/core/IOHandlers/pyDbfIO.py                   |    35 +-
 pysal/core/IOHandlers/pyShpIO.py                   |     6 +-
 pysal/core/IOHandlers/tests/test_csvWrapper.py     |    10 +-
 pysal/core/IOHandlers/tests/test_pyDbfIO.py        |    50 +-
 pysal/core/IOHandlers/wk1.py                       |     2 +-
 pysal/core/Tables.py                               |    49 +-
 pysal/core/util/shapefile.py                       |    32 +-
 pysal/core/util/tests/test_shapefile.py            |    27 +-
 pysal/esda/mapclassify.py                          |   217 +-
 pysal/esda/moran.py                                |   225 +-
 pysal/esda/smoothing.py                            |    16 +-
 pysal/esda/tests/test_mapclassify.py               |    19 +-
 pysal/esda/tests/test_moran.py                     |    23 +-
 pysal/examples/10740/10740.dbf                     |   Bin 0 -> 8188 bytes
 pysal/examples/10740/10740.shp                     |   Bin 0 -> 521068 bytes
 pysal/examples/10740/10740.shx                     |   Bin 0 -> 1660 bytes
 pysal/examples/10740/10740_queen.gal               |   391 +
 pysal/examples/10740/10740_rook.gal                |   391 +
 pysal/examples/10740/README.md                     |    13 +
 pysal/examples/Line/Line.dbf                       |   Bin 0 -> 621 bytes
 pysal/examples/Line/Line.prj                       |     1 +
 pysal/examples/Line/Line.shp                       |   Bin 0 -> 564 bytes
 pysal/examples/Line/Line.shx                       |   Bin 0 -> 132 bytes
 pysal/examples/Line/README.md                      |     7 +
 pysal/examples/Point/Point.dbf                     |   Bin 0 -> 1236 bytes
 pysal/examples/Point/Point.prj                     |     1 +
 pysal/examples/Point/Point.shp                     |   Bin 0 -> 352 bytes
 pysal/examples/Point/Point.shx                     |   Bin 0 -> 172 bytes
 pysal/examples/Polygon/Polygon.dbf                 |   Bin 0 -> 498 bytes
 pysal/examples/Polygon/Polygon.prj                 |     1 +
 pysal/examples/Polygon/Polygon.shp                 |   Bin 0 -> 992 bytes
 pysal/examples/Polygon/Polygon.shx                 |   Bin 0 -> 124 bytes
 pysal/examples/Polygon/README.md                   |     7 +
 pysal/examples/README.txt                          |     5 +
 pysal/examples/__init__.py                         |    77 +
 pysal/examples/arcgis/README.md                    |     7 +
 pysal/examples/arcgis/arcgis_ohio.dbf              |   Bin 0 -> 21876 bytes
 pysal/examples/arcgis/arcgis_txt.txt               |     9 +
 pysal/examples/baltim/README.md                    |    16 +
 pysal/examples/baltim/baltim.dbf                   |   Bin 0 -> 31595 bytes
 pysal/examples/baltim/baltim.shp                   |   Bin 0 -> 6008 bytes
 pysal/examples/baltim/baltim.shx                   |   Bin 0 -> 1788 bytes
 pysal/examples/baltim/baltim.tri.k12.kwt           |  2744 +
 pysal/examples/baltim/baltim_k4.gwt                |   845 +
 pysal/examples/baltim/baltim_q.gal                 |   423 +
 pysal/examples/baltim/baltimore.geojson            |   218 +
 pysal/examples/book/README.md                      |    10 +
 pysal/examples/book/book.gal                       |    33 +
 pysal/examples/book/book.txt                       |    18 +
 pysal/examples/burkitt/README.md                   |    11 +
 pysal/examples/burkitt/burkitt.dbf                 |   Bin 0 -> 7558 bytes
 pysal/examples/burkitt/burkitt.shp                 |   Bin 0 -> 5364 bytes
 pysal/examples/burkitt/burkitt.shx                 |   Bin 0 -> 1604 bytes
 pysal/examples/calemp/README.md                    |    15 +
 pysal/examples/calemp/calempdensity.csv            |    59 +
 pysal/examples/chicago/Chicago77.dbf               |   Bin 0 -> 16787 bytes
 pysal/examples/chicago/Chicago77.shp               |   Bin 0 -> 687568 bytes
 pysal/examples/chicago/Chicago77.shx               |   Bin 0 -> 716 bytes
 pysal/examples/chicago/README.md                   |    11 +
 pysal/examples/columbus/columbus.dbf               |   Bin 0 -> 10082 bytes
 pysal/examples/columbus/columbus.gal               |    99 +
 pysal/examples/columbus/columbus.html              |   132 +
 pysal/examples/columbus/columbus.json              |   104 +
 pysal/examples/columbus/columbus.shp               |   Bin 0 -> 21980 bytes
 pysal/examples/columbus/columbus.shx               |   Bin 0 -> 492 bytes
 pysal/examples/desmith/README.md                   |    13 +
 pysal/examples/desmith/desmith.gal                 |    21 +
 pysal/examples/desmith/desmith.txt                 |    12 +
 pysal/examples/examples.txt                        |   141 +
 pysal/examples/geodanet/README.md                  |    26 +
 pysal/examples/geodanet/crimes.dbf                 |   Bin 0 -> 5551 bytes
 pysal/examples/geodanet/crimes.prj                 |     1 +
 pysal/examples/geodanet/crimes.sbn                 |   Bin 0 -> 3228 bytes
 pysal/examples/geodanet/crimes.sbx                 |   Bin 0 -> 428 bytes
 pysal/examples/geodanet/crimes.shp                 |   Bin 0 -> 8136 bytes
 pysal/examples/geodanet/crimes.shp.xml             |     3 +
 pysal/examples/geodanet/crimes.shx                 |   Bin 0 -> 2396 bytes
 pysal/examples/geodanet/schools.dbf                |   Bin 0 -> 146 bytes
 pysal/examples/geodanet/schools.prj                |     1 +
 pysal/examples/geodanet/schools.sbn                |   Bin 0 -> 212 bytes
 pysal/examples/geodanet/schools.sbx                |   Bin 0 -> 124 bytes
 pysal/examples/geodanet/schools.shp                |   Bin 0 -> 324 bytes
 pysal/examples/geodanet/schools.shp.xml            |   546 +
 pysal/examples/geodanet/schools.shx                |   Bin 0 -> 164 bytes
 pysal/examples/geodanet/streets.dbf                |   Bin 0 -> 11525 bytes
 pysal/examples/geodanet/streets.prj                |     1 +
 pysal/examples/geodanet/streets.sbn                |   Bin 0 -> 3388 bytes
 pysal/examples/geodanet/streets.sbx                |   Bin 0 -> 540 bytes
 pysal/examples/geodanet/streets.shp                |   Bin 0 -> 26044 bytes
 pysal/examples/geodanet/streets.shx                |   Bin 0 -> 2444 bytes
 pysal/examples/juvenile/README.md                  |    14 +
 pysal/examples/juvenile/juvenile.dbf               |   Bin 0 -> 4834 bytes
 pysal/examples/juvenile/juvenile.gwt               |  2803 +
 pysal/examples/juvenile/juvenile.shp               |   Bin 0 -> 4804 bytes
 pysal/examples/juvenile/juvenile.shx               |   Bin 0 -> 1444 bytes
 pysal/examples/mexico/README.md                    |    15 +
 pysal/examples/mexico/mexico.csv                   |    33 +
 pysal/examples/mexico/mexico.gal                   |    65 +
 pysal/examples/nat/NAT.dbf                         |   Bin 0 -> 2501092 bytes
 pysal/examples/nat/NAT.shp                         |   Bin 0 -> 1462216 bytes
 pysal/examples/nat/NAT.shx                         |   Bin 0 -> 24780 bytes
 pysal/examples/nat/nat.geojson                     |  3092 +
 pysal/examples/nat/nat_queen.gal                   |  6171 ++
 pysal/examples/nat/nat_queen_old.gal               |  6171 ++
 pysal/examples/nat/nat_trian_k20.kwt               | 64786 +++++++++++++++++++
 pysal/examples/nat/natregimes.dbf                  |   Bin 0 -> 2627705 bytes
 pysal/examples/nat/natregimes.shp                  |   Bin 0 -> 1462216 bytes
 pysal/examples/nat/natregimes.shx                  |   Bin 0 -> 24780 bytes
 pysal/examples/networks/eberly_net.dbf             |   Bin 0 -> 1348 bytes
 pysal/examples/networks/eberly_net.shp             |   Bin 0 -> 2652 bytes
 pysal/examples/networks/eberly_net.shx             |   Bin 0 -> 332 bytes
 .../networks/eberly_net_pts_offnetwork.dbf         |   Bin 0 -> 2197 bytes
 .../networks/eberly_net_pts_offnetwork.shp         |   Bin 0 -> 2900 bytes
 .../networks/eberly_net_pts_offnetwork.shx         |   Bin 0 -> 900 bytes
 .../examples/networks/eberly_net_pts_onnetwork.dbf |   Bin 0 -> 1275 bytes
 .../examples/networks/eberly_net_pts_onnetwork.shp |   Bin 0 -> 3180 bytes
 .../examples/networks/eberly_net_pts_onnetwork.shx |   Bin 0 -> 980 bytes
 pysal/examples/networks/nonplanarsegments.dbf      |   Bin 0 -> 87 bytes
 pysal/examples/networks/nonplanarsegments.prj      |     1 +
 pysal/examples/networks/nonplanarsegments.qpj      |     1 +
 pysal/examples/networks/nonplanarsegments.shp      |   Bin 0 -> 308 bytes
 pysal/examples/networks/nonplanarsegments.shx      |   Bin 0 -> 116 bytes
 pysal/examples/newHaven/new_haven_merged.dbf       |   Bin 0 -> 1320686 bytes
 pysal/examples/newHaven/new_haven_merged.shp       |   Bin 0 -> 92304 bytes
 pysal/examples/newHaven/new_haven_merged.shx       |   Bin 0 -> 26444 bytes
 pysal/examples/newHaven/newhaven_nework.dbf        |   Bin 0 -> 206183 bytes
 pysal/examples/newHaven/newhaven_nework.prj        |     1 +
 pysal/examples/newHaven/newhaven_nework.qpj        |     1 +
 pysal/examples/newHaven/newhaven_nework.shp        |   Bin 0 -> 358220 bytes
 pysal/examples/newHaven/newhaven_nework.shx        |   Bin 0 -> 12396 bytes
 pysal/examples/sacramento2/sacramentot2.dbf        |   Bin 0 -> 98149 bytes
 pysal/examples/sacramento2/sacramentot2.gal        |   807 +
 pysal/examples/sacramento2/sacramentot2.sbn        |   Bin 0 -> 11172 bytes
 pysal/examples/sacramento2/sacramentot2.sbx        |   Bin 0 -> 588 bytes
 pysal/examples/sacramento2/sacramentot2.shp        |   Bin 0 -> 1587812 bytes
 pysal/examples/sacramento2/sacramentot2.shx        |   Bin 0 -> 3324 bytes
 pysal/examples/sids2/README.md                     |    14 +
 pysal/examples/sids2/sids2.dbf                     |   Bin 0 -> 23810 bytes
 pysal/examples/sids2/sids2.gal                     |   201 +
 pysal/examples/sids2/sids2.html                    |   124 +
 pysal/examples/sids2/sids2.shp                     |   Bin 0 -> 46196 bytes
 pysal/examples/sids2/sids2.shx                     |   Bin 0 -> 900 bytes
 pysal/examples/sids2/sids2.swm                     |   Bin 0 -> 7168 bytes
 pysal/examples/snow_maps/SohoPeople.dbf            |   Bin 0 -> 3662 bytes
 pysal/examples/snow_maps/SohoPeople.prj            |     1 +
 pysal/examples/snow_maps/SohoPeople.sbn            |   Bin 0 -> 3460 bytes
 pysal/examples/snow_maps/SohoPeople.sbx            |   Bin 0 -> 380 bytes
 pysal/examples/snow_maps/SohoPeople.shp            |   Bin 0 -> 9172 bytes
 pysal/examples/snow_maps/SohoPeople.shx            |   Bin 0 -> 2692 bytes
 pysal/examples/snow_maps/SohoWater.dbf             |   Bin 0 -> 157 bytes
 pysal/examples/snow_maps/SohoWater.prj             |     1 +
 pysal/examples/snow_maps/SohoWater.sbn             |   Bin 0 -> 252 bytes
 pysal/examples/snow_maps/SohoWater.sbx             |   Bin 0 -> 124 bytes
 pysal/examples/snow_maps/SohoWater.shp             |   Bin 0 -> 464 bytes
 pysal/examples/snow_maps/SohoWater.shx             |   Bin 0 -> 204 bytes
 pysal/examples/snow_maps/Soho_Network.dbf          |   Bin 0 -> 892 bytes
 pysal/examples/snow_maps/Soho_Network.prj          |     1 +
 pysal/examples/snow_maps/Soho_Network.sbn          |   Bin 0 -> 1292 bytes
 pysal/examples/snow_maps/Soho_Network.sbx          |   Bin 0 -> 228 bytes
 pysal/examples/snow_maps/Soho_Network.shp          |   Bin 0 -> 11620 bytes
 pysal/examples/snow_maps/Soho_Network.shx          |   Bin 0 -> 1044 bytes
 pysal/examples/south/south.dbf                     |   Bin 0 -> 1145962 bytes
 pysal/examples/south/south.shp                     |   Bin 0 -> 737448 bytes
 pysal/examples/south/south.shx                     |   Bin 0 -> 11396 bytes
 pysal/examples/south/south_q.gal                   |  2825 +
 pysal/examples/south/south_queen.gal               |  2825 +
 pysal/examples/stl/stl.gal                         |   157 +
 pysal/examples/stl/stl_hom.csv                     |    79 +
 pysal/examples/stl/stl_hom.dbf                     |   Bin 0 -> 23280 bytes
 pysal/examples/stl/stl_hom.html                    |   143 +
 pysal/examples/stl/stl_hom.shp                     |   Bin 0 -> 28276 bytes
 pysal/examples/stl/stl_hom.shx                     |   Bin 0 -> 724 bytes
 pysal/examples/stl/stl_hom.txt                     |    80 +
 pysal/examples/stl/stl_hom.wkt                     |    78 +
 pysal/examples/stl/stl_hom_rook.gal                |   157 +
 pysal/examples/street_net_pts/street_net_pts.dbf   |   Bin 0 -> 3398 bytes
 pysal/examples/street_net_pts/street_net_pts.prj   |     1 +
 pysal/examples/street_net_pts/street_net_pts.qpj   |     1 +
 pysal/examples/street_net_pts/street_net_pts.shp   |   Bin 0 -> 8584 bytes
 pysal/examples/street_net_pts/street_net_pts.shx   |   Bin 0 -> 2524 bytes
 pysal/examples/taz/taz.dbf                         |   Bin 0 -> 485344 bytes
 pysal/examples/taz/taz.shp                         |   Bin 0 -> 5774828 bytes
 pysal/examples/taz/taz.shx                         |   Bin 0 -> 32972 bytes
 pysal/examples/test_examples.py                    |    21 +
 pysal/examples/us_income/README.md                 |    10 +
 pysal/examples/us_income/spi_download.csv          |    66 +
 pysal/examples/us_income/states48.gal              |    97 +
 pysal/examples/us_income/us48.dbf                  |   Bin 0 -> 4274 bytes
 pysal/examples/us_income/us48.shp                  |   Bin 0 -> 186476 bytes
 pysal/examples/us_income/us48.shx                  |   Bin 0 -> 484 bytes
 pysal/examples/us_income/usjoin.csv                |    49 +
 pysal/examples/virginia/README.md                  |    10 +
 pysal/examples/virginia/virginia.dbf               |   Bin 0 -> 11410 bytes
 pysal/examples/virginia/virginia.gal               |   273 +
 pysal/examples/virginia/virginia.json              |   143 +
 pysal/examples/virginia/virginia.prj               |     1 +
 pysal/examples/virginia/virginia.shp               |   Bin 0 -> 71416 bytes
 pysal/examples/virginia/virginia.shx               |   Bin 0 -> 1188 bytes
 pysal/examples/virginia/virginia_queen.dat         |   586 +
 pysal/examples/virginia/virginia_queen.dbf         |   Bin 0 -> 11850 bytes
 pysal/examples/virginia/virginia_queen.gal         |   273 +
 pysal/examples/virginia/virginia_queen.mat         |   Bin 0 -> 148160 bytes
 pysal/examples/virginia/virginia_queen.mtx         |   589 +
 pysal/examples/virginia/virginia_queen.swm         |   Bin 0 -> 9232 bytes
 pysal/examples/virginia/virginia_queen.txt         |   137 +
 pysal/examples/virginia/virginia_queen.wk1         |   Bin 0 -> 314585 bytes
 pysal/examples/virginia/virginia_rook.gal          |   273 +
 pysal/examples/wmat/geobugs_scot                   |    66 +
 pysal/examples/wmat/lattice10x10.shp               |   Bin 0 -> 13700 bytes
 pysal/examples/wmat/lattice10x10.shx               |   Bin 0 -> 900 bytes
 pysal/examples/wmat/ohio.swm                       |   Bin 0 -> 6978 bytes
 pysal/examples/wmat/rook31.dbf                     |   Bin 0 -> 161 bytes
 pysal/examples/wmat/rook31.gal                     |     7 +
 pysal/examples/wmat/rook31.shp                     |   Bin 0 -> 556 bytes
 pysal/examples/wmat/rook31.shx                     |   Bin 0 -> 124 bytes
 pysal/examples/wmat/spat-sym-us.mat                |   Bin 0 -> 416 bytes
 pysal/examples/wmat/spat-sym-us.wk1                |   Bin 0 -> 2221 bytes
 pysal/examples/wmat/spdep_listw2WB_columbus        |    59 +
 pysal/examples/wmat/stata_full.txt                 |    57 +
 pysal/examples/wmat/stata_sparse.txt               |    57 +
 pysal/examples/wmat/wmat.dat                       |   232 +
 pysal/examples/wmat/wmat.mtx                       |   237 +
 pysal/meta/wmd.py                                  |    70 +-
 pysal/network/tests/test_network.py                |     5 +-
 pysal/region/maxp.py                               |    26 +-
 pysal/region/tests/test_maxp.py                    |    16 +-
 pysal/spatial_dynamics/markov.py                   |    12 +-
 pysal/spatial_dynamics/tests/test_markov.py        |    11 +-
 pysal/spreg/__init__.py                            |     3 +
 pysal/spreg/diagnostics.py                         |     4 +-
 pysal/spreg/diagnostics_sur.py                     |   221 +
 pysal/spreg/ml_error.py                            |    83 +-
 pysal/spreg/ml_error_regimes.py                    |     5 +-
 pysal/spreg/ml_lag.py                              |    72 +-
 pysal/spreg/ml_lag_regimes.py                      |     3 +
 pysal/spreg/ols.py                                 |     7 +-
 pysal/spreg/opt.py                                 |    92 +
 pysal/spreg/optional_imports.ipynb                 |   278 +
 pysal/spreg/probit.py                              |   322 +-
 pysal/spreg/regimes.py                             |     6 +-
 pysal/spreg/summary_output.py                      |   284 +-
 pysal/spreg/sur.py                                 |   697 +
 pysal/spreg/sur_error.py                           |   549 +
 pysal/spreg/sur_lag.py                             |   366 +
 pysal/spreg/sur_utils.py                           |   363 +
 pysal/spreg/tests/test_diagnostics.py              |    52 +-
 pysal/spreg/tests/test_diagnostics_sp.py           |    44 +-
 pysal/spreg/tests/test_diagnostics_tsls.py         |    10 +-
 pysal/spreg/tests/test_error_sp.py                 |   192 +-
 pysal/spreg/tests/test_error_sp_het.py             |   207 +-
 pysal/spreg/tests/test_error_sp_het_regimes.py     |   161 +-
 pysal/spreg/tests/test_error_sp_het_sparse.py      |   207 +-
 pysal/spreg/tests/test_error_sp_hom.py             |   229 +-
 pysal/spreg/tests/test_error_sp_hom_regimes.py     |   165 +-
 pysal/spreg/tests/test_error_sp_regimes.py         |   169 +-
 pysal/spreg/tests/test_error_sp_sparse.py          |   196 +-
 pysal/spreg/tests/test_ml_error.py                 |    40 +-
 pysal/spreg/tests/test_ml_error_regimes.py         |    61 +-
 pysal/spreg/tests/test_ml_lag.py                   |    35 +-
 pysal/spreg/tests/test_ml_lag_regimes.py           |    53 +-
 pysal/spreg/tests/test_ols.py                      |   119 +-
 pysal/spreg/tests/test_ols_regimes.py              |   108 +-
 pysal/spreg/tests/test_ols_sparse.py               |   105 +-
 pysal/spreg/tests/test_probit.py                   |    69 +-
 pysal/spreg/tests/test_sur.py                      |   172 +
 pysal/spreg/tests/test_sur_error.py                |   120 +
 pysal/spreg/tests/test_sur_lag.py                  |   176 +
 pysal/spreg/tests/test_twosls.py                   |   117 +-
 pysal/spreg/tests/test_twosls_regimes.py           |    86 +-
 pysal/spreg/tests/test_twosls_sp.py                |   141 +-
 pysal/spreg/tests/test_twosls_sp_regimes.py        |   144 +-
 pysal/spreg/tests/test_twosls_sp_sparse.py         |   144 +-
 pysal/spreg/tests/test_twosls_sparse.py            |   121 +-
 pysal/spreg/twosls.py                              |    17 +-
 pysal/spreg/utils.py                               |   132 +-
 pysal/version.py                                   |     4 +-
 pysal/weights/Distance.py                          |    12 +-
 pysal/weights/_contW_binning.py                    |    10 +-
 pysal/weights/tests/test_Distance.py               |    69 +-
 pysal/weights/tests/test_Wsets.py                  |    28 +-
 pysal/weights/tests/test_user.py                   |    35 +-
 pysal/weights/tests/test_util.py                   |     7 +
 pysal/weights/tests/test_weights.py                |    69 +-
 pysal/weights/util.py                              |    22 +-
 setup.py                                           |    59 +-
 tools/bump.py                                      |    84 +
 tools/spregsync                                    |    47 +
 touch.txt                                          |     1 +
 352 files changed, 114778 insertions(+), 6237 deletions(-)

diff --git a/.gitignore b/.gitignore
index b3b303c..6c82954 100644
--- a/.gitignore
+++ b/.gitignore
@@ -77,3 +77,27 @@ pysal/examples/south.prj
 
 #Vi
 *.swp
+
+.eggs/
+pysal/contrib/planar/
+pysal/esda/.ropeproject/
+pysal/esda/jenks_nb.ipynb
+pysal/examples/snow_maps/fake.dbf
+pysal/examples/snow_maps/fake.prj
+pysal/examples/snow_maps/fake.qpj
+pysal/examples/snow_maps/fake.shp
+pysal/examples/snow_maps/fake.shx
+pysal/examples/snow_maps/fixed.dbf
+pysal/examples/snow_maps/fixed.prj
+pysal/examples/snow_maps/fixed.qgs
+pysal/examples/snow_maps/fixed.qgs~
+pysal/examples/snow_maps/fixed.qpj
+pysal/examples/snow_maps/fixed.shp
+pysal/examples/snow_maps/fixed.shx
+pysal/examples/snow_maps/snow.qgs
+pysal/examples/snow_maps/snow.qgs~
+pysal/examples/snow_maps/soho_graph.dbf
+pysal/examples/snow_maps/soho_graph.prj
+pysal/examples/snow_maps/soho_graph.qpj
+pysal/examples/snow_maps/soho_graph.shp
+pysal/examples/snow_maps/soho_graph.shx
diff --git a/.travis.yml b/.travis.yml
index c24d869..82bf789 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,30 +6,26 @@ only:
 python:
   - 2.7
   #- "2.6"
-  # - 3.4
-env:
-  - SCIPY_VERSION="deb http://us.archive.ubuntu.com/ubuntu/ precise main universe"
-  - SCIPY_VERSION="deb http://us.archive.ubuntu.com/ubuntu/ trusty main universe"
-
-virtualenv:
-  system_site_packages: true
+  - 3.4
 
 before_install:
   - wget https://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh
   - chmod +x miniconda.sh
-  - ./miniconda.sh -b
-  - export PATH=/home/travis/miniconda/bin:$PATH
+  - ./miniconda.sh -b -p ./miniconda
+  - export PATH=`pwd`/miniconda/bin:$PATH
   - conda update --yes conda
   - conda create -y -q -n test-env python=$TRAVIS_PYTHON_VERSION
   - source activate test-env
+  - chmod +x ./.travis_testing.sh
+  - if [[ $TRAVIS_PYTHON_VERSION == 3* ]]; then rm -rf pysal/contrib; 2to3 -nw pysal/ > /dev/null; fi
 
 install:
-  - conda install --yes numpy scipy nose pip
+  - conda install --yes numpy=1.10.2 scipy=0.16.0 nose pip
   - pip install -r travis.txt
 
 script: 
-  - python -c 'import numpy; print numpy.__version__'
-  - python -c 'import scipy; print scipy.__version__'
+  - python -c 'import numpy; print(numpy.__version__)'
+  - python -c 'import scipy; print(scipy.__version__)'
   - python setup.py install  >/dev/null
   - python -c 'import pysal'
   #- python -c 'import multiprocessing as mp; print mp.cpu_count()'
@@ -38,7 +34,7 @@ script:
   #- nosetests --processes=-1 --process-timeout=60 --verbosity=1 --ignore-files=collection --exclude-dir=pysal/contrib
   #- nosetests
   - echo "check_stable=False" >pysal/config.py
-  - nosetests --with-coverage --cover-package=pysal 
+  - ./.travis_testing.sh
   #- cd doc; make pickle; make doctest
 notifications:
     email:
diff --git a/.travis_testing.sh b/.travis_testing.sh
new file mode 100644
index 0000000..78d5c1b
--- /dev/null
+++ b/.travis_testing.sh
@@ -0,0 +1,5 @@
+if [[ $TRAVIS_PYTHON_VERSION == 3* ]]; then
+    cd pysal; python -m 'nose';
+else
+    nosetests --with-coverage --cover-package=pysal; 
+fi
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 53ce244..1506e43 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,2426 @@
+v<1.11.0>, 2016-01-27
+
+GitHub stats for 2015/01/31 - 2015/07/29
+
+These lists are automatically generated, and may be incomplete or contain duplicates.
+
+The following 13 authors contributed 216 commits.
+
+* Dani Arribas-Bel
+* David Folch
+* Levi John Wolf
+* Levi Wolf
+* Philip Stephens
+* Serge Rey
+* Sergio Rey
+* Wei Kang
+* jlaura
+* levi.john.wolf at gmail.com
+* ljw
+* ljwolf
+* pedrovma
+
+
+We closed a total of 86 issues, 33 pull requests and 53 regular issues;
+this is the full list (generated with the script 
+:file:`tools/github_stats.py`):
+
+Pull Requests (33):
+
+* :ghpull:`724`: add synchronization tool
+* :ghpull:`733`: Fb/bump
+* :ghpull:`731`: Small docfixes
+* :ghpull:`730`: Contrib docs
+* :ghpull:`728`: B179
+* :ghpull:`727`: Geodf io
+* :ghpull:`725`: try pinning scipy,numpy
+* :ghpull:`723`: make sure to test all moran classes
+* :ghpull:`720`: Moving natural breaks to a cleaner kmeans implementation
+* :ghpull:`718`: force counts to be same length as bins
+* :ghpull:`714`: Dev
+* :ghpull:`715`: Heads
+* :ghpull:`713`: Enh712
+* :ghpull:`710`: Patsy/Pandas wrapper
+* :ghpull:`711`: Travis fixes
+* :ghpull:`706`: precommit hook
+* :ghpull:`707`: Keep dev updated with any bugfixes into master
+* :ghpull:`702`: fix for chi2 test 0 denominator and invocation of chi2 test in LISA_Markov
+* :ghpull:`704`: Allcloser
+* :ghpull:`703`: Swapping to Allclose and RTOL=.00005 in spreg
+* :ghpull:`701`: By col array
+* :ghpull:`700`: small optimization of bivariate moran motivated by #695
+* :ghpull:`696`: Pypi
+* :ghpull:`691`: Update doctest for one-off bug that was fixed with #690
+* :ghpull:`690`: fix for lisa markov one off for significance indicator
+* :ghpull:`689`: Clpy flex w
+* :ghpull:`688`: pep 8 edits
+* :ghpull:`687`: Change array assertions into allclose
+* :ghpull:`686`: Moran local bivariate
+* :ghpull:`684`: 591
+* :ghpull:`682`: release instructions updated
+* :ghpull:`681`: version bump for next dev cycle
+* :ghpull:`680`: Rel1.10
+
+Issues (53):
+
+* :ghissue:`705`: spreg check valve
+* :ghissue:`344`: Explore new dependency on ogr
+* :ghissue:`459`: Problem with bandwidth
+* :ghissue:`552`: Viz organization
+* :ghissue:`491`: Test np.allclose() for unit tests
+* :ghissue:`529`: Clarity needed on proper reference formatting in sphinx docs
+* :ghissue:`699`: Trouble importing pysal - ImportError: DLL load failed
+* :ghissue:`716`: `min_threshold_dist_from_shapefile` creating an island in some cases
+* :ghissue:`724`: add synchronization tool
+* :ghissue:`733`: Fb/bump
+* :ghissue:`731`: Small docfixes
+* :ghissue:`730`: Contrib docs
+* :ghissue:`719`: pysal not working with matplotlib v1.5 for plot_lisa_cluster, plot_choropleth, etc.
+* :ghissue:`728`: B179
+* :ghissue:`727`: Geodf io
+* :ghissue:`725`: try pinning scipy,numpy
+* :ghissue:`723`: make sure to test all moran classes
+* :ghissue:`720`: Moving natural breaks to a cleaner kmeans implementation
+* :ghissue:`717`: esda.mapclassify return problematic counts when there is 0 occurrence in the last class
+* :ghissue:`718`: force counts to be same length as bins
+* :ghissue:`714`: Dev
+* :ghissue:`712`: `block_weights` does not take argument `idVariable`
+* :ghissue:`715`: Heads
+* :ghissue:`713`: Enh712
+* :ghissue:`710`: Patsy/Pandas wrapper
+* :ghissue:`711`: Travis fixes
+* :ghissue:`706`: precommit hook
+* :ghissue:`708`: 2-3: is six a dependency or do we ship it?
+* :ghissue:`707`: Keep dev updated with any bugfixes into master
+* :ghissue:`702`: fix for chi2 test 0 denominator and invocation of chi2 test in LISA_Markov
+* :ghissue:`704`: Allcloser
+* :ghissue:`703`: Swapping to Allclose and RTOL=.00005 in spreg
+* :ghissue:`698`: Py3merge
+* :ghissue:`701`: By col array
+* :ghissue:`700`: small optimization of bivariate moran motivated by #695
+* :ghissue:`695`: Bivariate global moran's I formula
+* :ghissue:`683`: Py3 Conversion Project
+* :ghissue:`694`: Allclose in SPREG
+* :ghissue:`696`: Pypi
+* :ghissue:`691`: Update doctest for one-off bug that was fixed with #690
+* :ghissue:`693`: Trouble installation: No module named 'shapes'
+* :ghissue:`690`: fix for lisa markov one off for significance indicator
+* :ghissue:`689`: Clpy flex w
+* :ghissue:`688`: pep 8 edits
+* :ghissue:`685`: BV Lisa 
+* :ghissue:`687`: Change array assertions into allclose
+* :ghissue:`686`: Moran local bivariate
+* :ghissue:`677`: Make meta importable from base
+* :ghissue:`684`: 591
+* :ghissue:`682`: release instructions updated
+* :ghissue:`679`: pysal.cg.sphere.fast_knn bug
+* :ghissue:`681`: version bump for next dev cycle
+* :ghissue:`680`: Rel1.10
+
+
+v<1.10.0>, 2015-07-29
+
+GitHub stats for 2015/01/31 - 2015/07/29
+
+These lists are automatically generated, and may be incomplete or contain duplicates.
+
+The following 20 authors contributed 334 commits.
+
+* Charlie Schmidt
+* Dani Arribas-Bel
+* Daniel Arribas-Bel
+* David C. Folch
+* David Folch
+* Jay
+* Levi John Wolf
+* Marynia
+* Philip Stephens
+* Serge Rey
+* Sergio Rey
+* Taylor Oshan
+* The Gitter Badger
+* Wei Kang
+* jay
+* jlaura
+* ljw
+* ljwolf
+* luc
+* pedrovma
+
+
+We closed a total of 156 issues, 58 pull requests and 98 regular issues;
+this is the full list (generated with the script 
+:file:`tools/github_stats.py`):
+
+Pull Requests (58):
+
+* :ghpull:`675`: Update README.md
+* :ghpull:`673`: Adding init at pdutilities so they are importable
+* :ghpull:`672`: ENH: option to locate legend
+* :ghpull:`669`: add nonsudo travis
+* :ghpull:`666`: Cleaned up conflicts in ref branch
+* :ghpull:`664`: Lisa map
+* :ghpull:`663`: Examples
+* :ghpull:`661`: Reorganization of examples 
+* :ghpull:`657`: Assuncao test division errors
+* :ghpull:`649`: Add a Gitter chat badge to README.md
+* :ghpull:`647`: Addresses 646
+* :ghpull:`645`: Update to weights module documentation for PySAL-REST
+* :ghpull:`644`: removed test print statements from df2dbf
+* :ghpull:`643`: using dtypes.name in df2dbf to avoid gotcha in type
+* :ghpull:`642`: Updating copyright year
+* :ghpull:`634`: allows non-symmetric distance matrices
+* :ghpull:`641`: turning off generatetree
+* :ghpull:`592`: adding check for version #591
+* :ghpull:`636`: vertical line point simulation
+* :ghpull:`639`: Snapping
+* :ghpull:`640`: Add users to travis
+* :ghpull:`627`: Networkrb
+* :ghpull:`631`: Fixing typoes in analysis.py
+* :ghpull:`626`: cast arrays over inconsistent kdtree return types
+* :ghpull:`620`: adding explicit check for random region contiguity
+* :ghpull:`619`: Fixing spreg's warnings
+* :ghpull:`618`: initial folder with dbf utilities using pandas
+* :ghpull:`616`: Adding isolation and theil indices to inequality._indices.py
+* :ghpull:`615`: Network docs
+* :ghpull:`614`: cleaning up pr testing
+* :ghpull:`613`: test coverage to 98% on network
+* :ghpull:`612`: small change for testing PR
+* :ghpull:`611`: stubbed in minimal tests
+* :ghpull:`607`: B603
+* :ghpull:`602`: Documentation Extraction Notebook
+* :ghpull:`606`: pct_nonzero was reporting a ratio not a percentage
+* :ghpull:`604`: Contribpush
+* :ghpull:`601`: Documentation Cleanup
+* :ghpull:`599`: Casting bugfix from #598
+* :ghpull:`600`: Updates for coveralls
+* :ghpull:`598`: IO in Python 3
+* :ghpull:`597`: Decoupling bbox from map_XXX_poly
+* :ghpull:`595`: Removed testing line in travis.yml and added a .coveragerc file to manag...
+* :ghpull:`590`: using numpy sum method
+* :ghpull:`589`: Wconstructor
+* :ghpull:`588`: Coveralls
+* :ghpull:`585`: Fisher Jenks bug in `plot_choropleth`
+* :ghpull:`584`: Alpha in plot chor
+* :ghpull:`583`: Fixed 576
+* :ghpull:`580`: working on #576
+* :ghpull:`578`: Fixes #577
+* :ghpull:`574`: Handle case where a region has a 0 share.
+* :ghpull:`571`: Dict to unique value mapper
+* :ghpull:`570`: numpy doc cleanup for weights module
+* :ghpull:`569`: folium viz scripts
+* :ghpull:`568`: inline with numpy doc spec (spatial_dynamics module)
+* :ghpull:`567`: New/masterbump
+* :ghpull:`566`: Fix for 1.9.0 missing file in setup.py
+
+Issues (98):
+
+* :ghissue:`675`: Update README.md
+* :ghissue:`658`: Travis.CI """Legacy""" architecture
+* :ghissue:`667`: Examples Not Found
+* :ghissue:`673`: Adding init at pdutilities so they are importable
+* :ghissue:`672`: ENH: option to locate legend
+* :ghissue:`669`: add nonsudo travis
+* :ghissue:`671`: Shapefile Read - PolygonM Attribute Error
+* :ghissue:`670`: examples README markdown files reformatting
+* :ghissue:`668`: Wconstructor
+* :ghissue:`666`: Cleaned up conflicts in ref branch
+* :ghissue:`664`: Lisa map
+* :ghissue:`662`: Pep8
+* :ghissue:`665`: Refs
+* :ghissue:`663`: Examples
+* :ghissue:`573`: Examples
+* :ghissue:`661`: Reorganization of examples 
+* :ghissue:`656`: Assuncao rate improper division
+* :ghissue:`657`: Assuncao test division errors
+* :ghissue:`280`: handle multi-segment links in net_shp_io.py
+* :ghissue:`649`: Add a Gitter chat badge to README.md
+* :ghissue:`647`: Addresses 646
+* :ghissue:`646`: arc distance in knnW
+* :ghissue:`645`: Update to weights module documentation for PySAL-REST
+* :ghissue:`644`: removed test print statements from df2dbf
+* :ghissue:`643`: using dtypes.name in df2dbf to avoid gotcha in type
+* :ghissue:`603`: Polygon.contains_point does not correctly process multipart polygons.
+* :ghissue:`642`: Updating copyright year
+* :ghissue:`623`: reading road shapfiles into network
+* :ghissue:`608`: Scipy Sparse Graph
+* :ghissue:`621`: network distance speedup
+* :ghissue:`632`: network point snapping
+* :ghissue:`633`: point to point distances on network
+* :ghissue:`635`: simulating points on vertical lines
+* :ghissue:`634`: allows non-symmetric distance matrices
+* :ghissue:`641`: turning off generatetree
+* :ghissue:`637`: speedup distance computations
+* :ghissue:`592`: adding check for version #591
+* :ghissue:`628`: Re-enable doctests
+* :ghissue:`636`: vertical line point simulation
+* :ghissue:`639`: Snapping
+* :ghissue:`640`: Add users to travis
+* :ghissue:`638`: Add users to Travis
+* :ghissue:`627`: Networkrb
+* :ghissue:`622`: New network branch from clean master
+* :ghissue:`630`: NetworkG api is broken
+* :ghissue:`631`: Fixing typoes in analysis.py
+* :ghissue:`625`: Installation - Binstar and Anaconda
+* :ghissue:`624`: Network topology
+* :ghissue:`629`: changes to spreg tests for travis
+* :ghissue:`166`: pysal.esda.mapclassify.Fisher_Jenks  -   local variable 'best' referenced before assignment
+* :ghissue:`626`: cast arrays over inconsistent kdtree return types
+* :ghissue:`596`: [question] unsupervised classification
+* :ghissue:`620`: adding explicit check for random region contiguity
+* :ghissue:`617`: Random_Region not respecting contiguity constraint
+* :ghissue:`619`: Fixing spreg's warnings
+* :ghissue:`618`: initial folder with dbf utilities using pandas
+* :ghissue:`616`: Adding isolation and theil indices to inequality._indices.py
+* :ghissue:`615`: Network docs
+* :ghissue:`614`: cleaning up pr testing
+* :ghissue:`613`: test coverage to 98% on network
+* :ghissue:`612`: small change for testing PR
+* :ghissue:`611`: stubbed in minimal tests
+* :ghissue:`607`: B603
+* :ghissue:`602`: Documentation Extraction Notebook
+* :ghissue:`606`: pct_nonzero was reporting a ratio not a percentage
+* :ghissue:`605`: RTree Weights
+* :ghissue:`604`: Contribpush
+* :ghissue:`601`: Documentation Cleanup
+* :ghissue:`554`: Beginning documentation cleanup
+* :ghissue:`599`: Casting bugfix from #598
+* :ghissue:`600`: Updates for coveralls
+* :ghissue:`598`: IO in Python 3
+* :ghissue:`597`: Decoupling bbox from map_XXX_poly
+* :ghissue:`595`: Removed testing line in travis.yml and added a .coveragerc file to manag...
+* :ghissue:`586`: Look at using Coveralls
+* :ghissue:`590`: using numpy sum method
+* :ghissue:`589`: Wconstructor
+* :ghissue:`588`: Coveralls
+* :ghissue:`576`: Predecessor lists inconsistencies
+* :ghissue:`585`: Fisher Jenks bug in `plot_choropleth`
+* :ghissue:`584`: Alpha in plot chor
+* :ghissue:`583`: Fixed 576
+* :ghissue:`582`: Fixes #576
+* :ghissue:`581`: Network
+* :ghissue:`580`: working on #576
+* :ghissue:`575`: Network from Lattice
+* :ghissue:`578`: Fixes #577
+* :ghissue:`577`: bug in FileIO.cast
+* :ghissue:`574`: Handle case where a region has a 0 share.
+* :ghissue:`343`: Edge Segmentation
+* :ghissue:`571`: Dict to unique value mapper
+* :ghissue:`570`: numpy doc cleanup for weights module
+* :ghissue:`569`: folium viz scripts
+* :ghissue:`568`: inline with numpy doc spec (spatial_dynamics module)
+* :ghissue:`567`: New/masterbump
+* :ghissue:`564`: Bug in setup.py
+* :ghissue:`566`: Fix for 1.9.0 missing file in setup.py
+* :ghissue:`565`: Bsetup
+
+
+v<1.9.1>, 2015-01-31
+
+GitHub stats for 2015/01/30 - 2015/01/31 
+
+These lists are automatically generated, and may be incomplete or contain duplicates.
+
+The following 4 authors contributed 14 commits.
+
+* Dani Arribas-Bel
+* Serge Rey
+* Sergio Rey
+* jlaura
+
+
+We closed a total of 8 issues, 3 pull requests and 5 regular issues;
+this is the full list (generated with the script 
+:file:`tools/github_stats.py`):
+
+Pull Requests (3):
+
+* :ghpull:`566`: Fix for 1.9.0 missing file in setup.py
+* :ghpull:`563`: Updating release instructions
+* :ghpull:`561`: Rolling over to 1.10
+
+Issues (5):
+
+* :ghissue:`566`: Fix for 1.9.0 missing file in setup.py
+* :ghissue:`565`: Bsetup
+* :ghissue:`563`: Updating release instructions
+* :ghissue:`562`: adjustments to release management
+* :ghissue:`561`: Rolling over to 1.10
+
+
+v<1.9.0>, 2015-01-30
+
+GitHub stats for 2014/07/25 - 2015/01/30 
+
+These lists are automatically generated, and may be incomplete or contain duplicates.
+
+The following 12 authors contributed 131 commits.
+
+* Andy Reagan
+* Dani Arribas-Bel
+* Jay
+* Levi John Wolf
+* Philip Stephens
+* Qunshan
+* Serge Rey
+* jlaura
+* ljwolf
+* luc
+
+
+We closed a total of 113 issues, 44 pull requests and 69 regular issues;
+this is the full list (generated with the script 
+:file:`tools/github_stats.py`):
+
+Pull Requests (44):
+
+* :ghpull:`560`: modifying import scheme for network module
+* :ghpull:`559`: Network2
+* :ghpull:`558`: Network2
+* :ghpull:`557`: Network2
+* :ghpull:`556`: Added analytical functions and edge segmentation
+* :ghpull:`550`: Network2
+* :ghpull:`553`: correction in denominator of spatial tau. 
+* :ghpull:`547`: Updates to get network integrated
+* :ghpull:`544`: update .gitignore
+* :ghpull:`543`: k nearest neighbor gwt example file for baltimore points (with k=4) added to examples directory
+* :ghpull:`542`: new format nat_queen.gal file added to examples directory
+* :ghpull:`541`: Update tutorial docs for new book
+* :ghpull:`540`: doc: updating instructions for anaconda and enthought
+* :ghpull:`539`: doc: pysal is now on sagemathcloud
+* :ghpull:`538`: Clean up of cg and fixes of other doctests/formats
+* :ghpull:`536`: adding entry for getis ord module
+* :ghpull:`537`: new opendata module for contrib
+* :ghpull:`535`: Add method for extracting data columns as Numpy array rather than list
+* :ghpull:`534`: added geogrid to __all__ in sphere.py
+* :ghpull:`533`: added geogrid function to create a grid of points on a sphere
+* :ghpull:`532`: new functions to deal with spherical geometry: lat-lon conversion, degre...
+* :ghpull:`530`: I390
+* :ghpull:`528`: Replacing 0 by min value in choropleths
+* :ghpull:`526`: B166
+* :ghpull:`525`: copyright update
+* :ghpull:`524`: New homogeneity tests for general case and spatial markov as a special case
+* :ghpull:`523`: pointing to github.io pages
+* :ghpull:`520`: Same typo. Toolkit.
+* :ghpull:`518`: Update util.py
+* :ghpull:`519`: Typo
+* :ghpull:`517`: Documentation correction for Prais Conditional Mobility Index
+* :ghpull:`516`: ENH for https://github.com/PySAL/PySAL.github.io/issues/17
+* :ghpull:`515`: BUG: conditional check for extension of lower bound of colorbar to conta...
+* :ghpull:`514`: ENH: adding the user_defined classification
+* :ghpull:`513`: rewriting to not use ipython notebook --pylab=line
+* :ghpull:`512`: Viz
+* :ghpull:`508`: Adding barebones pysal2matplotlib options in viz
+* :ghpull:`511`: DOC updating news
+* :ghpull:`507`: Sched
+* :ghpull:`510`: BUG: fix for #509
+* :ghpull:`506`: 1.9dev
+* :ghpull:`505`: REL bumping master to 1.9.0dev
+* :ghpull:`504`: Release prep 1.8
+* :ghpull:`503`: Grid for landing page
+
+Issues (69):
+
+* :ghissue:`560`: modifying import scheme for network module
+* :ghissue:`559`: Network2
+* :ghissue:`558`: Network2
+* :ghissue:`557`: Network2
+* :ghissue:`556`: Added analytical functions and edge segmentation
+* :ghissue:`555`: Added edge segmentation by distance
+* :ghissue:`550`: Network2
+* :ghissue:`553`: correction in denominator of spatial tau. 
+* :ghissue:`549`: Network2
+* :ghissue:`547`: Updates to get network integrated
+* :ghissue:`548`: Installation Issues
+* :ghissue:`546`: Network2
+* :ghissue:`545`: Network
+* :ghissue:`544`: update .gitignore
+* :ghissue:`543`: k nearest neighbor gwt example file for baltimore points (with k=4) added to examples directory
+* :ghissue:`542`: new format nat_queen.gal file added to examples directory
+* :ghissue:`541`: Update tutorial docs for new book
+* :ghissue:`540`: doc: updating instructions for anaconda and enthought
+* :ghissue:`539`: doc: pysal is now on sagemathcloud
+* :ghissue:`538`: Clean up of cg and fixes of other doctests/formats
+* :ghissue:`536`: adding entry for getis ord module
+* :ghissue:`537`: new opendata module for contrib
+* :ghissue:`535`: Add method for extracting data columns as Numpy array rather than list
+* :ghissue:`534`: added geogrid to __all__ in sphere.py
+* :ghissue:`533`: added geogrid function to create a grid of points on a sphere
+* :ghissue:`532`: new functions to deal with spherical geometry: lat-lon conversion, degre...
+* :ghissue:`390`: add option to have local moran quadrant codes align with geoda
+* :ghissue:`530`: I390
+* :ghissue:`528`: Replacing 0 by min value in choropleths
+* :ghissue:`526`: B166
+* :ghissue:`176`: contrib module for proj 4
+* :ghissue:`178`: contrib module for gdal/org
+* :ghissue:`203`: implement network class in spatialnet
+* :ghissue:`204`: pysal-networkx util functions
+* :ghissue:`209`: csv reader enhancement
+* :ghissue:`215`: Add a tutorial for the spreg module
+* :ghissue:`244`: ps.knnW_from_shapefile returns wrong W ids when idVariable specified
+* :ghissue:`246`: Only use idVariable in W when writing out to file
+* :ghissue:`283`: Create new nodes at intersections of edges
+* :ghissue:`291`: Enum links around regions hangs
+* :ghissue:`292`: Handle multiple filaments within a region in the Wed construction
+* :ghissue:`302`: Handle hole polygons when constructing wed
+* :ghissue:`309`: Develop consistent solution for precision induced errors in doctests across platforms
+* :ghissue:`350`: reading/writing weights file with spaces in the ids
+* :ghissue:`450`: x_name and summary method not consistent in ols
+* :ghissue:`521`: Nosetests don't accept setup.cfg
+* :ghissue:`509`: ESDA bin type inconsistency
+* :ghissue:`525`: copyright update
+* :ghissue:`524`: New homogeneity tests for general case and spatial markov as a special case
+* :ghissue:`523`: pointing to github.io pages
+* :ghissue:`520`: Same typo. Toolkit.
+* :ghissue:`522`: Nosetests for python3 porting
+* :ghissue:`518`: Update util.py
+* :ghissue:`519`: Typo
+* :ghissue:`517`: Documentation correction for Prais Conditional Mobility Index
+* :ghissue:`516`: ENH for https://github.com/PySAL/PySAL.github.io/issues/17
+* :ghissue:`515`: BUG: conditional check for extension of lower bound of colorbar to conta...
+* :ghissue:`514`: ENH: adding the user_defined classification
+* :ghissue:`513`: rewriting to not use ipython notebook --pylab=line
+* :ghissue:`512`: Viz
+* :ghissue:`508`: Adding barebones pysal2matplotlib options in viz
+* :ghissue:`511`: DOC updating news
+* :ghissue:`507`: Sched
+* :ghissue:`510`: BUG: fix for #509
+* :ghissue:`502`: spreg.ml_lag.ML_Lag is very very very time-consuming?
+* :ghissue:`506`: 1.9dev
+* :ghissue:`505`: REL bumping master to 1.9.0dev
+* :ghissue:`504`: Release prep 1.8
+* :ghissue:`503`: Grid for landing page
+
+
+v<1.8.0>, 2014-07-25
+
+GitHub stats for 2014/01/29 - 2014/07/25 
+
+These lists are automatically generated, and may be incomplete or contain duplicates.
+
+The following 8 authors contributed 281 commits.
+
+* Dani Arribas-Bel
+* Jay
+* Philip Stephens
+* Serge Rey
+* Sergio Rey
+* jlaura
+* pedrovma
+* sjsrey
+
+
+We closed a total of 160 issues, 60 pull requests and 100 regular issues;
+this is the full list (generated with the script 
+:file:`tools/github_stats.py`):
+
+Pull Requests (60):
+
+* :ghpull:`503`: Grid for landing page
+* :ghpull:`501`: Two figs rather than three
+* :ghpull:`500`: More efficient higher order operations
+* :ghpull:`499`: renamed nat_queen.gal for #452
+* :ghpull:`497`: ENH Deprecation warning for regime_weights #486
+* :ghpull:`494`: Enables testing against two versions of SciPy shipped with the last two Ubuntu LTS versions.
+* :ghpull:`490`: Fix for #487
+* :ghpull:`492`: BUG cleaning up temporary files for #398
+* :ghpull:`493`: Phil: Skipping several tests that fail due to precision under older scipy
+* :ghpull:`489`: test suite fixes
+* :ghpull:`488`: More tests to skip if scipy less than 11
+* :ghpull:`484`: ENH: cleaning up more test generated files
+* :ghpull:`483`: Forwarding Phil's commit: skipping doctests, conditional skip of unit tests
+* :ghpull:`482`: DOC cleaning up files after running doctests #398
+* :ghpull:`481`: DOC contrib updates and links
+* :ghpull:`480`: DOC cleaning up doctests
+* :ghpull:`479`: ENH Changing regime_weights to block_weights for #455
+* :ghpull:`478`: DOC: link fixes
+* :ghpull:`477`: cKDTree for #460
+* :ghpull:`476`: redefining w.remap_ids to take only a single arg
+* :ghpull:`475`: Adding docstrings and error check to fix #471
+* :ghpull:`470`: fixing order of args for api consistency. 
+* :ghpull:`469`: Idfix for #449
+* :ghpull:`463`: updating gitignore
+* :ghpull:`462`: ENH: handle the case of an ergodic distribution where one state has 0 probability
+* :ghpull:`458`: ENH: Vagrantfile for PySAL devs and workshops
+* :ghpull:`447`: Clusterpy
+* :ghpull:`456`: BUG: fix for #451 handling W or WSP in higher_order_sp
+* :ghpull:`454`: Foobar
+* :ghpull:`443`: Updating spreg: several minor bug and documentation fixes.
+* :ghpull:`453`: Resolving conflicts
+* :ghpull:`448`: Wsp
+* :ghpull:`445`: ENH: unique qualitative color ramp. Also refactoring for future ipython deprecation of --pylab=inline
+* :ghpull:`446`: Wmd
+* :ghpull:`444`: Scipy dependency
+* :ghpull:`442`: Wmd
+* :ghpull:`441`: fixed kernel wmd for updated wmd structure
+* :ghpull:`440`: ENH: sidebar for Releases and installation doc update
+* :ghpull:`439`: - events
+* :ghpull:`438`: ENH: pruning to respect flake8
+* :ghpull:`437`: BUG: fix for removal of scipy.stat._support #436
+* :ghpull:`433`: Rank markov
+* :ghpull:`424`: testing
+* :ghpull:`431`: FOSS4G
+* :ghpull:`430`: Network
+* :ghpull:`429`: moving analytics out of wed class and into their own module
+* :ghpull:`428`: Network
+* :ghpull:`427`: devel docs
+* :ghpull:`425`: Viz2contrib
+* :ghpull:`423`: Update news.rst
+* :ghpull:`422`: ENH: Update doc instructions for napoleon dependency
+* :ghpull:`421`: Adding files used in some examples as per Luc's request.
+* :ghpull:`419`: Doc fixes 1.7
+* :ghpull:`393`: Doc fixes 1.7
+* :ghpull:`417`: ENH hex lattice W for #416
+* :ghpull:`415`: Temporarily commenting out tests that are blocking Travis.
+* :ghpull:`407`: Viz: Moving into contrib/viz in master
+* :ghpull:`404`: version change
+* :ghpull:`401`: fixes #388
+* :ghpull:`402`: release changes
+
+Issues (100):
+
+* :ghissue:`503`: Grid for landing page
+* :ghissue:`501`: Two figs rather than three
+* :ghissue:`500`: More efficient higher order operations
+* :ghissue:`452`: nat_queen.gal example file
+* :ghissue:`499`: renamed nat_queen.gal for #452
+* :ghissue:`486`: add a deprecation warning on regime_weights
+* :ghissue:`497`: ENH Deprecation warning for regime_weights #486
+* :ghissue:`449`: Lower order neighbor included in higher order
+* :ghissue:`487`: Issue with w.weights when row-standardizing
+* :ghissue:`398`: running test suite generates files
+* :ghissue:`358`: Graph weights
+* :ghissue:`338`: ENH: Move Geary's C calculations to Cython.
+* :ghissue:`494`: Enables testing against two versions of SciPy shipped with the last two Ubuntu LTS versions.
+* :ghissue:`490`: Fix for #487
+* :ghissue:`492`: BUG cleaning up temporary files for #398
+* :ghissue:`493`: Phil: Skipping several tests that fail due to precision under older scipy
+* :ghissue:`489`: test suite fixes
+* :ghissue:`485`: Revert "ENH: cleaning up more test generated files"
+* :ghissue:`488`: More tests to skip if scipy less than 11
+* :ghissue:`484`: ENH: cleaning up more test generated files
+* :ghissue:`483`: Forwarding Phil's commit: skipping doctests, conditional skip of unit tests
+* :ghissue:`482`: DOC cleaning up files after running doctests #398
+* :ghissue:`481`: DOC contrib updates and links
+* :ghissue:`480`: DOC cleaning up doctests
+* :ghissue:`455`: regime weights vs block weights
+* :ghissue:`479`: ENH Changing regime_weights to block_weights for #455
+* :ghissue:`478`: DOC: link fixes
+* :ghissue:`460`: Optimize KDTree
+* :ghissue:`477`: cKDTree for #460
+* :ghissue:`472`: Check for any side effects from new id remapping in w.sparse
+* :ghissue:`473`: update all user space functions for new w.remap_ids
+* :ghissue:`476`: redefining w.remap_ids to take only a single arg
+* :ghissue:`263`: Transition to scipy.spatial.cKDTree from scipy.spatial.KDTree
+* :ghissue:`414`: Travis build is killing nosetests
+* :ghissue:`335`: Weights transformation docs
+* :ghissue:`471`: add docstring example for w.remap_ids
+* :ghissue:`475`: Adding docstrings and error check to fix #471
+* :ghissue:`405`: ENH: Handling ids in W (Leave open for discussion)
+* :ghissue:`470`: fixing order of args for api consistency. 
+* :ghissue:`469`: Idfix for #449
+* :ghissue:`467`: redirect pysal.org to new dynamic landing page
+* :ghissue:`466`: design the grid for the notebooks
+* :ghissue:`464`: design new dynamic landing page for github.io
+* :ghissue:`465`: move news out of docs and into dynamic landing page
+* :ghissue:`468`: Move dynamic items out of sphinx docs and into dynamic landing page
+* :ghissue:`463`: updating gitignore
+* :ghissue:`451`: docs for higher_order_sp have wrong argument types
+* :ghissue:`462`: ENH: handle the case of an ergodic distribution where one state has 0 probability
+* :ghissue:`458`: ENH: Vagrantfile for PySAL devs and workshops
+* :ghissue:`447`: Clusterpy
+* :ghissue:`456`: BUG: fix for #451 handling W or WSP in higher_order_sp
+* :ghissue:`457`: This is a test to see if pull request notifications get sent out to the list
+* :ghissue:`454`: Foobar
+* :ghissue:`443`: Updating spreg: several minor bug and documentation fixes.
+* :ghissue:`453`: Resolving conflicts
+* :ghissue:`412`: On travis and darwin test_ml_error_regimes.py hangs 
+* :ghissue:`448`: Wsp
+* :ghissue:`435`: Will spatial durbin model be added in the near future?
+* :ghissue:`445`: ENH: unique qualitative color ramp. Also refactoring for future ipython deprecation of --pylab=inline
+* :ghissue:`446`: Wmd
+* :ghissue:`444`: Scipy dependency
+* :ghissue:`442`: Wmd
+* :ghissue:`441`: fixed kernel wmd for updated wmd structure
+* :ghissue:`440`: ENH: sidebar for Releases and installation doc update
+* :ghissue:`439`: - events
+* :ghissue:`438`: ENH: pruning to respect flake8
+* :ghissue:`436`: Scipy 0.14 induced breakage
+* :ghissue:`437`: BUG: fix for removal of scipy.stat._support #436
+* :ghissue:`408`: Use of `platform.system()` to determine platform
+* :ghissue:`403`: Scipy dependency
+* :ghissue:`434`: W Object Metadata Attribute
+* :ghissue:`433`: Rank markov
+* :ghissue:`424`: testing
+* :ghissue:`432`: Implementation of rank Markov classes
+* :ghissue:`431`: FOSS4G
+* :ghissue:`430`: Network
+* :ghissue:`429`: moving analytics out of wed class and into their own module
+* :ghissue:`420`: Local Moran's I,  I Attribute Undefined
+* :ghissue:`418`: Extended pysal.weights.user.build_lattice_shapefile 
+* :ghissue:`428`: Network
+* :ghissue:`427`: devel docs
+* :ghissue:`426`: dev docs
+* :ghissue:`425`: Viz2contrib
+* :ghissue:`423`: Update news.rst
+* :ghissue:`422`: ENH: Update doc instructions for napoleon dependency
+* :ghissue:`421`: Adding files used in some examples as per Luc's request.
+* :ghissue:`419`: Doc fixes 1.7
+* :ghissue:`393`: Doc fixes 1.7
+* :ghissue:`416`: Add hexagonal lattice option for lat2W
+* :ghissue:`417`: ENH hex lattice W for #416
+* :ghissue:`409`: add wiki page on viz module design
+* :ghissue:`413`: Temporary fix for https://github.com/pysal/pysal/issues/412
+* :ghissue:`415`: Temporarily commenting out tests that are blocking Travis.
+* :ghissue:`407`: Viz: Moving into contrib/viz in master
+* :ghissue:`406`: Viz: pruning old code and adding more examples for TAZ paper
+* :ghissue:`380`: Pep 8 and Line Length
+* :ghissue:`404`: version change
+* :ghissue:`401`: fixes #388
+* :ghissue:`388`: update testing procedures docs
+* :ghissue:`402`: release changes
+
+v<1.7.0>, 2014-01-29
+
+36d268f Philip Stephens -Merge pull request #400 from sjsrey/mldoc
+c2c4741 Serge Rey -Formatting ml docs
+685f5e3 Sergio Rey -Merge pull request #399 from sjsrey/master
+481ccb4 Serge Rey -correct thanks
+4a5cce3 Sergio Rey -Update index.txt
+1fe7aeb Philip Stephens -Merge pull request #396 from sjsrey/mldoc
+e731278 Serge Rey -EHN: fixing link to bleeding edge docs.
+e4e9930 Serge Rey -ENH: adding ml docs to api
+9b3c77e Serge Rey -Merge branch 'master' of github.com:pysal/pysal
+dda3c01 Philip Stephens -Merge pull request #389 from dfolch/master
+74b26d5 Philip Stephens -Merge pull request #392 from pedrovma/spreg17
+b47ba84 pedrovma -Bump.
+3d8504c Sergio Rey -Merge pull request #386 from pastephens/master
+f9b59ea Philip Stephens -Merge branch 'master' of https://github.com/pysal/pysal
+429e19e pedrovma -Upgrading to spreg 1.7.
+c698747 David Folch -removing legacy speedup hack that is no longer relevant
+88177d0 Sergio Rey -Merge pull request #387 from sjsrey/scipy13
+64a4089 Serge Rey -BUG: sorting ijs for asymmetries
+5539ef5 Sergio Rey -Merge pull request #1 from sjsrey/scipy13
+8a86951 Serge Rey -BUG: fixes for scipy .0.9.0 to 0.13.0 induced errors
+fe02796 Philip Stephens -tweaking travis to only run master commits
+8c1fbe8 jlaura -Merge pull request #385 from sjsrey/docupdate
+b71aedc Serge Rey -ENH: update date
+4f237e4 Sergio Rey -Merge pull request #384 from sjsrey/moran
+01da3be Serge Rey -ENH: Analytical p-values for Moran are two-tailed by default #337
+918fe60 Philip Stephens -further travis tweaks
+3920d73 Sergio Rey -Merge pull request #382 from sjsrey/st_docs
+d90bc70 Serge Rey -DOC: updating refs for concordance algorithm
+0db2790 Philip Stephens -tweaks to travis
+063e057 Philip Stephens -upgrading scipy on travis
+f90e742 Philip Stephens -Merge branch 'master' of https://github.com/pysal/pysal
+edc9c07 Dani Arribas-Bel -Merge pull request #379 from sjsrey/b244
+82479bb Serge Rey -BUG: fix for the comment https://github.com/pysal/pysal/issues/244#issuecomment-30055558
+57ba485 jlaura -Update README.md
+981ed31 Sergio Rey -Merge pull request #377 from darribas/master
+3320c39 darribas -Changing cmap default in plot_choropleth so every type defaults to its own adecuate colormap
+e063bee darribas -Fixing ignorance of argument cmap in base_choropleth_unique
+1f10906 Dani Arribas-Bel -Merge pull request #375 from sjsrey/viz
+94aa3e7 Dani Arribas-Bel -Merge pull request #376 from pedrovma/baltim_data
+7568b0b pedrovma -Adding Baltimore example dataset for use with LM models.
+5b23f89 Serge Rey -greys for classless map
+d4eae1e Dani Arribas-Bel -Merge pull request #374 from sjsrey/viz
+652440d Serge Rey -shrinking colorbar
+c17bf67 Sergio Rey -Merge pull request #373 from darribas/master
+a71c3cb darribas -Fixing minor conflict to merge darribas viz branch into darribas master
+ec27e30 Dani Arribas-Bel -Merge pull request #372 from sjsrey/viz
+8c03170 Serge Rey -option for resolution of output figs
+3fc5bd4 Philip Stephens -Merge branch 'master' of https://github.com/pysal/pysal
+2b5cb23 jlaura -Merge pull request #371 from sjsrey/geopandas
+469afa7 Serge Rey -fix for #370
+59cdafc jlaura -Merge pull request #369 from pedrovma/south_data
+6b88e13 jlaura -Merge pull request #368 from schmidtc/issue367
+40fe928 pedrovma -Adding south data to be used in ML doctests.
+bcc257e schmidtc -fixes #367
+87e057f jlaura -Merge pull request #366 from sjsrey/ml_lag
+a64eb27 Serge Rey -queen contiguity for nat.shp
+77add5c Sergio Rey -Merge pull request #365 from sjsrey/news
+82464ef Serge Rey -narsc workshop
+fd79424 Sergio Rey -Merge pull request #364 from sjsrey/news
+bc7f25a Serge Rey -Merge branch 'master' of https://github.com/sjsrey/pysal
+d669913 David Folch -Merge pull request #363 from sjsrey/maxp
+22f9e36 Serge Rey -update example for bug fix #362
+fac3b8a Serge Rey -- update tests for bug fix #362
+44b4b06 Sergio Rey -Merge pull request #1 from sjsrey/maxp
+1e6f1e5 Serge Rey -- fix for #362
+68ab3e9 Sergio Rey -Merge pull request #361 from sjsrey/components
+aa27c7e Serge Rey -doc test fix
+7c08208 Serge Rey -putting Graph class back in for component checking
+003b519 Serge Rey -alternative efficient component checker
+2080e62 Serge Rey -- fixing doc
+4fda442 Serge Rey -Merge branch 'components' of github.com:sjsrey/pysal into components
+e9e613b Serge Rey -reverting back to old component check
+83d855e Serge Rey -updating example
+9defd86 jlaura -Merge pull request #360 from sjsrey/components
+6f92335 Serge Rey -more efficient connectivity test
+ebde3d1 Dani Arribas-Bel -Adding try/except for ogr since it's only used to reprojection methods but not on the plotting toolkit
+5b170eb Sergio Rey -Merge pull request #356 from sjsrey/classification
+c9dac41 Serge Rey -- update unit tests for reshaping jenks caspal
+d9b06e2 Sergio Rey -Merge pull request #355 from sjsrey/cleanup/moran
+dc589e8 darribas -Adding caution note when plotting points to the notebook. Ideally, we wanna be able to build a PathCollection out of the XYs, but for now we rely on plt.scatter, which gets the job done but has some problems.
+2224b95 darribas -Including support for points in  base_choropleth_unique and base_choropleth_classless
+ac2d08a darribas -Modifying example to show how to do choropleth mapping on points
+270786e darribas -Adding support for choropleth plotting on point map objects (this may come from map_point_shp or from a simple matplotlib scatter
+e56697c Sergio Rey -Merge pull request #357 from jlaura/newstyle_wed
+4c67c2f Jay -errors in segmentation fixed
+512cc76 Serge Rey -have Jenks-Caspal bins be a one dimensional array - to be consistent with all other classifiers
+5254859 Philip Stephens -Merge branch 'master' of https://github.com/pysal/pysal
+788ecab Serge -pruning
+5b6b7b6 Serge -pruning
+eb7e9a1 Jay -bug fix and all pointers filled for external edges
+e47aa7a Jay -Node insertion, precursor to segmentation.
+18a44d1 darribas -*Replacing shp by map_obj in medium layer functionality. *Bringing everything else in line with it *Adding example for line colorig and mixing overlaying of points.
+bd041b1 darribas -Replacing shp_link by shp as input for medium and low-level layers. This brings much more flexibility and opens the door to plot formats other than shapefiles (e.g. geojson)
+c74a361 darribas -Adding IP notebook to exemplify and keep track of development of mapping module
+d23c882 darribas -Minor fixes
+4b82a76 darribas -New commit message* Replacing map_poly_shp_lonlat for map_poly_shp in base_choropleth_classif/unique/classless * removed 'projection' from base_choropleth_classif/unique/classless * Allow base_choropleth_classif/unique/classless to plot multi-part polygons properly * changes streamlined to generic plot_choropleth * Added dependency on pandas for rapid reindexing (this is done externally on the method _expand_values to it is easy to drop the dependency when neccesary/tim [...]
+7a0eaec darribas -Merge branch 'viz' of github.com:darribas/pysal into viz
+5536424 darribas -Merge branch 'master' of github.com:darribas/pysal
+e54ce16 Sergio Rey -Merge pull request #353 from darribas/master
+819ee60 darribas -Adding immediate todo on head of the file
+946772d darribas -Passing k to base_choropleth_classif from plot_choropleth. This should fix Issue #352
+f299b45 darribas -Merge branch 'master' of https://github.com/pysal/pysal
+f044f43 Jay -Added W generation
+5f48446 jlaura -Merge pull request #348 from sjsrey/master
+938a1ae Serge Rey -- adding nn stats to point based methods
+a86a051 Philip Stephens -removing dependency tracking service, it was ruby only
+1e24fde Philip Stephens -testing dependency tracking service
+3aa410c Philip Stephens -Merge pull request #347 from pedrovma/w_silence_island
+03990f6 pedrovma -Extending PR #310 (silence island warnings) to include w.transform.
+160001a Sergio Rey -Merge pull request #346 from jlaura/newstyle_wed
+44989f9 Sergio Rey -Merge pull request #345 from sjsrey/master
+2fd99b8 Sergio Rey -Update README.md
+bdcc6a8 Jay -NCSR with uniform distribution
+769aa03 Jay -Fixed snapping
+2561071 Jay -saved notebook and updated readme
+3784783 Jay -ReadMe for Changes
+019e16b Sergio Rey -Merge pull request #334 from jseabold/fix-build-example-dirs
+1889885 Skipper Seabold -BLD: Correctly install package_data dirs.
+ff4e355 Serge Rey -- assignments
+c5b0cc0 Serge Rey -- reorg
+a4f5642 Serge Rey -Merge branch 'network' of github.com:pysal/pysal into network
+a95fec8 jlaura -Update README.md
+1713145 Serge Rey -Merge branch 'master' of github.com:pysal/pysal into network
+ede75c0 Sergio Rey -Merge pull request #329 from jlaura/wed_polar
+7399cf2 Jay -Single-source shortest path notebook
+9eb3fc1 Philip Stephens -Merge pull request #331 from sjsrey/docfix
+ef9c82a Serge Rey -- sphinx doctest markup fix
+1e2b6b3 jlaura -Update README.md
+e19bffa jlaura -Merge pull request #330 from pysal/b328
+6afc30b Serge Rey -- tutorial doc fixes for #328
+c7239f1 Serge Rey -- b328 fix
+d5fec13 Serge Rey -- fix for #328  making all p-values one-tailed
+16b5e6e Jay -enumeration working with filaments
+9507bbc jlaura -Update README.md
+eef8eec Serge Rey -- stub for design of module
+2707d60 Jay -Filaments in polar coordinates
+b64f9e2 Serge Rey -Documentation for the development of network module
+b90876e Serge Rey -Merge branch 'network' of github.com:pysal/pysal into network
+ddad2a5 Philip Stephens -Merge pull request #326 from sjsrey/doc
+6b0cd08 Serge Rey -- update release schedule
+4cc7bca Jay -bisecting for single point working
+79c77d9 jlaura -Merge pull request #324 from pysal/bf_id
+9f4c7c9 Serge Rey -id is a keyword
+72b1f85 Sergio Rey -Merge pull request #323 from jlaura/network
+b5cdae0 Jay -fix to shp2graph
+846dce2 Jay -Brute force for point outside network
+d6c2ef4 Jay -Added length computation, alter global morans
+b7e1465 Jay -Added new pointer to reader/writer
+616d62d Jay -LISA and Global Morans on the network
+16f84d6 Jay -Added explicit point external to network warning
+34f4d8e Jay -update to the ipython notebook
+e359e59 Jay -JSON and cPickle Bianry WED Reader/Writer
+5373c82 Sergio Rey -Merge pull request #322 from jlaura/network
+059d99c Jay -wed into class, tests added
+aa5969d Sergio Rey -Merge pull request #320 from pastephens/master
+a18000b Philip Stephens -version added info
+5b8d490 Philip Stephens -typo
+d31a22a Philip Stephens -stubs for cg docs
+4dbdfe3 schmidtc -fixes #318
+35a0317 Jay -Merge branch 'master' of https://github.com/pysal/pysal into network
+77e8387 Jay -Merge branch 'geojson' of https://github.com/pysal/pysal into network
+ad670c5 Sergio Rey -Merge pull request #317 from pastephens/master
+628f27e Philip Stephens -merging local changes
+f9dcb3e Philip Stephens -simplified install instructions
+f2fab4c Serge Rey -- notebook on w construction for geojson
+830826b Serge Rey -prototyping W from geojson
+b10240d Serge Rey -created with "ogr2ogr -lco WRITE_BBOX=YES -f "GeoJSON" columbus.json columbus.shp"
+d546926 Philip Stephens -merging with pull
+d711011 darribas -Merge branch 'rod'
+8bef782 darribas -Merge branch 'rod' of https://github.com/pysal/pysal into rod
+03c1003 pedrovma -Merge pull request #315 from sjsrey/rod
+950fe8b Serge Rey -Replacing ROD with regular dictionary
+b1f009f Philip Stephens -Changes to release docs.
+028364a Sergio Rey -Update THANKS.txt
+94f5916 Sergio Rey -Update INSTALL.txt
+
+v<1.6.0>, 2013-07-31
+
+5fa9d09 darribas -silent_island_warning implemented for w_union
+6526c62 Sergio Rey -Update README.md
+ea826c1 darribas -silent_island_warning implemented for w_intersection
+335540a darribas -silent_island_warning implemented for w_difference
+0a156cb darribas -silent_island_warning implemented for w_symmetric_difference. Previous commit included support of silent_island_warning for WSP2W as well
+34d20d7 darribas -silent_island_warning implemented for w_clip
+499815d pedrovma -Test fixing...
+8778f75 pedrovma -Test fixing...
+a799a13 pedrovma -Test fixing...
+6482d81 pedrovma -Test fixing...
+2752b1b pedrovma -Test fixing...
+0c0a5bf pedrovma -Test fixing...
+bbf9dcb pedrovma -Test fixing...
+05c34ff pedrovma -Test fixing...
+8a3986a Serge Rey -- preparing for release, version updates
+9106cfe pedrovma -Matching travis results reg. precision issues.
+3cd0ce1 Serge Rey -- updating changelog
+74dadd6 pedrovma -Bump.
+c7774fb Serge Rey -- update THANKS.txt - testing travis for timing out
+cd98057 Serge Rey -- travis fix for multiprocessing permission error
+86702f8 Serge Rey -- start of changelog for 1.6
+3ee686d pedrovma -Reloading to check new results from Travis.
+2de1d21 Serge Rey -- docs
+ef72edc Serge Rey -- update docs
+0716581 Serge Rey -- deal with multiprocessing on travis
+b508c88 Serge Rey -- excluding network from 1.6 release
+ff13e31 pedrovma -Matching Travis results. Multiprocessing errors still an issue.
+5b916ba pedrovma -Adding Chow test on lambda and updating dynamics of regime_err_sep and regime_lag_sep in combom models.
+b6e687f darribas -Patch to include switch for island warning as proposed in #295. The method  is modified as well to include the switch
+7ea5f35 pedrovma -Fixing defaults
+62ca76b pedrovma -Updating documentation and checking if there are more than 2 regimes when regimes methods are used.
+3212249 pedrovma -Fixing documentation on 'name_regimes'
+a782d50 pedrovma -Updating tests for integration with pysal 1.6
+14f9181 pedrovma -Merging spreg_1.6 with my pysal fork.
+817f2c2 Serge Rey -- having build_lattice_shapefile also create the associated dbf file - useful for testing our contiguity builders against geoda since dbf is   required by the latter
+41d59a4 Serge Rey -- adding diagonal option to kernel weights in user.py
+506d808 Serge Rey -update when added
+b2ec3d4 Serge Rey -- updating api docs
+9d45496 Serge Rey -- example and doctests for spatial gini
+95635bb Serge Rey -updating release docs
+bd2f924 darribas -Fixing doctest of towsp method by including isinstance(wsp, ps.weights.weights.WSP)
+76183d7 darribas -Fixing doctest of towsp method by including type(wsp)
+0c54181 darribas -Adding  method in W that calls WSP class for convenience and elegance. Related to issue #226
+f3b23e8 Philip Stephens -adding source build to travis-ci
+60930e7 Philip Stephens -adding new url for downloads
+9bf7f5b Philip Stephens -modified release docs.
+f98d4a9 Philip Stephens -interim ci
+aa19028 Philip Stephens -Adding docs about installing in develop mode.
+674112f Philip Stephens -starting rewrite of install docs
+af0d9b3 Philip Stephens -working on doc tickets
+200e77e Serge Rey -handle ties in knnW in doctest
+d0d2dd2 Serge Rey -resetting README for pysal/pysal
+6afb6ac Serge Rey -- updating docs for new api in interation.py
+4c5572f Serge Rey -- updating tests for new api
+fabd16a Serge Rey -- refactored signatures to use numpy arrays rather than event class
+6367947 Serge Rey -- refactor knox for large samples
+5fad3b2 Serge Rey -- updating travis test
+06894d8 Serge Rey -- updated README
+8b06e63 Serge Rey -- so only i get email when i commit locally
+efbb7ff Serge Rey -- removing google pysal-dev circle
+9859bda Serge Rey -- turning off gmail circle
+51f6d3e Serge Rey -- fixing
+46b1084 Serge Rey --docos
+4e2c27a Philip Stephens -missing if statement added
+d1a83fd Serge Rey -- fixing docs
+8275d76 Serge Rey -- fix precision
+87ea5cc Philip Stephens -adding to authors and quick test fix for linux
+1cfb67f Serge Rey -cant easily remove idVariable, reverting
+5933d1e Serge Rey -removing idvariable from Distance - causes too many issues
+05f2573 Philip Stephens -removing coverage tests
+fcb8c6f Philip Stephens -Knox using KDTree.
+2237173 Serge Rey -with tests against previous implementation removed
+233e59a Serge Rey -speed comparison for change to query_pairs in kdtree
+fb78ea9 Serge Rey -removing test file
+4d04575 Philip Stephens -testing
+357a184 Serge Rey -second great idea
+1fafc2b Serge Rey -on a plane commit 1
+fef6eae Philip Stephens -fix
+86c17ac Serge Rey -- test file
+a619f62 Philip Stephens -interim ci
+1a9d881 Serge Rey -- knox test using kdtrees
+7459c44 Serge Rey -Fixing reference to missing shapefile Fixing one rounding error induced test
+5616b12 Serge Rey -refactored to avoid second loop in explicit queen or rook check
+d3d2f71 Philip Stephens -Revert "Changed doctest path calls to account for modified shapefile."
+da1d8a1 Philip Stephens -Changed doctest path calls to account for modified shapefile.
+f591c99 Philip Stephens -progress on permutations of knox for larger datasets
+8d31cde Serge Rey -Testing integration of spatialnet creation and reading into wed
+11de6f3 Jay -Fixed wed_modular.py
+077658a Serge Rey -adding new test case for wed extraction from a spatialnet shapefile
+bbb10b4 Philip Stephens -saving state of development
+44076b7 Serge Rey -- update doc test
+6fdd94d Serge Rey -- moved regions_from_graph into wed_modular - documented all functions and cleaned up
+5bd27c3 Serge Rey -- wrapping in functions
+3ad162f Serge Rey -- working version of wed_modular module - starting point for clean up
+2380f15 Philip Stephens -Copy of sphinx install docs. Closes #251
+5687700 Philip Stephens -tweaks to install instructions
+9ffd432 Serge Rey -- updating for switch from svn to git
+fdaf521 Philip Stephens -Fixing 250
+5ba4fdf Serge Rey -Fixes #249 Closes #249
+d89944d Pedro -Adding docs for each regimes estimator
+f03bb63 Serge Rey -- updating docs for spatial regimes in spreg
+a49d0f7 Philip Stephens -Adding info to setup script.
+1f27605 Philip Stephens -mainly docs
+04f8a31 Philip Stephens -Adding test coverage with nose, data collected and presented on coveralls.io
+6db978b Philip Stephens -last changes
+137e088 Philip Stephens -added bigdata parameter
+7ca81c2 Philip Stephens -got Knox stat working in alt form
+24c1fcc Philip Stephens -workign on refactoring the space-time matrices for the Knox test [ci-skip]
+28013f0 Serge Rey -- enumeration of cw edges for faces
+baa8f60 Serge Rey -- hole is now included and enumeration of links (cw) around nodes works for all nodes. - isolated nodes also handled in enumeration of links around nodes.
+33741c8 Serge Rey -- filaments inserted and pointers updated - have to add hole polygon and isolated nodes, but almost there!!!!!!!!!
+416d3db Serge Rey -- pointers updated for edges of connected components
+c34e274 Serge Rey -- convex/between edge test as start of testing for insertion of multiple   internal filaments in one region.
+78d96b1 Serge Rey -- filament insertion and pointer updates
+ced2c5b Serge Rey -- filament insertion (inc)
+ba4263f Jay -Logic roughed in for filaments [ci skip]
+cf3b0bc Jay -updated wed ipynb [ci skip]
+33ce81e Serge Rey -- refactoring of wed construction (incomplete)
+0fc16fc Jay -modular WED Pulled Apart 2 funcs in 1 cell
+bf73b90 Jay -modular WED
+3163377 Serge Rey -- new modular wed construction
+e50b31d Jay -added test_wed additions to test_wed2
+1cbc941 Serge Rey -- isolated nodes handled
+d28b97f Serge Rey -- isolated filament handled
+6188fd5 Serge Rey -- hole component handled
+a96040b Serge Rey -- getting connected components (current 14,15,16  and 25,26,27 are not   included)
+3aa31a5 Jay -Added boolean arg to include or exclude holes [ci skip]
+d07876d Jay -Filament identification [ci skip]
+0139ea5 Philip Stephens -Slight speed improvement getting rid of append calls in reading shapefile and building x,y lists.
+43010b5 Serge Rey -- fixed logic problem with enum for v1, starting on components
+8737918 Pedro -Adding more meaningful error message to inverse distance weights
+01f52f6 Serge Rey -- replacing code that got deleted previously
+7c4c6e1 Philip Stephens -Replacing deleted files.
+a8da725 Philip Stephens -added date support to spacetimeevents class, a date column to example dbf.
+90c4730 Philip Stephens -logic works, numeric test still failing
+b8e43e1 Philip Stephens -saving progress on interaction
+81f2408 Serge Rey -- handling external end-node-filament
+7de6253 Serge Rey -- adding end node filament handling - edge enumeration around node working
+f542b9a Serge -- adding end node filament handling - edge enumeration around node working
+d7e3a57 Philip Stephens -[ci skip] disabling nose-progressive so travis output looks best
+fe03013 Dani Arribas-Bel -Adding set of diversity indices to inequality module under _indices.py for now. Still lacks doctests, unittests, and a few others will be added
+951b6f5 Dani Arribas-Bel -Adding try/except to the import of Basemap to allow the use of the module when there is no Basemap installation
+89003eb Serge Rey -- adding wed for eberly example
+665ef22 Serge Rey -- fixed 7,2 failure
+71fc9ad Serge Rey -start of adding gini and other inequality measures
+f7b7bcc Phil Stephens -Adding nose-progressive plugin to test suite. Devs can run test suite with 'make test'.
+f5db7bf Serge Rey -- updating copyright
+07574b5 Serge Rey -- docs
+478d2cb Philip Stephens -Adding requirement. Removing redundancy.
+916a6ca Serge Rey -- more island check updates
+edd9960 Serge Rey -- more island check doctest changes
+ad1a91c Serge Rey -- updating doctests for island check
+ce77772 Serge Rey -- fixing doctests to incorporate new island warning
+554a30b Serge Rey -- silencing floating point warning
+4f76862 Serge Rey -- moving default contiguity builder back to binning from rtree
+b99665b Jay -Eberly
+d911344 Jay -mp removed, passing nosetests on my machine serial
+f005675 Serge Rey -improved binning algorithm for contiguity builder
+4a69557 Serge Rey -- double checking threshold in Distance Band - new example to show functionality
+7256f13 Serge Rey -- fix handling of idVariable for knnW
+31bb36e Jay -bug fixes [ci skip]
+a2d2dd4 Jay -WEberly - WED Building [ci skip]
+3abc55e Serge Rey -- fixing doctests for new check/reporting for islands
+756ac05 Serge Rey -- adding warning if islands exist upon W instantiation
+db097a6 Jay -Weberly, bug fix, c and cc link remaining
+d5cc6f9 Jay -All but start / end working
+033963d Jay -Integration to WEberly error fixed [ci skip]
+22b931a Serge Rey -- removing main for doc tests which can be run from nosetests. - updating testing docs
+bf753e9 Jay -Integration to WEberly started [ci skip]
+6506e07 Serge Rey -- typo
+aede375 Serge Rey -- replacing double quotes around multi word ids with strings joined with   underscores
+cf029e8 Serge Rey -- changes to wrap string ids in gwt writer - see https://github.com/pysal/pysal/issues/244#issuecomment-16707353
+626ac08 Serge Rey -- adding shapefile and variable name to gwt objects created in user space
+3c84bb0 Jay -Working version 4.19 [ci skip]
+7d77da9 darribas -Include warning in sp_att when rho is outside (-1, 1), ammends #243 although the true problem (pearsonr in diagnostics_tsls) will still raise an error
+3719d21 Jay -working WED [ci skip]
+b4ce294 Serge Rey -checking edges
+f4bb412 Jay -excessive print statements removed. ci skip
+9f7dee6 Jay -SUCCESS! ci skip
+9077615 Phil Stephens -Note, [ci skip] anywhere in your commit message causes Travis to NOT build a test run.
+cb072c4 Jay -getting there
+d3b36bc Serge Rey -correcting typo user told me about
+19ea051 Jay -trivial working
+b9ea577 Jay -eberly cycles - edge issue still
+d5153e3 Serge Rey -more refinement of wed from plannar graph
+edff44b Philip Stephens -adding git ignore file
+8093f21 Serge Rey -wed from minimum cycle basis
+b5bcead Serge Rey -handle filaments
+9a8927a Serge Rey -face extraction using horton algorithm
+10d66c1 Serge Rey -updating readme formatting
+59f3750 schmidtc -adding Universal newline support to csvReader, fixes #235
+09e813f Serge Rey -- updating notifications
+f8b0a26 Serge Rey -- fixing Distance.py and testing travis message
+d1ec0f2 Phil Stephens -quieting pip output and fix one doctest
+927e799 Phil Stephens -adding networkx, tweaks to travis config
+5971bb1 Serge Rey -neighbors from wed
+28f0e55 Serge Rey -adding robust segment intersection tests
+3bcac73 Serge Rey -adding doubly connected edge list to network module
+86f0fea darribas -Adding methods to read line and point shapefiles and improving the method to append different collections to one axes. Still in progress
+b61cb55 Serge Rey -- fixing introduced bug in knnW_arc
+801e78d Serge Rey -Handle point sets with large percentage of duplicate points
+dbafbc4 serge -update pointer to github
+427a620 Serge Rey -dealing with filaments
+23216ef Serge Rey -Fixed cw enumeration of links incident to a node
+0a51a53 Serge Rey -- readme
+5f4cab4 sjsrey -cw enumeration not working for all nodes
+f2e65d3 Serge Rey -- cw traversal of edges incident with a node
+90d150c sjsrey -- version debug for travis
+24598a8 sjsrey -- noting move to org
+9fb8a17 sjsrey -- fixing tutorial tests
+5a14f9e serge -- cleaning up weights tests
+6265b3b Serge Rey -- fixing doc tests
+7e8c4fe Serge Rey -- testing after move to org
+37fc8d4 Serge Rey -- testing post commit emails
+bed7f6e Phil Stephens -removed files
+eab2895 Phil Stephens -removed virginia_queen files
+bcef010 Serge Rey -- adding diagonal argument to Kernel weights - adding doctest evaluation to Distance.py
+02d27e9 Phil Stephens -adding libgeos-dev
+1126d71 Phil Stephens -pipe build output to null
+37dbb35 Phil Stephens -adding -y flag to pip uninstall
+06d56e9 Phil Stephens -adding libgeos_c install, pysal from pip
+4c53277 Phil Stephens -trying to quiet output, using Makefile
+74448e8 Phil Stephens -find setup.py
+4634fb1 Phil Stephens -test install in venv and build
+5d58723 Phil Stephens -working out travis-ci doctest configuration
+5e905d3 Phil Stephens -adding numpydoc
+33a5298 Phil Stephens -tweaks travis config
+5c85f50 Phil Stephens -tweaking service configs
+4ed1201 Josh Kalderimis -use the correct syntax for sysytem_site_packages
+954b6d2 Phil Stephens -stop!
+311eca8 Phil Stephens -ssp=true
+c601bca Phil Stephens -numpy first
+54b0afe Phil Stephens -ok, so travis is serious about not using system site packages.
+2b912cc Phil Stephens -doh
+28994df Phil Stephens -better yaml
+ce1d89e Phil Stephens -testing
+b535d3e Phil Stephens -testing
+440a772 Phil Stephens -tweaking pip requirements file
+34a74e2 Phil Stephens -tweaking travis file
+33b13aa Serge Rey -- new links
+8e09d7b Serge Rey -- setting up travis
+d33001e Sergio Rey -Update CHANGELOG.txt
+9d4de66 Serge Rey -- added authors
+ab672c9 Serge Rey -- modified knnW to speed up dict construction
+4edd2ab Serge Rey -- update cr
+39e6564 Phil Stephens -syncing install instructions with docs
+9e98db9 Phil Stephens -adding website favicon; chrome does not empty cache properly!!
+
+ * migration to github from svn
+   svn2git http://pysal.googlecode.com/svn --authors ~/Dropbox/pysal/src/pysal/authors.txt --verbose
+
+v<1.5.0>, 2013-01-31
+
+2013-01-29 20:36  phil.stphns
+
+	* doc/source/users/installation.txt: updating and simplifying user
+	  install instructions.
+
+2013-01-18 16:17  sjsrey
+
+	* Adding regime classes for all GM methods and OLS available in
+	  pysal.spreg, i.e. OLS, TSLS, spatial lag models, spatial error models
+	  and SARAR models. All tests and heteroskedasticity
+	  corrections/estimators currently available in pysal.spreg apply to
+	  regime models (e.g. White, HAC and KP-HET). With the regimes, it is
+	  possible to estimate models that have:
+	  -- Common or regime-specific error variance;
+	  -- Common or regime-specific coefficients for all variables or for a
+	  selection of variables;
+	  -- Common or regime-specific constant term;
+	  - Various refactoring to streamline code base and improve long term
+	    maintainability
+	    - Contributions from Luc Anselin, Pedro Amaral, Daniel Arribas-Bel
+	      and David Folch
+
+2013-01-18 14:08  schmidtc
+
+	* pysal/common.py: implemented deepcopy for ROD, see #237
+
+2013-01-08 12:28  dreamessence
+
+	* pysal/contrib/spatialnet/__init__.py: Adding __init__.py to make it importable
+
+2012-12-31 22:53  schmidtc
+
+	* pysal/core/IOHandlers/gwt.py: adding kwt support, see #232
+
+2012-12-21 20:53  sjsrey at gmail.com
+
+	* pysal/__init__.py, pysal/cg/rtree.py,
+	  pysal/contrib/weights_viewer/weights_viewer.py,
+	  pysal/weights/weights.py: - turning off randomization in rtree
+
+2012-12-06 16:34  dfolch
+
+	* pysal/contrib/shapely_ext.py: adding unary_union() to shapely
+	  contrib; note this only works with shapely version 1.2.16 or higher
+
+
+2012-11-29 13:39  dreamessence 
+
+	* pysal/contrib/viz/mapping.py: Added option in setup_ax to pass
+	  pre-existing axes object to append.  It is optional and it enables,
+	  for instance, to embed several different maps in one single figure
+
+2012-11-20 00:23  dfolch
+
+	* pysal/contrib/shapely_ext.py: adding shapely's cascaded_union
+	  function to contrib
+
+2012-11-12 18:08  dreamessence
+
+	* pysal/contrib/viz/mapping.py: -Adding transCRS method to convert
+	  points from one prj to another arbitrary one -Adding map_poly_shp to
+	  be able to plot shapefiles in arbitrary projections, not needing to
+	  be in lonlat and not depending on Basemap
+
+2012-11-09 15:40  sjsrey at gmail.com
+
+	* pysal/weights/weights.py:
+	  - distinguish between intrinsic symmetry and general symmetry
+	
+2012-11-02 17:48  schmidtc
+
+	* pysal/weights/user.py, pysal/weights/util.py: Adding Minkowski
+	  p-norm to min_threshold_dist_from_shapefile, see issue #221
+
+2012-10-19 22:35  sjsrey at gmail.com
+
+	* pysal/weights/weights.py:
+	  explicitly prohibit chaining of transformations - all
+	  transformations are only applied to the original weights at
+	  instantiation
+
+2012-10-19 17:38  sjsrey at gmail.com
+
+	* pysal/spatial_dynamics/markov.py:
+	  - fixing bug in permutation matrix to reorder kronecker product in
+	    the join test
+
+2012-10-17 17:55  sjsrey at gmail.com
+
+	* pysal/weights/util.py:
+	  -
+	  higher order contiguity for WSP objects
+
+2012-10-17 15:43  sjsrey at gmail.com
+
+	* pysal/weights/user.py:
+	  -
+	  id_order attribute was always NONE for wsp created from
+	  
+	  queen/rook_from_shapefile with sparse=True
+
+2012-10-16 19:25  schmidtc
+
+	* pysal/weights/util.py: improving memory usage of
+	  get_points_array_from_shapefile, no need to read entire shapefile
+	  into memory.
+
+2012-10-15 00:44  dreamessence
+
+	* pysal/contrib/viz/mapping.py: First attempt to refactor Serge's code
+	  for choropleth mapping.  It now offers a more general and flexible
+	  architecture.  Still lots of work and extensions left.  The module
+	  is explained in a notebook available as a gist at
+	  https://gist.github.com/3890284 and viewable at
+	  http://nbviewer.ipython.org/3890284/
+
+2012-10-12 18:34  schmidtc
+
+	* pysal/contrib/spatialnet/spatialnet.py: modified SpatialNetwork.snap
+	  to calculate and return the snapped point
+
+2012-10-12 17:05  dfolch
+
+	* pysal/contrib/viz/mapping.py: made edits to unique_values_map to
+	  allow for unlimited number of categories; I commented out the
+	  previous code so these changes can easily be rolled back if it
+	  breaks something somewhere else
+
+2012-10-12 15:03  schmidtc
+
+	* pysal/cg/segmentLocator.py: Fixing issue with segmentLocator, when
+	  query point is extreamly far from the grid boundary, overflow errors
+	  were causing the KDTree to not return any results.  Changed both
+	  KDtree's to use Float64 and share the same data.  Previously,
+	  cKDTree was using float64 and KDtree was using int32.
+
+2012-10-11 08:12  dreamessence
+
+	* pysal/contrib/viz/__init__.py: Adding __init__.py to viz module to
+	  make it importable
+
+2012-08-31 02:57  phil.stphns
+
+	* pysal/spreg/tests/test_diagnostics.py,
+	  pysal/spreg/tests/test_diagnostics_sp.py,
+	  pysal/spreg/tests/test_diagnostics_tsls.py,
+	  pysal/spreg/tests/test_error_sp.py,
+	  pysal/spreg/tests/test_error_sp_het.py,
+	  pysal/spreg/tests/test_error_sp_het_sparse.py,
+	  pysal/spreg/tests/test_error_sp_hom.py,
+	  pysal/spreg/tests/test_error_sp_hom_sparse.py,
+	  pysal/spreg/tests/test_error_sp_sparse.py,
+	  pysal/spreg/tests/test_ols.py,
+	  pysal/spreg/tests/test_ols_sparse.py,
+	  pysal/spreg/tests/test_probit.py,
+	  pysal/spreg/tests/test_twosls.py,
+	  pysal/spreg/tests/test_twosls_sp.py,
+	  pysal/spreg/tests/test_twosls_sp_sparse.py,
+	  pysal/spreg/tests/test_twosls_sparse.py:
+	  - autopep8 -iv spreg/tests/*.py - nosetests pysal - no fixes needed
+
+2012-08-31 01:16  phil.stphns
+
+	* pysal/spreg/diagnostics.py,
+	  pysal/spreg/diagnostics_sp.py,
+	  pysal/spreg/diagnostics_tsls.py,
+	  pysal/spreg/error_sp.py,
+	  pysal/spreg/error_sp_het.py,
+	  pysal/spreg/error_sp_hom.py,
+	  pysal/spreg/ols.py,
+	  pysal/spreg/probit.py,
+	  pysal/spreg/robust.py,
+	  pysal/spreg/summary_output.py,
+	  pysal/spreg/twosls.py,
+	  pysal/spreg/twosls_sp.py,
+	  pysal/spreg/user_output.py,
+	  pysal/spreg/utils.py:
+	  -
+	  autopep8 -iv spreg/*.py - fixed autopep8-introduced doctest failures
+	  - fixed lingering scientific notation test failures
+
+2012-08-31 00:26  phil.stphns
+
+	* pysal/esda/gamma.py,
+	  pysal/esda/join_counts.py,
+	  pysal/esda/mapclassify.py,
+	  pysal/esda/mixture_smoothing.py,
+	  pysal/esda/moran.py,
+	  pysal/esda/smoothing.py:
+	  -
+	  autopep8 fixes - make sure to run unit and doc tests before
+	  committing - one autofix breaks long lines, and thus breaks some
+	  doctests; must be
+	  
+	  fixed manually
+
+2012-08-31 00:10  phil.stphns
+
+	* pysal/esda/getisord.py:
+	  -
+	  using autopep8 module - call: autopep8 -vi getisord.py
+
+2012-08-30 23:18  phil.stphns
+
+	* pysal/esda/geary.py:
+	  -
+	  pep8 clear - removed wildcard import
+
+2012-08-26 22:53  phil.stphns
+
+	* pysal/spatial_dynamics/directional.py,
+	  pysal/spatial_dynamics/ergodic.py,
+	  pysal/spatial_dynamics/interaction.py,
+	  pysal/spatial_dynamics/markov.py,
+	  pysal/spatial_dynamics/rank.py,
+	  pysal/spatial_dynamics/util.py:
+	  -pep8 and pylint fixes -clean wildcard imports
+
+2012-08-26 21:03  phil.stphns
+
+	* pysal/region/maxp.py,
+	  pysal/region/randomregion.py:
+	  -
+	  cleaning up imports
+
+2012-08-26 18:16  phil.stphns
+
+	* pysal/region/maxp.py:
+	  -
+	  style fixes with pep8 - cmd line call: pep8 --show-source
+	  --ignore=E128,E302,E501,E502,W293,W291
+	  
+	  region/maxp.py
+
+2012-08-26 17:47  phil.stphns
+
+	* pysal/common.py,
+	  pysal/examples/README.txt,
+	  pysal/region/components.py,
+	  pysal/region/randomregion.py:
+	  -
+	  using pep8 module
+
+2012-08-24 20:47  schmidtc
+
+	* pysal/network,
+	  pysal/network/__init__.py: adding network module
+
+2012-08-21 22:53  phil.stphns
+
+	* doc/source/_templates/ganalytics_layout.html:
+	  -
+	  updating analytics tracker
+
+2012-08-17 17:11  sjsrey at gmail.com
+
+	* pysal/contrib/spatialnet/util.py:
+	  -
+	  more utility functions for pysal
+	  -
+	  networkx interop
+
+2012-08-16 23:44  phil.stphns
+
+	* setup.py:
+	  -
+	  tweak for build names
+
+2012-08-12 13:15  dreamessence
+
+	* doc/source/index.txt:
+	  Adding announcement links to landing page
+
+2012-08-11 17:38  sjsrey
+
+	* LICENSE.txt:
+	  -
+	  update
+
+2012-08-09 17:19  phil.stphns
+
+	* doc/source/developers/pep/pep-0008.txt:
+	  updating
+	  spatial
+	  db
+	  pep
+
+2012-08-08 17:22  schmidtc
+
+	* pysal/weights/Distance.py:
+	  Fixing bug in Kernel weights that causes erroneous results when
+	  using ArcDistances.  See issue #218.
+
+2012-08-04 21:14  sjsrey
+
+	* doc/source/developers/docs/index.txt:
+	  -
+	  fixed
+	  links
+
+2012-08-04 21:03  sjsrey
+
+	* doc/source/developers/docs/index.txt:
+	  -
+	  hints
+	  on
+	  editing
+	  docs
+	  
+
+2012-08-04 20:14  phil.stphns
+
+	* doc/source/developers/pep/pep-0011.txt:
+	  note
+	  about
+	  travis-ci
+	  and
+	  github
+
+2012-08-04 16:24  sjsrey
+
+	* doc/source/developers/pep/pep-0011.txt:
+	  PEP-0011
+	  
+
+2012-08-04 16:22  sjsrey
+
+	* doc/source/developers/pep/index.txt:
+	  -
+	  PEP 0011 Move from Google Code to Github
+
+2012-08-04 04:42  sjsrey
+
+	* doc/source/index.txt:
+	  - broken link
+
+2012-08-04 04:35  sjsrey
+
+	* doc/source/index.txt:
+	  - news updates
+
+2012-08-04 04:24  sjsrey
+
+	* doc/source/index.txt:
+	  - reorg
+
+2012-08-02 02:32  sjsrey
+
+	* pysal/examples/__init__.py:
+	  -
+	  moving back to r1049 but leaving r1310 in history for ideas on
+	  moving forward - we need to distinguish between using examples in
+	  the doctests (which the users see) and for the developers since we
+	  are no longer distributing examples with the source
+
+2012-08-02 01:49  sjsrey
+
+	* pysal/examples/__init__.py:
+	  -
+	  correct conditional this time (i hope)
+
+2012-08-02 01:36  sjsrey
+
+	* pysal/examples/__init__.py:
+	  -
+	  compromise
+	  -
+	  returns pth rather than None if file does not exist
+
+2012-08-02 00:58  sjsrey
+
+	* pysal/examples/__init__.py:
+	  -
+	  link to examples download
+
+2012-08-02 00:42  sjsrey
+
+	* pysal/examples/__init__.py:
+	  -
+	  explicit check if examples are actually present
+
+
+
+
+
+v<1.4.0>, 2012-07-31
+
+2013-01-31 
+
+
+2012-07-31 21:30  sjsrey at gmail.com
+
+	* pysal/spatial_dynamics/ergodic.py,
+	  pysal/spatial_dynamics/rank.py:
+	  - docs/example
+
+2012-07-31 20:47  sjsrey at gmail.com
+
+	* pysal/spreg/tests/test_error_sp_hom.py:
+	  - rounding/precision issue
+
+2012-07-31 20:27  sjsrey at gmail.com
+
+	* pysal/spatial_dynamics/directional.py,
+	  pysal/spatial_dynamics/tests/test_directional.py:
+	  - fixing pvalue bug
+
+2012-07-31 20:24  sjsrey at gmail.com
+
+	* doc/source/users/tutorials/dynamics.txt:
+	  - fixed rounding problem
+
+2012-07-31 19:58  sjsrey at gmail.com
+
+	* doc/source/index.txt,
+	  doc/source/users/tutorials/autocorrelation.txt,
+	  doc/source/users/tutorials/dynamics.txt,
+	  doc/source/users/tutorials/econometrics.txt,
+	  doc/source/users/tutorials/fileio.txt,
+	  doc/source/users/tutorials/index.txt,
+	  doc/source/users/tutorials/intro.txt,
+	  doc/source/users/tutorials/region.txt,
+	  doc/source/users/tutorials/smoothing.txt,
+	  doc/source/users/tutorials/weights.txt:
+	  - adding links to API for more details
+
+2012-07-31 19:05  sjsrey at gmail.com
+
+	* pysal/spatial_dynamics/directional.py:
+	  - consistency on pvalues for randomization
+
+2012-07-31 19:02  sjsrey at gmail.com
+
+	* pysal/weights/Distance.py:
+	  - docs
+
+2012-07-31 18:58  sjsrey at gmail.com
+
+	* doc/source/users/tutorials/dynamics.txt:
+	  - seed issue 
+
+2012-07-31 18:36  sjsrey at gmail.com
+
+	* doc/source/users/tutorials/autocorrelation.txt:
+	  - closing issue 214
+
+2012-07-31 18:19  sjsrey at gmail.com
+
+	* doc/source/users/tutorials/autocorrelation.txt:
+	  - fixing random.seed issues in doctests
+
+2012-07-31 17:31  schmidtc
+
+	* pysal/cg/shapes.py,
+	  pysal/cg/tests/test_shapes.py:
+	  Fixing small bugs with VerticleLines and testing
+
+2012-07-31 16:26  sjsrey at gmail.com
+
+	* doc/source/developers/guidelines.txt,
+	  doc/source/users/installation.txt:
+	  - updating docs 
+
+
+
+2012-07-26 15:24  schmidtc
+
+	* pysal/core/FileIO.py,
+	  pysal/core/Tables.py:
+	 Fixing issue #190
+
+2012-07-24 16:32  schmidtc
+
+	* pysal/cg/sphere.py:
+	Allowing linear2arcdist function to maintin 'inf', this allows compatability with Scipy's KDTree and addresses issue 208.  
+
+2012-07-24 16:07  schmidtc
+
+	* pysal/cg/locators.py,
+	  pysal/core/FileIO.py,
+	  pysal/core/Tables.py:
+	  Addressing issue 212, renaming nested and private classes to begin with an underscore.  By default sphinx does not try to document private object, which avoids what appears to be a a bug in Sphinx.
+
+2012-07-17 22:06  sjsrey at gmail.com
+
+	* pysal/spreg/probit.py: pedro doc fixes
+
+2012-07-17 15:07  schmidtc
+
+	* pysal/cg/segmentLocator.py,
+	  pysal/cg/tests/test_segmentLocator.py: Cleaned up fix for Issue 211
+
+2012-07-13 22:50  sjsrey at gmail.com
+
+	* doc/source/users/tutorials/autocorrelation.txt: fixing sphinx weirdness in footnotes 
+
+2012-07-13 22:37  sjsrey at gmail.com
+
+	* doc/source/users/tutorials/autocorrelation.txt: update for new default parameter values
+
+2012-07-13 22:13  sjsrey at gmail.com
+
+	* pysal/esda/geary.py,
+	  pysal/esda/tests/test_geary.py: consistency on transformation and permutation args
+
+2012-07-13 19:59  sjsrey at gmail.com
+
+	* doc/source/users/tutorials/dynamics.txt,
+	  pysal/__init__.py,
+	  pysal/spatial_dynamics/rank.py: - update user tutorial and __init__
+
+2012-07-13 19:33  sjsrey at gmail.com
+
+	* pysal/spatial_dynamics/rank.py,
+	  pysal/spatial_dynamics/tests/test_rank.py: - O(n log n) algorithm for spatial tau (old one was O(n^2)) - closing ticket http://code.google.com/p/pysal/issues/detail?id=83
+
+2012-07-13 17:57  schmidtc
+
+	* pysal/core/IOHandlers/pyDbfIO.py,
+	  pysal/core/IOHandlers/tests/test_pyDbfIO.py: Adding better support for writing Null values to DBF.  See issue #193
+
+2012-07-13 15:55  schmidtc
+
+	* pysal/core/util/shapefile.py,
+	  pysal/core/util/tests/test_shapefile.py: Cleaning up support for ZM points, polylines and polygons in the shapefile reader. Added unit tests for same.
+
+2012-07-13 15:42  sjsrey at gmail.com
+
+	* doc/source/library/esda/gamma.txt: - update version info 
+
+2012-07-13 15:37  sjsrey at gmail.com
+
+	* doc/source/library/esda/gamma.txt,
+	  doc/source/library/esda/index.txt: - adding gamma to api docs
+
+2012-07-13 00:21  sjsrey at gmail.com
+
+	* pysal/esda/gamma.py: optimizations 
+
+2012-07-12 21:28  schmidtc
+
+	* pysal/core/IOHandlers/pyDbfIO.py: Disabling mising value warning for DBF files.  See issue #185
+
+2012-07-12 21:07  schmidtc
+
+	* pysal/cg/segmentLocator.py,
+	  pysal/cg/shapes.py,
+	  pysal/cg/tests/test_segmentLocator.py,
+	  pysal/contrib/spatialnet/spatialnet.py: Adding unittests for segmentLocator (including one that fails see #211). Added VerticalLine class to represent verticle LineSegments. Updated __all__ in segmentLocator. Minor comment formatting in spatialnet.
+
+2012-07-12 19:41  lanselin at gmail.com
+
+	* doc/source/users/tutorials/autocorrelation.txt: tutorial for gamma index
+
+2012-07-12 19:40  lanselin at gmail.com
+
+	* pysal/esda/gamma.py,
+	  pysal/esda/tests/test_gamma.py: gamma with generic function
+
+2012-07-12 14:17  sjsrey at gmail.com
+
+	* pysal/__init__.py: - gamma index added
+
+2012-07-12 03:14  lanselin at gmail.com
+
+	* pysal/esda/tests/test_gamma.py: tests for gamma
+
+2012-07-12 03:13  lanselin at gmail.com
+
+	* pysal/esda/gamma.py: gamma index of spatial autocorrelation
+
+2012-07-12 03:11  lanselin at gmail.com
+
+	* pysal/esda/__init__.py: gamma index 
+
+2012-07-11 21:32  lanselin at gmail.com
+
+	* pysal/esda/join_counts.py,
+	  pysal/esda/tests/test_join_counts.py: join counts without analytical results, new permutation 
+
+2012-07-11 21:32  lanselin at gmail.com
+
+	* doc/source/users/tutorials/autocorrelation.txt: updated docs for join counts
+
+2012-07-10 21:13  lanselin at gmail.com
+
+	* doc/source/users/tutorials/autocorrelation.txt: docs for join count in autocorrelation
+
+2012-07-10 21:12  lanselin at gmail.com
+
+	* pysal/esda/join_counts.py,
+	  pysal/esda/tests/test_join_counts.py: additional test in join counts, docs added
+
+2012-07-10 19:24  lanselin at gmail.com
+
+	* pysal/esda/join_counts.py,
+	  pysal/esda/tests/test_join_counts.py: join counts with permutations for BB, updated tests to include permutations
+
+2012-07-09 04:22  sjsrey
+
+	* pysal/weights/weights.py:
+	  - fixing bug luc identified with regard to mean_neighbor property.  wrong key name was used in cache dictionary.  
+
+2012-07-07 17:00  sjsrey
+
+	* pysal/__init__.py: update for spreg and contrib inclusion
+
+
+2012-07-07 16:51  sjsrey
+
+	* pysal/spatial_dynamics/markov.py: - updating doc strings
+
+2012-07-07 16:17  sjsrey
+
+	* pysal/spreg/probit.py:
+	  - fixing doc string and refs 
+
+2012-07-06 21:58  dfolch
+
+	* doc/source/library/spreg/probit.txt: txt file to include probit in the HTML docs
+
+2012-07-06 21:11  dfolch
+
+	* pysal/spreg/tests/test_ols_sparse.py: fixing unittest error; still no solution to scientific notation formatting in doctests
+
+2012-07-06 20:24  dfolch
+
+	* pysal/spreg/__init__.py,
+	  pysal/spreg/diagnostics.py,
+	  pysal/spreg/diagnostics_sp.py,
+	  pysal/spreg/diagnostics_tsls.py,
+	  pysal/spreg/error_sp.py,
+	  pysal/spreg/error_sp_het.py,
+	  pysal/spreg/error_sp_hom.py,
+	  pysal/spreg/ols.py,
+	  pysal/spreg/probit.py,
+	  pysal/spreg/robust.py,
+	  pysal/spreg/summary_output.py,
+	  pysal/spreg/tests/test_diagnostics.py,
+	  pysal/spreg/tests/test_diagnostics_sp.py,
+	  pysal/spreg/tests/test_diagnostics_tsls.py,
+	  pysal/spreg/tests/test_error_sp.py,
+	  pysal/spreg/tests/test_error_sp_het.py,
+	  pysal/spreg/tests/test_error_sp_het_sparse.py,
+	  pysal/spreg/tests/test_error_sp_hom.py,
+	  pysal/spreg/tests/test_error_sp_hom_sparse.py,
+	  pysal/spreg/tests/test_error_sp_sparse.py,
+	  pysal/spreg/tests/test_ols.py,
+	  pysal/spreg/tests/test_ols_sparse.py,
+	  pysal/spreg/tests/test_probit.py,
+	  pysal/spreg/tests/test_twosls.py,
+	  pysal/spreg/tests/test_twosls_sp.py,
+	  pysal/spreg/tests/test_twosls_sp_sparse.py,
+	  pysal/spreg/tests/test_twosls_sparse.py,
+	  pysal/spreg/twosls.py,
+	  pysal/spreg/twosls_sp.py,
+	  pysal/spreg/user_output.py,
+	  pysal/spreg/utils.py: -Adding classic probit regression class -Adding spatial diagnostics for probit -Allowing x parameter to be either a numpy array or scipy sparse matrix in all regression classes -Adding additional unit tests -Various refactoring to streamline code base and improve long term maintainability -Contributions from Luc Anselin, Pedro Amaral, Daniel Arribas-Bel, David Folch and Nicholas Malizia
+
+2012-07-03 18:59  sjsrey
+
+	* pysal/spatial_dynamics/markov.py,
+	  pysal/spatial_dynamics/tests/test_markov.py: - refactor significant move_types for clarity and fixing a logic bug
+
+
+2012-06-20 04:50  sjsrey at gmail.com
+
+	* doc/source/developers/docs/index.txt:
+	  - added section for how to write a tutorial for new modules 
+2012-06-20 02:45  sjsrey
+
+	* doc/source/developers/docs/index.txt:
+	  - updating doc building instructions
+
+2012-06-06 18:58  phil.stphns
+
+	* .build-osx10.6-py26.sh,
+	  .build-osx10.6-py27.sh:
+	  - local modifications for Frameworks builds
+
+2012-06-05 20:56  phil.stphns
+
+	* .build-osx10.6-py26.sh,
+	  .build-osx10.6-py27.sh,
+	  .build-osx10.7-py27.sh, .runTests.sh:
+	  - adding experimental build and test scripts.
+
+2012-06-05 16:43  schmidtc
+
+	* pysal/cg/segmentLocator.py,
+	  pysal/cg/shapes.py,
+	  pysal/contrib/spatialnet/spatialnet.py:
+	  initial snap function for spatialnet
+
+2012-06-05 16:38  schmidtc
+
+	* pysal/core/IOHandlers/pyShpIO.py,
+	  pysal/core/util/shapefile.py,
+	  pysal/core/util/tests/test_shapefile.py: Adding PolygonZ support to Shapefile IO
+
+2012-05-24 21:57  sjsrey
+
+	* pysal/esda/mapclassify.py: - truncate option for fisher_jenks sampling
+
+2012-05-15 20:08  schmidtc
+
+	* pysal/cg/segmentLocator.py,
+	  pysal/cg/shapes.py: Added query to SegmentLocator
+
+2012-05-11 22:17  sjsrey
+
+	* pysal/esda/mapclassify.py: - added Fisher_Jenks_Sampled
+
+2012-05-11 00:45  mhwang4
+
+	* pysal/contrib/network/distances.csv,
+	  pysal/contrib/network/simulator.py,
+	  pysal/contrib/network/test_lincs.py,
+	  pysal/contrib/network/test_weights.py,
+	  pysal/contrib/network/weights.py: adding test code for distance-file-based weight generator; updates on simulator 
+
+2012-05-10 22:37  mhwang4
+
+	* pysal/contrib/network/klincs.py,
+	  pysal/contrib/network/lincs.py,
+	  pysal/contrib/network/test_klincs.py,
+	  pysal/contrib/network/test_lincs.py: adding test code for network-constrained lisa
+
+2012-05-10 21:11  mhwang4
+
+	* pysal/contrib/network/crimes.dbf,
+	  pysal/contrib/network/crimes.shp,
+	  pysal/contrib/network/crimes.shx,
+	  pysal/contrib/network/test_klincs.py: test code for local K function
+
+2012-05-08 18:05  mhwang4
+
+	* pysal/contrib/network/streets.dbf,
+	  pysal/contrib/network/streets.shp,
+	  pysal/contrib/network/streets.shx,
+	  pysal/contrib/network/test_network.py: adding a test data set
+
+2012-05-08 16:34  schmidtc
+
+	* pysal/cg/segmentLocator.py,
+	  pysal/cg/shapes.py,
+	  pysal/core/FileIO.py: Adding start of segmentLocator, adding minimal slicing support to FileIO
+
+
+2012-05-03 17:03  schmidtc
+
+	* pysal/cg/shapes.py,
+	  pysal/cg/tests/test_shapes.py: Adding solve for x support to Line. Cleaning up LineSegment's Line method.
+
+2012-04-20 17:48  schmidtc
+
+	* pysal/cg/shapes.py: adding arclen method to Chain object.
+
+2012-04-19 16:37  dfolch
+
+	* pysal/weights/Distance.py: reducing number of distance queries in Kernel from n^2 to n
+
+2012-04-17 21:20  schmidtc
+
+	* pysal/contrib/spatialnet/spatialnet.py: adding distance
+
+2012-04-17 19:46  schmidtc
+
+	* pysal/contrib/spatialnet/cleanNetShp.py,
+	  pysal/contrib/spatialnet/spatialnet.py: Adding FNODE/TNODE to dbf when cleaning shapefiles. Added util function createSpatialNetworkShapefile Added SpatialNetwork class
+
+2012-04-17 15:32  schmidtc
+
+	* pysal/contrib/weights_viewer/weights_viewer.py: "revert back to the background when the point is outside of any unit" - request from serge
+
+2012-04-11 02:50  schmidtc
+
+	* pysal/cg/kdtree.py: Fixing user submitted bug,issue #206.
+
+2012-04-10 22:00  dreamessence
+
+	* pysal/weights/Wsets.py: Including w_clip in __all__
+
+2012-04-10 21:58  dreamessence
+
+	* pysal/weights/Wsets.py: Adding w_clip method to clip W matrices (sparse and/or pysal.W) with a second (binary) matrix
+
+2012-04-10 21:57  schmidtc
+
+	* pysal/contrib/spatialnet/beth_roads.shp,
+	  pysal/contrib/spatialnet/beth_roads.shx,
+	  pysal/contrib/spatialnet/cleanNetShp.py: Adding network shapefile cleaning tools and temporary sample data.  
+
+2012-04-10 21:48  sjsrey
+
+	* pysal/contrib/spatialnet/util.py: - more stubs for util mod
+
+2012-04-10 19:58  sjsrey
+
+	* pysal/contrib/spatialnet/util.py: - start of util module
+
+2012-04-03 20:43  sjsrey
+
+	* pysal/contrib/spatialnet: - new contrib module - integrate geodanet functional (move over from network) - wrap networkx
+
+2012-04-03 01:21  schmidtc
+
+	* pysal/cg/rtree.py: Adding pickle support to RTree
+
+
+2012-03-28 23:27  mhwang4 
+	* pysal/contrib/network/kernel.py,
+	  pysal/contrib/network/kfuncs.py,
+	  pysal/contrib/network/test_access.py,
+	  pysal/contrib/network/test_kernel.py,
+	  pysal/contrib/network/test_kfuncs.py,
+	  pysal/contrib/network/test_network.py: adding examples for network-related modules
+
+2012-03-19 15:33  schmidtc
+
+	* pysal/core/IOHandlers/pyDbfIO.py: Adding support for writing Null dates
+
+2012-03-14 21:04  phil.stphns
+
+	* doc/source/developers/testing.txt,
+	  doc/source/users/installation.txt: Small changes to user install instructions to highlight the ease with which pysal can be installed ;-> And, developer instructions for running the test suite from within a session if desired.
+
+2012-03-03 00:00  phil.stphns
+
+	* pysal/spatial_dynamics/markov.py: Potential source of dev docs pngmath latex fail.
+
+2012-02-24 23:29  mhwang4
+
+	* pysal/contrib/network/network.py: fixing bug in network.py
+
+2012-02-20 19:50  phil.stphns
+
+	* doc/source/developers/py3k.txt: Developer doc to explain setting up PySAL for Python3.
+
+2012-02-20 16:18  schmidtc
+
+	* pysal/esda/__init__.py: removing invalid __all__ from esda's init.  See #194
+
+2012-02-16 23:15  phil.stphns
+
+	* pysal/__init__.py,
+	  pysal/core/util/shapefile.py: Minor changes to imports that cause py3tool to stumble.
+
+2012-02-15 23:16  phil.stphns
+
+	* doc/source/developers/py3k.txt,
+	  doc/source/users/installation.txt: Modified links in user installation instructions.  Added more steps for developers setting up Python3 dev environments on OSX.
+
+2012-02-14 21:55  schmidtc
+
+	* pysal/esda/getisord.py: fixing side effect caused when changing the shape of y, creating a new view with reshape instead.
+
+2012-02-14 21:21  schmidtc
+
+	* pysal/esda/getisord.py: optimizing G_Local
+
+2012-02-14 20:37  schmidtc
+
+	* pysal/esda/getisord.py: optimizing G
+
+2012-02-14 00:21  phil.stphns
+
+	* doc/source/developers/index.txt,
+	  doc/source/developers/py3k.txt,
+	  doc/source/developers/release.txt: Adding early docs on Python 3 support. Modifying release instructions.
+
+v<1.3.0>, 2012-01-31
+
+    * core/IOHandlers/pyDbfIO.py: Addressing issue #186
+
+    * cg/shapes.py: fixing small bug in polygon constructor that causes
+      an exception when an empty list is passed in for the holes.
+
+    * cg/standalone.py: removing standalone centroid method. see issue
+      #138.
+
+    * esda/mapclassify.py, esda/tests/test_mapclassify.py: - new
+      implementation of fisher jenks
+
+    * spreg/__init__.py, spreg/diagnostics_sp.py,
+      spreg/diagnostics_tsls.py, spreg/error_sp.py,
+      spreg/error_sp_het.py, spreg/error_sp_hom.py, spreg/ols.py,
+      spreg/robust.py, spreg/tests, spreg/twosls.py,
+      spreg/twosls_sp.py, spreg/user_output.py, spreg/utils.py: Adding
+      the following non-spatial/spatial regression modules:
+      * Two Stage Least Squares
+      * Spatial Two Stage Least Squares
+      * GM Error (KP 98-99)
+      * GM Error Homoskedasticity (Drukker et. al, 2010)
+      * GM Error Heteroskedasticity (Arraiz et. al, 2010)
+      * Anselin-Kelejian test for residual spatial autocorrelation of
+      residuals from IV regression
+      
+      Adding also utility functions and other helper classes.
+      
+    * cg/standalone.py: slight improvment to get_shared_segments, in
+      part to make it more readable.
+
+    * cg/shapes.py, cg/tests/test_standalone.py: adding <,<=,>,>= tests
+      to Point, this fixes a bug in the get_shared_segments function
+      that was causing some LineSegments to be incorectly ordered
+      because the default memory address was being used instead of the
+      points location.
+
+    * core/IOHandlers/tests/test_wkt.py, core/IOHandlers/wkt.py,
+      core/util/tests/test_wkt.py, core/util/wkt.py,
+      weights/tests/test_Distance.py, weights/tests/test_user.py,
+      weights/user.py: Fixing small numerical errors n testing that
+      resulted from changing the centroid algorithm.
+
+    * esda/moran.py: another optimization for __crand see issue #188
+
+    * weights/util.py: Added option for row-standardized SW in lat2SW.
+      Implementing suggestion from Charlie in Issue 181 from
+      StackOverflow
+
+    * esda/moran.py: another optimization to __crand, see issue #188
+      for details.
+
+    * esda/moran.py: Optimized __crand in Local_Moran
+
+    * cg/shapes.py, cg/standalone.py, contrib/shapely_ext.py:
+      Adddressing issue #138, centroids for polygons with holes
+      Fixing some issues with the shapely wrapper and out implemenation
+      of __geo_interface__
+
+    * weights/Distance.py: previous 'fix' to uniform kernel did not
+      have correct dimensions
+
+    * core/IOHandlers/arcgis_txt.py, core/IOHandlers/dat.py,
+      weights/user.py: fixing rounding errors with docstrings
+
+    * contrib/README, contrib/shared_perimeter_weights.py: Adding
+      shared perimeter weights, see Issue #46
+
+    * contrib/README, contrib/shapely_ext.py: moving shapely_ext into
+      contrib
+
+    * core/IOHandlers/pyDbfIO.py: Fixing issue with scientific notation
+      is DBF files. #182
+
+    * core/IOHandlers/pyShpIO.py: clockwise testing should only be
+      performed on Polygons. #183
+
+    * spreg/diagnostics_sp.py: Switching ints to floats in variance of
+      Morans I for residuals to get correct results
+
+    * core/util/shapefile.py, examples/__init__.py: Add a "get_path"
+      function to examples module.
+      pysal.examples.get_path('stl_hom.shp') will always return the
+      correct system path to stl_hom.shp, no matter where it's run
+      from. This is useful for testing.
+      Modified shapefile tests to use the new function.
+
+    * spreg/diagnostics.py: Adding check on condition_index to pick OLS
+      (xtx) or IV (hth) model
+
+    * core/IOHandlers/template.py: Updating template to pass unit
+      testing.
+
+    * core/util/shapefile.py: Fixing issue #180. Making shapefile
+      opener case insensitive.
+
+    * spatial_dynamics/interaction.py,
+      spatial_dynamics/tests/test_interaction.py: Adding modified Knox
+      and changes to existing tests in spatial_dynamics.
+
+    * core/IOHandlers/arcgis_txt.py,
+      core/IOHandlers/tests/test_arcgis_txt.py: fixing arcgis_txt.py so
+      that it ignores self-neighbors with zero weights
+
+    * core/FileIO.py: Updating library README.
+      Removing docstrings from FileIO module.
+
+    * contrib/README: adding contrib to installer and adding initial
+      README
+
+    * core/IOHandlers/gwt.py: rewrote GWT reader to avoid list appends.
+      resulted in speed up of about 12x.
+
+    * core/IOHandlers/pyDbfIO.py: implementing _get_col for dbf files.
+
+    * core/IOHandlers/gwt.py: Adding a small fix to gwt reader, if the
+      ids cannot be found in the associated DBF, they will be read in
+      order from the GWT file.
+
+    * contrib/weights_viewer/weights_viewer.py: Small change to
+      identify polygons that are their own neighbor.
+
+    * weights/Distance.py: removing incorrect kernel functions and
+      fixing bug in uniform kernel
+
+    * weights/util.py: refactoring insert_diagonal so that it can add
+      or overwrite the diagonal weights
+
+    * contrib, contrib/README, contrib/__init__.py,
+      contrib/weights_viewer, contrib/weights_viewer/__init__.py,
+      contrib/weights_viewer/transforms.py,
+      contrib/weights_viewer/weights_viewer.py: Adding 1st contrib, a
+      wxPython based Weights file viewer.
+
+
+    * spatial_dynamics/markov.py: - handle case of zero transitions in
+      spatial markov, consistent with treatment
+      in classic markov
+
+    * core/FileIO.py, core/IOHandlers/pyShpIO.py: Changes to allow
+      reading of null polygons.
+
+    * core/util/shapefile.py, core/util/tests/test_shapefile.py:
+      refactoring shapefile reader, see issue #89
+
+    * core/FileIO.py: small change to FileIO to allow FileFormat
+      argument to be passed through
+
+    * esda/getisord.py: fixing bug in local Z values for integer data
+
+    * cg/__init__.py, weights/user.py, weights/util.py: adding radius
+      option to user weights methods
+
+    * cg/kdtree.py, common.py, weights/Distance.py,
+      weights/tests/test_Distance.py: Distance weights can not be
+      passed an instnace of KDTree instead of an array. If the KDTree
+      is of type ArcKDTree, the weights returns will be based on
+      ArcDistances. Adding tests for Arc cases off KNN and
+      DistanceBand.
+
+    * weights/util.py: - added function for local clustering
+      coefficient - summary for W as a graph
+
+    * cg/kdtree.py, cg/sphere.py: finishing up Arc_KDTree
+
+    * weights/Distance.py: More doctest fixes.
+
+    * region/maxp.py, spreg/diagnostics.py, weights/Distance.py,
+      weights/user.py: Fixing the doctests for dusty python setup.
+
+    * cg/kdtree.py, cg/sphere.py: adding spherical wrapper around scipy
+      kdtree
+
+    * cg/__init__.py, cg/sphere.py: Adding spherical distance tools to
+      cg. Related to issue #168
+
+    * core/IOHandlers/gwt.py, core/IOHandlers/tests/test_gwt.py:
+      re-enabled gwt writing.
+      'o' transform is used on all GWTs for writing (w is returned to
+      existing transform on exit)
+      Also, setting '_shpName' and '_varName' attributes on W's which
+      are read in through gwt.
+      the writer will check if these vars exist and use them for the
+      header, this prevents metadata loss on simple copies
+
+    * esda/join_counts.py: - fix for handling int array type
+
+    * spreg/diagnostics.py: Adding more efficient constant check for
+      spreg.
+
+    * cg/shapes.py: adding __geo_interface__ and asShape adapter for
+      Point, LineString and Polygon
+
+    * spreg/diagnostics.py: minor change to t-stat function to
+      accommodate future regression models
+
+    * esda/mapclassify.py: - more general fix for #166
+
+
+v<1.2.0>, 2011-07-31
+
+    * pysal/spreg/user_output.py: Fix for bug 162
+
+    * pysal/spatial_dynamics/markov.py: Added markov mobility measures; addresses issue 137
+
+    * pysal/weights/weights.py: Partially addressed issue 160 by removing the shimbel, order, and higher_order methods from W. 
+
+    * doc/source/users/installation.txt: Adding known issue regarding GNU/Linux testing and random seeds; see ticket 52.
+
+    * pysal/esda/geary.py: Adding sparse implementation of Geary's C; substantial gains on larger datasets. 
+
+    * pysal/core/IOHandlers/mtx.py: Adding WSP2W function for fast conversion of sparse weights object (WSP) to pysal W.
+
+    * pysal/esda/getisord.py: Adding Getis-Ord G test module
+
+    * pysal/weights/util.py: Added function that inserts values along the main diagonal of a weights object
+
+    * doc/source/users/tutorials: Fixed issue 76.
+
+    * pysal/core/IOHandlers/mtx.py: Added an IOHandler for MatrixMarket MTX files
+
+    * pysal/esda/moran.py: Optimized conditional randomization
+
+    * pysal/weights/util.py: Re-adding full2W() method to convert full arrays into W objects; related to issue #136. 
+
+    * pysal/core/IOHandlers/gal.py: Added sparse WSP (thin W); gal reader can return W or WSP
+
+    * pysal/core/IOHandlers/pyDbfIO.py: Bug Fix, DBF files are not properly closed when opened in 'r' mode. See issue #155.
+
+    * pysal/core/IOHandlers/stata_txt.py: Adding FileIO handlers for STATA text files
+
+    * pysal/weights/user.py: Fixed issue #154, adding k option to User Kernel weights functions.
+
+    * pysal/core/IOHandlers/mat.py: Adding an IOHandler for MATLAB mat file
+
+    * pysal/core/IOHandlers/wk1.py: Adding an IO handler for wk1 file
+
+    * pysal/core/IOHandlers/geobugs_txt.py: Adding an IO handler for geobugs text file.
+
+    * pysal/core/IOHandlers/arcgis_swm.py: Added ArcGIS SWM file handler
+
+    * pysal/core/IOHandlers/arcgis_dbf.py: Adding a spatial weights file in the (ArcGIS-style) DBF format. 
+
+    * pysal/core/IOHandlers/arcgis_txt.py: Added ArcGIS ASCII file IO handler. 
+
+    * pysal/core/IOHandlers/dat.py: Added DAT file handler.
+
+    * pysal/cg/locators.py: Added point in polygon method for Polygon and PolygonLocator
+
+    * pysal/weights/Distance.py: Optimized Kernel() method to run much faster for the case of adaptive bandwidths
+
+    * pysal/weights/user.py: Added helper function in user.py to create scipy sparse matrix from a gal file
+
+    * pysal/common.py: Added shallow copy method to Read-Only Dict to support multiprocessing.
+
+    * pysal/spatial_dynamics/rank.py: More efficient regime weights
+
+    * pysal/weights/Distance.py: Adding epanechnikov and bisquare kernel funtions
+
+    * pysal/core/IOHandlers/pyDbfIO.py: Adding NULL support to numerical DBF fields; modifying PointLocator API to match PolygonLocator API 
+
+    * pysal/cg/locators.py: Handles case when query rectangle is completely inside a polygon
+
+    * pysal/cg/locators.py: Explicit polygon overlap hit test
+
+    * pysal/cg/standalone.py: Adding point-polygon intersection support for polygons with holes.
+
+    * pysal/spatial_dynamics/markov.py: Added homogeneity test.
+
+    * pysal/spatial_dynamics/markov.py: Added spillover test in LISA_Markov.
+
+    * pysal/cg/locators.py: Added Rtree based spatial index for polygonlocator.
+
+    * pysal/cg/rtree.py: Added pure python Rtree module.
+
+    * doc/source/developers/pep/pep-0010.txt: Added PEP 0010: Rtree module in pure python.
+
+    * pysal/esda/geary.py: Fixed bug 144.
+
+    * pysal/spatial_dynamics/markov.py: Added significance filtering of LISA markov.
+
+    * doc/source/developers/pep/pep-0009.txt: Added new PEP, "PEP 0009: Add Python 3.x Support."
+
+    * doc/source/developers/guidelines.txt: New release cycle schedules for 1.2 and 1.3.
+
+    * doc/source/developers/release.txt: Updated pypi instructions; PySAL available on the Python Package Index via download, easy_install, and pip. 
+
+v<1.1.0>, 2011-01-31
+
+    * pysal/core/FileIO.py, pysal/core/IOHandlers/pyDbfIO.py: Added missing value support to FileIO. Warnings will be issued when missing values are found and the value will be set to pysal.MISSINGVALUE, currently None, but the user can change it as needed.
+
+    * pysal/spreg/: Added Spatial Regression module, spreg, and tests.  Added non-spatial diagnostic tests for OLS regression. 
+
+    * pysal/core/IOHandlers/gwt.py: Fixing bottle neck in gwt reader, adding support for GeoDa Style ID's and DBF id_order.
+
+    * pysal/cg/standalone.py: adding, distance_matrix, full distance matrix calculation using sparse matrices
+
+    * pysal/core/util: Moved "converters" into core.util, allows them to be used independently of FileIO.
+
+    * pysal/weights/Distance.py: Adding work around for bug in scipy spatial, see pysal issue #126
+
+    * pysal/weights/user.py: Added build_lattice_shapefile in weights.user, which writes an ncol by nrow grid to a shapefile.
+
+    * pysal/weights/Distance.py: fixed coincident point problem in knnW and made sure it returns k neighbors 
+    * pysal/spatial_dynamics/interaction.py: Added a suite of spatio-temporal interaction tests including the Knox, Mantel, and Jacquez tests. 
+
+    * pysal/weights/util.py: Added lat2SW, allows to create a sparse W matrix for a regular lattice.
+
+    * pysal/tests/tests.py: - new 1.1 integration testing scheme.
+
+    * pysal/esda/interaction.py: added standardized Mantel test and improved readability.
+
+    * pysal/spatial_dynamics/directional.py: - adding directional LISA analytics
+
+    * pysal/esda/mapclassify.py: Natural_Breaks will lower k for data with fewer than k unique values, prints warning.
+
+    * pysal/region/randomregion.py: improvements to spatially constrained random region algorithm
+
+    * pysal/esda/smoothing.py: Adding choynowski probabilities and SMR to smoothing.py
+
+    * doc/source/developers/release.txt: - updating release cycle - release management
+
+v<1.0.0>, 2010-07-31 -- Initial release.
+The following 13 authors contributed 216 commits.
+
+* Dani Arribas-Bel
+* David Folch
+* Levi John Wolf
+* Levi Wolf
+* Philip Stephens
+* Serge Rey
+* Sergio Rey
+* Wei Kang
+* jlaura
+* levi.john.wolf at gmail.com
+* ljw
+* ljwolf
+* pedrovma
+
+
+We closed a total of 86 issues, 33 pull requests and 53 regular issues;
+this is the full list (generated with the script 
+:file:`tools/github_stats.py`):
+
+Pull Requests (33):
+
+* :ghpull:`724`: add synchronization tool
+* :ghpull:`733`: Fb/bump
+* :ghpull:`731`: Small docfixes
+* :ghpull:`730`: Contrib docs
+* :ghpull:`728`: B179
+* :ghpull:`727`: Geodf io
+* :ghpull:`725`: try pinning scipy,numpy
+* :ghpull:`723`: make sure to test all moran classes
+* :ghpull:`720`: Moving natural breaks to a cleaner kmeans implementation
+* :ghpull:`718`: force counts to be same length as bins
+* :ghpull:`714`: Dev
+* :ghpull:`715`: Heads
+* :ghpull:`713`: Enh712
+* :ghpull:`710`: Patsy/Pandas wrapper
+* :ghpull:`711`: Travis fixes
+* :ghpull:`706`: precommit hook
+* :ghpull:`707`: Keep dev updated with any bugfixes into master
+* :ghpull:`702`: fix for chi2 test 0 denominator and invocation of chi2 test in LISA_Markov
+* :ghpull:`704`: Allcloser
+* :ghpull:`703`: Swapping to Allclose and RTOL=.00005 in spreg
+* :ghpull:`701`: By col array
+* :ghpull:`700`: small optimization of bivariate moran motivated by #695
+* :ghpull:`696`: Pypi
+* :ghpull:`691`: Update doctest for one-off bug that was fixed with #690
+* :ghpull:`690`: fix for lisa markov one off for significance indicator
+* :ghpull:`689`: Clpy flex w
+* :ghpull:`688`: pep 8 edits
+* :ghpull:`687`: Change array assertions into allclose
+* :ghpull:`686`: Moran local bivariate
+* :ghpull:`684`: 591
+* :ghpull:`682`: release instructions updated
+* :ghpull:`681`: version bump for next dev cycle
+* :ghpull:`680`: Rel1.10
+
+Issues (53):
+
+* :ghissue:`705`: spreg check valve
+* :ghissue:`344`: Explore new dependency on ogr
+* :ghissue:`459`: Problem with bandwidth
+* :ghissue:`552`: Viz organization
+* :ghissue:`491`: Test np.allclose() for unit tests
+* :ghissue:`529`: Clarity needed on proper reference formatting in sphinx docs
+* :ghissue:`699`: Trouble importing pysal - ImportError: DLL load failed
+* :ghissue:`716`: `min_threshold_dist_from_shapefile` creating an island in some cases
+* :ghissue:`724`: add synchronization tool
+* :ghissue:`733`: Fb/bump
+* :ghissue:`731`: Small docfixes
+* :ghissue:`730`: Contrib docs
+* :ghissue:`719`: pysal not working with matplotlib v1.5 for plot_lisa_cluster, plot_choropleth, etc.
+* :ghissue:`728`: B179
+* :ghissue:`727`: Geodf io
+* :ghissue:`725`: try pinning scipy,numpy
+* :ghissue:`723`: make sure to test all moran classes
+* :ghissue:`720`: Moving natural breaks to a cleaner kmeans implementation
+* :ghissue:`717`: esda.mapclassify return problematic counts when there is 0 occurrence in the last class
+* :ghissue:`718`: force counts to be same length as bins
+* :ghissue:`714`: Dev
+* :ghissue:`712`: `block_weights` does not take argument `idVariable`
+* :ghissue:`715`: Heads
+* :ghissue:`713`: Enh712
+* :ghissue:`710`: Patsy/Pandas wrapper
+* :ghissue:`711`: Travis fixes
+* :ghissue:`706`: precommit hook
+* :ghissue:`708`: 2-3: is six a dependency or do we ship it?
+* :ghissue:`707`: Keep dev updated with any bugfixes into master
+* :ghissue:`702`: fix for chi2 test 0 denominator and invocation of chi2 test in LISA_Markov
+* :ghissue:`704`: Allcloser
+* :ghissue:`703`: Swapping to Allclose and RTOL=.00005 in spreg
+* :ghissue:`698`: Py3merge
+* :ghissue:`701`: By col array
+* :ghissue:`700`: small optimization of bivariate moran motivated by #695
+* :ghissue:`695`: Bivariate global moran's I formula
+* :ghissue:`683`: Py3 Conversion Project
+* :ghissue:`694`: Allclose in SPREG
+* :ghissue:`696`: Pypi
+* :ghissue:`691`: Update doctest for one-off bug that was fixed with #690
+* :ghissue:`693`: Trouble installation: No module named 'shapes'
+* :ghissue:`690`: fix for lisa markov one off for significance indicator
+* :ghissue:`689`: Clpy flex w
+* :ghissue:`688`: pep 8 edits
+* :ghissue:`685`: BV Lisa 
+* :ghissue:`687`: Change array assertions into allclose
+* :ghissue:`686`: Moran local bivariate
+* :ghissue:`677`: Make meta importable from base
+* :ghissue:`684`: 591
+* :ghissue:`682`: release instructions updated
+* :ghissue:`679`: pysal.cg.sphere.fast_knn bug
+* :ghissue:`681`: version bump for next dev cycle
+* :ghissue:`680`: Rel1.10
+
 v<1.10.0>, 2015-07-29
 
 GitHub stats for 2015/01/31 - 2015/07/29
diff --git a/README.md b/README.md
deleted file mode 100644
index f76f76a..0000000
--- a/README.md
+++ /dev/null
@@ -1,106 +0,0 @@
-Python Spatial Analysis Library
-===============================
-
-[![Join the chat at https://gitter.im/pysal/pysal](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/pysal/pysal?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
-What is PySAL
---------------
-
-[![Build Status](https://travis-ci.org/pysal/pysal.svg?branch=master)](https://travis-ci.org/pysal/pysal)
-[![Coverage Status](https://coveralls.io/repos/pysal/pysal/badge.svg?branch=master)](https://coveralls.io/r/pysal/pysal?branch=master)
-[![Documentation Status](https://readthedocs.org/projects/pysal/badge/?version=latest)](https://readthedocs.org/projects/pysal/?badge=latest)
-
-PySAL is an open source cross-platform library of spatial analysis functions
-written in Python. It is intended to support the development of high level
-applications for spatial analysis.
-
-It is important to underscore what PySAL is, and is not, designed to do. First
-and foremost, PySAL is a library in the fullest sense of the word. Developers
-looking for a suite of spatial analytical methods that they can incorporate
-into application development should feel at home using PySAL. Spatial analysts
-who may be carrying out research projects requiring customized scripting,
-extensive simulation analysis, or those seeking to advance the state of the art
-in spatial analysis should also find PySAL to be a useful foundation for their
-work.
-
-End users looking for a user friendly graphical user interface for spatial
-analysis should not turn to PySAL directly. Instead, we would direct them to
-projects like STARS and the GeoDaX suite of software products which wrap PySAL
-functionality in GUIs. At the same time, we expect that with developments such
-as the Python based plug-in architectures for QGIS, GRASS, and the toolbox
-extensions for ArcGIS, end user access to PySAL functionality will be
-widening in the near future.
-
-PySAL package structure
------------------------
-
-Currently PySAL consists of the following files and directories:
-
-  LICENSE.txt
-    PySAL license.
-
-  INSTALL.txt
-    PySAL prerequisites, installation, testing, and troubleshooting.
-
-  THANKS.txt
-    PySAL developers and contributors.
-
-  README.txt
-    PySAL structure (this document).
-
-  setup.py
-    Script for building and installing PySAL.
-
-  MANIFEST.in
-    Additions to distutils-generated PySAL tar-balls.
-
-  CHANGELOG.txt
-    Changes since the last release.
-
-  pysal/
-    Contains PySAL __init__.py and the directories of PySAL modules.
-
-  doc/
-    Contains PySAL documentation using the Sphinx framework.
-
-PySAL modules
--------------
-
-* pysal.cg — Computational geometry
-* pysal.contrib - Contributed modules
-* pysal.core — Core data structures and IO
-* pysal.esda — Exploratory spatial data analysis
-* pysal.examples — Data sets
-* pysal.inequality — Spatial inequality analysis
-* pysal.network - Spatial analysis on networks
-* pysal.region — Spatially constrained clustering
-* pysal.spatial_dynamics — Spatial dynamics
-* pysal.spreg — Regression and diagnostics
-* pysal.weights — Spatial weights
-
-Website
--------
-
-All things PySAL can be found here <http://pysal.org/>
-
-Mailing Lists
--------------
-
-Please see the developer list here
-    <http://groups.google.com/group/pysal-dev>
-
-Help for users is here
-    <http://groups.google.com/group/openspace-list>
-
-Bug reports
------------
-
-To search for or report bugs, please see
-    <http://github.com/pysal/pysal/issues>
-
-License information
--------------------
-
-See the file "LICENSE.txt" for information on the history of this
-software, terms & conditions for usage, and a DISCLAIMER OF ALL
-WARRANTIES.
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..426b593
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,137 @@
+Python Spatial Analysis Library
+=================================
+
+.. image:: https://travis-ci.org/pysal/pysal.svg
+   :target: https://travis-ci.org/pysal
+
+.. image:: https://coveralls.io/repos/pysal/pysal/badge.svg?branch=master
+   :target: https://coveralls.io/r/pysal/pysal?branch=master
+
+
+PySAL_ is an open source cross-platform library of spatial analysis functions
+written in Python. It is intended to support the development of high level
+applications for spatial analysis.
+
+.. image:: https://farm2.staticflickr.com/1699/23937788493_1b9d147b9f_z.jpg
+        :width: 25%
+        :scale: 25%
+        :target: http://nbviewer.ipython.org/urls/gist.githubusercontent.com/darribas/657e0568df7a63362762/raw/pysal_lisa_maps.ipynb
+        :alt: LISA Maps of US County Homicide Rates
+
+*Above: Local Indicators of Spatial Association for Homicide Rates in US
+Counties 1990.*
+
+
+
+It is important to underscore what PySAL is, and is not, designed to do. First
+and foremost, PySAL is a library in the fullest sense of the word. Developers
+looking for a suite of spatial analytical methods that they can incorporate
+into application development should feel at home using PySAL. Spatial analysts
+who may be carrying out research projects requiring customized scripting,
+extensive simulation analysis, or those seeking to advance the state of the art
+in spatial analysis should also find PySAL to be a useful foundation for their
+work.
+
+End users looking for a user friendly graphical user interface for spatial
+analysis should not turn to PySAL directly. Instead, we would direct them to
+projects like  the GeoDaX_ suite of software products which wrap PySAL
+functionality in GUIs. At the same time, we expect that with developments such
+as the Python based plug-in architectures for QGIS, GRASS, and the toolbox
+extensions for ArcGIS, that end user access to PySAL functionality will be
+widening in the near future.
+
+.. _PySAL : https://github.com/pysal/pysal/
+.. _GeoDaX : https://geodacenter.asu.edu/software
+
+
+.. |build| image:: https://travis-ci.org/pysal/pysal.png
+   :scale: 100%
+   :align: middle
+   :target: https://travis-ci.org/pysal/pysal
+.. |cover| image:: https://coveralls.io/repos/pysal/pysal/badge.svg?branch=master
+   :scale: 50%
+   :align: top
+   :target: https://coveralls.io/r/pysal/pysal?branch=master
+.. |docs| image:: https://readthedocs.org/projects/pysal/badge/?verison=latest
+   :scale: 50%
+   :align: top
+   :target: http://pysal.readthedocs.org/en/latest/ 
+.. |talk| image:: https://badges.gitter.im/Join%20Chat.svg
+   :scale: 50%
+   :align: top
+   :target: https://gitter.im/pysal/pysal?
+
+
+
+PySAL modules
+=============
+
+* pysal.cg  Computational geometry
+* pysal.contrib  Contributed modules
+* pysal.core  Core data structures and IO
+* pysal.esda  Exploratory spatial data analysis
+* pysal.examples  Data sets
+* pysal.inequality  Spatial inequality analysis
+* pysal.network  Spatial analysis on networks
+* pysal.region  Spatially constrained clustering
+* pysal.spatial_dynamics  Spatial dynamics
+* pysal.spreg  Spatial econometrics and diagnostics
+* pysal.weights  Spatial weights
+
+
+Installation
+============
+
+PySAL can be installed using pip:
+
+.. code-block:: bash
+   
+    $ pip install pysal
+
+PySAL is also available through 
+`Anaconda <https://www.continuum.io/downloads>`__ and `Enthought Canopy <https://www.enthought.com/products/canopy/>`__.
+
+Documentation
+=============
+
+For help on using PySAL, check out the following resources:
+
+* `User Guide <http://pysal.readthedocs.org/en/latest/users/index.html>`_
+* `Tutorials and Short Courses <https://github.com/pysal/notebooks/blob/master/courses.md>`_
+* `Notebooks <https://github.com/pysal/notebooks>`_
+* `User List <http://groups.google.com/group/openspace-list>`_
+
+
+
+Development
+===========
+
+PySAL development is hosted on github_.
+
+.. _github : https://github.com/pysal/pysal
+
+Discussions of development occurs on the
+`developer list <http://groups.google.com/group/pysal-dev>`_
+as well as gitter_.
+
+.. _gitter : https://gitter.im/pysal/pysal?
+
+Getting Involved
+================
+
+If you are interested in contributing to PySAL please see our 
+`development guidelines <http://pysal.readthedocs.org/en/latest/developers/index.html>`_.
+
+
+Bug reports
+===========
+To search for or report bugs, please see PySAL's issues_.
+
+.. _issues :  http://github.com/pysal/pysal/issues
+
+License information
+===================
+
+See the file "LICENSE.txt" for information on the history of this
+software, terms & conditions for usage, and a DISCLAIMER OF ALL
+WARRANTIES.
diff --git a/THANKS.txt b/THANKS.txt
index 78fdf99..89aaf75 100644
--- a/THANKS.txt
+++ b/THANKS.txt
@@ -22,6 +22,7 @@ Mark McCann
 Taylor Oshan
 Serge Rey
 Charles R. Schmidt
+Alessandra Sozzi
 Philip Stephens
 Bohumil Svoma
 Ran Wei
diff --git a/doc/source/conf.py b/doc/source/conf.py
index fb81629..c05a19c 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -57,9 +57,9 @@ copyright = u'2014-, PySAL Developers; 2009-13 Sergio Rey'
 # built documents.
 #
 # The short X.Y version.
-version = '1.10.0'
+version = '1.11.0'
 # The full version, including alpha/beta/rc tags.
-release = '1.10.0'
+release = '1.11.0'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/doc/source/developers/py3k.rst b/doc/source/developers/py3k.rst
index 057265f..271ac06 100644
--- a/doc/source/developers/py3k.rst
+++ b/doc/source/developers/py3k.rst
@@ -3,109 +3,6 @@ PySAL and Python3
 =================
 .. contents::
 
-Background
-----------
-
-PySAL Enhancement Proposal #9 was approved February 2, 2011. It called for
-adapting the code base to support both Python 2.x and 3.x releases. 
-
-Setting up for development
---------------------------
-
-First install `Python3 <http://python.org/download/releases/3.2.2/>`_.
-Once Python3 is installed, you have the choice of downloading the following
-files as pure source code from PyPi and running "python3 setup.py install" for
-each, or follow the instructions below to setup useful helpers: easy_install and
-pip.
-
-To get setuptools and pip, first get distribute from PyPi::
- 
- curl -O http://python-distribute.org/distribute_setup.py
- python3 distribute_setup.py
- # Now you have easy_install
- # It may be useful to setup an alias to this version of easy_install in your shell profile
- alias easy_install3='/Library/Frameworks/Python.framework/Versions/3.2/bin/easy_install'
-
-After distribute is installed, get pip::
-
-  curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
-  python3 get-pip.py
-  # It may be useful to setup an alias to this version of pip in your shell profile
-  alias pip3='/Library/Frameworks/Python.framework/Versions/3.2/bin/pip'
-
-
-NumPy and SciPy require extensive refactoring on installation. We recommend
-`downloading the source code <http://new.scipy.org/download.html>`_, unzipping,
-and running::
-
-  cd numpy<dir>
-  python3 setup.py install 
-  # If all looks good, cd outside of the source directory, and verify import 
-  cd
-  python3 -c 'import numpy'
-
-Be sure to install NumPy first since SciPy depends on it. Now install SciPy in
-the same manner::
-
-  cd scipy<dir>
-  python3 setup.py install
-  # After extensive building, if all looks good, cd outside of the source directory, and verify import 
-  cd
-  python3 -c 'import scipy'
-
-Post any installation-related issues to the pysal-dev mailing list. 
-If python complains about not finding gcc-4.2, and you're sure it is installed,
-(run "gcc --version" to verify), you may create an alias to satisfy this::
-
-  cd /usr/bin/ 
-  sudo ln -s gcc  gcc-4.2
-
-
-Now for PySAL. Get the bleeding edge repository version of PySAL and pass in
-this call::
- 
- cd pysal/trunk
- python3 setup.py install
-
-You'll be able to watch the dynamic refactoring taking place. If all goes well,
-PySAL will be installed into your Python3 site-packages directory. Confirm
-success with:: 
-
-  cd
-  python3 -c 'import pysal; pysal.open.check()'
-
-
-Optional Installations
------------------------
-
-Now that you have pip, get iPython::
-
- # Use pip from the Python3 distribution on your system, or with the alias above
- pip3 install iPython
-
-The first time you launch iPython3, you may receive a warning about the Python
-library readline. The warning makes it clear that pip does not work to install
-readline, so use easy_install, which was installed with distribute above::
-
- /Library/Frameworks/Python.framework/Versions/3.2/bin/easy_install readline
-
-If when launching iPython3 you receive another warning about kernmagic, note
-that iPython 0.12 and newer use an alternate config file from previous versions.
-Since I had not extensively customized my iPython profile, I just deleted the
-~/.iPython directory and relaunched iPython3.
-   
-Now let's get our testing and documentation suites::
-
-  pip3 install nose nose-exclude sphinx numpydoc
-
-Now that nose is installed, let's run the test suite. Since the refactored code
-only exists in the Python3 site-packages directory, cd into it and run nose.
-First, however, copy our nose config files to the installed pysal so that nose
-finds them::
- 
- cp <path to local pysal svn>/nose-exclude.txt /Library/Frameworks/Python.frameworks/Versions/3.2/lib/python3.2/site-packages/pysal/
- cp <path to local pysal svn>/setup.cfg /Library/Frameworks/Python.frameworks/Versions/3.2/lib/python3.2/site-packages/pysal/
- cd /Library/Frameworks/Python.frameworks/Versions/3.2/lib/python3.2/site-packages
- /Library/Frameworks/Python.framework/Versions/3.2/bin/nosetests pysal > ~/Desktop/nose-output.txt 2>&1
-
 
+Starting with version 1.11, PySAL supports both the Python 2.x series
+(version 2.6 and 2.7) as well as Python 3.4 and newer.
diff --git a/doc/source/developers/release.rst b/doc/source/developers/release.rst
index 2902d93..953bf93 100644
--- a/doc/source/developers/release.rst
+++ b/doc/source/developers/release.rst
@@ -9,6 +9,7 @@ PySAL Release Management
 Prepare the release
 -------------------
 
+- Create a branch_ out of the `dev` branch
 - Check all tests pass. See :doc:`testing`.
 - Update CHANGELOG::
 
@@ -16,34 +17,53 @@ Prepare the release
 
 - Prepend `chglog` to `CHANGELOG` and edit
 - Edit THANKS and README and README.md if needed.
-- Change MAJOR, MINOR version in setup script.
-- Change pysal/version.py to non-dev number
-- Change the docs version from X.xdev to X.x by editing doc/source/conf.py in two places.
-- Change docs/index.rst to update Stable version and date, and Development version
+- Edit the file `version.py` to update MAJOR, MINOR, MICRO
+- Bump::
+
+     $ cd tools; python bump.py
+
 - Commit all changes.
+- Push_ your branch up to your GitHub repos
+- On github issue a pull request, with a target of **upstream dev**. 
+  Add a comment that this is for release.
+
 
 Tag 
 ---
 
-Make the Tag::
+With version 1.10 we changed the way the tags are created to reflect our
+policy_ of not pushing directly to upstream.
 
-  $ git tag -a v1.4 -m 'my version 1.4'
+After you have issued a pull request, the project maintainer can `create the release`_ on GitHub. 
+
+
+Make docs
+---------
 
-  $ git push upstream v1.4
+As of version 1.6, docs are automatically compiled and hosted_.
 
-On each build machine, clone and checkout the newly created tag::
+Make and Upload and Test Distributions
+--------------------------------------
+
+On each build machine, clone and checkout the newly created tag (assuming that
+is `v1.10` in what follows)::
 
   $ git clone http://github.com/pysal/pysal.git
+  $ cd pysal
   $ git fetch --tags
-  $ git checkout v1.4
+  $ git checkout v1.10
+
+- Make and upload_ to the **Testing** Python Package Index::
+
+  $ python setup.py sdist upload -r https://testpypi.python.org/pypi
+
+- Test that your package can install correctly::
+
+  $ pip install -i https://testpy.python.org/pypi
 
-Make docs
----------
 
-As of verison 1.6, docs are automatically compiled and hosted_.
+If all is good, proceed, otherwise fix.
 
-Make and Upload distributions
--------------------------------
 
 - Make and upload_ to the Python Package Index in one shot!::
 
@@ -91,3 +111,7 @@ to  announce the release.
 .. _registered: http://docs.python.org/2.7/distutils/packageindex.html
 .. _source: http://docs.python.org/distutils/sourcedist.html
 .. _hosted: http://pysal.readthedocs.org
+.. _branch: https://github.com/pysal/pysal/wiki/GitHub-Standard-Operating-Procedures
+.. _policy: https://github.com/pysal/pysal/wiki/Example-git-config
+.. _create the release: https://help.github.com/articles/creating-releases/
+.. _Push: https://github.com/pysal/pysal/wiki/GitHub-Standard-Operating-Procedures
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 3ff4313..4407ec8 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -20,8 +20,8 @@ PySAL
 
 .. sidebar:: Releases
 
-    - `Stable 1.10.0 - July 2015 <users/installation.html>`_
-    - `Development 1.11.0dev  <http://github.com/pysal/pysal/>`_
+    - `Stable 1.11.0 (Released 2016-1-27) <users/installation.html>`_
+    - `Development  <http://github.com/pysal/pysal/tree/dev>`_
 
 PySAL is an open source library of spatial analysis functions written in
 Python intended to support the development of high level applications.
diff --git a/doc/source/library/contrib/index.rst b/doc/source/library/contrib/index.rst
index 7fe43d8..b2a5a7a 100644
--- a/doc/source/library/contrib/index.rst
+++ b/doc/source/library/contrib/index.rst
@@ -50,7 +50,7 @@ Currently the following contribs are available:
 
  5. Visualization -- Lightweight visualization layer (`Project page`_).
 
-    - .. versionadded:: 1.7
+    - .. versionadded:: 1.5
     - Path: pysal.contrib.viz
     - Requires: `matplotlib`_
 
@@ -60,7 +60,24 @@ Currently the following contribs are available:
     - Path: pysal.contrib.clusterpy
     - Requires: `clusterpy`_
 
+ 7. Pandas utilities -- Tools to work with spatial file formats using `pandas`.
 
+    - .. versionadded:: 1.8
+    - Path: pysal.contrib.pdutilities
+    - Requires: `pandas`_
+
+ 8. Githooks -- Optional hooks for `git` to make development on `PySAL` easier
+
+    - .. versionadded:: 1.10
+    - Path: pysal.contrib.githooks (Note: not importable)
+    - Requires: `git`
+
+ 9. Handler -- A model ingester to standardize model extension
+
+    - .. versionadded:: 1.10
+    - Path: pysal.contrib.handler
+    - Requires: None
+    - Optional: `patsy`_
 
 
 
@@ -71,3 +88,4 @@ Currently the following contribs are available:
 .. _project page: https://github.com/pysal/pysal/wiki/PySAL-Visualization-Project
 .. _shapely: https://pypi.python.org/pypi/Shapely
 .. _wxPython: http://www.wxpython.org/
+.. _patsy: https://github.com/pydata/patsy
diff --git a/doc/source/library/spreg/index.rst b/doc/source/library/spreg/index.rst
index 1116b6d..1559842 100644
--- a/doc/source/library/spreg/index.rst
+++ b/doc/source/library/spreg/index.rst
@@ -25,5 +25,6 @@
    ml_error_regimes
    ml_lag
    ml_lag_regimes
+   sur
 
 
diff --git a/doc/source/references.rst b/doc/source/references.rst
index 03ad7a2..241405d 100644
--- a/doc/source/references.rst
+++ b/doc/source/references.rst
@@ -26,6 +26,7 @@ References
 .. [Greene2003] Greene, W. H. (2003). Econometric analysis. Pearson Education India. 
 .. [Jacquez1996] Jacquez, G. M. (1996). A k nearest neighbour test for space–time interaction. Statistics in medicine, 15(18):1935–1949.
 .. [Jarque1980] Jarque, C. M. and Bera, A. K. (1980). Efficient tests for normality, homoscedasticity and serial independence of regression residuals. Economics letters, 6(3):255–259.
+.. [Jiang2013] Jian, B. (2013). Head/Tail breaks: A new classification scheme for data with a heavy-tailed distribution. The Professional Geographer, 65(3): 482-494.
 .. [Kelejian1998] Kelejian, H. H. and Prucha, I. R. (1998). A generalized spatial two-stage least squares procedure for estimating a spatial autoregressive model with autoregressive disturbances. The Journal of Real Estate Finance and Economics, 17(1):99–121.
 .. [Kelejian1999] Kelejian, H. H. and Prucha, I. R. (1999). A generalized moments estimator for the autoregressive parameter in a spatial model. International Economic Review, 40:509–534.
 .. [Kelejian2001] Kelejian, H. H. and Prucha, I. R. (2001). On the asymptotic distribution of the Moran I test statistic with applications. Journal of Econometrics, 104(2):219–257.
diff --git a/figs/lisamaps.png b/figs/lisamaps.png
new file mode 100644
index 0000000..9832bb7
Binary files /dev/null and b/figs/lisamaps.png differ
diff --git a/figs/lisamaps7.png b/figs/lisamaps7.png
new file mode 100644
index 0000000..9832bb7
Binary files /dev/null and b/figs/lisamaps7.png differ
diff --git a/mk2 b/mk2
new file mode 100755
index 0000000..c9e4a8b
--- /dev/null
+++ b/mk2
@@ -0,0 +1,2 @@
+git checkout py3conv_cleaning
+git stash
diff --git a/mk3 b/mk3
new file mode 100755
index 0000000..200e318
--- /dev/null
+++ b/mk3
@@ -0,0 +1,4 @@
+git branch -d 2to3
+git checkout -b 2to3
+python-modernize -nw -j 4 --future-unicode ./pysal
+2to3 -nw -j 4 ./pysal
diff --git a/pysal/COPYING b/pysal/COPYING
index 9125da2..ea898ef 100644
--- a/pysal/COPYING
+++ b/pysal/COPYING
@@ -1,4 +1,4 @@
-Copyright (c) 2009-13 Sergio J. Rey <sjsrey at gmail.com>
+Copyright (c) 2014- PySAL Developers, 2009-13 Sergio J. Rey <sjsrey at gmail.com>
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/pysal/__init__.py b/pysal/__init__.py
index 5f20bc5..730c7e9 100644
--- a/pysal/__init__.py
+++ b/pysal/__init__.py
@@ -41,14 +41,14 @@ import pysal.cg
 import pysal.core
 
 from pysal.version import version
-from pysal.version import stable_release_date
-import urllib2, json
-import config
-import datetime
-import os, sys
+#from pysal.version import stable_release_date
+#import urllib2, json
+#import config
+#import datetime
+#import os, sys
 
 # toplevel imports to be explicit
-from pysal.esda.moran import Moran, Moran_BV, Moran_BV_matrix, Moran_Local
+from pysal.esda.moran import Moran, Moran_BV, Moran_BV_matrix, Moran_Local, Moran_Local_BV
 from pysal.esda.geary import Geary
 from pysal.esda.join_counts import Join_Counts
 from pysal.esda.gamma import Gamma
@@ -84,6 +84,11 @@ import pysal.spreg
 import pysal.examples
 from pysal.network.network import Network, NetworkG, NetworkK, NetworkF
 
+try:
+    import pandas
+    from pysal.contrib import pdutilities as pdio
+except ImportError:
+    print('Pandas adapters not loaded')
 
 # Load the IOHandlers
 from pysal.core import IOHandlers
@@ -100,6 +105,7 @@ MISSINGVALUE = None  # used by fileIO to flag missing values.
 
 # Load stale and other possible messages at import
 
+"""
 base_path = os.path.split(pysal.__file__)[0]
 config_path = os.path.join(base_path, 'config.py')
 
@@ -134,11 +140,11 @@ def check_version():
     if today - delta > stable_release_date:
 	    print("Your version of PySAL is %d days old.") % diff 
 	    print("There have likely been %d new release(s).") % releases 
-	    query_yes_no("Disable this check? [Y/n]")
+	    print("Suppress this by setting check_stable=False in config.py.")  
+	    #query_yes_no("Disable this check? [Y/n]")
     else:
         pass
 
-"""
 def check_remote_version():
     print("Checking web for last stable release....")
     try:
@@ -150,9 +156,9 @@ def check_remote_version():
         print(late)
     except:
         print("Machine is offline. I am unable to check for the latest version of PySAL")
-"""
 
 if config.check_stable:
     check_version()
 else:
     pass
+"""
diff --git a/pysal/common.py b/pysal/common.py
index 58e167a..d111997 100644
--- a/pysal/common.py
+++ b/pysal/common.py
@@ -16,6 +16,7 @@ except:
     print 'scipy 0.7+ is required'
     raise
 
+RTOL = .00001
 
 import copy
 import math
diff --git a/pysal/contrib/README b/pysal/contrib/README.rst
similarity index 66%
rename from pysal/contrib/README
rename to pysal/contrib/README.rst
index ad99aa4..1902edb 100644
--- a/pysal/contrib/README
+++ b/pysal/contrib/README.rst
@@ -34,24 +34,43 @@ Currently the following contribs are available:
 
     - .. versionadded:: 1.3
     - Path: pysal.contrib.weights_viewer.weights_viewer
-    - Requires: wxPython
+    - Requires: `wxPython`_
 
  3. Shapely Extension -- Exposes shapely methods as standalone functions
 
     - .. versionadded:: 1.3
     - Path: pysal.contrib.shapely_ext
-    - Requires: shapely
+    - Requires: `shapely`_
 
  4. Shared Perimeter Weights -- calculate shared perimeters weights.
 
     - .. versionadded:: 1.3
     - Path: pysal.contrib.shared_perimeter_weights
-    - Requires: shapely
+    - Requires: `shapely`_
 
-5. Clusterpy Extension -- spatially constrained clustering algorithms.
+ 5. Visualization -- Lightweight visualization layer (`Project page`_).
 
-	- .. versionadded:: 1.8
-	- Path: pysal.contrib.clusterpy
-	- Requires: clusterpy
+    - .. versionadded:: 1.5
+    - Path: pysal.contrib.viz
+    - Requires: `matplotlib`_
 
+ 6. Clusterpy -- Spatially constrained clustering.
 
+    - .. versionadded:: 1.8
+    - Path: pysal.contrib.clusterpy
+    - Requires: `clusterpy`_
+
+ 7. Pandas utilities -- Tools to work with spatial file formats using `pandas`.
+
+    - .. versionadded:: 1.8
+    - Path: pysal.contrib.pdutilities
+    - Requires: `pandas`_
+
+
+
+
+.. _clusterpy: https://pypi.python.org/pypi/clusterPy/0.9.9
+.. _matplotlib: http://matplotlib.org/
+.. _project page: https://github.com/pysal/pysal/wiki/PySAL-Visualization-Project
+.. _shapely: https://pypi.python.org/pypi/Shapely
+.. _wxPython: http://www.wxpython.org/
diff --git a/pysal/contrib/clusterpy/__init__.py b/pysal/contrib/clusterpy/__init__.py
index 27bb912..079456a 100644
--- a/pysal/contrib/clusterpy/__init__.py
+++ b/pysal/contrib/clusterpy/__init__.py
@@ -10,3 +10,4 @@ else:
     from clusterpy_ext import addRook2Layer
     from clusterpy_ext import addQueen2Layer
     from clusterpy_ext import addArray2Layer
+    from clusterpy_ext import addW2Layer
diff --git a/pysal/contrib/clusterpy/clusterpy.ipynb b/pysal/contrib/clusterpy/clusterpy.ipynb
index 9974d81..5762f97 100644
--- a/pysal/contrib/clusterpy/clusterpy.ipynb
+++ b/pysal/contrib/clusterpy/clusterpy.ipynb
@@ -1,3320 +1,3441 @@
 {
- "metadata": {
-  "name": "",
-  "signature": "sha256:a138ff2bb82f0ff84b1c6ddbfcdd96a0d757ce0a91b7848a1d377b8e5b58d79b"
- },
- "nbformat": 3,
- "nbformat_minor": 0,
- "worksheets": [
+ "cells": [
   {
-   "cells": [
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import pysal.contrib.clusterpy as cp\n",
-      "%pylab inline"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "ClusterPy: Library of spatially constrained clustering algorithms\n",
-        "Populating the interactive namespace from numpy and matplotlib"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n"
-       ]
-      }
-     ],
-     "prompt_number": 1
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import numpy as np\n",
-      "import pysal as ps\n",
-      "from collections import Counter"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 2
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "columbus = cp.loadArcData(ps.examples.get_path('columbus.shp'))\n",
-      "columbus.fieldNames\n",
-      "n = len(columbus.Wqueen)\n",
-      "#columbus.generateData('Uniform', 'rook', 1, 1, 10)\n",
-      "columbus.dataOperation(\"CONSTANT = 1\")\n",
-      "columbus.cluster('maxpTabu', ['CRIME',  'CONSTANT'], threshold=4, dissolve=0, std=0)\n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Adding CONSTANT to fieldNames\n",
-        "Adding values from 1 to Y\n",
-        "Adding variables\n",
-        "Done\n",
-        "Getting variables\n",
-        "Variables successfully extracted\n",
-        "Running max-p-regions model (Duque, Anselin and Rey, 2010)\n",
-        "Local search method: Tabu Search\n",
-        "Number of areas:  49\n",
-        "threshold value:  4\n",
-        "FINAL SOLUTION: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [6, 6, 6, 6, 7, 1, 6, 6, 1, 1, 3, 3, 3, 3, 7, 3, 1, 8, 8, 5, 8, 1, 5, 8, 7, 7, 0, 0, 0, 0, 4, 5, 9, 4, 9, 4, 2, 0, 4, 5, 5, 4, 2, 9, 2, 4, 5, 2, 9]\n",
-        "FINAL OF:  2615.44707346\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 3
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "Counter(columbus.region2areas)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 4,
-       "text": [
-        "Counter({4: 6, 5: 6, 6: 6, 0: 5, 1: 5, 3: 5, 2: 4, 7: 4, 8: 4, 9: 4})"
-       ]
-      }
-     ],
-     "prompt_number": 4
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "columbus.cluster('arisel', ['CRIME'], 5, wType='rook', inits=10, dissolve=0)\n",
-      "#calif.cluster('arisel', ['PCR2002'], 9, wType='rook', inits=10, dissolve=1)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n",
-        "Running original Arisel algorithm\n",
-        "Number of areas:  49\n",
-        "Number of regions:  5\n",
-        "initial Solution: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [2, 2, 2, 2, 0, 1, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 4, 0, 1, 4, 1, 1, 4, 0, 0, 0, 0, 0, 0, 4, 1, 3, 4, 3, 4, 3, 0, 4, 1, 1, 4, 3, 3, 3, 4, 1, 3, 3]\n",
-        "initial O.F:  4292.34464226\n",
-        "FINAL SOLUTION: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [2, 2, 2, 2, 0, 1, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 4, 1, 4, 3, 0, 4, 1, 1, 4, 3, 1, 1, 4, 1, 1, 1]\n",
-        "FINAL OF:  3695.95184733\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 5
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "# regionalization solutions are added as a list of region ids at the end\n",
-      "columbus.fieldNames"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 6,
-       "text": [
-        "['ID',\n",
-        " 'AREA',\n",
-        " 'PERIMETER',\n",
-        " 'COLUMBUS_',\n",
-        " 'COLUMBUS_I',\n",
-        " 'POLYID',\n",
-        " 'NEIG',\n",
-        " 'HOVAL',\n",
-        " 'INC',\n",
-        " 'CRIME',\n",
-        " 'OPEN',\n",
-        " 'PLUMB',\n",
-        " 'DISCBD',\n",
-        " 'X',\n",
-        " 'Y',\n",
-        " 'NSA',\n",
-        " 'NSB',\n",
-        " 'EW',\n",
-        " 'CP',\n",
-        " 'THOUS',\n",
-        " 'NEIGNO',\n",
-        " 'CONSTANT',\n",
-        " 'maxpTabu_20140823211458',\n",
-        " 'arisel_20140823211459']"
-       ]
-      }
-     ],
-     "prompt_number": 6
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "warisel = ps.block_weights(columbus.region2areas)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 7
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "warisel.neighbors"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 8,
-       "text": [
-        "{0: [1L, 2L, 3L, 6L, 7L],\n",
-        " 1: [0L, 2L, 3L, 6L, 7L],\n",
-        " 2: [0L, 1L, 3L, 6L, 7L],\n",
-        " 3: [0L, 1L, 2L, 6L, 7L],\n",
-        " 4: [10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 5: [8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 6: [0L, 1L, 2L, 3L, 7L],\n",
-        " 7: [0L, 1L, 2L, 3L, 6L],\n",
-        " 8: [5L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 9: [5L, 8L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 10: [4L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 11: [4L,\n",
-        "  10L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 12: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 13: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 14: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 15: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 16: [5L, 8L, 9L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 17: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 18: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 19: [5L, 8L, 9L, 16L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 20: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 21: [5L, 8L, 9L, 16L, 19L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 22: [5L, 8L, 9L, 16L, 19L, 21L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 23: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 24: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 25: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 26: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 27: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 28: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 29: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 30: [33L, 35L, 38L, 41L, 45L],\n",
-        " 31: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 32: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  37L],\n",
-        " 33: [30L, 35L, 38L, 41L, 45L],\n",
-        " 34: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 35: [30L, 33L, 38L, 41L, 45L],\n",
-        " 36: [42L],\n",
-        " 37: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L],\n",
-        " 38: [30L, 33L, 35L, 41L, 45L],\n",
-        " 39: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 40: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 41: [30L, 33L, 35L, 38L, 45L],\n",
-        " 42: [36L],\n",
-        " 43: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 44L, 46L, 47L, 48L],\n",
-        " 44: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 46L, 47L, 48L],\n",
-        " 45: [30L, 33L, 35L, 38L, 41L],\n",
-        " 46: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 47L, 48L],\n",
-        " 47: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 48L],\n",
-        " 48: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L]}"
-       ]
-      }
-     ],
-     "prompt_number": 8
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "wregimes = ps.block_weights(columbus.region2areas)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 9
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "columbus.region2areas[5]"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 10,
-       "text": [
-        "1"
-       ]
-      }
-     ],
-     "prompt_number": 10
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "wregimes.n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 11,
-       "text": [
-        "49"
-       ]
-      }
-     ],
-     "prompt_number": 11
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "wregimes.neighbors"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 12,
-       "text": [
-        "{0: [1L, 2L, 3L, 6L, 7L],\n",
-        " 1: [0L, 2L, 3L, 6L, 7L],\n",
-        " 2: [0L, 1L, 3L, 6L, 7L],\n",
-        " 3: [0L, 1L, 2L, 6L, 7L],\n",
-        " 4: [10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 5: [8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 6: [0L, 1L, 2L, 3L, 7L],\n",
-        " 7: [0L, 1L, 2L, 3L, 6L],\n",
-        " 8: [5L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 9: [5L, 8L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 10: [4L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 11: [4L,\n",
-        "  10L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 12: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 13: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 14: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 15: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 16: [5L, 8L, 9L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 17: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 18: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 19: [5L, 8L, 9L, 16L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 20: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 21: [5L, 8L, 9L, 16L, 19L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 22: [5L, 8L, 9L, 16L, 19L, 21L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 23: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 24: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 25: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 26: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 27: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 28: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  29L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 29: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  32L,\n",
-        "  37L],\n",
-        " 30: [33L, 35L, 38L, 41L, 45L],\n",
-        " 31: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 32: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  37L],\n",
-        " 33: [30L, 35L, 38L, 41L, 45L],\n",
-        " 34: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 35: [30L, 33L, 38L, 41L, 45L],\n",
-        " 36: [42L],\n",
-        " 37: [4L,\n",
-        "  10L,\n",
-        "  11L,\n",
-        "  12L,\n",
-        "  13L,\n",
-        "  14L,\n",
-        "  15L,\n",
-        "  17L,\n",
-        "  18L,\n",
-        "  20L,\n",
-        "  23L,\n",
-        "  24L,\n",
-        "  25L,\n",
-        "  26L,\n",
-        "  27L,\n",
-        "  28L,\n",
-        "  29L,\n",
-        "  32L],\n",
-        " 38: [30L, 33L, 35L, 41L, 45L],\n",
-        " 39: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 40: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 43L, 44L, 46L, 47L, 48L],\n",
-        " 41: [30L, 33L, 35L, 38L, 45L],\n",
-        " 42: [36L],\n",
-        " 43: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 44L, 46L, 47L, 48L],\n",
-        " 44: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 46L, 47L, 48L],\n",
-        " 45: [30L, 33L, 35L, 38L, 41L],\n",
-        " 46: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 47L, 48L],\n",
-        " 47: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 48L],\n",
-        " 48: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L]}"
-       ]
-      }
-     ],
-     "prompt_number": 12
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "## Attrribute data from a csv file and a W from a gal file"
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "ClusterPy: Library of spatially constrained clustering algorithms\n",
+      "Populating the interactive namespace from numpy and matplotlib\n"
      ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico = cp.importCsvData(ps.examples.get_path('mexico.csv'))"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 13
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico.fieldNames"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 14,
-       "text": [
-        "['ID',\n",
-        " 'State',\n",
-        " 'pcgdp1940',\n",
-        " 'pcgdp1950',\n",
-        " 'pcgdp1960',\n",
-        " 'pcgdp1970',\n",
-        " 'pcgdp1980',\n",
-        " 'pcgdp1990',\n",
-        " 'pcgdp2000',\n",
-        " 'hanson03',\n",
-        " 'hanson98',\n",
-        " 'esquivel99',\n",
-        " 'inegi',\n",
-        " 'inegi2']"
-       ]
-      }
-     ],
-     "prompt_number": 14
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "w = ps.open(ps.examples.get_path('mexico.gal')).read()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 15
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "w.n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 16,
-       "text": [
-        "32"
-       ]
-      }
-     ],
-     "prompt_number": 16
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "cp.addRook2Layer(ps.examples.get_path('mexico.gal'), mexico)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 17
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico.Wrook"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 18,
-       "text": [
-        "{0: [31, 13],\n",
-        " 1: [2, 25],\n",
-        " 2: [1],\n",
-        " 3: [30, 22, 26],\n",
-        " 4: [19, 26, 29],\n",
-        " 5: [6, 9, 24, 25],\n",
-        " 6: [18, 23, 31, 9, 5],\n",
-        " 7: [13, 15],\n",
-        " 8: [16, 14],\n",
-        " 9: [5, 6, 31, 13, 17, 24],\n",
-        " 10: [23, 21, 31, 15, 13],\n",
-        " 11: [15, 14, 16, 20, 19],\n",
-        " 12: [21, 23, 29, 20, 28, 14],\n",
-        " 13: [17, 31, 0, 23, 10, 15, 7, 9],\n",
-        " 14: [21, 12, 28, 20, 16, 11, 15, 8],\n",
-        " 15: [7, 13, 10, 21, 14, 11],\n",
-        " 16: [14, 8, 20, 11],\n",
-        " 17: [24, 9, 31, 13],\n",
-        " 18: [6, 27, 23, 31],\n",
-        " 19: [11, 20, 29, 4],\n",
-        " 20: [29, 19, 11, 16, 14, 28, 12],\n",
-        " 21: [23, 12, 14, 15, 10],\n",
-        " 22: [30, 3],\n",
-        " 23: [18, 27, 29, 12, 21, 10, 31, 6, 13],\n",
-        " 24: [25, 5, 9, 17],\n",
-        " 25: [1, 5, 24],\n",
-        " 26: [3, 4, 29],\n",
-        " 27: [18, 29, 23],\n",
-        " 28: [12, 20, 14],\n",
-        " 29: [26, 4, 19, 20, 12, 23, 27],\n",
-        " 30: [3, 22],\n",
-        " 31: [18, 23, 10, 0, 13, 17, 9, 6]}"
-       ]
-      }
-     ],
-     "prompt_number": 18
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico.cluster('arisel', ['pcgdp1940'], 5, wType='rook', inits=10, dissolve=0)\n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n",
-        "Running original Arisel algorithm\n",
-        "Number of areas:  32\n",
-        "Number of regions:  5\n",
-        "initial Solution: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [2, 3, 3, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 2]\n",
-        "initial O.F:  287200188.741\n",
-        "FINAL SOLUTION: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [2, 3, 3, 0, 0, 2, 2, 2, 4, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 2, 1, 0, 0, 2, 0, 2, 0, 2, 0, 0]\n",
-        "FINAL OF:  186036319.667\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 19
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico.fieldNames"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 20,
-       "text": [
-        "['ID',\n",
-        " 'State',\n",
-        " 'pcgdp1940',\n",
-        " 'pcgdp1950',\n",
-        " 'pcgdp1960',\n",
-        " 'pcgdp1970',\n",
-        " 'pcgdp1980',\n",
-        " 'pcgdp1990',\n",
-        " 'pcgdp2000',\n",
-        " 'hanson03',\n",
-        " 'hanson98',\n",
-        " 'esquivel99',\n",
-        " 'inegi',\n",
-        " 'inegi2',\n",
-        " 'arisel_20140823211523']"
-       ]
-      }
-     ],
-     "prompt_number": 20
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico.getVars('pcgdp1940')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 21,
-       "text": [
-        "{0: [10384.0],\n",
-        " 1: [22361.0],\n",
-        " 2: [9573.0],\n",
-        " 3: [3758.0],\n",
-        " 4: [2934.0],\n",
-        " 5: [8578.0],\n",
-        " 6: [8537.0],\n",
-        " 7: [6909.0],\n",
-        " 8: [17816.0],\n",
-        " 9: [12132.0],\n",
-        " 10: [4359.0],\n",
-        " 11: [2181.0],\n",
-        " 12: [4414.0],\n",
-        " 13: [5309.0],\n",
-        " 14: [3408.0],\n",
-        " 15: [3327.0],\n",
-        " 16: [6936.0],\n",
-        " 17: [4836.0],\n",
-        " 18: [9073.0],\n",
-        " 19: [1892.0],\n",
-        " 20: [3569.0],\n",
-        " 21: [11016.0],\n",
-        " 22: [21965.0],\n",
-        " 23: [4372.0],\n",
-        " 24: [4840.0],\n",
-        " 25: [6399.0],\n",
-        " 26: [2459.0],\n",
-        " 27: [7508.0],\n",
-        " 28: [3605.0],\n",
-        " 29: [5203.0],\n",
-        " 30: [7990.0],\n",
-        " 31: [3734.0]}"
-       ]
-      }
-     ],
-     "prompt_number": 21
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "# mexico example all together\n",
-      "\n",
-      "csvfile = ps.examples.get_path('mexico.csv')\n",
-      "galfile = ps.examples.get_path('mexico.gal')\n",
-      "\n",
-      "mexico = cp.importCsvData(csvfile)\n",
-      "cp.addRook2Layer(galfile, mexico)\n",
-      "mexico.cluster('arisel', ['pcgdp1940'], 5, wType='rook', inits=10, dissolve=0)\n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n",
-        "Running original Arisel algorithm\n",
-        "Number of areas:  32\n",
-        "Number of regions:  5\n",
-        "initial Solution: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [2, 0, 0, 1, 1, 2, 2, 2, 4, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 3, 2, 2, 2, 1, 2, 1, 2, 1, 2]\n",
-        "initial O.F:  228683641.198\n",
-        "FINAL SOLUTION: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [2, 0, 0, 1, 1, 2, 2, 2, 4, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 2, 1, 2, 1, 2, 1, 1]\n",
-        "FINAL OF:  186036319.667\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 22
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico.region2areas.index(2)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 23,
-       "text": [
-        "0"
-       ]
-      }
-     ],
-     "prompt_number": 23
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico.Wrook[0]"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 24,
-       "text": [
-        "[31, 13]"
-       ]
-      }
-     ],
-     "prompt_number": 24
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "mexico.getVars('State')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 25,
-       "text": [
-        "{0: ['Aguascalientes'],\n",
-        " 1: ['Baja California'],\n",
-        " 2: ['Baja California Sur'],\n",
-        " 3: ['Campeche'],\n",
-        " 4: ['Chiapas'],\n",
-        " 5: ['Chihuahua'],\n",
-        " 6: ['Coahuila'],\n",
-        " 7: ['Colima'],\n",
-        " 8: ['Distrito Federal'],\n",
-        " 9: ['Durango'],\n",
-        " 10: ['Guanajuato'],\n",
-        " 11: ['Guerrero'],\n",
-        " 12: ['Hidalgo'],\n",
-        " 13: ['Jalisco'],\n",
-        " 14: ['Mexico'],\n",
-        " 15: ['Michoacan'],\n",
-        " 16: ['Morelos'],\n",
-        " 17: ['Nayarit'],\n",
-        " 18: ['Nuevo Leon'],\n",
-        " 19: ['Oaxaca'],\n",
-        " 20: ['Puebla'],\n",
-        " 21: ['Quertaro'],\n",
-        " 22: ['Quintana Roo'],\n",
-        " 23: ['San Luis Potosi'],\n",
-        " 24: ['Sinaloa'],\n",
-        " 25: ['Sonora'],\n",
-        " 26: ['Tabasco'],\n",
-        " 27: ['Tamaulipas'],\n",
-        " 28: ['Tlaxcala'],\n",
-        " 29: ['Veracruz'],\n",
-        " 30: ['Yucatan'],\n",
-        " 31: ['Zacatecas']}"
-       ]
-      }
-     ],
-     "prompt_number": 25
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "regions = np.array(mexico.region2areas)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 26
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "regions"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 27,
-       "text": [
-        "array([2, 0, 0, 1, 1, 2, 2, 2, 4, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 3,\n",
-        "       1, 1, 2, 1, 2, 1, 2, 1, 1])"
-       ]
-      }
-     ],
-     "prompt_number": 27
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "Counter(regions)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 28,
-       "text": [
-        "Counter({1: 16, 2: 12, 0: 2, 3: 1, 4: 1})"
-       ]
-      }
-     ],
-     "prompt_number": 28
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "## Shapefile and mapping results with PySAL Viz"
+    }
+   ],
+   "source": [
+    "import pysal.contrib.clusterpy as cp\n",
+    "%pylab inline"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import numpy as np\n",
+    "import pysal as ps\n",
+    "from collections import Counter"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Adding CONSTANT to fieldNames\n",
+      "Adding values from 1 to Y\n",
+      "Adding variables\n",
+      "Done\n",
+      "Getting variables\n",
+      "Variables successfully extracted\n",
+      "Running max-p-regions model (Duque, Anselin and Rey, 2010)\n",
+      "Local search method: Tabu Search\n",
+      "Number of areas:  49\n",
+      "threshold value:  4\n",
+      "FINAL SOLUTION:  [6, 3, 6, 3, 6, 6, 3, 3, 2, 2, 0, 0, 0, 0, 9, 0, 2, 9, 0, 5, 8, 2, 5, 9, 9, 9, 1, 1, 1, 8, 4, 5, 7, 4, 7, 4, 8, 1, 4, 5, 5, 4, 8, 7, 7, 4, 5, 7, 7]\n",
+      "FINAL OF:  3458.63068498\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "columbus = cp.loadArcData(ps.examples.get_path('columbus.shp'))\n",
+    "columbus.fieldNames\n",
+    "n = len(columbus.Wqueen)\n",
+    "#columbus.generateData('Uniform', 'rook', 1, 1, 10)\n",
+    "columbus.dataOperation(\"CONSTANT = 1\")\n",
+    "columbus.cluster('maxpTabu', ['CRIME',  'CONSTANT'], threshold=4, dissolve=0, std=0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Counter({0: 6, 1: 4, 2: 4, 3: 4, 4: 6, 5: 6, 6: 4, 7: 6, 8: 4, 9: 5})"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "Counter(columbus.region2areas)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n",
+      "Running original Arisel algorithm\n",
+      "Number of areas:  49\n",
+      "Number of regions:  5\n",
+      "initial Solution:  [2, 2, 2, 2, 0, 1, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 4, 0, 1, 4, 1, 1, 4, 0, 0, 0, 0, 0, 0, 4, 1, 3, 4, 3, 4, 3, 0, 4, 1, 1, 4, 3, 3, 3, 4, 1, 3, 3]\n",
+      "initial O.F:  4292.34464226\n",
+      "FINAL SOLUTION:  [2, 2, 2, 2, 0, 1, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 4, 1, 4, 3, 0, 4, 1, 1, 4, 3, 1, 1, 4, 1, 1, 1]\n",
+      "FINAL OF:  3695.95184733\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "columbus.cluster('arisel', ['CRIME'], 5, wType='rook', inits=10, dissolve=0)\n",
+    "#calif.cluster('arisel', ['PCR2002'], 9, wType='rook', inits=10, dissolve=1)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['ID',\n",
+       " 'AREA',\n",
+       " 'PERIMETER',\n",
+       " 'COLUMBUS_',\n",
+       " 'COLUMBUS_I',\n",
+       " 'POLYID',\n",
+       " 'NEIG',\n",
+       " 'HOVAL',\n",
+       " 'INC',\n",
+       " 'CRIME',\n",
+       " 'OPEN',\n",
+       " 'PLUMB',\n",
+       " 'DISCBD',\n",
+       " 'X',\n",
+       " 'Y',\n",
+       " 'NSA',\n",
+       " 'NSB',\n",
+       " 'EW',\n",
+       " 'CP',\n",
+       " 'THOUS',\n",
+       " 'NEIGNO',\n",
+       " 'CONSTANT',\n",
+       " 'maxpTabu_20150831012909']"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# regionalization solutions are added as a list of region ids at the end\n",
+    "columbus.fieldNames"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "warisel = ps.block_weights(columbus.region2areas)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{0: [1L, 2L, 3L, 6L, 7L],\n",
+       " 1: [0L, 2L, 3L, 6L, 7L],\n",
+       " 2: [0L, 1L, 3L, 6L, 7L],\n",
+       " 3: [0L, 1L, 2L, 6L, 7L],\n",
+       " 4: [10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 5: [8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 6: [0L, 1L, 2L, 3L, 7L],\n",
+       " 7: [0L, 1L, 2L, 3L, 6L],\n",
+       " 8: [5L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 9: [5L, 8L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 10: [4L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 11: [4L,\n",
+       "  10L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 12: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 13: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 14: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 15: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 16: [5L, 8L, 9L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 17: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 18: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 19: [5L, 8L, 9L, 16L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 20: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 21: [5L, 8L, 9L, 16L, 19L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 22: [5L, 8L, 9L, 16L, 19L, 21L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 23: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 24: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 25: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 26: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 27: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 28: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 29: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 30: [33L, 35L, 38L, 41L, 45L],\n",
+       " 31: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 32: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  37L],\n",
+       " 33: [30L, 35L, 38L, 41L, 45L],\n",
+       " 34: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 35: [30L, 33L, 38L, 41L, 45L],\n",
+       " 36: [42L],\n",
+       " 37: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L],\n",
+       " 38: [30L, 33L, 35L, 41L, 45L],\n",
+       " 39: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 40: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 41: [30L, 33L, 35L, 38L, 45L],\n",
+       " 42: [36L],\n",
+       " 43: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 44L, 46L, 47L, 48L],\n",
+       " 44: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 46L, 47L, 48L],\n",
+       " 45: [30L, 33L, 35L, 38L, 41L],\n",
+       " 46: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 47L, 48L],\n",
+       " 47: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 48L],\n",
+       " 48: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L]}"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "warisel.neighbors"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "wregimes = ps.block_weights(columbus.region2areas)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "1"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "columbus.region2areas[5]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "49"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "wregimes.n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{0: [1L, 2L, 3L, 6L, 7L],\n",
+       " 1: [0L, 2L, 3L, 6L, 7L],\n",
+       " 2: [0L, 1L, 3L, 6L, 7L],\n",
+       " 3: [0L, 1L, 2L, 6L, 7L],\n",
+       " 4: [10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 5: [8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 6: [0L, 1L, 2L, 3L, 7L],\n",
+       " 7: [0L, 1L, 2L, 3L, 6L],\n",
+       " 8: [5L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 9: [5L, 8L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 10: [4L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 11: [4L,\n",
+       "  10L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 12: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 13: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 14: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 15: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 16: [5L, 8L, 9L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 17: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 18: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 19: [5L, 8L, 9L, 16L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 20: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 21: [5L, 8L, 9L, 16L, 19L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 22: [5L, 8L, 9L, 16L, 19L, 21L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 23: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 24: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 25: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 26: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 27: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 28: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  29L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 29: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  32L,\n",
+       "  37L],\n",
+       " 30: [33L, 35L, 38L, 41L, 45L],\n",
+       " 31: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 34L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 32: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  37L],\n",
+       " 33: [30L, 35L, 38L, 41L, 45L],\n",
+       " 34: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 39L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 35: [30L, 33L, 38L, 41L, 45L],\n",
+       " 36: [42L],\n",
+       " 37: [4L,\n",
+       "  10L,\n",
+       "  11L,\n",
+       "  12L,\n",
+       "  13L,\n",
+       "  14L,\n",
+       "  15L,\n",
+       "  17L,\n",
+       "  18L,\n",
+       "  20L,\n",
+       "  23L,\n",
+       "  24L,\n",
+       "  25L,\n",
+       "  26L,\n",
+       "  27L,\n",
+       "  28L,\n",
+       "  29L,\n",
+       "  32L],\n",
+       " 38: [30L, 33L, 35L, 41L, 45L],\n",
+       " 39: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 40L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 40: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 43L, 44L, 46L, 47L, 48L],\n",
+       " 41: [30L, 33L, 35L, 38L, 45L],\n",
+       " 42: [36L],\n",
+       " 43: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 44L, 46L, 47L, 48L],\n",
+       " 44: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 46L, 47L, 48L],\n",
+       " 45: [30L, 33L, 35L, 38L, 41L],\n",
+       " 46: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 47L, 48L],\n",
+       " 47: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 48L],\n",
+       " 48: [5L, 8L, 9L, 16L, 19L, 21L, 22L, 31L, 34L, 39L, 40L, 43L, 44L, 46L, 47L]}"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "wregimes.neighbors"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Attrribute data from a csv file and a W from a gal file"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "mexico = cp.importCsvData(ps.examples.get_path('mexico.csv'))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['ID',\n",
+       " 'State',\n",
+       " 'pcgdp1940',\n",
+       " 'pcgdp1950',\n",
+       " 'pcgdp1960',\n",
+       " 'pcgdp1970',\n",
+       " 'pcgdp1980',\n",
+       " 'pcgdp1990',\n",
+       " 'pcgdp2000',\n",
+       " 'hanson03',\n",
+       " 'hanson98',\n",
+       " 'esquivel99',\n",
+       " 'inegi',\n",
+       " 'inegi2']"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mexico.fieldNames"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "w = ps.open(ps.examples.get_path('mexico.gal')).read()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "32"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "w.n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "cp.addRook2Layer(ps.examples.get_path('mexico.gal'), mexico)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{0: [31, 13],\n",
+       " 1: [2, 25],\n",
+       " 2: [1],\n",
+       " 3: [30, 22, 26],\n",
+       " 4: [19, 26, 29],\n",
+       " 5: [6, 9, 24, 25],\n",
+       " 6: [18, 23, 31, 9, 5],\n",
+       " 7: [13, 15],\n",
+       " 8: [16, 14],\n",
+       " 9: [5, 6, 31, 13, 17, 24],\n",
+       " 10: [23, 21, 31, 15, 13],\n",
+       " 11: [15, 14, 16, 20, 19],\n",
+       " 12: [21, 23, 29, 20, 28, 14],\n",
+       " 13: [17, 31, 0, 23, 10, 15, 7, 9],\n",
+       " 14: [21, 12, 28, 20, 16, 11, 15, 8],\n",
+       " 15: [7, 13, 10, 21, 14, 11],\n",
+       " 16: [14, 8, 20, 11],\n",
+       " 17: [24, 9, 31, 13],\n",
+       " 18: [6, 27, 23, 31],\n",
+       " 19: [11, 20, 29, 4],\n",
+       " 20: [29, 19, 11, 16, 14, 28, 12],\n",
+       " 21: [23, 12, 14, 15, 10],\n",
+       " 22: [30, 3],\n",
+       " 23: [18, 27, 29, 12, 21, 10, 31, 6, 13],\n",
+       " 24: [25, 5, 9, 17],\n",
+       " 25: [1, 5, 24],\n",
+       " 26: [3, 4, 29],\n",
+       " 27: [18, 29, 23],\n",
+       " 28: [12, 20, 14],\n",
+       " 29: [26, 4, 19, 20, 12, 23, 27],\n",
+       " 30: [3, 22],\n",
+       " 31: [18, 23, 10, 0, 13, 17, 9, 6]}"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mexico.Wrook"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n",
+      "Running original Arisel algorithm\n",
+      "Number of areas:  32\n",
+      "Number of regions:  5\n",
+      "initial Solution:  [2, 3, 3, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 2]\n",
+      "initial O.F:  287200188.741\n",
+      "FINAL SOLUTION:  [2, 3, 3, 0, 0, 2, 2, 2, 4, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 2, 1, 0, 0, 2, 0, 2, 0, 2, 0, 0]\n",
+      "FINAL OF:  186036319.667\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "mexico.cluster('arisel', ['pcgdp1940'], 5, wType='rook', inits=10, dissolve=0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['ID',\n",
+       " 'State',\n",
+       " 'pcgdp1940',\n",
+       " 'pcgdp1950',\n",
+       " 'pcgdp1960',\n",
+       " 'pcgdp1970',\n",
+       " 'pcgdp1980',\n",
+       " 'pcgdp1990',\n",
+       " 'pcgdp2000',\n",
+       " 'hanson03',\n",
+       " 'hanson98',\n",
+       " 'esquivel99',\n",
+       " 'inegi',\n",
+       " 'inegi2',\n",
+       " 'arisel_20140823211523']"
+      ]
+     },
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mexico.fieldNames"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n"
      ]
     },
     {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usf = ps.examples.get_path('us48.shp')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 29
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "us = cp.loadArcData(usf.split(\".\")[0])"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 30
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "us.Wqueen"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 31,
-       "text": [
-        "{0: [10, 7],\n",
-        " 1: [3, 4, 5, 7],\n",
-        " 2: [11],\n",
-        " 3: [1, 4, 9],\n",
-        " 4: [1, 3, 5, 9, 12, 14],\n",
-        " 5: [1, 4, 7, 14, 22, 29],\n",
-        " 6: [9, 12, 25, 47],\n",
-        " 7: [0, 1, 5, 10, 21, 22],\n",
-        " 8: [11, 13, 15],\n",
-        " 9: [12, 3, 4, 6],\n",
-        " 10: [0, 23, 21, 7],\n",
-        " 11: [8, 2, 13],\n",
-        " 12: [33, 4, 6, 9, 14, 25],\n",
-        " 13: [8, 17, 18, 11, 15],\n",
-        " 14: [33, 4, 5, 12, 29, 31],\n",
-        " 15: [8, 16, 19, 13, 17],\n",
-        " 16: [15, 19, 24, 26, 27, 28],\n",
-        " 17: [18, 13, 15],\n",
-        " 18: [17, 13],\n",
-        " 19: [16, 26, 15],\n",
-        " 20: [24, 25, 30, 47],\n",
-        " 21: [10, 23, 34, 22, 7],\n",
-        " 22: [34, 5, 39, 7, 21, 29],\n",
-        " 23: [10, 34, 21],\n",
-        " 24: [16, 27, 20, 30, 47],\n",
-        " 25: [20, 12, 30, 6, 33],\n",
-        " 26: [16, 19, 28],\n",
-        " 27: [16, 24, 28, 30, 32],\n",
-        " 28: [16, 32, 26, 27],\n",
-        " 29: [34, 35, 5, 39, 14, 22, 31],\n",
-        " 30: [32, 33, 37, 20, 24, 25, 27],\n",
-        " 31: [33, 35, 29, 14],\n",
-        " 32: [36, 27, 28, 37, 30],\n",
-        " 33: [35, 37, 44, 12, 14, 25, 30, 31],\n",
-        " 34: [39, 29, 21, 22, 23],\n",
-        " 35: [33, 38, 39, 44, 29, 31],\n",
-        " 36: [32, 42, 43, 37],\n",
-        " 37: [32, 33, 36, 40, 41, 42, 44, 30],\n",
-        " 38: [35, 44, 45, 39],\n",
-        " 39: [38, 34, 35, 29, 22],\n",
-        " 40: [41, 42, 37, 46],\n",
-        " 41: [40, 44, 37, 45],\n",
-        " 42: [40, 43, 36, 37, 46],\n",
-        " 43: [42, 36],\n",
-        " 44: [33, 35, 37, 38, 41, 45],\n",
-        " 45: [41, 44, 38],\n",
-        " 46: [40, 42],\n",
-        " 47: [24, 20, 6]}"
-       ]
-      }
-     ],
-     "prompt_number": 31
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "us.fieldNames"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 32,
-       "text": [
-        "['ID',\n",
-        " 'AREA',\n",
-        " 'PERIMETER',\n",
-        " 'STATE_',\n",
-        " 'STATE_ID',\n",
-        " 'STATE_NAME',\n",
-        " 'STATE_FIPS',\n",
-        " 'SUB_REGION',\n",
-        " 'STATE_ABBR']"
-       ]
-      }
-     ],
-     "prompt_number": 32
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "uscsv = ps.examples.get_path(\"usjoin.csv\")"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 33
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "f = ps.open(uscsv)\n",
-      "pci = np.array([f.by_col[str(y)] for y in range(1929, 2010)]).T"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 34
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "pci"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 35,
-       "text": [
-        "array([[  323,   267,   224, ..., 31988, 32819, 32274],\n",
-        "       [  600,   520,   429, ..., 33470, 33445, 32077],\n",
-        "       [  310,   228,   215, ..., 31070, 31800, 31493],\n",
-        "       ..., \n",
-        "       [  460,   408,   356, ..., 29769, 31265, 31843],\n",
-        "       [  673,   588,   469, ..., 35839, 36594, 35676],\n",
-        "       [  675,   585,   476, ..., 43453, 45177, 42504]])"
-       ]
-      }
-     ],
-     "prompt_number": 35
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy = cp.Layer()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 36
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "cp.addQueen2Layer(ps.examples.get_path('states48.gal'), usy)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 37
-    },
-    {
-     "cell_type": "code",
-     "collapsed": true,
-     "input": [
-      "names = [\"Y_%d\"%v for v in range(1929,2010)]\n",
-      "cp.addArray2Layer(pci, usy, names)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 38
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "names"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 39,
-       "text": [
-        "['Y_1929',\n",
-        " 'Y_1930',\n",
-        " 'Y_1931',\n",
-        " 'Y_1932',\n",
-        " 'Y_1933',\n",
-        " 'Y_1934',\n",
-        " 'Y_1935',\n",
-        " 'Y_1936',\n",
-        " 'Y_1937',\n",
-        " 'Y_1938',\n",
-        " 'Y_1939',\n",
-        " 'Y_1940',\n",
-        " 'Y_1941',\n",
-        " 'Y_1942',\n",
-        " 'Y_1943',\n",
-        " 'Y_1944',\n",
-        " 'Y_1945',\n",
-        " 'Y_1946',\n",
-        " 'Y_1947',\n",
-        " 'Y_1948',\n",
-        " 'Y_1949',\n",
-        " 'Y_1950',\n",
-        " 'Y_1951',\n",
-        " 'Y_1952',\n",
-        " 'Y_1953',\n",
-        " 'Y_1954',\n",
-        " 'Y_1955',\n",
-        " 'Y_1956',\n",
-        " 'Y_1957',\n",
-        " 'Y_1958',\n",
-        " 'Y_1959',\n",
-        " 'Y_1960',\n",
-        " 'Y_1961',\n",
-        " 'Y_1962',\n",
-        " 'Y_1963',\n",
-        " 'Y_1964',\n",
-        " 'Y_1965',\n",
-        " 'Y_1966',\n",
-        " 'Y_1967',\n",
-        " 'Y_1968',\n",
-        " 'Y_1969',\n",
-        " 'Y_1970',\n",
-        " 'Y_1971',\n",
-        " 'Y_1972',\n",
-        " 'Y_1973',\n",
-        " 'Y_1974',\n",
-        " 'Y_1975',\n",
-        " 'Y_1976',\n",
-        " 'Y_1977',\n",
-        " 'Y_1978',\n",
-        " 'Y_1979',\n",
-        " 'Y_1980',\n",
-        " 'Y_1981',\n",
-        " 'Y_1982',\n",
-        " 'Y_1983',\n",
-        " 'Y_1984',\n",
-        " 'Y_1985',\n",
-        " 'Y_1986',\n",
-        " 'Y_1987',\n",
-        " 'Y_1988',\n",
-        " 'Y_1989',\n",
-        " 'Y_1990',\n",
-        " 'Y_1991',\n",
-        " 'Y_1992',\n",
-        " 'Y_1993',\n",
-        " 'Y_1994',\n",
-        " 'Y_1995',\n",
-        " 'Y_1996',\n",
-        " 'Y_1997',\n",
-        " 'Y_1998',\n",
-        " 'Y_1999',\n",
-        " 'Y_2000',\n",
-        " 'Y_2001',\n",
-        " 'Y_2002',\n",
-        " 'Y_2003',\n",
-        " 'Y_2004',\n",
-        " 'Y_2005',\n",
-        " 'Y_2006',\n",
-        " 'Y_2007',\n",
-        " 'Y_2008',\n",
-        " 'Y_2009']"
-       ]
-      }
-     ],
-     "prompt_number": 39
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.fieldNames"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 40,
-       "text": [
-        "['Y_1929',\n",
-        " 'Y_1930',\n",
-        " 'Y_1931',\n",
-        " 'Y_1932',\n",
-        " 'Y_1933',\n",
-        " 'Y_1934',\n",
-        " 'Y_1935',\n",
-        " 'Y_1936',\n",
-        " 'Y_1937',\n",
-        " 'Y_1938',\n",
-        " 'Y_1939',\n",
-        " 'Y_1940',\n",
-        " 'Y_1941',\n",
-        " 'Y_1942',\n",
-        " 'Y_1943',\n",
-        " 'Y_1944',\n",
-        " 'Y_1945',\n",
-        " 'Y_1946',\n",
-        " 'Y_1947',\n",
-        " 'Y_1948',\n",
-        " 'Y_1949',\n",
-        " 'Y_1950',\n",
-        " 'Y_1951',\n",
-        " 'Y_1952',\n",
-        " 'Y_1953',\n",
-        " 'Y_1954',\n",
-        " 'Y_1955',\n",
-        " 'Y_1956',\n",
-        " 'Y_1957',\n",
-        " 'Y_1958',\n",
-        " 'Y_1959',\n",
-        " 'Y_1960',\n",
-        " 'Y_1961',\n",
-        " 'Y_1962',\n",
-        " 'Y_1963',\n",
-        " 'Y_1964',\n",
-        " 'Y_1965',\n",
-        " 'Y_1966',\n",
-        " 'Y_1967',\n",
-        " 'Y_1968',\n",
-        " 'Y_1969',\n",
-        " 'Y_1970',\n",
-        " 'Y_1971',\n",
-        " 'Y_1972',\n",
-        " 'Y_1973',\n",
-        " 'Y_1974',\n",
-        " 'Y_1975',\n",
-        " 'Y_1976',\n",
-        " 'Y_1977',\n",
-        " 'Y_1978',\n",
-        " 'Y_1979',\n",
-        " 'Y_1980',\n",
-        " 'Y_1981',\n",
-        " 'Y_1982',\n",
-        " 'Y_1983',\n",
-        " 'Y_1984',\n",
-        " 'Y_1985',\n",
-        " 'Y_1986',\n",
-        " 'Y_1987',\n",
-        " 'Y_1988',\n",
-        " 'Y_1989',\n",
-        " 'Y_1990',\n",
-        " 'Y_1991',\n",
-        " 'Y_1992',\n",
-        " 'Y_1993',\n",
-        " 'Y_1994',\n",
-        " 'Y_1995',\n",
-        " 'Y_1996',\n",
-        " 'Y_1997',\n",
-        " 'Y_1998',\n",
-        " 'Y_1999',\n",
-        " 'Y_2000',\n",
-        " 'Y_2001',\n",
-        " 'Y_2002',\n",
-        " 'Y_2003',\n",
-        " 'Y_2004',\n",
-        " 'Y_2005',\n",
-        " 'Y_2006',\n",
-        " 'Y_2007',\n",
-        " 'Y_2008',\n",
-        " 'Y_2009']"
-       ]
-      }
-     ],
-     "prompt_number": 40
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.getVars('Y_1929')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 41,
-       "text": [
-        "{0: [323],\n",
-        " 1: [600],\n",
-        " 2: [310],\n",
-        " 3: [991],\n",
-        " 4: [634],\n",
-        " 5: [1024],\n",
-        " 6: [1032],\n",
-        " 7: [518],\n",
-        " 8: [347],\n",
-        " 9: [507],\n",
-        " 10: [948],\n",
-        " 11: [607],\n",
-        " 12: [581],\n",
-        " 13: [532],\n",
-        " 14: [393],\n",
-        " 15: [414],\n",
-        " 16: [601],\n",
-        " 17: [768],\n",
-        " 18: [906],\n",
-        " 19: [790],\n",
-        " 20: [599],\n",
-        " 21: [286],\n",
-        " 22: [621],\n",
-        " 23: [592],\n",
-        " 24: [596],\n",
-        " 25: [868],\n",
-        " 26: [686],\n",
-        " 27: [918],\n",
-        " 28: [410],\n",
-        " 29: [1152],\n",
-        " 30: [332],\n",
-        " 31: [382],\n",
-        " 32: [771],\n",
-        " 33: [455],\n",
-        " 34: [668],\n",
-        " 35: [772],\n",
-        " 36: [874],\n",
-        " 37: [271],\n",
-        " 38: [426],\n",
-        " 39: [378],\n",
-        " 40: [479],\n",
-        " 41: [551],\n",
-        " 42: [634],\n",
-        " 43: [434],\n",
-        " 44: [741],\n",
-        " 45: [460],\n",
-        " 46: [673],\n",
-        " 47: [675]}"
-       ]
-      }
-     ],
-     "prompt_number": 41
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.Wrook"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 42,
-       "text": [
-        "{}"
-       ]
-      }
-     ],
-     "prompt_number": 42
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.cluster('arisel', ['Y_1980'], 8, wType='queen', inits=10, dissolve=0)\n",
-      "#mexico.cluster('arisel', ['pcgdp1940'], 5, wType='rook', inits=10, dissolve=0)\n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n",
-        "Running original Arisel algorithm\n",
-        "Number of areas:  48\n",
-        "Number of regions:  8\n",
-        "initial Solution: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [4, 0, 4, 2, 0, 6, 0, 4, 4, 1, 0, 0, 0, 0, 4, 4, 5, 0, 7, 0, 0, 4, 0, 1, 0, 2, 5, 7, 1, 7, 4, 1, 0, 0, 1, 0, 3, 4, 1, 4, 0, 1, 5, 0, 1, 4, 0, 0]\n",
-        "initial O.F:  23338316.0\n",
-        "FINAL SOLUTION: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [4, 1, 4, 2, 0, 6, 7, 4, 4, 1, 0, 0, 1, 0, 4, 1, 5, 0, 7, 0, 0, 4, 0, 1, 1, 2, 5, 7, 1, 7, 4, 1, 0, 1, 1, 0, 3, 4, 1, 4, 1, 1, 5, 0, 1, 4, 0, 0]\n",
-        "FINAL OF:  21804253.0\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 43
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 43
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "us = cp.Layer()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 44
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "cp.addQueen2Layer(ps.examples.get_path('states48.gal'), us)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 45
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "uscsv = ps.examples.get_path(\"usjoin.csv\")"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 46
-    },
-    {
-     "cell_type": "code",
-     "collapsed": true,
-     "input": [
-      "f = ps.open(uscsv)\n",
-      "pci = np.array([f.by_col[str(y)] for y in range(1929, 2010)]).T\n",
-      "names = [\"Y_%d\"%v for v in range(1929,2010)]\n",
-      "cp.addArray2Layer(pci, us, names)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 47
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.cluster('arisel', ['Y_1980'], 8, wType='queen', inits=10, dissolve=0)\n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n",
-        "Running original Arisel algorithm\n",
-        "Number of areas:  48\n",
-        "Number of regions:  8\n",
-        "initial Solution: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [0, 6, 0, 2, 6, 5, 6, 0, 0, 7, 6, 6, 6, 6, 0, 0, 4, 6, 4, 6, 6, 0, 6, 7, 6, 2, 4, 1, 7, 4, 0, 7, 6, 6, 2, 6, 4, 0, 7, 0, 6, 7, 3, 6, 2, 0, 6, 6]\n",
-        "initial O.F:  21166215.0\n",
-        "FINAL SOLUTION: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [0, 6, 0, 2, 6, 5, 1, 0, 0, 7, 6, 6, 6, 6, 0, 0, 4, 6, 4, 6, 6, 0, 6, 7, 7, 2, 4, 1, 7, 1, 0, 7, 6, 6, 2, 6, 4, 0, 7, 0, 6, 7, 3, 6, 2, 0, 6, 6]\n",
-        "FINAL OF:  19355956.0\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 48
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "us_alpha = cp.importCsvData(ps.examples.get_path('usjoin.csv'))"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 49
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "alpha_fips = us_alpha.getVars('STATE_FIPS')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n"
-       ]
-      }
-     ],
-     "prompt_number": 50
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "alpha_fips"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 51,
-       "text": [
-        "{0: [1],\n",
-        " 1: [4],\n",
-        " 2: [5],\n",
-        " 3: [6],\n",
-        " 4: [8],\n",
-        " 5: [9],\n",
-        " 6: [10],\n",
-        " 7: [12],\n",
-        " 8: [13],\n",
-        " 9: [16],\n",
-        " 10: [17],\n",
-        " 11: [18],\n",
-        " 12: [19],\n",
-        " 13: [20],\n",
-        " 14: [21],\n",
-        " 15: [22],\n",
-        " 16: [23],\n",
-        " 17: [24],\n",
-        " 18: [25],\n",
-        " 19: [26],\n",
-        " 20: [27],\n",
-        " 21: [28],\n",
-        " 22: [29],\n",
-        " 23: [30],\n",
-        " 24: [31],\n",
-        " 25: [32],\n",
-        " 26: [33],\n",
-        " 27: [34],\n",
-        " 28: [35],\n",
-        " 29: [36],\n",
-        " 30: [37],\n",
-        " 31: [38],\n",
-        " 32: [39],\n",
-        " 33: [40],\n",
-        " 34: [41],\n",
-        " 35: [42],\n",
-        " 36: [44],\n",
-        " 37: [45],\n",
-        " 38: [46],\n",
-        " 39: [47],\n",
-        " 40: [48],\n",
-        " 41: [49],\n",
-        " 42: [50],\n",
-        " 43: [51],\n",
-        " 44: [53],\n",
-        " 45: [54],\n",
-        " 46: [55],\n",
-        " 47: [56]}"
-       ]
-      }
-     ],
-     "prompt_number": 51
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "dbf = ps.open(ps.examples.get_path('us48.dbf'))"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 52
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "dbf.header"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 53,
-       "text": [
-        "['AREA',\n",
-        " 'PERIMETER',\n",
-        " 'STATE_',\n",
-        " 'STATE_ID',\n",
-        " 'STATE_NAME',\n",
-        " 'STATE_FIPS',\n",
-        " 'SUB_REGION',\n",
-        " 'STATE_ABBR']"
-       ]
-      }
-     ],
-     "prompt_number": 53
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "state_fips = dbf.by_col('STATE_FIPS')\n",
-      "names = dbf.by_col('STATE_NAME')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 54
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "names"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 55,
-       "text": [
-        "['Washington',\n",
-        " 'Montana',\n",
-        " 'Maine',\n",
-        " 'North Dakota',\n",
-        " 'South Dakota',\n",
-        " 'Wyoming',\n",
-        " 'Wisconsin',\n",
-        " 'Idaho',\n",
-        " 'Vermont',\n",
-        " 'Minnesota',\n",
-        " 'Oregon',\n",
-        " 'New Hampshire',\n",
-        " 'Iowa',\n",
-        " 'Massachusetts',\n",
-        " 'Nebraska',\n",
-        " 'New York',\n",
-        " 'Pennsylvania',\n",
-        " 'Connecticut',\n",
-        " 'Rhode Island',\n",
-        " 'New Jersey',\n",
-        " 'Indiana',\n",
-        " 'Nevada',\n",
-        " 'Utah',\n",
-        " 'California',\n",
-        " 'Ohio',\n",
-        " 'Illinois',\n",
-        " 'Delaware',\n",
-        " 'West Virginia',\n",
-        " 'Maryland',\n",
-        " 'Colorado',\n",
-        " 'Kentucky',\n",
-        " 'Kansas',\n",
-        " 'Virginia',\n",
-        " 'Missouri',\n",
-        " 'Arizona',\n",
-        " 'Oklahoma',\n",
-        " 'North Carolina',\n",
-        " 'Tennessee',\n",
-        " 'Texas',\n",
-        " 'New Mexico',\n",
-        " 'Alabama',\n",
-        " 'Mississippi',\n",
-        " 'Georgia',\n",
-        " 'South Carolina',\n",
-        " 'Arkansas',\n",
-        " 'Louisiana',\n",
-        " 'Florida',\n",
-        " 'Michigan']"
-       ]
-      }
-     ],
-     "prompt_number": 55
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "state_fips = map(int, state_fips)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 56
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "state_fips"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 57,
-       "text": [
-        "[53,\n",
-        " 30,\n",
-        " 23,\n",
-        " 38,\n",
-        " 46,\n",
-        " 56,\n",
-        " 55,\n",
-        " 16,\n",
-        " 50,\n",
-        " 27,\n",
-        " 41,\n",
-        " 33,\n",
-        " 19,\n",
-        " 25,\n",
-        " 31,\n",
-        " 36,\n",
-        " 42,\n",
-        " 9,\n",
-        " 44,\n",
-        " 34,\n",
-        " 18,\n",
-        " 32,\n",
-        " 49,\n",
-        " 6,\n",
-        " 39,\n",
-        " 17,\n",
-        " 10,\n",
-        " 54,\n",
-        " 24,\n",
-        " 8,\n",
-        " 21,\n",
-        " 20,\n",
-        " 51,\n",
-        " 29,\n",
-        " 4,\n",
-        " 40,\n",
-        " 37,\n",
-        " 47,\n",
-        " 48,\n",
-        " 35,\n",
-        " 1,\n",
-        " 28,\n",
-        " 13,\n",
-        " 45,\n",
-        " 5,\n",
-        " 22,\n",
-        " 12,\n",
-        " 26]"
-       ]
-      }
-     ],
-     "prompt_number": 57
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "# the csv file has the states ordered alphabetically, but this isn't the case for the order in the shapefile so we have to reorder before any choropleths are drawn\n",
-      "alpha_fips = [i[0] for i in alpha_fips.values()]\n",
-      "reorder = [ alpha_fips.index(s) for s in state_fips]"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 58
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "regions = usy.region2areas"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 59
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "regions"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "pyout",
-       "prompt_number": 60,
-       "text": [
-        "[0,\n",
-        " 6,\n",
-        " 0,\n",
-        " 2,\n",
-        " 6,\n",
-        " 5,\n",
-        " 1,\n",
-        " 0,\n",
-        " 0,\n",
-        " 7,\n",
-        " 6,\n",
-        " 6,\n",
-        " 6,\n",
-        " 6,\n",
-        " 0,\n",
-        " 0,\n",
-        " 4,\n",
-        " 6,\n",
-        " 4,\n",
-        " 6,\n",
-        " 6,\n",
-        " 0,\n",
-        " 6,\n",
-        " 7,\n",
-        " 7,\n",
-        " 2,\n",
-        " 4,\n",
-        " 1,\n",
-        " 7,\n",
-        " 1,\n",
-        " 0,\n",
-        " 7,\n",
-        " 6,\n",
-        " 6,\n",
-        " 2,\n",
-        " 6,\n",
-        " 4,\n",
-        " 0,\n",
-        " 7,\n",
-        " 0,\n",
-        " 6,\n",
-        " 7,\n",
-        " 3,\n",
-        " 6,\n",
-        " 2,\n",
-        " 0,\n",
-        " 6,\n",
-        " 6]"
-       ]
-      }
-     ],
-     "prompt_number": 60
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "from pysal.contrib.viz import mapping as maps"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 61
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "shp = ps.examples.get_path('us48.shp')\n",
-      "regions = np.array(regions)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 62
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "maps.plot_choropleth(shp, regions[reorder], 'unique_values')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd8FNXax3/nzMz29ISQCiGUAKGXSJeOFKWKysUCCBaw\n36tXvXZFUHxt6LWCCqKiICgIUqT3GnpvIYUAaZttM3PO+8duQoCU3WSTbLz7/egH2J0588zsmWee\nec5TAD9+/Pjx48ePHz9+/Pjx48ePHz9+/Pjx48ePHz9+/Pjx48ePHz9+/Pjx48ePn7pDgEaT+fGQ\nITxAo7ECSKhtefz4KQta2wL48eMNOCD0TkhA59hYB4BOtS2PHz9lIXpxrMkA4gCoXhzTUxoCuAKg\n4IbPkwEcrHFpfJtI159ZtSpF2bQAcAxuziezwxEuEIIeDRoEbLlwoZtVln+qXvH8+Kkc3lK6kQA+\nG9g0Eu1jQ [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x149ca390>"
-       ]
-      }
-     ],
-     "prompt_number": 63
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.cluster('arisel', ['Y_1929'], 8, wType='queen', inits=10, dissolve=0)\n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Getting variables\n",
-        "Variables successfully extracted\n",
-        "Running original Arisel algorithm\n",
-        "Number of areas:  48\n",
-        "Number of regions:  8\n",
-        "initial Solution: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [0, 4, 0, 1, 4, 6, 6, 0, 0, 4, 5, 5, 4, 4, 2, 0, 3, 5, 6, 5, 4, 0, 4, 7, 4, 1, 3, 6, 0, 6, 0, 4, 5, 0, 4, 5, 6, 0, 4, 2, 0, 4, 3, 2, 4, 2, 4, 7]\n",
-        "initial O.F:  320792.0\n",
-        "FINAL SOLUTION: "
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        " [0, 4, 0, 1, 7, 6, 6, 0, 0, 4, 5, 5, 4, 4, 0, 0, 3, 5, 6, 5, 4, 0, 4, 4, 4, 1, 3, 6, 0, 6, 0, 4, 5, 0, 4, 5, 6, 0, 4, 0, 0, 4, 3, 2, 4, 2, 5, 7]\n",
-        "FINAL OF:  311057.0\n",
-        "Done\n",
-        "Adding variables\n",
-        "Done\n"
-       ]
-      }
-     ],
-     "prompt_number": 64
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "regions = usy.region2areas"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 65
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "regions = np.array(regions)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 66
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "maps.plot_choropleth(shp, regions[reorder], 'unique_values')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd8FMX7xz8zW66nkZCEltBLgNCrgBTp+EXFhuWriKAi\nKijqzwKKBUEFFQVBBTtWRAREEBSQ3os06TWUkH5ly8zvj01CgJS75C65+L33C15J7nZnn92dfXbm\nmacAIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQlQeLzZ4y/IXJ\n3GKzuwDUrmh5QoQoClrRAoQI4Q8450JSu86o16ylAqBtRcsTIkRRiH5sawSAmgB0P7bpK4kAUgFk\nXfV5UwB7yl2a4CY29+e5CpWiaJoAOAAv+5PbmRNNqYDGrTs6DuzY0llxu74LrHghQpQOfyndWACz\nWlzXA3WaJ [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x1495def0>"
-       ]
-      }
-     ],
-     "prompt_number": 67
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "names = [\"Y_%d\"%i for i in range(1929, 2010)]\n",
-      "#usy.cluster('arisel', ['Y_1929'], 8, wType='queen', inits=10, dissolve=0)\n",
-      "usy.cluster('arisel', names, 8, wType='queen', inits=10, dissolve=0)\n"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "regions = usy.region2areas\n",
-      "regions = np.array(regions)\n",
-      "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='All Years')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "ps.version"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.cluster('arisel', names[:40], 8, wType='queen', inits=10, dissolve=0)\n",
-      "regions = usy.region2areas\n",
-      "regions = np.array(regions)\n",
-      "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='1929-68')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.cluster('arisel', names[40:], 8, wType='queen', inits=10, dissolve=0)\n",
-      "regions = usy.region2areas\n",
-      "regions = np.array(regions)\n",
-      "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='1969-2009')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.cluster('arisel', names[40:], 8, wType='queen', inits=10, dissolve=0)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.dataOperation(\"CONSTANT = 1\")\n",
-      "usy.Wrook = usy.Wqueen\n",
-      "usy.cluster('maxpTabu', ['Y_1929', 'Y_1929'], threshold=1000, dissolve=0)\n",
-      "regions = usy.region2areas\n",
-      "regions = np.array(regions)\n",
-      "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='maxp 1929')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "Counter(regions)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.getVars('Y_1929')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.Wrook"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.cluster('maxpTabu', ['Y_1929', 'CONSTANT'], threshold=8, dissolve=0)\n",
-      "regions = usy.region2areas\n",
-      "regions = np.array(regions)\n",
-      "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='maxp 1929')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "regions"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "Counter(regions)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "vars = names"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "vars.append('CONSTANT')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "vars"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "usy.cluster('maxpTabu', vars, threshold=8, dissolve=0)\n",
-      "regions = usy.region2areas\n",
-      "regions = np.array(regions)\n",
-      "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='maxp 1929-2009')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "Counter(regions)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "south = cp.loadArcData(ps.examples.get_path(\"south.shp\"))"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "south.fieldNames"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "# uncomment if you have some time ;->\n",
-      "#south.cluster('arisel', ['HR70'], 20, wType='queen', inits=10, dissolve=0)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "#regions = south.region2areas"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "shp = ps.examples.get_path('south.shp')\n",
-      "#maps.plot_choropleth(shp, np.array(regions), 'unique_values')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "south.dataOperation(\"CONSTANT = 1\")\n",
-      "south.cluster('maxpTabu', ['HR70', 'CONSTANT'], threshold=70, dissolve=0)\n",
-      "regions = south.region2areas\n",
-      "regions = np.array(regions)\n",
-      "maps.plot_choropleth(shp, regions, 'unique_values', title='maxp HR70 threshold=70')"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
+     "data": {
+      "text/plain": [
+       "{0: [10384.0],\n",
+       " 1: [22361.0],\n",
+       " 2: [9573.0],\n",
+       " 3: [3758.0],\n",
+       " 4: [2934.0],\n",
+       " 5: [8578.0],\n",
+       " 6: [8537.0],\n",
+       " 7: [6909.0],\n",
+       " 8: [17816.0],\n",
+       " 9: [12132.0],\n",
+       " 10: [4359.0],\n",
+       " 11: [2181.0],\n",
+       " 12: [4414.0],\n",
+       " 13: [5309.0],\n",
+       " 14: [3408.0],\n",
+       " 15: [3327.0],\n",
+       " 16: [6936.0],\n",
+       " 17: [4836.0],\n",
+       " 18: [9073.0],\n",
+       " 19: [1892.0],\n",
+       " 20: [3569.0],\n",
+       " 21: [11016.0],\n",
+       " 22: [21965.0],\n",
+       " 23: [4372.0],\n",
+       " 24: [4840.0],\n",
+       " 25: [6399.0],\n",
+       " 26: [2459.0],\n",
+       " 27: [7508.0],\n",
+       " 28: [3605.0],\n",
+       " 29: [5203.0],\n",
+       " 30: [7990.0],\n",
+       " 31: [3734.0]}"
+      ]
+     },
+     "execution_count": 21,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mexico.getVars('pcgdp1940')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n",
+      "Running original Arisel algorithm\n",
+      "Number of areas:  32\n",
+      "Number of regions:  5\n",
+      "initial Solution:  [2, 0, 0, 1, 1, 2, 2, 2, 4, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 3, 2, 2, 2, 1, 2, 1, 2, 1, 2]\n",
+      "initial O.F:  228683641.198\n",
+      "FINAL SOLUTION:  [2, 0, 0, 1, 1, 2, 2, 2, 4, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 2, 1, 2, 1, 2, 1, 1]\n",
+      "FINAL OF:  186036319.667\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "# mexico example all together\n",
+    "\n",
+    "csvfile = ps.examples.get_path('mexico.csv')\n",
+    "galfile = ps.examples.get_path('mexico.gal')\n",
+    "\n",
+    "mexico = cp.importCsvData(csvfile)\n",
+    "cp.addRook2Layer(galfile, mexico)\n",
+    "mexico.cluster('arisel', ['pcgdp1940'], 5, wType='rook', inits=10, dissolve=0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0"
+      ]
+     },
+     "execution_count": 23,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mexico.region2areas.index(2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[31, 13]"
+      ]
+     },
+     "execution_count": 24,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mexico.Wrook[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n"
+     ]
     },
     {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "Counter(regions)"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
+     "data": {
+      "text/plain": [
+       "{0: ['Aguascalientes'],\n",
+       " 1: ['Baja California'],\n",
+       " 2: ['Baja California Sur'],\n",
+       " 3: ['Campeche'],\n",
+       " 4: ['Chiapas'],\n",
+       " 5: ['Chihuahua'],\n",
+       " 6: ['Coahuila'],\n",
+       " 7: ['Colima'],\n",
+       " 8: ['Distrito Federal'],\n",
+       " 9: ['Durango'],\n",
+       " 10: ['Guanajuato'],\n",
+       " 11: ['Guerrero'],\n",
+       " 12: ['Hidalgo'],\n",
+       " 13: ['Jalisco'],\n",
+       " 14: ['Mexico'],\n",
+       " 15: ['Michoacan'],\n",
+       " 16: ['Morelos'],\n",
+       " 17: ['Nayarit'],\n",
+       " 18: ['Nuevo Leon'],\n",
+       " 19: ['Oaxaca'],\n",
+       " 20: ['Puebla'],\n",
+       " 21: ['Quertaro'],\n",
+       " 22: ['Quintana Roo'],\n",
+       " 23: ['San Luis Potosi'],\n",
+       " 24: ['Sinaloa'],\n",
+       " 25: ['Sonora'],\n",
+       " 26: ['Tabasco'],\n",
+       " 27: ['Tamaulipas'],\n",
+       " 28: ['Tlaxcala'],\n",
+       " 29: ['Veracruz'],\n",
+       " 30: ['Yucatan'],\n",
+       " 31: ['Zacatecas']}"
+      ]
+     },
+     "execution_count": 25,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mexico.getVars('State')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "regions = np.array(mexico.region2areas)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([2, 0, 0, 1, 1, 2, 2, 2, 4, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 3,\n",
+       "       1, 1, 2, 1, 2, 1, 2, 1, 1])"
+      ]
+     },
+     "execution_count": 27,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "regions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Counter({1: 16, 2: 12, 0: 2, 3: 1, 4: 1})"
+      ]
+     },
+     "execution_count": 28,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "Counter(regions)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Attrribute data from a csv file and an external `W` object"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "mexico = cp.importCsvData(ps.examples.get_path('mexico.csv'))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "w = ps.open(ps.examples.get_path('mexico.gal')).read()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "cp.addW2Layer(w, mexico)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'0': ['31', '13'],\n",
+       " '1': ['2', '25'],\n",
+       " '10': ['23', '21', '31', '15', '13'],\n",
+       " '11': ['15', '14', '16', '20', '19'],\n",
+       " '12': ['21', '23', '29', '20', '28', '14'],\n",
+       " '13': ['17', '31', '0', '23', '10', '15', '7', '9'],\n",
+       " '14': ['21', '12', '28', '20', '16', '11', '15', '8'],\n",
+       " '15': ['7', '13', '10', '21', '14', '11'],\n",
+       " '16': ['14', '8', '20', '11'],\n",
+       " '17': ['24', '9', '31', '13'],\n",
+       " '18': ['6', '27', '23', '31'],\n",
+       " '19': ['11', '20', '29', '4'],\n",
+       " '2': ['1'],\n",
+       " '20': ['29', '19', '11', '16', '14', '28', '12'],\n",
+       " '21': ['23', '12', '14', '15', '10'],\n",
+       " '22': ['30', '3'],\n",
+       " '23': ['18', '27', '29', '12', '21', '10', '31', '6', '13'],\n",
+       " '24': ['25', '5', '9', '17'],\n",
+       " '25': ['1', '5', '24'],\n",
+       " '26': ['3', '4', '29'],\n",
+       " '27': ['18', '29', '23'],\n",
+       " '28': ['12', '20', '14'],\n",
+       " '29': ['26', '4', '19', '20', '12', '23', '27'],\n",
+       " '3': ['30', '22', '26'],\n",
+       " '30': ['3', '22'],\n",
+       " '31': ['18', '23', '10', '0', '13', '17', '9', '6'],\n",
+       " '4': ['19', '26', '29'],\n",
+       " '5': ['6', '9', '24', '25'],\n",
+       " '6': ['18', '23', '31', '9', '5'],\n",
+       " '7': ['13', '15'],\n",
+       " '8': ['16', '14'],\n",
+       " '9': ['5', '6', '31', '13', '17', '24']}"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mexico.Wrook"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n",
+      "Running original Arisel algorithm\n",
+      "Number of areas:  32\n",
+      "Number of regions:  5\n",
+      "Disconnected areas neighs:  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]\n",
+      "initial Solution:  [-1, 2, -1, -1, -1, -1, -1, -1, 4, 1, -1, -1, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1]\n",
+      "initial O.F:  0.0\n",
+      "FINAL SOLUTION:  [-1, 2, -1, -1, -1, -1, -1, -1, 4, 1, -1, -1, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1]\n",
+      "FINAL OF:  0.0\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "mexico.cluster('arisel', ['pcgdp1940'], 5, wType='rook', inits=10, dissolve=0)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Shapefile and mapping results with PySAL Viz"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usf = ps.examples.get_path('us48.shp')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "us = cp.loadArcData(usf.split(\".\")[0])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{0: [10, 7],\n",
+       " 1: [3, 4, 5, 7],\n",
+       " 2: [11],\n",
+       " 3: [1, 4, 9],\n",
+       " 4: [1, 3, 5, 9, 12, 14],\n",
+       " 5: [1, 4, 7, 14, 22, 29],\n",
+       " 6: [9, 12, 25, 47],\n",
+       " 7: [0, 1, 5, 10, 21, 22],\n",
+       " 8: [11, 13, 15],\n",
+       " 9: [12, 3, 4, 6],\n",
+       " 10: [0, 23, 21, 7],\n",
+       " 11: [8, 2, 13],\n",
+       " 12: [33, 4, 6, 9, 14, 25],\n",
+       " 13: [8, 17, 18, 11, 15],\n",
+       " 14: [33, 4, 5, 12, 29, 31],\n",
+       " 15: [8, 16, 19, 13, 17],\n",
+       " 16: [15, 19, 24, 26, 27, 28],\n",
+       " 17: [18, 13, 15],\n",
+       " 18: [17, 13],\n",
+       " 19: [16, 26, 15],\n",
+       " 20: [24, 25, 30, 47],\n",
+       " 21: [10, 23, 34, 22, 7],\n",
+       " 22: [34, 5, 39, 7, 21, 29],\n",
+       " 23: [10, 34, 21],\n",
+       " 24: [16, 27, 20, 30, 47],\n",
+       " 25: [20, 12, 30, 6, 33],\n",
+       " 26: [16, 19, 28],\n",
+       " 27: [16, 24, 28, 30, 32],\n",
+       " 28: [16, 32, 26, 27],\n",
+       " 29: [34, 35, 5, 39, 14, 22, 31],\n",
+       " 30: [32, 33, 37, 20, 24, 25, 27],\n",
+       " 31: [33, 35, 29, 14],\n",
+       " 32: [36, 27, 28, 37, 30],\n",
+       " 33: [35, 37, 44, 12, 14, 25, 30, 31],\n",
+       " 34: [39, 29, 21, 22, 23],\n",
+       " 35: [33, 38, 39, 44, 29, 31],\n",
+       " 36: [32, 42, 43, 37],\n",
+       " 37: [32, 33, 36, 40, 41, 42, 44, 30],\n",
+       " 38: [35, 44, 45, 39],\n",
+       " 39: [38, 34, 35, 29, 22],\n",
+       " 40: [41, 42, 37, 46],\n",
+       " 41: [40, 44, 37, 45],\n",
+       " 42: [40, 43, 36, 37, 46],\n",
+       " 43: [42, 36],\n",
+       " 44: [33, 35, 37, 38, 41, 45],\n",
+       " 45: [41, 44, 38],\n",
+       " 46: [40, 42],\n",
+       " 47: [24, 20, 6]}"
+      ]
+     },
+     "execution_count": 31,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "us.Wqueen"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['ID',\n",
+       " 'AREA',\n",
+       " 'PERIMETER',\n",
+       " 'STATE_',\n",
+       " 'STATE_ID',\n",
+       " 'STATE_NAME',\n",
+       " 'STATE_FIPS',\n",
+       " 'SUB_REGION',\n",
+       " 'STATE_ABBR']"
+      ]
+     },
+     "execution_count": 32,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "us.fieldNames"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "uscsv = ps.examples.get_path(\"usjoin.csv\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "f = ps.open(uscsv)\n",
+    "pci = np.array([f.by_col[str(y)] for y in range(1929, 2010)]).T"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([[  323,   267,   224, ..., 31988, 32819, 32274],\n",
+       "       [  600,   520,   429, ..., 33470, 33445, 32077],\n",
+       "       [  310,   228,   215, ..., 31070, 31800, 31493],\n",
+       "       ..., \n",
+       "       [  460,   408,   356, ..., 29769, 31265, 31843],\n",
+       "       [  673,   588,   469, ..., 35839, 36594, 35676],\n",
+       "       [  675,   585,   476, ..., 43453, 45177, 42504]])"
+      ]
+     },
+     "execution_count": 35,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pci"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy = cp.Layer()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "cp.addQueen2Layer(ps.examples.get_path('states48.gal'), usy)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "names = [\"Y_%d\"%v for v in range(1929,2010)]\n",
+    "cp.addArray2Layer(pci, usy, names)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['Y_1929',\n",
+       " 'Y_1930',\n",
+       " 'Y_1931',\n",
+       " 'Y_1932',\n",
+       " 'Y_1933',\n",
+       " 'Y_1934',\n",
+       " 'Y_1935',\n",
+       " 'Y_1936',\n",
+       " 'Y_1937',\n",
+       " 'Y_1938',\n",
+       " 'Y_1939',\n",
+       " 'Y_1940',\n",
+       " 'Y_1941',\n",
+       " 'Y_1942',\n",
+       " 'Y_1943',\n",
+       " 'Y_1944',\n",
+       " 'Y_1945',\n",
+       " 'Y_1946',\n",
+       " 'Y_1947',\n",
+       " 'Y_1948',\n",
+       " 'Y_1949',\n",
+       " 'Y_1950',\n",
+       " 'Y_1951',\n",
+       " 'Y_1952',\n",
+       " 'Y_1953',\n",
+       " 'Y_1954',\n",
+       " 'Y_1955',\n",
+       " 'Y_1956',\n",
+       " 'Y_1957',\n",
+       " 'Y_1958',\n",
+       " 'Y_1959',\n",
+       " 'Y_1960',\n",
+       " 'Y_1961',\n",
+       " 'Y_1962',\n",
+       " 'Y_1963',\n",
+       " 'Y_1964',\n",
+       " 'Y_1965',\n",
+       " 'Y_1966',\n",
+       " 'Y_1967',\n",
+       " 'Y_1968',\n",
+       " 'Y_1969',\n",
+       " 'Y_1970',\n",
+       " 'Y_1971',\n",
+       " 'Y_1972',\n",
+       " 'Y_1973',\n",
+       " 'Y_1974',\n",
+       " 'Y_1975',\n",
+       " 'Y_1976',\n",
+       " 'Y_1977',\n",
+       " 'Y_1978',\n",
+       " 'Y_1979',\n",
+       " 'Y_1980',\n",
+       " 'Y_1981',\n",
+       " 'Y_1982',\n",
+       " 'Y_1983',\n",
+       " 'Y_1984',\n",
+       " 'Y_1985',\n",
+       " 'Y_1986',\n",
+       " 'Y_1987',\n",
+       " 'Y_1988',\n",
+       " 'Y_1989',\n",
+       " 'Y_1990',\n",
+       " 'Y_1991',\n",
+       " 'Y_1992',\n",
+       " 'Y_1993',\n",
+       " 'Y_1994',\n",
+       " 'Y_1995',\n",
+       " 'Y_1996',\n",
+       " 'Y_1997',\n",
+       " 'Y_1998',\n",
+       " 'Y_1999',\n",
+       " 'Y_2000',\n",
+       " 'Y_2001',\n",
+       " 'Y_2002',\n",
+       " 'Y_2003',\n",
+       " 'Y_2004',\n",
+       " 'Y_2005',\n",
+       " 'Y_2006',\n",
+       " 'Y_2007',\n",
+       " 'Y_2008',\n",
+       " 'Y_2009']"
+      ]
+     },
+     "execution_count": 39,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "names"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['Y_1929',\n",
+       " 'Y_1930',\n",
+       " 'Y_1931',\n",
+       " 'Y_1932',\n",
+       " 'Y_1933',\n",
+       " 'Y_1934',\n",
+       " 'Y_1935',\n",
+       " 'Y_1936',\n",
+       " 'Y_1937',\n",
+       " 'Y_1938',\n",
+       " 'Y_1939',\n",
+       " 'Y_1940',\n",
+       " 'Y_1941',\n",
+       " 'Y_1942',\n",
+       " 'Y_1943',\n",
+       " 'Y_1944',\n",
+       " 'Y_1945',\n",
+       " 'Y_1946',\n",
+       " 'Y_1947',\n",
+       " 'Y_1948',\n",
+       " 'Y_1949',\n",
+       " 'Y_1950',\n",
+       " 'Y_1951',\n",
+       " 'Y_1952',\n",
+       " 'Y_1953',\n",
+       " 'Y_1954',\n",
+       " 'Y_1955',\n",
+       " 'Y_1956',\n",
+       " 'Y_1957',\n",
+       " 'Y_1958',\n",
+       " 'Y_1959',\n",
+       " 'Y_1960',\n",
+       " 'Y_1961',\n",
+       " 'Y_1962',\n",
+       " 'Y_1963',\n",
+       " 'Y_1964',\n",
+       " 'Y_1965',\n",
+       " 'Y_1966',\n",
+       " 'Y_1967',\n",
+       " 'Y_1968',\n",
+       " 'Y_1969',\n",
+       " 'Y_1970',\n",
+       " 'Y_1971',\n",
+       " 'Y_1972',\n",
+       " 'Y_1973',\n",
+       " 'Y_1974',\n",
+       " 'Y_1975',\n",
+       " 'Y_1976',\n",
+       " 'Y_1977',\n",
+       " 'Y_1978',\n",
+       " 'Y_1979',\n",
+       " 'Y_1980',\n",
+       " 'Y_1981',\n",
+       " 'Y_1982',\n",
+       " 'Y_1983',\n",
+       " 'Y_1984',\n",
+       " 'Y_1985',\n",
+       " 'Y_1986',\n",
+       " 'Y_1987',\n",
+       " 'Y_1988',\n",
+       " 'Y_1989',\n",
+       " 'Y_1990',\n",
+       " 'Y_1991',\n",
+       " 'Y_1992',\n",
+       " 'Y_1993',\n",
+       " 'Y_1994',\n",
+       " 'Y_1995',\n",
+       " 'Y_1996',\n",
+       " 'Y_1997',\n",
+       " 'Y_1998',\n",
+       " 'Y_1999',\n",
+       " 'Y_2000',\n",
+       " 'Y_2001',\n",
+       " 'Y_2002',\n",
+       " 'Y_2003',\n",
+       " 'Y_2004',\n",
+       " 'Y_2005',\n",
+       " 'Y_2006',\n",
+       " 'Y_2007',\n",
+       " 'Y_2008',\n",
+       " 'Y_2009']"
+      ]
+     },
+     "execution_count": 40,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "usy.fieldNames"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n"
+     ]
     },
     {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
+     "data": {
+      "text/plain": [
+       "{0: [323],\n",
+       " 1: [600],\n",
+       " 2: [310],\n",
+       " 3: [991],\n",
+       " 4: [634],\n",
+       " 5: [1024],\n",
+       " 6: [1032],\n",
+       " 7: [518],\n",
+       " 8: [347],\n",
+       " 9: [507],\n",
+       " 10: [948],\n",
+       " 11: [607],\n",
+       " 12: [581],\n",
+       " 13: [532],\n",
+       " 14: [393],\n",
+       " 15: [414],\n",
+       " 16: [601],\n",
+       " 17: [768],\n",
+       " 18: [906],\n",
+       " 19: [790],\n",
+       " 20: [599],\n",
+       " 21: [286],\n",
+       " 22: [621],\n",
+       " 23: [592],\n",
+       " 24: [596],\n",
+       " 25: [868],\n",
+       " 26: [686],\n",
+       " 27: [918],\n",
+       " 28: [410],\n",
+       " 29: [1152],\n",
+       " 30: [332],\n",
+       " 31: [382],\n",
+       " 32: [771],\n",
+       " 33: [455],\n",
+       " 34: [668],\n",
+       " 35: [772],\n",
+       " 36: [874],\n",
+       " 37: [271],\n",
+       " 38: [426],\n",
+       " 39: [378],\n",
+       " 40: [479],\n",
+       " 41: [551],\n",
+       " 42: [634],\n",
+       " 43: [434],\n",
+       " 44: [741],\n",
+       " 45: [460],\n",
+       " 46: [673],\n",
+       " 47: [675]}"
+      ]
+     },
+     "execution_count": 41,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "usy.getVars('Y_1929')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{}"
+      ]
+     },
+     "execution_count": 42,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "usy.Wrook"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n",
+      "Running original Arisel algorithm\n",
+      "Number of areas:  48\n",
+      "Number of regions:  8\n",
+      "initial Solution:  [4, 0, 4, 2, 0, 6, 0, 4, 4, 1, 0, 0, 0, 0, 4, 4, 5, 0, 7, 0, 0, 4, 0, 1, 0, 2, 5, 7, 1, 7, 4, 1, 0, 0, 1, 0, 3, 4, 1, 4, 0, 1, 5, 0, 1, 4, 0, 0]\n",
+      "initial O.F:  23338316.0\n",
+      "FINAL SOLUTION:  [4, 1, 4, 2, 0, 6, 7, 4, 4, 1, 0, 0, 1, 0, 4, 1, 5, 0, 7, 0, 0, 4, 0, 1, 1, 2, 5, 7, 1, 7, 4, 1, 0, 1, 1, 0, 3, 4, 1, 4, 1, 1, 5, 0, 1, 4, 0, 0]\n",
+      "FINAL OF:  21804253.0\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "usy.cluster('arisel', ['Y_1980'], 8, wType='queen', inits=10, dissolve=0)\n",
+    "#mexico.cluster('arisel', ['pcgdp1940'], 5, wType='rook', inits=10, dissolve=0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 44,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "us = cp.Layer()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 45,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "cp.addQueen2Layer(ps.examples.get_path('states48.gal'), us)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 46,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "uscsv = ps.examples.get_path(\"usjoin.csv\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 47,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "f = ps.open(uscsv)\n",
+    "pci = np.array([f.by_col[str(y)] for y in range(1929, 2010)]).T\n",
+    "names = [\"Y_%d\"%v for v in range(1929,2010)]\n",
+    "cp.addArray2Layer(pci, us, names)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 48,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n",
+      "Running original Arisel algorithm\n",
+      "Number of areas:  48\n",
+      "Number of regions:  8\n",
+      "initial Solution:  [0, 6, 0, 2, 6, 5, 6, 0, 0, 7, 6, 6, 6, 6, 0, 0, 4, 6, 4, 6, 6, 0, 6, 7, 6, 2, 4, 1, 7, 4, 0, 7, 6, 6, 2, 6, 4, 0, 7, 0, 6, 7, 3, 6, 2, 0, 6, 6]\n",
+      "initial O.F:  21166215.0\n",
+      "FINAL SOLUTION:  [0, 6, 0, 2, 6, 5, 1, 0, 0, 7, 6, 6, 6, 6, 0, 0, 4, 6, 4, 6, 6, 0, 6, 7, 7, 2, 4, 1, 7, 1, 0, 7, 6, 6, 2, 6, 4, 0, 7, 0, 6, 7, 3, 6, 2, 0, 6, 6]\n",
+      "FINAL OF:  19355956.0\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "usy.cluster('arisel', ['Y_1980'], 8, wType='queen', inits=10, dissolve=0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 49,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "us_alpha = cp.importCsvData(ps.examples.get_path('usjoin.csv'))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 50,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n"
+     ]
+    }
+   ],
+   "source": [
+    "alpha_fips = us_alpha.getVars('STATE_FIPS')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 51,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{0: [1],\n",
+       " 1: [4],\n",
+       " 2: [5],\n",
+       " 3: [6],\n",
+       " 4: [8],\n",
+       " 5: [9],\n",
+       " 6: [10],\n",
+       " 7: [12],\n",
+       " 8: [13],\n",
+       " 9: [16],\n",
+       " 10: [17],\n",
+       " 11: [18],\n",
+       " 12: [19],\n",
+       " 13: [20],\n",
+       " 14: [21],\n",
+       " 15: [22],\n",
+       " 16: [23],\n",
+       " 17: [24],\n",
+       " 18: [25],\n",
+       " 19: [26],\n",
+       " 20: [27],\n",
+       " 21: [28],\n",
+       " 22: [29],\n",
+       " 23: [30],\n",
+       " 24: [31],\n",
+       " 25: [32],\n",
+       " 26: [33],\n",
+       " 27: [34],\n",
+       " 28: [35],\n",
+       " 29: [36],\n",
+       " 30: [37],\n",
+       " 31: [38],\n",
+       " 32: [39],\n",
+       " 33: [40],\n",
+       " 34: [41],\n",
+       " 35: [42],\n",
+       " 36: [44],\n",
+       " 37: [45],\n",
+       " 38: [46],\n",
+       " 39: [47],\n",
+       " 40: [48],\n",
+       " 41: [49],\n",
+       " 42: [50],\n",
+       " 43: [51],\n",
+       " 44: [53],\n",
+       " 45: [54],\n",
+       " 46: [55],\n",
+       " 47: [56]}"
+      ]
+     },
+     "execution_count": 51,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
-   "metadata": {}
+   "source": [
+    "alpha_fips"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 52,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "dbf = ps.open(ps.examples.get_path('us48.dbf'))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 53,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['AREA',\n",
+       " 'PERIMETER',\n",
+       " 'STATE_',\n",
+       " 'STATE_ID',\n",
+       " 'STATE_NAME',\n",
+       " 'STATE_FIPS',\n",
+       " 'SUB_REGION',\n",
+       " 'STATE_ABBR']"
+      ]
+     },
+     "execution_count": 53,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dbf.header"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "state_fips = dbf.by_col('STATE_FIPS')\n",
+    "names = dbf.by_col('STATE_NAME')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 55,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['Washington',\n",
+       " 'Montana',\n",
+       " 'Maine',\n",
+       " 'North Dakota',\n",
+       " 'South Dakota',\n",
+       " 'Wyoming',\n",
+       " 'Wisconsin',\n",
+       " 'Idaho',\n",
+       " 'Vermont',\n",
+       " 'Minnesota',\n",
+       " 'Oregon',\n",
+       " 'New Hampshire',\n",
+       " 'Iowa',\n",
+       " 'Massachusetts',\n",
+       " 'Nebraska',\n",
+       " 'New York',\n",
+       " 'Pennsylvania',\n",
+       " 'Connecticut',\n",
+       " 'Rhode Island',\n",
+       " 'New Jersey',\n",
+       " 'Indiana',\n",
+       " 'Nevada',\n",
+       " 'Utah',\n",
+       " 'California',\n",
+       " 'Ohio',\n",
+       " 'Illinois',\n",
+       " 'Delaware',\n",
+       " 'West Virginia',\n",
+       " 'Maryland',\n",
+       " 'Colorado',\n",
+       " 'Kentucky',\n",
+       " 'Kansas',\n",
+       " 'Virginia',\n",
+       " 'Missouri',\n",
+       " 'Arizona',\n",
+       " 'Oklahoma',\n",
+       " 'North Carolina',\n",
+       " 'Tennessee',\n",
+       " 'Texas',\n",
+       " 'New Mexico',\n",
+       " 'Alabama',\n",
+       " 'Mississippi',\n",
+       " 'Georgia',\n",
+       " 'South Carolina',\n",
+       " 'Arkansas',\n",
+       " 'Louisiana',\n",
+       " 'Florida',\n",
+       " 'Michigan']"
+      ]
+     },
+     "execution_count": 55,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "names"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 56,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "state_fips = map(int, state_fips)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 57,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[53,\n",
+       " 30,\n",
+       " 23,\n",
+       " 38,\n",
+       " 46,\n",
+       " 56,\n",
+       " 55,\n",
+       " 16,\n",
+       " 50,\n",
+       " 27,\n",
+       " 41,\n",
+       " 33,\n",
+       " 19,\n",
+       " 25,\n",
+       " 31,\n",
+       " 36,\n",
+       " 42,\n",
+       " 9,\n",
+       " 44,\n",
+       " 34,\n",
+       " 18,\n",
+       " 32,\n",
+       " 49,\n",
+       " 6,\n",
+       " 39,\n",
+       " 17,\n",
+       " 10,\n",
+       " 54,\n",
+       " 24,\n",
+       " 8,\n",
+       " 21,\n",
+       " 20,\n",
+       " 51,\n",
+       " 29,\n",
+       " 4,\n",
+       " 40,\n",
+       " 37,\n",
+       " 47,\n",
+       " 48,\n",
+       " 35,\n",
+       " 1,\n",
+       " 28,\n",
+       " 13,\n",
+       " 45,\n",
+       " 5,\n",
+       " 22,\n",
+       " 12,\n",
+       " 26]"
+      ]
+     },
+     "execution_count": 57,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "state_fips"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 58,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "# the csv file has the states ordered alphabetically, but this isn't the case for the order in the shapefile so we have to reorder before any choropleths are drawn\n",
+    "alpha_fips = [i[0] for i in alpha_fips.values()]\n",
+    "reorder = [ alpha_fips.index(s) for s in state_fips]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 59,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "regions = usy.region2areas"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 60,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[0,\n",
+       " 6,\n",
+       " 0,\n",
+       " 2,\n",
+       " 6,\n",
+       " 5,\n",
+       " 1,\n",
+       " 0,\n",
+       " 0,\n",
+       " 7,\n",
+       " 6,\n",
+       " 6,\n",
+       " 6,\n",
+       " 6,\n",
+       " 0,\n",
+       " 0,\n",
+       " 4,\n",
+       " 6,\n",
+       " 4,\n",
+       " 6,\n",
+       " 6,\n",
+       " 0,\n",
+       " 6,\n",
+       " 7,\n",
+       " 7,\n",
+       " 2,\n",
+       " 4,\n",
+       " 1,\n",
+       " 7,\n",
+       " 1,\n",
+       " 0,\n",
+       " 7,\n",
+       " 6,\n",
+       " 6,\n",
+       " 2,\n",
+       " 6,\n",
+       " 4,\n",
+       " 0,\n",
+       " 7,\n",
+       " 0,\n",
+       " 6,\n",
+       " 7,\n",
+       " 3,\n",
+       " 6,\n",
+       " 2,\n",
+       " 0,\n",
+       " 6,\n",
+       " 6]"
+      ]
+     },
+     "execution_count": 60,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "regions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 61,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "from pysal.contrib.viz import mapping as maps"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 62,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "shp = ps.examples.get_path('us48.shp')\n",
+    "regions = np.array(regions)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 63,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd8FNXax3/nzMz29ISQCiGUAKGXSJeOFKWKysUCCBaw\n36tXvXZFUHxt6LWCCqKiICgIUqT3GnpvIYUAaZttM3PO+8duQoCU3WSTbLz7/egH2J0588zsmWee\nec5TAD9+/Pjx48ePHz9+/Pjx48ePHz9+/Pjx48ePHz9+/Pjx48ePHz9+/Pjx48ePn7pDgEaT+fGQ\nITxAo7ECSKhtefz4KQta2wL48eMNOCD0TkhA59hYB4BOtS2PHz9lIXpxrMkA4gCoXhzTUxoCuAKg\n4IbPkwEcrHFpfJtI159ZtSpF2bQAcAxuziezwxEuEIIeDRoEbLlwoZtVln+qXvH8+Kkc3lK6kQA+\nG9g0 [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x149ca390>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "maps.plot_choropleth(shp, regions[reorder], 'unique_values')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 64,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Getting variables\n",
+      "Variables successfully extracted\n",
+      "Running original Arisel algorithm\n",
+      "Number of areas:  48\n",
+      "Number of regions:  8\n",
+      "initial Solution:  [0, 4, 0, 1, 4, 6, 6, 0, 0, 4, 5, 5, 4, 4, 2, 0, 3, 5, 6, 5, 4, 0, 4, 7, 4, 1, 3, 6, 0, 6, 0, 4, 5, 0, 4, 5, 6, 0, 4, 2, 0, 4, 3, 2, 4, 2, 4, 7]\n",
+      "initial O.F:  320792.0\n",
+      "FINAL SOLUTION:  [0, 4, 0, 1, 7, 6, 6, 0, 0, 4, 5, 5, 4, 4, 0, 0, 3, 5, 6, 5, 4, 0, 4, 4, 4, 1, 3, 6, 0, 6, 0, 4, 5, 0, 4, 5, 6, 0, 4, 0, 0, 4, 3, 2, 4, 2, 5, 7]\n",
+      "FINAL OF:  311057.0\n",
+      "Done\n",
+      "Adding variables\n",
+      "Done\n"
+     ]
+    }
+   ],
+   "source": [
+    "usy.cluster('arisel', ['Y_1929'], 8, wType='queen', inits=10, dissolve=0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 65,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "regions = usy.region2areas"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 66,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "regions = np.array(regions)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 67,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd8FMX7xz8zW66nkZCEltBLgNCrgBTp+EXFhuWriKAi\nKijqzwKKBUEFFQVBBTtWRAREEBSQ3os06TWUkH5ly8zvj01CgJS75C65+L33C15J7nZnn92dfXbm\nmacAIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQlQeLzZ4y/IXJ\n3GKzuwDUrmh5QoQoClrRAoQI4Q8450JSu86o16ylAqBtRcsTIkRRiH5sawSAmgB0P7bpK4kAUgFk\nXfV5UwB7yl2a4CY29+e5CpWiaJoAOAAv+5PbmRNNqYDGrTs6DuzY0llxu74LrHghQpQOfyndWACz\nWlzX [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x1495def0>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "maps.plot_choropleth(shp, regions[reorder], 'unique_values')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "names = [\"Y_%d\"%i for i in range(1929, 2010)]\n",
+    "#usy.cluster('arisel', ['Y_1929'], 8, wType='queen', inits=10, dissolve=0)\n",
+    "usy.cluster('arisel', names, 8, wType='queen', inits=10, dissolve=0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "regions = usy.region2areas\n",
+    "regions = np.array(regions)\n",
+    "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='All Years')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "ps.version"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy.cluster('arisel', names[:40], 8, wType='queen', inits=10, dissolve=0)\n",
+    "regions = usy.region2areas\n",
+    "regions = np.array(regions)\n",
+    "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='1929-68')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy.cluster('arisel', names[40:], 8, wType='queen', inits=10, dissolve=0)\n",
+    "regions = usy.region2areas\n",
+    "regions = np.array(regions)\n",
+    "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='1969-2009')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy.cluster('arisel', names[40:], 8, wType='queen', inits=10, dissolve=0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy.dataOperation(\"CONSTANT = 1\")\n",
+    "usy.Wrook = usy.Wqueen\n",
+    "usy.cluster('maxpTabu', ['Y_1929', 'Y_1929'], threshold=1000, dissolve=0)\n",
+    "regions = usy.region2areas\n",
+    "regions = np.array(regions)\n",
+    "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='maxp 1929')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "Counter(regions)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy.getVars('Y_1929')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy.Wrook"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy.cluster('maxpTabu', ['Y_1929', 'CONSTANT'], threshold=8, dissolve=0)\n",
+    "regions = usy.region2areas\n",
+    "regions = np.array(regions)\n",
+    "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='maxp 1929')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "regions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "Counter(regions)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "vars = names"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "vars.append('CONSTANT')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "vars"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "usy.cluster('maxpTabu', vars, threshold=8, dissolve=0)\n",
+    "regions = usy.region2areas\n",
+    "regions = np.array(regions)\n",
+    "maps.plot_choropleth(shp, regions[reorder], 'unique_values', title='maxp 1929-2009')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "Counter(regions)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "south = cp.loadArcData(ps.examples.get_path(\"south.shp\"))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "south.fieldNames"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "# uncomment if you have some time ;->\n",
+    "#south.cluster('arisel', ['HR70'], 20, wType='queen', inits=10, dissolve=0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "#regions = south.region2areas"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "shp = ps.examples.get_path('south.shp')\n",
+    "#maps.plot_choropleth(shp, np.array(regions), 'unique_values')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "south.dataOperation(\"CONSTANT = 1\")\n",
+    "south.cluster('maxpTabu', ['HR70', 'CONSTANT'], threshold=70, dissolve=0)\n",
+    "regions = south.region2areas\n",
+    "regions = np.array(regions)\n",
+    "maps.plot_choropleth(shp, regions, 'unique_values', title='maxp HR70 threshold=70')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "Counter(regions)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": []
   }
- ]
-}
\ No newline at end of file
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 2",
+   "language": "python",
+   "name": "python2"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.10"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/pysal/contrib/clusterpy/clusterpy_ext.py b/pysal/contrib/clusterpy/clusterpy_ext.py
index e48b202..dd3af80 100644
--- a/pysal/contrib/clusterpy/clusterpy_ext.py
+++ b/pysal/contrib/clusterpy/clusterpy_ext.py
@@ -4,7 +4,7 @@ import struct
 
 __author__ = "Sergio Rey <sjsrey at gmail.com>"
 
-__ALL__= ['Layer', 'loadArcData', 'importCsvData', 'addRook2Layer', 'addQueen2Layer', 'addArray2Layer' ]
+__ALL__= ['Layer', 'loadArcData', 'importCsvData', 'addRook2Layer', 'addQueen2Layer', 'addArray2Layer', 'addW2Layer']
 
 
 def _importArcData(filename):
@@ -270,15 +270,65 @@ def addArray2Layer(array, layer, names=None):
             v[i] = array[i,j]
         layer.addVariable([name], v)
 
+def addW2Layer(w, layer, contiguity='rook'):
+    '''
+    Attach a contiguity PySAL W object to a layer
+    
+    NOTE: given clusterpy's requirements, this method only extracts the
+    `neighbors` dictionary.
+
+    ...
+
+    Parameters
+    ----------
+    w         : ps.W
+                PySAL weights object
+    layer     : clusterpy.Layer
+                Layer to attach the weights to
+    contiguity: str ['rook'|'queen']
+                Type of contguity expressed in `w`
+
+    Returns
+    -------
+    None
+
+    Example
+    -------
+    >>> import pysal as ps
+    >>> import pysal.contrib.clusterpy as cp
+    >>> w = ps.queen_from_shapefile(ps.examples.get_path('columbus.shp'))
+    >>> layer = cp.Layer()
+    >>> cp.addW2Layer(w, layer, contiguity='queen')
+    >>> layer.Wqueen[0]
+    [1, 2]
+    '''
+    if contiguity.upper()== "ROOK":
+        layer.Wrook = w.neighbors
+    elif contiguity.upper() == "QUEEN":
+        layer.Wqueen = w.neighbors
+    else:
+        print 'Unsupported contiguity type: ', contiguity
+    return None
+
 if __name__ == '__main__':
 
     import numpy as np
 
+    w = ps.queen_from_shapefile(ps.examples.get_path('columbus.shp'))
+    db = ps.open(ps.examples.get_path('columbus.dbf'))
+    vars = ['CRIME',  'HOVAL']
+    x = np.array([db.by_col(i) for i in vars]).T
+    layer = Layer()
+    _ = addArray2Layer(x, layer, names=vars)
+    _ = addW2Layer(w, layer)
+    layer.cluster('arisel', ['CRIME',  'CONSTANT'], 2, dissolve=0, std=0)
+    '''
     columbus = loadArcData(ps.examples.get_path('columbus.shp'))
     n = len(columbus.Wqueen)
     columbus.dataOperation("CONSTANT = 1")
     np.random.seed(12345)
     columbus.cluster('maxpTabu', ['CRIME',  'CONSTANT'], threshold=4, dissolve=0, std=0)
+    '''
     #np.random.seed(12345)
     #columbus.cluster('arisel', ['CRIME'], 5, wType='rook', inits=10, dissolve=0)
 
diff --git a/pysal/contrib/githooks/pre-commit b/pysal/contrib/githooks/pre-commit
new file mode 100755
index 0000000..3f7a641
--- /dev/null
+++ b/pysal/contrib/githooks/pre-commit
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+NOCHANGE='^pysal/spreg'
+git diff --cached --name-only | grep -E $NOCHANGE && \
+    echo "COMMIT REJECTED: Contains changes to pysal/spreg." && exit 1
+exit 0
diff --git a/pysal/contrib/handler/Explaining the Handler.ipynb b/pysal/contrib/handler/Explaining the Handler.ipynb
new file mode 100644
index 0000000..1b182d8
--- /dev/null
+++ b/pysal/contrib/handler/Explaining the Handler.ipynb	
@@ -0,0 +1,830 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# What is the handler?"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The `spreg-handler` provides a unified interface to apply any specifed regression function in pysal to data, like a call to `lm` in `R`. \n",
+    "\n",
+    "This has 2 components. \n",
+    "\n",
+    "1. `registry.py`, which finds all of the valid model classes in `pysal.spreg`\n",
+    "2. `handler.py`, which proves *one* function to estimate all of those classes.\n",
+    "\n",
+    "Thanks to the `registry`, `handler.Model` can serve as the single point of access for a `patsy`/`pandas` interface logic, as well as anything else that we might want to add to regression classes without forcing it through inheritance.\n",
+    "\n",
+    "First, let's set up and estimate some models. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "import handler as h\n",
+    "import pysal as ps\n",
+    "import geopandas as gpd"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "df = gpd.read_file(ps.examples.get_path('columbus.json'))\n",
+    "dbf = ps.open(ps.examples.get_path('columbus.dbf'))\n",
+    "y = dbf.by_col_array(['HOVAL'])\n",
+    "X = dbf.by_col_array(['INC', 'CRIME'])\n",
+    "W = ps.open(ps.examples.get_path('columbus.gal')).read()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "original = ps.spreg.OLS(y,X,W, name_x=['INC', 'CRIME'], name_y='HOVAL')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The handler's default model is `OLS`. So, for a model of type `OLS`, no extra argument needs to be passed. However, for the sake of clarity, I'll pass the model specification argument, `mtype`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "handled = h.Model(y,\n",
+    "                  X,\n",
+    "                  W,\n",
+    "                  name_x=['INC', 'CRIME'], \n",
+    "                  name_y='HOVAL', \n",
+    "                  mtype='OLS')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES\n",
+      "-----------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Weights matrix      :     unknown\n",
+      "Dependent Variable  :       HOVAL                Number of Observations:          49\n",
+      "Mean dependent var  :     38.4362                Number of Variables   :           3\n",
+      "S.D. dependent var  :     18.4661                Degrees of Freedom    :          46\n",
+      "R-squared           :      0.3495\n",
+      "Adjusted R-squared  :      0.3212\n",
+      "Sum squared residual:   10647.015                F-statistic           :     12.3582\n",
+      "Sigma-square        :     231.457                Prob(F-statistic)     :   5.064e-05\n",
+      "S.E. of regression  :      15.214                Log likelihood        :    -201.368\n",
+      "Sigma-square ML     :     217.286                Akaike info criterion :     408.735\n",
+      "S.E of regression ML:     14.7406                Schwarz criterion     :     414.411\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     t-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      46.4281827      13.1917570       3.5194844       0.0009867\n",
+      "               CRIME      -0.4848885       0.1826729      -2.6544086       0.0108745\n",
+      "                 INC       0.6289840       0.5359104       1.1736736       0.2465669\n",
+      "------------------------------------------------------------------------------------\n",
+      "\n",
+      "REGRESSION DIAGNOSTICS\n",
+      "MULTICOLLINEARITY CONDITION NUMBER           12.538\n",
+      "\n",
+      "TEST ON NORMALITY OF ERRORS\n",
+      "TEST                             DF        VALUE           PROB\n",
+      "Jarque-Bera                       2          39.706           0.0000\n",
+      "\n",
+      "DIAGNOSTICS FOR HETEROSKEDASTICITY\n",
+      "RANDOM COEFFICIENTS\n",
+      "TEST                             DF        VALUE           PROB\n",
+      "Breusch-Pagan test                2           5.767           0.0559\n",
+      "Koenker-Bassett test              2           2.270           0.3214\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(original.summary)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES\n",
+      "-----------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Weights matrix      :     unknown\n",
+      "Dependent Variable  :       HOVAL                Number of Observations:          49\n",
+      "Mean dependent var  :     38.4362                Number of Variables   :           3\n",
+      "S.D. dependent var  :     18.4661                Degrees of Freedom    :          46\n",
+      "R-squared           :      0.3495\n",
+      "Adjusted R-squared  :      0.3212\n",
+      "Sum squared residual:   10647.015                F-statistic           :     12.3582\n",
+      "Sigma-square        :     231.457                Prob(F-statistic)     :   5.064e-05\n",
+      "S.E. of regression  :      15.214                Log likelihood        :    -201.368\n",
+      "Sigma-square ML     :     217.286                Akaike info criterion :     408.735\n",
+      "S.E of regression ML:     14.7406                Schwarz criterion     :     414.411\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     t-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      46.4281827      13.1917570       3.5194844       0.0009867\n",
+      "               CRIME      -0.4848885       0.1826729      -2.6544086       0.0108745\n",
+      "                 INC       0.6289840       0.5359104       1.1736736       0.2465669\n",
+      "------------------------------------------------------------------------------------\n",
+      "\n",
+      "REGRESSION DIAGNOSTICS\n",
+      "MULTICOLLINEARITY CONDITION NUMBER           12.538\n",
+      "\n",
+      "TEST ON NORMALITY OF ERRORS\n",
+      "TEST                             DF        VALUE           PROB\n",
+      "Jarque-Bera                       2          39.706           0.0000\n",
+      "\n",
+      "DIAGNOSTICS FOR HETEROSKEDASTICITY\n",
+      "RANDOM COEFFICIENTS\n",
+      "TEST                             DF        VALUE           PROB\n",
+      "Breusch-Pagan test                2           5.767           0.0559\n",
+      "Koenker-Bassett test              2           2.270           0.3214\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(handled.summary)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The long and short of it is that `Model` classes pass estimation to the function specified in `mtype`, and then contain the results in a reasonable way. \n",
+    "\n",
+    "In fact, the \"real\" `PySAL` model class sits under `handled._called`, so, at worst, we can just reference aspects of `handled` down to `_called`. I currently do this by iterating through `dir(handled._called)` and using `eval` to flatten all of `_called`'s attributes into `handled` at initialization. \n",
+    "\n",
+    "But, eventually, I am think about adding plotting, visual diagnostics, out of sample prediction, or other stuff to this wrapper. So, I will probably not duplicate the access points for intermediate computations, like `X'X`, `e`, or `TSLS`'s arcane-sounding `zthhthi`.\n",
+    "\n",
+    "I'd like to clean up this `Model` interface so that only X, Y, residuals, and some statistics are directly exposed. \n",
+    "\n",
+    "Keep in mind, since [assignment **never** copies data](https://youtu.be/_AEJHKGk9ns?t=296), and the original model sits in `handled._called`, this isn't actually a *loss* of information, just a *hiding*, which is a standard OOP principle. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Isn't this wastefully storing multiple copies of data in memory?"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "No. Let's see where everything lives using the python built-in `id` function. \n",
+    "\n",
+    "Recall that the original model is stuffed into `Model._called`. So, if anything in there has a different memory address from what's being displayed by `Model`, the data is duplicated:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "__init__is in two different addresses.\n",
+      "\t Outer is at 0x7f11fbb2dcd0\n",
+      "\t Inner is at 0x7f11fbb92820\n"
+     ]
+    }
+   ],
+   "source": [
+    "for atname in dir(handled._called):\n",
+    "    attr = eval(\"handled._called.{}\".format(atname))\n",
+    "    composed_id = hex(id(attr))\n",
+    "    outattr = eval(\"handled.{}\".format(atname))\n",
+    "    outer_id = hex(id(outattr))\n",
+    "    if composed_id != outer_id:\n",
+    "        print(atname + \"is in two different addresses.\")\n",
+    "        print(\"\\t Outer is at \" + outer_id +\"\\n\\t Inner is at \" + composed_id)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Only the `__init__` function exposed by `Model` is different from `Model._called`, which makes sense, since an `__init__` function can't write over itself. \n",
+    "\n",
+    "If we wanted to access `Model._called.__init__`, it's still there. This means we could implement some \"refit\" method, `Model.refit(y=Model.y, X=Model.X, ...)` which could use `Model._called.__init__` to revise estimates in `Model` in place or returning a new model.\n",
+    "\n",
+    "I don't know why we might want to do this, but it's kinda neat :)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# What does this buy us?"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Regardless, all the stuff the wrapping `Model` class is parsed *around* the underlying PySAL classes. That is, the wrapper would only inject commands into the API. At minimum, it *is exactly* the underlying class. \n",
+    "\n",
+    "This is because it dispatches the arguments to the specified model type without knowing any special information about the function call.  \n",
+    "\n",
+    "This means we can do some pretty cool things, while keeping the actual wrapper at ~40 LoC!"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/home/ljw/.local/lib/python2.7/site-packages/scipy/optimize/_minimize.py:593: RuntimeWarning: Method 'bounded' does not support relative tolerance in x; defaulting to absolute tolerance.\n",
+      "  \"defaulting to absolute tolerance.\", RuntimeWarning)\n"
+     ]
+    }
+   ],
+   "source": [
+    "ML = ps.spreg.ML_Lag(y,X,W)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "handled_ML = h.Model(y,X,W,mtype='ML_Lag')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: MAXIMUM LIKELIHOOD SPATIAL LAG (METHOD = FULL)\n",
+      "-----------------------------------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Weights matrix      :     unknown\n",
+      "Dependent Variable  :     dep_var                Number of Observations:          49\n",
+      "Mean dependent var  :     38.4362                Number of Variables   :           4\n",
+      "S.D. dependent var  :     18.4661                Degrees of Freedom    :          45\n",
+      "Pseudo R-squared    :      0.3639\n",
+      "Spatial Pseudo R-squared:  0.3384\n",
+      "Sigma-square ML     :     212.490                Log likelihood        :    -200.903\n",
+      "S.E of regression   :      14.577                Akaike info criterion :     409.807\n",
+      "                                                 Schwarz criterion     :     417.374\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     z-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      44.1882822      12.9020363       3.4249076       0.0006150\n",
+      "           W_dep_var       0.0259466       0.0262601       0.9880621       0.3231223\n",
+      "               var_1       0.5453705       0.5209327       1.0469117       0.2951403\n",
+      "               var_2      -0.5186558       0.1768050      -2.9334902       0.0033517\n",
+      "------------------------------------------------------------------------------------\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(ML.summary)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: MAXIMUM LIKELIHOOD SPATIAL LAG (METHOD = FULL)\n",
+      "-----------------------------------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Weights matrix      :     unknown\n",
+      "Dependent Variable  :     dep_var                Number of Observations:          49\n",
+      "Mean dependent var  :     38.4362                Number of Variables   :           4\n",
+      "S.D. dependent var  :     18.4661                Degrees of Freedom    :          45\n",
+      "Pseudo R-squared    :      0.3639\n",
+      "Spatial Pseudo R-squared:  0.3384\n",
+      "Sigma-square ML     :     212.490                Log likelihood        :    -200.903\n",
+      "S.E of regression   :      14.577                Akaike info criterion :     409.807\n",
+      "                                                 Schwarz criterion     :     417.374\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     z-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      44.1882822      12.9020363       3.4249076       0.0006150\n",
+      "           W_dep_var       0.0259466       0.0262601       0.9880621       0.3231223\n",
+      "               var_1       0.5453705       0.5209327       1.0469117       0.2951403\n",
+      "               var_2      -0.5186558       0.1768050      -2.9334902       0.0033517\n",
+      "------------------------------------------------------------------------------------\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(handled_ML.summary)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Intercepting formulas"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "So, this is pretty neat, but gives us nothing above using *one* function to dispatch models. That's cool and R-like, but it's not necessarly better. Where it does add functionality is in its ability to intercept model formulas."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "handled_eq = h.Model(\"HOVAL ~ INC + CRIME\", data=df)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {
+    "collapsed": false,
+    "scrolled": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES\n",
+      "-----------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Dependent Variable  :     dep_var                Number of Observations:          49\n",
+      "Mean dependent var  :     38.4362                Number of Variables   :           3\n",
+      "S.D. dependent var  :     18.4661                Degrees of Freedom    :          46\n",
+      "R-squared           :      0.3495\n",
+      "Adjusted R-squared  :      0.3212\n",
+      "Sum squared residual:   10647.015                F-statistic           :     12.3582\n",
+      "Sigma-square        :     231.457                Prob(F-statistic)     :   5.064e-05\n",
+      "S.E. of regression  :      15.214                Log likelihood        :    -201.368\n",
+      "Sigma-square ML     :     217.286                Akaike info criterion :     408.735\n",
+      "S.E of regression ML:     14.7406                Schwarz criterion     :     414.411\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     t-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      46.4281827      13.1917570       3.5194844       0.0009867\n",
+      "               var_1       0.6289840       0.5359104       1.1736736       0.2465669\n",
+      "               var_2      -0.4848885       0.1826729      -2.6544086       0.0108745\n",
+      "------------------------------------------------------------------------------------\n",
+      "\n",
+      "REGRESSION DIAGNOSTICS\n",
+      "MULTICOLLINEARITY CONDITION NUMBER           12.538\n",
+      "\n",
+      "TEST ON NORMALITY OF ERRORS\n",
+      "TEST                             DF        VALUE           PROB\n",
+      "Jarque-Bera                       2          39.706           0.0000\n",
+      "\n",
+      "DIAGNOSTICS FOR HETEROSKEDASTICITY\n",
+      "RANDOM COEFFICIENTS\n",
+      "TEST                             DF        VALUE           PROB\n",
+      "Breusch-Pagan test                2           5.767           0.0559\n",
+      "Koenker-Bassett test              2           2.270           0.3214\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(handled_eq.summary)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "That means `HOVAL`, `CRIME`, and `INC` all get drawn out of the dataframe using patsy and pushed into arrays. This works for any class, since we're just turning the equations into their consituent arrays. \n",
+    "\n",
+    "Where there is a possible bikeshedding point is over the syntax for TSLS-type models. Right now, I have it specified with (what I think is) a clear synatx reflecting the simultanous equations approach: \n",
+    "\n",
+    "`y ~ x1 + x2 || yend ~ xend1 + xend2`\n",
+    "\n",
+    "implies an equation where your exogenous relationship is `y ~ x1 + x2` and your endogenous relationship is `yend ~ xend1 + xend2`. \n",
+    "\n",
+    "For any simultaneous equation-type model, I would suggest using double pipe as the separator. Under the hood, I'm just using `string.split('||')`, since patsy doesn't use the double pipe. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "y = dbf.by_col_array(['CRIME'])\n",
+    "X = dbf.by_col_array(['INC'])\n",
+    "yend = dbf.by_col_array(['HOVAL'])\n",
+    "q = dbf.by_col_array(['DISCBD'])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "tsls = ps.spreg.TSLS(y,X,yend,q,W)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "handledtsls = h.Model(y,X,yend,q,W,mtype='TSLS')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "handledtsls_eq = h.Model(\"CRIME ~ INC || HOVAL ~ DISCBD\", W, data=df, mtype='TSLS')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: TWO STAGE LEAST SQUARES\n",
+      "------------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Weights matrix      :     unknown\n",
+      "Dependent Variable  :     dep_var                Number of Observations:          49\n",
+      "Mean dependent var  :     35.1288                Number of Variables   :           3\n",
+      "S.D. dependent var  :     16.7321                Degrees of Freedom    :          46\n",
+      "Pseudo R-squared    :      0.2794\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     z-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      88.4657958      15.1346096       5.8452645       0.0000000\n",
+      "        endogenous_1      -1.5821659       0.7931892      -1.9946891       0.0460768\n",
+      "               var_1       0.5200379       1.4146781       0.3676016       0.7131703\n",
+      "------------------------------------------------------------------------------------\n",
+      "Instrumented: endogenous_1\n",
+      "Instruments: instrument_1\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(tsls.summary)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: TWO STAGE LEAST SQUARES\n",
+      "------------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Weights matrix      :     unknown\n",
+      "Dependent Variable  :     dep_var                Number of Observations:          49\n",
+      "Mean dependent var  :     35.1288                Number of Variables   :           3\n",
+      "S.D. dependent var  :     16.7321                Degrees of Freedom    :          46\n",
+      "Pseudo R-squared    :      0.2794\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     z-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      88.4657958      15.1346096       5.8452645       0.0000000\n",
+      "        endogenous_1      -1.5821659       0.7931892      -1.9946891       0.0460768\n",
+      "               var_1       0.5200379       1.4146781       0.3676016       0.7131703\n",
+      "------------------------------------------------------------------------------------\n",
+      "Instrumented: endogenous_1\n",
+      "Instruments: instrument_1\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(handledtsls.summary)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: TWO STAGE LEAST SQUARES\n",
+      "------------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Weights matrix      :     unknown\n",
+      "Dependent Variable  :     dep_var                Number of Observations:          49\n",
+      "Mean dependent var  :     35.1288                Number of Variables   :           3\n",
+      "S.D. dependent var  :     16.7321                Degrees of Freedom    :          46\n",
+      "Pseudo R-squared    :      0.2794\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     z-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      88.4657958      15.1346096       5.8452645       0.0000000\n",
+      "        endogenous_1      -1.5821659       0.7931892      -1.9946891       0.0460768\n",
+      "               var_1       0.5200379       1.4146781       0.3676016       0.7131703\n",
+      "------------------------------------------------------------------------------------\n",
+      "Instrumented: endogenous_1\n",
+      "Instruments: instrument_1\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(handledtsls_eq.summary)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "This would also enable adding plotting capabilities to spatial regression models, like the standard four-plot output from plotting an `lm` in `R`, but wouldn't have to be hacked into each and every model class. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Pitfalls"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "This wrapper is neat, but could lead us down a weird road.\n",
+    "\n",
+    "Right now, I clean up the mandatory arguments tuple `*args` such that only the arguments that match the type signature needed by PySAL get passed. This is to prevent runtime errors.\n",
+    "\n",
+    "To explain, let some function be defined using the default Python argument expansion (a.k.a. splatting) operator, `*`:\n",
+    "\n",
+    "        def foo(*args, message='Hello'):\n",
+    "            for arg in args:\n",
+    "                print(message + args)\n",
+    "        \n",
+    "        >>> foo(\"world!\", \"users!\")\n",
+    "        Hello world!\n",
+    "        Hello users!\n",
+    "        \n",
+    "Cool. Now, let's say we want to print our message right before we execute some function, `bar`. `bar` is a model class with a well-defined API. It requires two positional arguments of type `ndarray`, `y` and `X`, can accept an arbitrary number of keyword arguments, and returns `True` if a model is fit correctly. \n",
+    "\n",
+    "For the sake of argument (no pun intended), let's say that `foo` only needs the strings passed as positional arguments. Depending on your python version, we can wrap `bar` with `foo` this way:\n",
+    "\n",
+    "        def foo(*args, message='Hello', **kwargs):\n",
+    "            strargs = [arg for arg in args if isinstance(args, str)]\n",
+    "            barargs = [arg for arg in args if arg not in strargs]\n",
+    "            for arg in args:\n",
+    "                print(message + arg)\n",
+    "            return bar(*args, **kwargs)\n",
+    "            \n",
+    "If we do this, arbitrary arguments could get passed to `foo` that, if `bar` isn't expecting them, will cause a `TypeError`. \n",
+    "\n",
+    "        >>> foo(\"world!\", \"users!\", 12313, y, X)\n",
+    "        Hello world!\n",
+    "        Hello users!\n",
+    "        -------------------------------------------\n",
+    "        TypeError\n",
+    "        return bar(*args, **kwargs)\n",
+    "        \n",
+    "        TypeError: bar() takes exactly 2 arguments (3 given)\n",
+    " \n",
+    "Some libraries (*ahem* Matplotlib) get around this by making almost every function take arbitrary arguments, and each function just peels off of `args` and `kwargs` what it needs. \n",
+    "\n",
+    "This isn't us, though. I would suggest that the standard be that we use input types or ordering of arguments to define how to wrap the underlying functions. This means that, if we know `bar` accepts a `y` and an `X` of type `ndarray` in that order, we pop off of a stack of arguments with the current scope's arguments at the top of the stack.\n",
+    "\n",
+    "Here, since we know that we're wrapping one function with two arguments, its arguments are at the bottom of the stack. \n",
+    "\n",
+    "        def foo(*args, message=\"Hello\", **kwargs):\n",
+    "            args.pop() = X\n",
+    "            args.pop() = y\n",
+    "            for arg in args:\n",
+    "                print(message + arg)\n",
+    "            return bar(y, X, **kwargs)\n",
+    "       \n",
+    "        >>> foo(\"world!\", \"users!\", y, X)\n",
+    "        Hello world!\n",
+    "        Hello users!\n",
+    "        True #model fit successfully\n",
+    "        \n",
+    "Of course, we could also get even more abstract. We could construct a list of arguments for the wrapped function based on the *types* expected by that function. If we can identify or construct subsequences of *args* that match the function we're wrapping, we're good to go. \n",
+    "\n",
+    "However, these strategies have the strange side effect that, if extra arguments are passed, no error is raised. This could be desirable, but may not be if the user expects the arguments to **do** something. \n",
+    "\n",
+    "The call with ignored arguments looks like this:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "handledtsls_ignored = h.Model(\"CRIME ~ INC || HOVAL ~ DISCBD\",\n",
+    "                              True, #gets ignored\n",
+    "                              W, \n",
+    "                              42, #gets ignored too\n",
+    "                              data=df, \n",
+    "                              mtype='GM_Lag')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "REGRESSION\n",
+      "----------\n",
+      "SUMMARY OF OUTPUT: SPATIAL TWO STAGE LEAST SQUARES\n",
+      "--------------------------------------------------\n",
+      "Data set            :     unknown\n",
+      "Weights matrix      :     unknown\n",
+      "Dependent Variable  :     dep_var                Number of Observations:          49\n",
+      "Mean dependent var  :     35.1288                Number of Variables   :           4\n",
+      "S.D. dependent var  :     16.7321                Degrees of Freedom    :          45\n",
+      "Pseudo R-squared    :      0.2377\n",
+      "Spatial Pseudo R-squared:  0.2477\n",
+      "\n",
+      "------------------------------------------------------------------------------------\n",
+      "            Variable     Coefficient       Std.Error     z-Statistic     Probability\n",
+      "------------------------------------------------------------------------------------\n",
+      "            CONSTANT      96.5182979      52.5305917       1.8373731       0.0661548\n",
+      "           W_dep_var      -0.0148182       0.0857203      -0.1728667       0.8627562\n",
+      "        endogenous_1      -1.8097627       1.7652028      -1.0252436       0.3052483\n",
+      "               var_1       0.7561942       2.3367036       0.3236158       0.7462289\n",
+      "------------------------------------------------------------------------------------\n",
+      "Instrumented: W_dep_var, endogenous_1\n",
+      "Instruments: W_instrument_1, W_var_1, instrument_1\n",
+      "================================ END OF REPORT =====================================\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(handledtsls_ignored.summary) #woah! no error or notice!"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Those other positional arguments get ignored in the equation framework. \n",
+    "\n",
+    "Practically, this means you couldn't provide some variables in equations and some in vectors... you'd have to either have equations or vectors."
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 2",
+   "language": "python",
+   "name": "python2"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.10"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/pysal/contrib/handler/__init__.py b/pysal/contrib/handler/__init__.py
new file mode 100644
index 0000000..d08b80f
--- /dev/null
+++ b/pysal/contrib/handler/__init__.py
@@ -0,0 +1 @@
+from handler import *
diff --git a/pysal/contrib/handler/handler.py b/pysal/contrib/handler/handler.py
new file mode 100644
index 0000000..bb1f08c
--- /dev/null
+++ b/pysal/contrib/handler/handler.py
@@ -0,0 +1,101 @@
+import copy
+import registry as sr
+from pysal.weights import W
+try:
+    import patsy as p
+except:
+    p = None
+from numpy import array, ndarray, asarray
+from six import iteritems as diter
+
+#would like to just wrap this in the opt decorator...
+def pandashandler(formula_like, data):
+    """
+    process a pysal model signature and convert an equation/formula pair into a
+    pysal-specific object
+    """
+    if '||' in formula_like:
+        mu, inst = formula_like.split('||')
+        y, X = p.dmatrices(mu + '-1' , data=data)
+        yend, q  = p.dmatrices(inst + '-1', data=data)
+        rargs = [y,X,yend,q]
+        rargs = [asarray(i) for i in rargs]
+    else:
+        y, X = p.dmatrices(formula_like + '-1', data=data)
+        rargs = [asarray(y), asarray(X)]
+
+    return rargs
+
+#def model(eqn, *args, data=df, **kwargs)
+class Model(object):
+    """
+    The model manager
+    
+    arguments that sit above the pysal model API:
+
+    mtype : string mapping to the function called from spreg
+    fit : Bool denoting whether to actually apply the mtype to the data provided
+          immediately.
+
+    an example call would look like:
+
+        >>> Model(y,X,W, mtype='ML_Lag')
+        >>> Model(y,X,W, mytpe='OLS_Regimes')
+    """
+    def __init__(self, *args, **kwargs):
+        self._cache = {}
+        mtype = kwargs.pop('mtype', 'OLS')
+        self._mtype = mtype
+        self._mfunc = sr._everything[mtype] 
+        self._fit = kwargs.pop('fit', True)
+
+        if isinstance(args[0], str):
+            formula = args[0]
+            data = kwargs.pop('data')
+            matrices = pandashandler(formula, data)
+        elif 'formula' in kwargs.keys() and 'data' in kwargs.keys():
+            formula = kwargs.pop('formula')
+            data = kwargs.pop('data')
+            matrices = pandashandler(formula, data)
+        else:
+            matrices = [arg for arg in args if not isinstance(arg, W)]
+        
+        args = matrices + [arg for arg in args if isinstance(arg, W)]
+
+        if self._fit:
+            self._called = self._mfunc(*args, **kwargs)
+            for name in dir(self._called):
+                try:
+                    exec('self.{n} = self._called.{n}'.format(n=name))
+                except:
+                    print("Assigning {a} from {s} to {d} failed!".format(a=name,
+                                                                             s=self._called,
+                                                                         d=self))
+    
+#need to still pass names down from formula into relevant pysal arguments
+
+if __name__ == '__main__':
+    import pysal as ps
+
+    dbf = ps.open(ps.examples.get_path('columbus.dbf'))
+    y, X = dbf.by_col_array(['HOVAL']), dbf.by_col_array(['INC', 'CRIME'])
+    Wcol = ps.open(ps.examples.get_path('columbus.gal')).read()
+    mod1 = sr.OLS(y,X)
+    hmod1 = Model(y,X)
+
+    mod2 = sr.OLS(y,X,Wcol)
+    hmod2 = Model(y,X,Wcol)
+
+    mod3 = sr.ML_Lag(y,X,Wcol)
+    hmod3 = Model(y,X,Wcol, mtype='ML_Lag')
+
+    mod4 = sr.ML_Error(y,X,Wcol)
+    hmod4 = Model(y,X,Wcol,mtype='ML_Error')
+
+    #real power comes from this, though
+#    import geopandas as gpd
+#    
+#    df = gpd.read_file(ps.examples.get_path('columbus.dbf'))
+#
+#    hmod1_pd = Model('HOVAL ~ INC + CRIME', data=data)
+#    mod5 = sr.TSLS('HOVAL ~ INC + CRIME')
diff --git a/pysal/contrib/handler/registry.py b/pysal/contrib/handler/registry.py
new file mode 100644
index 0000000..8f25f89
--- /dev/null
+++ b/pysal/contrib/handler/registry.py
@@ -0,0 +1,55 @@
+import pysal
+from types import ModuleType, ClassType
+from six import iteritems as diter
+
+def _find_bcs():
+    classes = dict()
+    bcs = dict()
+    ucs = dict()
+    submods = dict()
+    for obname in dir(pysal.spreg):
+        ob = pysal.spreg.__dict__[obname]
+        if isinstance(ob, ModuleType):
+            if ob.__package__.startswith("pysal"):
+                submods.update({obname:ob})
+        elif isinstance(ob, ClassType):
+            classes.update({obname:ob})
+            if ob.__name__.startswith('Base'):
+                bcs.update({obname:ob})
+    for modname, mod in diter(submods):
+        basecands = dict()
+        for clname in dir(mod):
+            cl = mod.__dict__[clname]
+            if isinstance(cl, ClassType):
+                try:
+                    if cl.__name__.startswith('Base'):
+                        if cl not in bcs:
+                            bcs.update({cl.__name__:cl})
+                        else:
+                            classes.update({cl.__name__:cl})
+                except:
+                    pass
+    ucs.update({k:v for k,v in diter(classes) if (
+                any([issubclass(v, bc) for bc in bcs.values()])
+                and (k not in bcs))
+                or k.endswith('Regimes')})
+    return bcs, ucs
+
+base, user = _find_bcs()
+_everything = base.copy()
+_everything.update(user)
+
+for k,v in diter(base):
+    exec('{k} = {v}'.format(k=k,v=v))
+for k,v in diter(user):
+    exec('{k} = {v}'.format(k=k,v=v))
+
+__all__ = list()
+__all__.extend(base.keys())
+__all__.extend(user.keys())
+#regimes = {cls for cls in user if 'regimes' in cls.__module__}
+
+#if we go with something like a "base" and "user" submodule setup,
+#it'd be as simple as flattening the subclasses out into those submodules. 
+#for name, cl in diter(_find_bcs()[0]):
+#    exec('{n} = {cls}'.format(n=name, cls=cl))
diff --git a/pysal/spreg/tests/test_diagnostics.py b/pysal/contrib/handler/tests/test_diagnostics.py
similarity index 94%
copy from pysal/spreg/tests/test_diagnostics.py
copy to pysal/contrib/handler/tests/test_diagnostics.py
index 1904b58..97ef0cf 100644
--- a/pysal/spreg/tests/test_diagnostics.py
+++ b/pysal/contrib/handler/tests/test_diagnostics.py
@@ -2,8 +2,9 @@ import unittest
 import numpy as np
 import pysal
 from pysal.spreg import diagnostics
-from pysal.spreg.ols import OLS 
-
+from pysal.spreg.ols import OLS
+import pysal.contrib.handler as h
+from pysal.contrib.pdutilities.dbf_utilities import dbf2df
 
 # create regression object used by all the tests below
 db = pysal.open(pysal.examples.get_path("columbus.dbf"), "r")
@@ -13,7 +14,11 @@ X = []
 X.append(db.by_col("INC"))
 X.append(db.by_col("HOVAL"))
 X = np.array(X).T
-reg = OLS(y,X)
+
+df = dbf2df(pysal.examples.get_path('columbus.dbf'))
+formula = 'CRIME ~ INC + HOVAL'
+
+reg = h.Model(formula, data=df)
 
 
 class TestFStat(unittest.TestCase):
diff --git a/pysal/spreg/tests/test_diagnostics_sp.py b/pysal/contrib/handler/tests/test_diagnostics_sp.py
similarity index 95%
copy from pysal/spreg/tests/test_diagnostics_sp.py
copy to pysal/contrib/handler/tests/test_diagnostics_sp.py
index 3d9b8ff..fac2a6a 100644
--- a/pysal/spreg/tests/test_diagnostics_sp.py
+++ b/pysal/contrib/handler/tests/test_diagnostics_sp.py
@@ -1,10 +1,15 @@
 import unittest
 import numpy as np
 import pysal
+from pysal.contrib.handler import Model
+from functools import partial
 from pysal.spreg import diagnostics
-from pysal.spreg.ols import OLS as OLS
-from pysal.spreg.twosls import TSLS as TSLS
-from pysal.spreg.twosls_sp import GM_Lag
+#from pysal.spreg.ols import OLS as OLS
+OLS = Model
+#from pysal.spreg.twosls import TSLS as TSLS
+TSLS = partial(Model, mtype='TSLS')
+#from pysal.spreg.twosls_sp import GM_Lag
+GM_Lag = partial(Model, mtype='GM_Lag')
 from pysal.spreg.diagnostics_sp import LMtests, MoranRes, spDcache, AKtest
 
 
diff --git a/pysal/spreg/tests/test_diagnostics_tsls.py b/pysal/contrib/handler/tests/test_diagnostics_tsls.py
similarity index 86%
copy from pysal/spreg/tests/test_diagnostics_tsls.py
copy to pysal/contrib/handler/tests/test_diagnostics_tsls.py
index 4423b33..cba311c 100644
--- a/pysal/spreg/tests/test_diagnostics_tsls.py
+++ b/pysal/contrib/handler/tests/test_diagnostics_tsls.py
@@ -1,11 +1,16 @@
 import unittest
 import numpy as np
 import pysal
+from pysal.contrib.handler import Model
+from functools import partial
 import pysal.spreg.diagnostics_tsls as diagnostics_tsls
 import pysal.spreg.diagnostics as diagnostics
-from pysal.spreg.ols import OLS as OLS
-from pysal.spreg.twosls import TSLS as TSLS
-from pysal.spreg.twosls_sp import GM_Lag
+#from pysal.spreg.ols import OLS as OLS
+OLS = Model
+#from pysal.spreg.twosls import TSLS as TSLS
+TSLS = partial(Model, mtype='TSLS')
+#from pysal.spreg.twosls_sp import GM_Lag
+GM_Lag = partial(Model, mtype='GM_Lag')
 from scipy.stats import pearsonr
 
 
diff --git a/pysal/spreg/tests/test_error_sp.py b/pysal/contrib/handler/tests/test_error_sp.py
similarity index 61%
copy from pysal/spreg/tests/test_error_sp.py
copy to pysal/contrib/handler/tests/test_error_sp.py
index 1aba6db..9486e1f 100644
--- a/pysal/spreg/tests/test_error_sp.py
+++ b/pysal/contrib/handler/tests/test_error_sp.py
@@ -3,6 +3,16 @@ import scipy
 import pysal
 import numpy as np
 from pysal.spreg import error_sp as SP
+from pysal.contrib.handler import Model
+from functools import partial
+BaseGM_Error = partial(Model, mtype='BaseGM_Error')
+GM_Error = partial(Model, mtype='GM_Error')
+
+BaseGM_Endog_Error = partial(Model, mtype='BaseGM_Endog_Error')
+GM_Endog_Error = partial(Model, mtype='GM_Endog_Error')
+
+BaseGM_Combo = partial(Model, mtype='BaseGM_Combo')
+GM_Combo = partial(Model, mtype='GM_Combo')
 
 class TestBaseGMError(unittest.TestCase):
     def setUp(self):
@@ -18,33 +28,33 @@ class TestBaseGMError(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = SP.BaseGM_Error(self.y, self.X, self.w.sparse)
+        reg = BaseGM_Error(self.y, self.X, self.w.sparse)
         betas = np.array([[ 47.94371455], [  0.70598088], [ -0.55571746], [  0.37230161]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.testing.assert_allclose(reg.betas,betas,4)
         u = np.array([ 27.4739775])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.testing.assert_allclose(reg.u[0],u,4)
         predy = np.array([ 52.9930255])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.testing.assert_allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n,4)
+        np.testing.assert_allclose(reg.n,n,4)
         k = 3
-        self.assertAlmostEqual(reg.k,k,4)
+        np.testing.assert_allclose(reg.k,k,4)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.testing.assert_allclose(reg.y[0],y,4)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x[0],x,4)
+        np.testing.assert_allclose(reg.x[0],x,4)
         e = np.array([ 31.89620319])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.testing.assert_allclose(reg.e_filtered[0],e,4)
         predy = np.array([ 52.9930255])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.testing.assert_allclose(reg.predy[0],predy,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.testing.assert_allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.testing.assert_allclose(reg.std_y,sy)
         vm = np.array([[  1.51884943e+02,  -5.37622793e+00,  -1.86970286e+00], [ -5.37622793e+00,   2.48972661e-01,   5.26564244e-02], [ -1.86970286e+00,   5.26564244e-02, 3.18930650e-02]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.testing.assert_allclose(reg.vm,vm,4)
         sig2 = 191.73716465732355
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.testing.assert_allclose(reg.sig2,sig2,4)
 
 class TestGMError(unittest.TestCase):
     def setUp(self):
@@ -59,39 +69,39 @@ class TestGMError(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = SP.GM_Error(self.y, self.X, self.w)
+        reg = GM_Error(self.y, self.X, self.w)
         betas = np.array([[ 47.94371455], [  0.70598088], [ -0.55571746], [  0.37230161]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.testing.assert_allclose(reg.betas,betas,4)
         u = np.array([ 27.4739775])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.testing.assert_allclose(reg.u[0],u,4)
         predy = np.array([ 52.9930255])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.testing.assert_allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n,4)
+        np.testing.assert_allclose(reg.n,n,4)
         k = 3
-        self.assertAlmostEqual(reg.k,k,4)
+        np.testing.assert_allclose(reg.k,k,4)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.testing.assert_allclose(reg.y[0],y,4)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x[0],x,4)
+        np.testing.assert_allclose(reg.x[0],x,4)
         e = np.array([ 31.89620319])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.testing.assert_allclose(reg.e_filtered[0],e,4)
         predy = np.array([ 52.9930255])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.testing.assert_allclose(reg.predy[0],predy,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.testing.assert_allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.testing.assert_allclose(reg.std_y,sy)
         vm = np.array([[  1.51884943e+02,  -5.37622793e+00,  -1.86970286e+00], [ -5.37622793e+00,   2.48972661e-01,   5.26564244e-02], [ -1.86970286e+00,   5.26564244e-02, 3.18930650e-02]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.testing.assert_allclose(reg.vm,vm,4)
         sig2 = 191.73716465732355
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.testing.assert_allclose(reg.sig2,sig2,4)
         pr2 = 0.3495097406012179
-        self.assertAlmostEqual(reg.pr2,pr2)
+        np.testing.assert_allclose(reg.pr2,pr2)
         std_err = np.array([ 12.32416094,   0.4989716 ,   0.1785863 ])
-        np.testing.assert_array_almost_equal(reg.std_err,std_err,4)
+        np.testing.assert_allclose(reg.std_err,std_err,4)
         z_stat = np.array([[  3.89022140e+00,   1.00152805e-04], [  1.41487186e+00,   1.57106070e-01], [ -3.11175868e+00,   1.85976455e-03]])
-        np.testing.assert_array_almost_equal(reg.z_stat,z_stat,4)
+        np.testing.assert_allclose(reg.z_stat,z_stat,4)
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -114,39 +124,39 @@ class TestBaseGMEndogError(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = SP.BaseGM_Endog_Error(self.y, self.X, self.yd, self.q, self.w.sparse)
+        reg = BaseGM_Endog_Error(self.y, self.X, self.yd, self.q, self.w.sparse)
         betas = np.array([[ 55.36095292], [  0.46411479], [ -0.66883535], [  0.38989939]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.testing.assert_allclose(reg.betas,betas,4)
         u = np.array([ 26.55951566])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.testing.assert_allclose(reg.u[0],u,4)
         e = np.array([ 31.23925425])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.testing.assert_allclose(reg.e_filtered[0],e,4)
         predy = np.array([ 53.9074875])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.testing.assert_allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n)
+        np.testing.assert_allclose(reg.n,n)
         k = 3
-        self.assertAlmostEqual(reg.k,k)
+        np.testing.assert_allclose(reg.k,k)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.testing.assert_allclose(reg.y[0],y,4)
         x = np.array([  1.   ,  19.531])
-        np.testing.assert_array_almost_equal(reg.x[0],x,4)
+        np.testing.assert_allclose(reg.x[0],x,4)
         yend = np.array([  15.72598])
-        np.testing.assert_array_almost_equal(reg.yend[0],yend,4)
+        np.testing.assert_allclose(reg.yend[0],yend,4)
         z = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.z[0],z,4)
+        np.testing.assert_allclose(reg.z[0],z,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.testing.assert_allclose(reg.mean_y,my)
         #std_y
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.testing.assert_allclose(reg.std_y,sy)
         #vm
         vm = np.array([[  5.29158422e+02,  -1.57833675e+01,  -8.38021080e+00],
        [ -1.57833675e+01,   5.40235041e-01,   2.31120327e-01],
        [ -8.38021080e+00,   2.31120327e-01,   1.44977385e-01]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.testing.assert_allclose(reg.vm,vm,4)
         sig2 = 192.50022721929574
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.testing.assert_allclose(reg.sig2,sig2,4)
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -168,43 +178,43 @@ class TestGMEndogError(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = SP.GM_Endog_Error(self.y, self.X, self.yd, self.q, self.w)
+        reg = GM_Endog_Error(self.y, self.X, self.yd, self.q, self.w)
         betas = np.array([[ 55.36095292], [  0.46411479], [ -0.66883535], [  0.38989939]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.testing.assert_allclose(reg.betas,betas,4)
         u = np.array([ 26.55951566])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.testing.assert_allclose(reg.u[0],u,4)
         e = np.array([ 31.23925425])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.testing.assert_allclose(reg.e_filtered[0],e,4)
         predy = np.array([ 53.9074875])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.testing.assert_allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n)
+        np.testing.assert_allclose(reg.n,n)
         k = 3
-        self.assertAlmostEqual(reg.k,k)
+        np.testing.assert_allclose(reg.k,k)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.testing.assert_allclose(reg.y[0],y,4)
         x = np.array([  1.   ,  19.531])
-        np.testing.assert_array_almost_equal(reg.x[0],x,4)
+        np.testing.assert_allclose(reg.x[0],x,4)
         yend = np.array([  15.72598])
-        np.testing.assert_array_almost_equal(reg.yend[0],yend,4)
+        np.testing.assert_allclose(reg.yend[0],yend,4)
         z = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.z[0],z,4)
+        np.testing.assert_allclose(reg.z[0],z,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.testing.assert_allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.testing.assert_allclose(reg.std_y,sy)
         vm = np.array([[  5.29158422e+02,  -1.57833675e+01,  -8.38021080e+00],
        [ -1.57833675e+01,   5.40235041e-01,   2.31120327e-01],
        [ -8.38021080e+00,   2.31120327e-01,   1.44977385e-01]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.testing.assert_allclose(reg.vm,vm,4)
         pr2 = 0.346472557570858
-        self.assertAlmostEqual(reg.pr2,pr2)
+        np.testing.assert_allclose(reg.pr2,pr2)
         sig2 = 192.50022721929574
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.testing.assert_allclose(reg.sig2,sig2,4)
         std_err = np.array([ 23.003401  ,   0.73500657,   0.38075777])
-        np.testing.assert_array_almost_equal(reg.std_err,std_err,4)
+        np.testing.assert_allclose(reg.std_err,std_err,4)
         z_stat = np.array([[ 2.40664208,  0.01609994], [ 0.63144305,  0.52775088], [-1.75659016,  0.07898769]])
-        np.testing.assert_array_almost_equal(reg.z_stat,z_stat,4)
+        np.testing.assert_allclose(reg.z_stat,z_stat,4)
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -224,36 +234,36 @@ class TestBaseGMCombo(unittest.TestCase):
         # Only spatial lag
         yd2, q2 = pysal.spreg.utils.set_endog(self.y, self.X, self.w, None, None, 1, True)
         self.X = np.hstack((np.ones(self.y.shape),self.X))
-        reg = SP.BaseGM_Combo(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse)
+        reg = BaseGM_Combo(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse)
         betas = np.array([[ 57.61123461],[  0.73441314], [ -0.59459416], [ -0.21762921], [  0.54732051]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.testing.assert_allclose(reg.betas,betas,4)
         u = np.array([ 25.57932637])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.testing.assert_allclose(reg.u[0],u,4)
         e_filtered = np.array([ 31.65374945])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e_filtered,4)
+        np.testing.assert_allclose(reg.e_filtered[0],e_filtered,4)
         predy = np.array([ 54.88767663])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.testing.assert_allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n)
+        np.testing.assert_allclose(reg.n,n)
         k = 4
-        self.assertAlmostEqual(reg.k,k)
+        np.testing.assert_allclose(reg.k,k)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.testing.assert_allclose(reg.y[0],y,4)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x[0],x,4)
+        np.testing.assert_allclose(reg.x[0],x,4)
         yend = np.array([  35.4585005])
-        np.testing.assert_array_almost_equal(reg.yend[0],yend,4)
+        np.testing.assert_allclose(reg.yend[0],yend,4)
         z = np.array([  1.       ,  19.531    ,  15.72598  ,  35.4585005])
-        np.testing.assert_array_almost_equal(reg.z[0],z,4)
+        np.testing.assert_allclose(reg.z[0],z,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.testing.assert_allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.testing.assert_allclose(reg.std_y,sy)
         vm = np.array([  5.22438365e+02,   2.38012873e-01,   3.20924172e-02,
          2.15753599e-01])
-        np.testing.assert_array_almost_equal(np.diag(reg.vm),vm,4)
+        np.testing.assert_allclose(np.diag(reg.vm),vm,4)
         sig2 = 181.78650186468832
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.testing.assert_allclose(reg.sig2,sig2,4)
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -270,48 +280,48 @@ class TestGMCombo(unittest.TestCase):
         self.w.transform = 'r'
     def test_model(self):
         # Only spatial lag
-        reg = SP.GM_Combo(self.y, self.X, w=self.w)
+        reg = GM_Combo(self.y, self.X, w=self.w)
         e_reduced = np.array([ 28.18617481])
-        np.testing.assert_array_almost_equal(reg.e_pred[0],e_reduced,4)
+        np.testing.assert_allclose(reg.e_pred[0],e_reduced,4)
         predy_e = np.array([ 52.28082782])
-        np.testing.assert_array_almost_equal(reg.predy_e[0],predy_e,4)
+        np.testing.assert_allclose(reg.predy_e[0],predy_e,4)
         betas = np.array([[ 57.61123515],[  0.73441313], [ -0.59459416], [ -0.21762921], [  0.54732051]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.testing.assert_allclose(reg.betas,betas,4)
         u = np.array([ 25.57932637])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.testing.assert_allclose(reg.u[0],u,4)
         e_filtered = np.array([ 31.65374945])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e_filtered,4)
+        np.testing.assert_allclose(reg.e_filtered[0],e_filtered,4)
         predy = np.array([ 54.88767685])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.testing.assert_allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n)
+        np.testing.assert_allclose(reg.n,n)
         k = 4
-        self.assertAlmostEqual(reg.k,k)
+        np.testing.assert_allclose(reg.k,k)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.testing.assert_allclose(reg.y[0],y,4)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x[0],x,4)
+        np.testing.assert_allclose(reg.x[0],x,4)
         yend = np.array([  35.4585005])
-        np.testing.assert_array_almost_equal(reg.yend[0],yend,4)
+        np.testing.assert_allclose(reg.yend[0],yend,4)
         z = np.array([  1.       ,  19.531    ,  15.72598  ,  35.4585005])
-        np.testing.assert_array_almost_equal(reg.z[0],z,4)
+        np.testing.assert_allclose(reg.z[0],z,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.testing.assert_allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.testing.assert_allclose(reg.std_y,sy)
         vm = np.array([  5.22438333e+02,   2.38012875e-01,   3.20924173e-02,
          2.15753579e-01])
-        np.testing.assert_array_almost_equal(np.diag(reg.vm),vm,4)
+        np.testing.assert_allclose(np.diag(reg.vm),vm,4)
         sig2 = 181.78650186468832
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.testing.assert_allclose(reg.sig2,sig2,4)
         pr2 = 0.3018280166937799
-        self.assertAlmostEqual(reg.pr2,pr2,4)
+        np.testing.assert_allclose(reg.pr2,pr2,4)
         pr2_e = 0.3561355586759414
-        self.assertAlmostEqual(reg.pr2_e,pr2_e,4)
+        np.testing.assert_allclose(reg.pr2_e,pr2_e,4)
         std_err = np.array([ 22.85692222,  0.48786559,  0.17914356,  0.46449318])
-        np.testing.assert_array_almost_equal(reg.std_err,std_err,4)
+        np.testing.assert_allclose(reg.std_err,std_err,4)
         z_stat = np.array([[  2.52051597e+00,   1.17182922e-02], [  1.50535954e+00,   1.32231664e-01], [ -3.31909311e+00,   9.03103123e-04], [ -4.68530506e-01,   6.39405261e-01]])
-        np.testing.assert_array_almost_equal(reg.z_stat,z_stat,4)
+        np.testing.assert_allclose(reg.z_stat,z_stat,4)
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/pysal/spreg/tests/test_error_sp_regimes.py b/pysal/contrib/handler/tests/test_error_sp_regimes.py
similarity index 90%
copy from pysal/spreg/tests/test_error_sp_regimes.py
copy to pysal/contrib/handler/tests/test_error_sp_regimes.py
index 0754c72..5affcaf 100644
--- a/pysal/spreg/tests/test_error_sp_regimes.py
+++ b/pysal/contrib/handler/tests/test_error_sp_regimes.py
@@ -2,8 +2,19 @@ import unittest
 import scipy
 import pysal
 import numpy as np
-from pysal.spreg import error_sp_regimes as SP
-from pysal.spreg.error_sp import GM_Error, GM_Endog_Error, GM_Combo
+#from pysal.spreg import error_sp_regimes as SP
+#from pysal.spreg.error_sp import GM_Error, GM_Endog_Error, GM_Combo
+
+from functools import partial
+from pysal.contrib.handler import Model
+
+GM_Error = partial(Model, mtype='GM_Error')
+GM_Endog_Error = partial(Model, mtype='GM_Endog_Error')
+GM_Combo = partial(Model, mtype='GM_Combo')
+
+GM_Error_Regimes = partial(Model, mtype='GM_Error_Regimes')
+GM_Endog_Error_Regimes = partial(Model, mtype='GM_Endog_Error_Regimes')
+GM_Combo_Regimes = partial(Model, mtype='GM_Combo_Regimes')
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -45,7 +56,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
         self.w_a1.transform='r'
         
     def test_model(self):
-        reg = SP.GM_Error_Regimes(self.y, self.X, self.regimes, self.w)
+        reg = GM_Error_Regimes(self.y, self.X, self.regimes, self.w)
         betas = np.array([[ 63.3443073 ],
        [ -0.15468   ],
        [ -1.52186509],
@@ -91,7 +102,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
     """
     def test_model_regi_error(self):
         #Columbus:
-        reg = SP.GM_Error_Regimes(self.y, self.X, self.regimes, self.w, regime_err_sep=True)
+        reg = GM_Error_Regimes(self.y, self.X, self.regimes, self.w, regime_err_sep=True)
         betas = np.array([[ 60.45730439],
        [ -0.17732134],
        [ -1.30936328],
@@ -117,7 +128,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
         chow_j = 0.70119418251625387
         self.assertAlmostEqual(reg.chow.joint[0],chow_j,4)
         #Artficial:
-        model = SP.GM_Error_Regimes(self.y_a, self.x_a, self.regi_a, w=self.w_a, regime_err_sep=True)
+        model = GM_Error_Regimes(self.y_a, self.x_a, self.regi_a, w=self.w_a, regime_err_sep=True)
         model1 = GM_Error(self.y_a[0:(self.n2)].reshape((self.n2),1), self.x_a[0:(self.n2)], w=self.w_a1)
         model2 = GM_Error(self.y_a[(self.n2):].reshape((self.n2),1), self.x_a[(self.n2):], w=self.w_a1)
         tbetas = np.vstack((model1.betas, model2.betas))
@@ -126,7 +137,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
         np.testing.assert_array_almost_equal(model.vm.diagonal(), vm, 4)
     """
     def test_model_endog(self):
-        reg = SP.GM_Endog_Error_Regimes(self.y, self.X1, self.yd, self.q, self.regimes, self.w)
+        reg = GM_Endog_Error_Regimes(self.y, self.X1, self.yd, self.q, self.regimes, self.w)
         betas = np.array([[ 77.48385551,   4.52986622,  78.93209405,   0.42186261,
          -3.23823854,  -1.1475775 ,   0.20222108]])
         np.testing.assert_array_almost_equal(reg.betas.T,betas,4)
@@ -178,7 +189,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
 
     def test_model_endog_regi_error(self):
         #Columbus:
-        reg = SP.GM_Endog_Error_Regimes(self.y, self.X1, self.yd, self.q, self.regimes, self.w, regime_err_sep=True)
+        reg = GM_Endog_Error_Regimes(self.y, self.X1, self.yd, self.q, self.regimes, self.w, regime_err_sep=True)
         betas = np.array([[  7.91729500e+01],
        [  5.80693176e+00],
        [ -3.84036576e+00],
@@ -205,7 +216,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
         #self.assertAlmostEqual(reg.chow.joint[0],chow_j)
         np.testing.assert_allclose(reg.chow.joint[0], chow_j)
         #Artficial:
-        model = SP.GM_Endog_Error_Regimes(self.y_a, self.x_a1, yend=self.x_a2, q=self.q_a, regimes=self.regi_a, w=self.w_a, regime_err_sep=True)
+        model = GM_Endog_Error_Regimes(self.y_a, self.x_a1, yend=self.x_a2, q=self.q_a, regimes=self.regi_a, w=self.w_a, regime_err_sep=True)
         model1 = GM_Endog_Error(self.y_a[0:(self.n2)].reshape((self.n2),1), self.x_a1[0:(self.n2)], yend=self.x_a2[0:(self.n2)], q=self.q_a[0:(self.n2)], w=self.w_a1)
         model2 = GM_Endog_Error(self.y_a[(self.n2):].reshape((self.n2),1), self.x_a1[(self.n2):], yend=self.x_a2[(self.n2):], q=self.q_a[(self.n2):], w=self.w_a1)
         tbetas = np.vstack((model1.betas, model2.betas))
@@ -214,7 +225,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
         np.testing.assert_array_almost_equal(model.vm.diagonal(), vm, 4)
 
     def test_model_combo(self):
-        reg = SP.GM_Combo_Regimes(self.y, self.X1, self.regimes, self.yd, self.q, w=self.w)
+        reg = GM_Combo_Regimes(self.y, self.X1, self.regimes, self.yd, self.q, w=self.w)
         predy_e = np.array([ 18.82774339])
         np.testing.assert_array_almost_equal(reg.predy_e[0],predy_e,4)
         betas = np.array([[ 36.44798052],
@@ -270,7 +281,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
 
     def test_model_combo_regi_error(self):
         #Columbus:
-        reg = SP.GM_Combo_Regimes(self.y, self.X1, self.regimes, self.yd, self.q, w=self.w, regime_lag_sep=True, regime_err_sep=True)
+        reg = GM_Combo_Regimes(self.y, self.X1, self.regimes, self.yd, self.q, w=self.w, regime_lag_sep=True, regime_err_sep=True)
         betas = np.array([[ 42.01035248],
        [ -0.13938772],
        [ -0.6528306 ],
@@ -299,7 +310,7 @@ class TestGM_Error_Regimes(unittest.TestCase):
         chow_j = 0.28479988992843119
         self.assertAlmostEqual(reg.chow.joint[0],chow_j)
         #Artficial:
-        model = SP.GM_Combo_Regimes(self.y_a, self.x_a1, yend=self.x_a2, q=self.q_a, regimes=self.regi_a, w=self.w_a, regime_err_sep=True, regime_lag_sep=True)
+        model = GM_Combo_Regimes(self.y_a, self.x_a1, yend=self.x_a2, q=self.q_a, regimes=self.regi_a, w=self.w_a, regime_err_sep=True, regime_lag_sep=True)
         model1 = GM_Combo(self.y_a[0:(self.n2)].reshape((self.n2),1), self.x_a1[0:(self.n2)], yend=self.x_a2[0:(self.n2)], q=self.q_a[0:(self.n2)], w=self.w_a1)
         model2 = GM_Combo(self.y_a[(self.n2):].reshape((self.n2),1), self.x_a1[(self.n2):], yend=self.x_a2[(self.n2):], q=self.q_a[(self.n2):], w=self.w_a1)
         tbetas = np.vstack((model1.betas, model2.betas))
diff --git a/pysal/spreg/tests/test_error_sp_sparse.py b/pysal/contrib/handler/tests/test_error_sp_sparse.py
similarity index 62%
copy from pysal/spreg/tests/test_error_sp_sparse.py
copy to pysal/contrib/handler/tests/test_error_sp_sparse.py
index d60c8eb..fb59ab6 100644
--- a/pysal/spreg/tests/test_error_sp_sparse.py
+++ b/pysal/contrib/handler/tests/test_error_sp_sparse.py
@@ -1,10 +1,20 @@
 import unittest
 import pysal
 import numpy as np
-from pysal.spreg import error_sp as SP
+#from pysal.spreg import error_sp as SP
 import scipy
 from scipy import sparse
 
+from functools import partial
+from pysal.contrib.handler import Model
+
+GM_Error = partial(Model, mtype='GM_Error')
+GM_Endog_Error = partial(Model, mtype='GM_Endog_Error')
+GM_Combo = partial(Model, mtype='GM_Combo')
+BaseGM_Error = partial(Model, mtype='BaseGM_Error')
+BaseGM_Endog_Error = partial(Model, mtype='BaseGM_Endog_Error')
+BaseGM_Combo = partial(Model, mtype='BaseGM_Combo')
+
 class TestBaseGMError(unittest.TestCase):
     def setUp(self):
         db=pysal.open(pysal.examples.get_path("columbus.dbf"),"r")
@@ -20,33 +30,33 @@ class TestBaseGMError(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = SP.BaseGM_Error(self.y, self.X, self.w.sparse)
+        reg = BaseGM_Error(self.y, self.X, self.w.sparse)
         betas = np.array([[ 47.94371455], [  0.70598088], [ -0.55571746], [  0.37230161]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         u = np.array([ 27.4739775])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         predy = np.array([ 52.9930255])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n,4)
+        np.allclose(reg.n,n,4)
         k = 3
-        self.assertAlmostEqual(reg.k,k,4)
+        np.allclose(reg.k,k,4)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.allclose(reg.y[0],y,4)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x.toarray()[0],x,4)
+        np.allclose(reg.x.toarray()[0],x,4)
         e = np.array([ 31.89620319])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.allclose(reg.e_filtered[0],e,4)
         predy = np.array([ 52.9930255])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.allclose(reg.std_y,sy)
         vm = np.array([[  1.51884943e+02,  -5.37622793e+00,  -1.86970286e+00], [ -5.37622793e+00,   2.48972661e-01,   5.26564244e-02], [ -1.86970286e+00,   5.26564244e-02, 3.18930650e-02]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.allclose(reg.vm,vm,4)
         sig2 = 191.73716465732355
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.allclose(reg.sig2,sig2,4)
 
 class TestGMError(unittest.TestCase):
     def setUp(self):
@@ -62,39 +72,39 @@ class TestGMError(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = SP.GM_Error(self.y, self.X, self.w)
+        reg = GM_Error(self.y, self.X, self.w)
         betas = np.array([[ 47.94371455], [  0.70598088], [ -0.55571746], [  0.37230161]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         u = np.array([ 27.4739775])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         predy = np.array([ 52.9930255])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n,4)
+        np.allclose(reg.n,n,4)
         k = 3
-        self.assertAlmostEqual(reg.k,k,4)
+        np.allclose(reg.k,k,4)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.allclose(reg.y[0],y,4)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x.toarray()[0],x,4)
+        np.allclose(reg.x.toarray()[0],x,4)
         e = np.array([ 31.89620319])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.allclose(reg.e_filtered[0],e,4)
         predy = np.array([ 52.9930255])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.allclose(reg.std_y,sy)
         vm = np.array([[  1.51884943e+02,  -5.37622793e+00,  -1.86970286e+00], [ -5.37622793e+00,   2.48972661e-01,   5.26564244e-02], [ -1.86970286e+00,   5.26564244e-02, 3.18930650e-02]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.allclose(reg.vm,vm,4)
         sig2 = 191.73716465732355
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.allclose(reg.sig2,sig2,4)
         pr2 = 0.3495097406012179
-        self.assertAlmostEqual(reg.pr2,pr2)
+        np.allclose(reg.pr2,pr2)
         std_err = np.array([ 12.32416094,   0.4989716 ,   0.1785863 ])
-        np.testing.assert_array_almost_equal(reg.std_err,std_err,4)
+        np.allclose(reg.std_err,std_err,4)
         z_stat = np.array([[  3.89022140e+00,   1.00152805e-04], [  1.41487186e+00,   1.57106070e-01], [ -3.11175868e+00,   1.85976455e-03]])
-        np.testing.assert_array_almost_equal(reg.z_stat,z_stat,4)
+        np.allclose(reg.z_stat,z_stat,4)
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -118,39 +128,39 @@ class TestBaseGMEndogError(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = SP.BaseGM_Endog_Error(self.y, self.X, self.yd, self.q, self.w.sparse)
+        reg = BaseGM_Endog_Error(self.y, self.X, self.yd, self.q, self.w.sparse)
         betas = np.array([[ 55.36095292], [  0.46411479], [ -0.66883535], [  0.38989939]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         u = np.array([ 26.55951566])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         e = np.array([ 31.23925425])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.allclose(reg.e_filtered[0],e,4)
         predy = np.array([ 53.9074875])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n)
+        np.allclose(reg.n,n)
         k = 3
-        self.assertAlmostEqual(reg.k,k)
+        np.allclose(reg.k,k)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.allclose(reg.y[0],y,4)
         x = np.array([  1.   ,  19.531])
-        np.testing.assert_array_almost_equal(reg.x.toarray()[0],x,4)
+        np.allclose(reg.x.toarray()[0],x,4)
         yend = np.array([  15.72598])
-        np.testing.assert_array_almost_equal(reg.yend[0],yend,4)
+        np.allclose(reg.yend[0],yend,4)
         z = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.z.toarray()[0],z,4)
+        np.allclose(reg.z.toarray()[0],z,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.allclose(reg.mean_y,my)
         #std_y
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.allclose(reg.std_y,sy)
         #vm
         vm = np.array([[ 529.15840986,  -15.78336736,   -8.38021053],
        [ -15.78336736,    0.54023504,    0.23112032],
        [  -8.38021053,    0.23112032,    0.14497738]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.allclose(reg.vm,vm,4)
         sig2 = 192.5002
-        self.assertAlmostEqual(round(reg.sig2,4),round(sig2,4),4)
+        np.allclose(round(reg.sig2,4),round(sig2,4),4)
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -173,43 +183,43 @@ class TestGMEndogError(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = SP.GM_Endog_Error(self.y, self.X, self.yd, self.q, self.w)
+        reg = GM_Endog_Error(self.y, self.X, self.yd, self.q, self.w)
         betas = np.array([[ 55.36095292], [  0.46411479], [ -0.66883535], [  0.38989939]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         u = np.array([ 26.55951566])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         e = np.array([ 31.23925425])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.allclose(reg.e_filtered[0],e,4)
         predy = np.array([ 53.9074875])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n)
+        np.allclose(reg.n,n)
         k = 3
-        self.assertAlmostEqual(reg.k,k)
+        np.allclose(reg.k,k)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.allclose(reg.y[0],y,4)
         x = np.array([  1.   ,  19.531])
-        np.testing.assert_array_almost_equal(reg.x.toarray()[0],x,4)
+        np.allclose(reg.x.toarray()[0],x,4)
         yend = np.array([  15.72598])
-        np.testing.assert_array_almost_equal(reg.yend[0],yend,4)
+        np.allclose(reg.yend[0],yend,4)
         z = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.z.toarray()[0],z,4)
+        np.allclose(reg.z.toarray()[0],z,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.allclose(reg.std_y,sy)
         vm = np.array([[ 529.15840986,  -15.78336736,   -8.38021053],
        [ -15.78336736,    0.54023504,    0.23112032],
        [  -8.38021053,    0.23112032,    0.14497738]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.allclose(reg.vm,vm,4)
         pr2 = 0.346472557570858
-        self.assertAlmostEqual(reg.pr2,pr2)
+        np.allclose(reg.pr2,pr2)
         sig2 = 192.5002
-        self.assertAlmostEqual(round(reg.sig2,4),round(sig2,4),4)
+        np.allclose(round(reg.sig2,4),round(sig2,4),4)
         std_err = np.array([ 23.003401  ,   0.73500657,   0.38075777])
-        np.testing.assert_array_almost_equal(reg.std_err,std_err,4)
+        np.allclose(reg.std_err,std_err,4)
         z_stat = np.array([[ 2.40664208,  0.01609994], [ 0.63144305,  0.52775088], [-1.75659016,  0.07898769]])
-        np.testing.assert_array_almost_equal(reg.z_stat,z_stat,4)
+        np.allclose(reg.z_stat,z_stat,4)
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -230,38 +240,38 @@ class TestBaseGMCombo(unittest.TestCase):
         yd2, q2 = pysal.spreg.utils.set_endog(self.y, self.X, self.w, None, None, 1, True)
         self.X = np.hstack((np.ones(self.y.shape),self.X))
         self.X = sparse.csr_matrix(self.X)
-        reg = SP.BaseGM_Combo(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse)
+        reg = BaseGM_Combo(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse)
         betas = np.array([[ 57.61123461],[  0.73441314], [ -0.59459416], [ -0.21762921], [  0.54732051]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         u = np.array([ 25.57932637])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         e_filtered = np.array([ 31.65374945])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e_filtered,4)
+        np.allclose(reg.e_filtered[0],e_filtered,4)
         predy = np.array([ 54.88767663])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n)
+        np.allclose(reg.n,n)
         k = 4
-        self.assertAlmostEqual(reg.k,k)
+        np.allclose(reg.k,k)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.allclose(reg.y[0],y,4)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x.toarray()[0],x,4)
+        np.allclose(reg.x.toarray()[0],x,4)
         yend = np.array([  35.4585005])
-        np.testing.assert_array_almost_equal(reg.yend[0],yend,4)
+        np.allclose(reg.yend[0],yend,4)
         z = np.array([  1.       ,  19.531    ,  15.72598  ,  35.4585005])
-        np.testing.assert_array_almost_equal(reg.z.toarray()[0],z,4)
+        np.allclose(reg.z.toarray()[0],z,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.allclose(reg.std_y,sy)
         vm = np.array([[ 522.43841148,   -6.07256915,   -1.91429117,   -8.97133162],
        [  -6.07256915,    0.23801287,    0.0470161 ,    0.02809628],
        [  -1.91429117,    0.0470161 ,    0.03209242,    0.00314973],
        [  -8.97133162,    0.02809628,    0.00314973,    0.21575363]])
-        np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        np.allclose(reg.vm,vm,4)
         sig2 = 181.78650186468832
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.allclose(reg.sig2,sig2,4)
 
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
 "Maximum Likelihood requires SciPy version 11 or newer.")
@@ -279,51 +289,51 @@ class TestGMCombo(unittest.TestCase):
         self.w.transform = 'r'
     def test_model(self):
         # Only spatial lag
-        reg = SP.GM_Combo(self.y, self.X, w=self.w)
+        reg = GM_Combo(self.y, self.X, w=self.w)
         e_reduced = np.array([ 28.18617481])
-        np.testing.assert_array_almost_equal(reg.e_pred[0],e_reduced,4)
+        np.allclose(reg.e_pred[0],e_reduced,4)
         predy_e = np.array([ 52.28082782])
-        np.testing.assert_array_almost_equal(reg.predy_e[0],predy_e,4)
+        np.allclose(reg.predy_e[0],predy_e,4)
         betas = np.array([[ 57.61123515],[  0.73441313], [ -0.59459416], [ -0.21762921], [  0.54732051]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         u = np.array([ 25.57932637])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         e_filtered = np.array([ 31.65374945])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e_filtered,4)
+        np.allclose(reg.e_filtered[0],e_filtered,4)
         predy = np.array([ 54.88767685])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         n = 49
-        self.assertAlmostEqual(reg.n,n)
+        np.allclose(reg.n,n)
         k = 4
-        self.assertAlmostEqual(reg.k,k)
+        np.allclose(reg.k,k)
         y = np.array([ 80.467003])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.allclose(reg.y[0],y,4)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x.toarray()[0],x,4)
+        np.allclose(reg.x.toarray()[0],x,4)
         yend = np.array([  35.4585005])
-        np.testing.assert_array_almost_equal(reg.yend[0],yend,4)
+        np.allclose(reg.yend[0],yend,4)
         z = np.array([  1.       ,  19.531    ,  15.72598  ,  35.4585005])
-        np.testing.assert_array_almost_equal(reg.z.toarray()[0],z,4)
+        np.allclose(reg.z.toarray()[0],z,4)
         my = 38.43622446938776
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.allclose(reg.mean_y,my)
         sy = 18.466069465206047
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.allclose(reg.std_y,sy)
         vm = np.array([[ 522.43841148,   -6.07256915,   -1.91429117,   -8.97133162],
        [  -6.07256915,    0.23801287,    0.0470161 ,    0.02809628],
        [  -1.91429117,    0.0470161 ,    0.03209242,    0.00314973],
        [  -8.97133162,    0.02809628,    0.00314973,    0.21575363]])
-        #np.testing.assert_array_almost_equal(reg.vm,vm,4)
+        #np.allclose(reg.vm,vm,4)
         np.testing.assert_allclose(reg.vm, vm, rtol=1e-05)
         sig2 = 181.78650186468832
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.allclose(reg.sig2,sig2,4)
         pr2 = 0.3018280166937799
-        self.assertAlmostEqual(reg.pr2,pr2,4)
+        np.allclose(reg.pr2,pr2,4)
         pr2_e = 0.3561355587000738
-        self.assertAlmostEqual(reg.pr2_e,pr2_e,4)
+        np.allclose(reg.pr2_e,pr2_e,4)
         std_err = np.array([ 22.85692222,  0.48786559,  0.17914356,  0.46449318])
-        np.testing.assert_array_almost_equal(reg.std_err,std_err,4)
+        np.allclose(reg.std_err,std_err,4)
         z_stat = np.array([[  2.52051597e+00,   1.17182922e-02], [  1.50535954e+00,   1.32231664e-01], [ -3.31909311e+00,   9.03103123e-04], [ -4.68530506e-01,   6.39405261e-01]])
-        np.testing.assert_array_almost_equal(reg.z_stat,z_stat,4)
+        np.allclose(reg.z_stat,z_stat,4)
 
 if __name__ == '__main__':
     start_suppress = np.get_printoptions()['suppress']
diff --git a/pysal/spreg/tests/test_error_sp_het.py b/pysal/contrib/handler/tests/test_error_spet.py
similarity index 95%
copy from pysal/spreg/tests/test_error_sp_het.py
copy to pysal/contrib/handler/tests/test_error_spet.py
index 1c2ce6e..4b677ff 100644
--- a/pysal/spreg/tests/test_error_sp_het.py
+++ b/pysal/contrib/handler/tests/test_error_spet.py
@@ -1,7 +1,15 @@
 import unittest
 import pysal
 import numpy as np
-from pysal.spreg import error_sp_het as HET
+from pysal.contrib.handler import Model
+from functools import partial
+
+GM_Combo_Het = partial(Model, mtype='GM_Combo_Het')
+BaseGM_Combo_Het = partial(Model, mtype='BaseGM_Combo_Het')
+GM_Error_Het = partial(Model, mtype='GM_Error_Het')
+BaseGM_Error_Het = partial(Model, mtype='BaseGM_Error_Het')
+GM_Endog_Error_Het = partial(Model, mtype='GM_Endog_Error_Het')
+BaseGM_Endog_Error_Het = partial(Model, mtype='BaseGM_Endog_Error_Het')
 
 class TestBaseGMErrorHet(unittest.TestCase):
     def setUp(self):
@@ -17,7 +25,7 @@ class TestBaseGMErrorHet(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = HET.BaseGM_Error_Het(self.y, self.X, self.w.sparse, step1c=True)
+        reg = BaseGM_Error_Het(self.y, self.X, self.w.sparse, step1c=True)
         betas = np.array([[ 47.99626638], [  0.71048989], [ -0.55876126], [  0.41178776]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 27.38122697])
@@ -69,7 +77,7 @@ class TestGMErrorHet(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = HET.GM_Error_Het(self.y, self.X, self.w, step1c=True)
+        reg = GM_Error_Het(self.y, self.X, self.w, step1c=True)
         betas = np.array([[ 47.99626638], [  0.71048989], [ -0.55876126], [  0.41178776]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 27.38122697])
@@ -136,7 +144,7 @@ class TestBaseGMEndogErrorHet(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = HET.BaseGM_Endog_Error_Het(self.y, self.X, self.yd, self.q, self.w.sparse, step1c=True)
+        reg = BaseGM_Endog_Error_Het(self.y, self.X, self.yd, self.q, self.w.sparse, step1c=True)
         betas = np.array([[ 55.39707924], [  0.46563046], [ -0.67038326], [  0.41135023]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 26.51812895])
@@ -201,7 +209,7 @@ class TestGMEndogErrorHet(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = HET.GM_Endog_Error_Het(self.y, self.X, self.yd, self.q, self.w, step1c=True)
+        reg = GM_Endog_Error_Het(self.y, self.X, self.yd, self.q, self.w, step1c=True)
         betas = np.array([[ 55.39707924], [  0.46563046], [ -0.67038326], [  0.41135023]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 26.51812895])
@@ -269,7 +277,7 @@ class TestBaseGMComboHet(unittest.TestCase):
         # Only spatial lag
         yd2, q2 = pysal.spreg.utils.set_endog(self.y, self.X, self.w, None, None, 1, True)
         self.X = np.hstack((np.ones(self.y.shape),self.X))
-        reg = HET.BaseGM_Combo_Het(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse, step1c=True)
+        reg = BaseGM_Combo_Het(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse, step1c=True)
         betas = np.array([[ 57.7778574 ], [  0.73034922], [ -0.59257362], [ -0.2230231 ], [  0.56636724]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 25.65156033])
@@ -337,7 +345,7 @@ class TestGMComboHet(unittest.TestCase):
 
     def test_model(self):
         # Only spatial lag
-        reg = HET.GM_Combo_Het(self.y, self.X, w=self.w, step1c=True)
+        reg = GM_Combo_Het(self.y, self.X, w=self.w, step1c=True)
         betas = np.array([[ 57.7778574 ], [  0.73034922], [ -0.59257362], [ -0.2230231 ], [  0.56636724]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 25.65156033])
diff --git a/pysal/spreg/tests/test_error_sp_het_regimes.py b/pysal/contrib/handler/tests/test_error_spet_regimes.py
similarity index 96%
copy from pysal/spreg/tests/test_error_sp_het_regimes.py
copy to pysal/contrib/handler/tests/test_error_spet_regimes.py
index 4eab0f5..111b241 100644
--- a/pysal/spreg/tests/test_error_sp_het_regimes.py
+++ b/pysal/contrib/handler/tests/test_error_spet_regimes.py
@@ -2,7 +2,17 @@ import unittest
 import pysal
 import numpy as np
 from pysal.spreg import error_sp_het_regimes as SP
-from pysal.spreg.error_sp_het import GM_Error_Het, GM_Endog_Error_Het, GM_Combo_Het
+#from pysal.spreg.error_sp_het import GM_Error_Het, GM_Endog_Error_Het, GM_Combo_Het
+from pysal.contrib.handler import Model
+from functools import partial
+
+GM_Error_Het = partial(Model, mtype='GM_Error_Het')
+GM_Endog_Error_Het = partial(Model, mtype='GM_Endog_Error_Het')
+GM_Combo_Het = partial(Model, mtype='GM_Combo_Het')
+
+GM_Error_Het_Regimes = partial(Model, mtype='GM_Error_Het_Regimes')
+GM_Endog_Error_Het_Regimes = partial(Model, mtype='GM_Endog_Error_Het_Regimes')
+GM_Combo_Het_Regimes = partial(Model, mtyle='GM_Combo_Het_Regimes')
 
 class TestGM_Error_Het_Regimes(unittest.TestCase):
     def setUp(self):
diff --git a/pysal/spreg/tests/test_error_sp_het_sparse.py b/pysal/contrib/handler/tests/test_error_spet_sparse.py
similarity index 95%
copy from pysal/spreg/tests/test_error_sp_het_sparse.py
copy to pysal/contrib/handler/tests/test_error_spet_sparse.py
index ff8a80d..657f9c5 100644
--- a/pysal/spreg/tests/test_error_sp_het_sparse.py
+++ b/pysal/contrib/handler/tests/test_error_spet_sparse.py
@@ -2,7 +2,17 @@ import unittest
 import pysal
 import numpy as np
 from scipy import sparse
-from pysal.spreg import error_sp_het as HET
+#from pysal.spreg import error_sp_het as HET
+from functools import partial
+from pysal.contrib.handler import Model
+
+GM_Error_Het = partial(Model, mtype='GM_Error_Het')
+GM_Endog_Error_Het = partial(Model, mtype='GM_Endog_Error_Het')
+GM_Combo_Het = partial(Model, mtype='GM_Combo_Het')
+
+BaseGM_Error_Het = partial(Model, mtype='BaseGM_Error_Het')
+BaseGM_Endog_Error_Het = partial(Model, mtype='BaseGM_Endog_Error_Het')
+BaseGM_Combo_Het = partial(Model, mtype='BaseGM_Combo_Het')
 
 class TestBaseGMErrorHet(unittest.TestCase):
     def setUp(self):
@@ -19,7 +29,7 @@ class TestBaseGMErrorHet(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = HET.BaseGM_Error_Het(self.y, self.X, self.w.sparse, step1c=True)
+        reg = BaseGM_Error_Het(self.y, self.X, self.w.sparse, step1c=True)
         betas = np.array([[ 47.99626638], [  0.71048989], [ -0.55876126], [  0.41178776]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 27.38122697])
@@ -72,7 +82,7 @@ class TestGMErrorHet(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = HET.GM_Error_Het(self.y, self.X, self.w, step1c=True)
+        reg = GM_Error_Het(self.y, self.X, self.w, step1c=True)
         betas = np.array([[ 47.99626638], [  0.71048989], [ -0.55876126], [  0.41178776]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 27.38122697])
@@ -140,7 +150,7 @@ class TestBaseGMEndogErrorHet(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = HET.BaseGM_Endog_Error_Het(self.y, self.X, self.yd, self.q, self.w.sparse, step1c=True)
+        reg = BaseGM_Endog_Error_Het(self.y, self.X, self.yd, self.q, self.w.sparse, step1c=True)
         betas = np.array([[ 55.39707924], [  0.46563046], [ -0.67038326], [  0.41135023]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 26.51812895])
@@ -206,7 +216,7 @@ class TestGMEndogErrorHet(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = HET.GM_Endog_Error_Het(self.y, self.X, self.yd, self.q, self.w, step1c=True)
+        reg = GM_Endog_Error_Het(self.y, self.X, self.yd, self.q, self.w, step1c=True)
         betas = np.array([[ 55.39707924], [  0.46563046], [ -0.67038326], [  0.41135023]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 26.51812895])
@@ -275,7 +285,7 @@ class TestBaseGMComboHet(unittest.TestCase):
         yd2, q2 = pysal.spreg.utils.set_endog(self.y, self.X, self.w, None, None, 1, True)
         self.X = np.hstack((np.ones(self.y.shape),self.X))
         self.X = sparse.csr_matrix(self.X)
-        reg = HET.BaseGM_Combo_Het(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse, step1c=True)
+        reg = BaseGM_Combo_Het(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse, step1c=True)
         betas = np.array([[ 57.7778574 ], [  0.73034922], [ -0.59257362], [ -0.2230231 ], [  0.56636724]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 25.65156033])
@@ -344,7 +354,7 @@ class TestGMComboHet(unittest.TestCase):
 
     def test_model(self):
         # Only spatial lag
-        reg = HET.GM_Combo_Het(self.y, self.X, w=self.w, step1c=True)
+        reg = GM_Combo_Het(self.y, self.X, w=self.w, step1c=True)
         betas = np.array([[ 57.7778574 ], [  0.73034922], [ -0.59257362], [ -0.2230231 ], [  0.56636724]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         u = np.array([ 25.65156033])
diff --git a/pysal/spreg/tests/test_error_sp_hom.py b/pysal/contrib/handler/tests/test_error_spom.py
similarity index 94%
copy from pysal/spreg/tests/test_error_sp_hom.py
copy to pysal/contrib/handler/tests/test_error_spom.py
index afc730d..320f3c2 100644
--- a/pysal/spreg/tests/test_error_sp_hom.py
+++ b/pysal/contrib/handler/tests/test_error_spom.py
@@ -4,8 +4,18 @@ Unittests for spreg.error_sp_hom module
 '''
 import unittest
 import pysal
-from pysal.spreg import error_sp_hom as HOM
+#from pysal.spreg import error_sp_hom as HOM
 import numpy as np
+from pysal.contrib.handler import Model
+from functools import partial
+
+GM_Combo_Hom = partial(Model, mtype='GM_Combo_Hom')
+GM_Error_Hom = partial(Model, mtype='GM_Error_Hom')
+GM_Endog_Error_Hom = partial(Model, mtype='GM_Endog_Error_Hom')
+
+BaseGM_Combo_Hom = partial(Model, mtype='BaseGM_Combo_Hom')
+BaseGM_Error_Hom = partial(Model, mtype='BaseGM_Error_Hom')
+BaseGM_Endog_Error_Hom = partial(Model, mtype='BaseGM_Endog_Error_Hom')
 
 class BaseGM_Error_Hom_Tester(unittest.TestCase):
     def setUp(self):
@@ -20,7 +30,7 @@ class BaseGM_Error_Hom_Tester(unittest.TestCase):
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.BaseGM_Error_Hom(self.y, self.X, self.w.sparse, A1='hom_sc')
+        reg = BaseGM_Error_Hom(self.y, self.X, self.w.sparse, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([80.467003]),7)
         x = np.array([  1.     ,  19.531  ,  15.72598])
         np.testing.assert_array_almost_equal(reg.x[0],x,7)
@@ -52,7 +62,7 @@ class GM_Error_Hom_Tester(unittest.TestCase):
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.GM_Error_Hom(self.y, self.X, self.w, A1='hom_sc')
+        reg = GM_Error_Hom(self.y, self.X, self.w, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([80.467003]),7)
         x = np.array([  1.     ,  19.531  ,  15.72598])
         np.testing.assert_array_almost_equal(reg.x[0],x,7)
@@ -102,7 +112,7 @@ class BaseGM_Endog_Error_Hom_Tester(unittest.TestCase):
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.BaseGM_Endog_Error_Hom(self.y, self.X, self.yd, self.q, self.w.sparse, A1='hom_sc')
+        reg = BaseGM_Endog_Error_Hom(self.y, self.X, self.yd, self.q, self.w.sparse, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([ 80.467003]),7)
         x = np.array([  1.     ,  19.531])
         np.testing.assert_array_almost_equal(reg.x[0],x,7)
@@ -157,7 +167,7 @@ class GM_Endog_Error_Hom_Tester(unittest.TestCase):
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.GM_Endog_Error_Hom(self.y, self.X, self.yd, self.q, self.w, A1='hom_sc')
+        reg = GM_Endog_Error_Hom(self.y, self.X, self.yd, self.q, self.w, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([ 80.467003]),7)
         x = np.array([  1.     ,  19.531])
         np.testing.assert_array_almost_equal(reg.x[0],x,7)
@@ -212,7 +222,7 @@ class BaseGM_Combo_Hom_Tester(unittest.TestCase):
     def test_model(self):
         yd2, q2 = pysal.spreg.utils.set_endog(self.y, self.X, self.w, None, None, 1, True)
         self.X = np.hstack((np.ones(self.y.shape),self.X))
-        reg = HOM.BaseGM_Combo_Hom(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse, A1='hom_sc')
+        reg = BaseGM_Combo_Hom(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([80.467003]),7)
         x = np.array([  1.     ,  19.531])
         np.testing.assert_array_almost_equal(reg.x[0],x,7)
@@ -259,7 +269,7 @@ class GM_Combo_Hom_Tester(unittest.TestCase):
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.GM_Combo_Hom(self.y, self.X, w=self.w, A1='hom_sc')
+        reg = GM_Combo_Hom(self.y, self.X, w=self.w, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([80.467003]),7)
         x = np.array([  1.     ,  19.531])
         np.testing.assert_array_almost_equal(reg.x[0],x,7)
diff --git a/pysal/spreg/tests/test_error_sp_hom_regimes.py b/pysal/contrib/handler/tests/test_error_spom_regimes.py
similarity index 87%
copy from pysal/spreg/tests/test_error_sp_hom_regimes.py
copy to pysal/contrib/handler/tests/test_error_spom_regimes.py
index 8c8e650..a082596 100644
--- a/pysal/spreg/tests/test_error_sp_hom_regimes.py
+++ b/pysal/contrib/handler/tests/test_error_spom_regimes.py
@@ -1,8 +1,22 @@
 import unittest
 import pysal
 import numpy as np
-from pysal.spreg import error_sp_hom_regimes as SP
-from pysal.spreg.error_sp_hom import GM_Error_Hom, GM_Endog_Error_Hom, GM_Combo_Hom
+#from pysal.spreg import error_sp_hom_regimes as SP
+#from pysal.spreg.error_sp_hom import GM_Error_Hom, GM_Endog_Error_Hom, GM_Combo_Hom
+
+from pysal.contrib.handler import Model
+from functools import partial
+
+GM_Error_Hom_Regimes = partial(Model, mtype='GM_Error_Hom_Regimes')
+GM_Endog_Error_Hom_Regimes = partial(Model, mtype='GM_Endog_Error_Hom_Regimes')
+GM_Combo_Hom_Regimes = partial(Model, mtype='GM_Combo_Hom_Regimes')
+BaseGM_Error_Hom_Regimes = partial(Model, mtype='BaseGM_Error_Hom_Regimes')
+BaseGM_Endog_Error_Hom_Regimes = partial(Model, mtype='BaseGM_Endog_Error_Hom_Regimes')
+BaseGM_Combo_Hom_Regimes = partial(Model, mtype='BaseGM_Combo_Hom_Regimes')
+
+GM_Error_Hom = partial(Model, mtype='GM_Error_Hom')
+GM_Endog_Error_Hom = partial(Model, mtype='GM_Endog_Error_Hom')
+GM_Combo_Hom = partial(Model, mtype='GM_Combo_Hom')
 
 class TestGM_Error_Hom_Regimes(unittest.TestCase):
     def setUp(self):
@@ -42,7 +56,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
         self.w_a1.transform='r'
         
     def test_model(self):
-        reg = SP.GM_Error_Hom_Regimes(self.y, self.X, self.regimes, self.w, A1='het')
+        reg = GM_Error_Hom_Regimes(self.y, self.X, self.regimes, self.w, A1='het')
         betas = np.array([[ 62.95986466],
        [ -0.15660795],
        [ -1.49054832],
@@ -88,7 +102,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
 
     def test_model_regi_error(self):
         #Artficial:
-        model = SP.GM_Error_Hom_Regimes(self.y_a, self.x_a, self.regi_a, w=self.w_a, regime_err_sep=True, A1='het')
+        model = GM_Error_Hom_Regimes(self.y_a, self.x_a, self.regi_a, w=self.w_a, regime_err_sep=True, A1='het')
         model1 = GM_Error_Hom(self.y_a[0:(self.n2)].reshape((self.n2),1), self.x_a[0:(self.n2)], w=self.w_a1, A1='het')
         model2 = GM_Error_Hom(self.y_a[(self.n2):].reshape((self.n2),1), self.x_a[(self.n2):], w=self.w_a1, A1='het')
         tbetas = np.vstack((model1.betas, model2.betas))
@@ -96,7 +110,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
         vm = np.hstack((model1.vm.diagonal(),model2.vm.diagonal()))
         np.testing.assert_array_almost_equal(model.vm.diagonal(), vm, 6)
         #Columbus:
-        reg = SP.GM_Error_Hom_Regimes(self.y, self.X2, self.regimes, self.w, regime_err_sep=True, A1='het')
+        reg = GM_Error_Hom_Regimes(self.y, self.X2, self.regimes, self.w, regime_err_sep=True, A1='het')
         betas = np.array([[ 60.66668194],
        [ -1.72708492],
        [  0.62170311],
@@ -121,7 +135,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
         self.assertAlmostEqual(reg.chow.joint[0],chow_j)
 
     def test_model_endog(self):
-        reg = SP.GM_Endog_Error_Hom_Regimes(self.y, self.X2, self.yd, self.q, self.regimes, self.w, A1='het')
+        reg = GM_Endog_Error_Hom_Regimes(self.y, self.X2, self.yd, self.q, self.regimes, self.w, A1='het')
         betas = np.array([[ 77.26679984],
        [  4.45992905],
        [ 78.59534391],
@@ -172,7 +186,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
 
     def test_model_endog_regi_error(self):
         #Columbus:
-        reg = SP.GM_Endog_Error_Hom_Regimes(self.y, self.X2, self.yd, self.q, self.regimes, self.w, regime_err_sep=True, A1='het')
+        reg = GM_Endog_Error_Hom_Regimes(self.y, self.X2, self.yd, self.q, self.regimes, self.w, regime_err_sep=True, A1='het')
         betas = np.array([[  7.92747424e+01],
        [  5.78086230e+00],
        [ -3.83173581e+00],
@@ -199,7 +213,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
         chow_j = 1.4485058522307526
         self.assertAlmostEqual(reg.chow.joint[0],chow_j)
         #Artficial:
-        model = SP.GM_Endog_Error_Hom_Regimes(self.y_a, self.x_a1, yend=self.x_a2, q=self.q_a, regimes=self.regi_a, w=self.w_a, regime_err_sep=True, A1='het')
+        model = GM_Endog_Error_Hom_Regimes(self.y_a, self.x_a1, yend=self.x_a2, q=self.q_a, regimes=self.regi_a, w=self.w_a, regime_err_sep=True, A1='het')
         model1 = GM_Endog_Error_Hom(self.y_a[0:(self.n2)].reshape((self.n2),1), self.x_a1[0:(self.n2)], yend=self.x_a2[0:(self.n2)], q=self.q_a[0:(self.n2)], w=self.w_a1, A1='het')
         model2 = GM_Endog_Error_Hom(self.y_a[(self.n2):].reshape((self.n2),1), self.x_a1[(self.n2):], yend=self.x_a2[(self.n2):], q=self.q_a[(self.n2):], w=self.w_a1, A1='het')
         tbetas = np.vstack((model1.betas, model2.betas))
@@ -208,7 +222,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
         np.testing.assert_array_almost_equal(model.vm.diagonal(), vm, 6)
 
     def test_model_combo(self):
-        reg = SP.GM_Combo_Hom_Regimes(self.y, self.X2, self.regimes, self.yd, self.q, w=self.w, A1='het')
+        reg = GM_Combo_Hom_Regimes(self.y, self.X2, self.regimes, self.yd, self.q, w=self.w, A1='het')
         betas = np.array([[ 36.93726782],
        [ -0.829475  ],
        [ 30.86675168],
@@ -264,7 +278,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
 
     def test_model_combo_regi_error(self):
         #Columbus:
-        reg = SP.GM_Combo_Hom_Regimes(self.y, self.X2, self.regimes, self.yd, self.q, w=self.w, regime_lag_sep=True, regime_err_sep=True, A1='het')
+        reg = GM_Combo_Hom_Regimes(self.y, self.X2, self.regimes, self.yd, self.q, w=self.w, regime_lag_sep=True, regime_err_sep=True, A1='het')
         betas = np.array([[  4.20115146e+01],
        [ -1.39171512e-01],
        [ -6.53001838e-01],
@@ -295,7 +309,7 @@ class TestGM_Error_Hom_Regimes(unittest.TestCase):
         chow_j = 0.74134991257940286
         self.assertAlmostEqual(reg.chow.joint[0],chow_j)
         #Artficial:
-        model = SP.GM_Combo_Hom_Regimes(self.y_a, self.x_a1, yend=self.x_a2, q=self.q_a, regimes=self.regi_a, w=self.w_a, regime_err_sep=True, regime_lag_sep=True, A1='het')
+        model = GM_Combo_Hom_Regimes(self.y_a, self.x_a1, yend=self.x_a2, q=self.q_a, regimes=self.regi_a, w=self.w_a, regime_err_sep=True, regime_lag_sep=True, A1='het')
         model1 = GM_Combo_Hom(self.y_a[0:(self.n2)].reshape((self.n2),1), self.x_a1[0:(self.n2)], yend=self.x_a2[0:(self.n2)], q=self.q_a[0:(self.n2)], w=self.w_a1, A1='het')
         model2 = GM_Combo_Hom(self.y_a[(self.n2):].reshape((self.n2),1), self.x_a1[(self.n2):], yend=self.x_a2[(self.n2):], q=self.q_a[(self.n2):], w=self.w_a1, A1='het')
         tbetas = np.vstack((model1.betas, model2.betas))
diff --git a/pysal/spreg/tests/test_error_sp_hom.py b/pysal/contrib/handler/tests/test_error_spom_sparse.py
similarity index 86%
copy from pysal/spreg/tests/test_error_sp_hom.py
copy to pysal/contrib/handler/tests/test_error_spom_sparse.py
index afc730d..538ff62 100644
--- a/pysal/spreg/tests/test_error_sp_hom.py
+++ b/pysal/contrib/handler/tests/test_error_spom_sparse.py
@@ -4,9 +4,21 @@ Unittests for spreg.error_sp_hom module
 '''
 import unittest
 import pysal
-from pysal.spreg import error_sp_hom as HOM
+#from pysal.spreg import error_sp_hom as HOM
+from scipy import sparse
 import numpy as np
 
+from functools import partial
+from pysal.contrib.handler import Model
+
+GM_Error_Hom = partial(Model, mtype='GM_Error_Hom')
+GM_Endog_Error_Hom = partial(Model, mtype='GM_Endog_Error_Hom')
+GM_Combo_Hom = partial(Model, mtype='GM_Combo_Hom')
+
+BaseGM_Error_Hom = partial(Model, mtype='BaseGM_Error_Hom')
+BaseGM_Endog_Error_Hom = partial(Model, mtype='BaseGM_Endog_Error_Hom')
+BaseGM_Combo_Hom = partial(Model, mtype='BaseGM_Combo_Hom')
+
 class BaseGM_Error_Hom_Tester(unittest.TestCase):
     def setUp(self):
         db=pysal.open(pysal.examples.get_path("columbus.dbf"),"r")
@@ -17,13 +29,14 @@ class BaseGM_Error_Hom_Tester(unittest.TestCase):
         X.append(db.by_col("CRIME"))
         self.X = np.array(X).T
         self.X = np.hstack((np.ones(self.y.shape),self.X))
+        self.X = sparse.csr_matrix(self.X)
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.BaseGM_Error_Hom(self.y, self.X, self.w.sparse, A1='hom_sc')
+        reg = BaseGM_Error_Hom(self.y, self.X, self.w.sparse, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([80.467003]),7)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x[0],x,7)
+        np.testing.assert_array_almost_equal(reg.x[0].toarray()[0],x,7)
         betas = np.array([[ 47.9478524 ], [  0.70633223], [ -0.55595633], [  0.41288558]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         np.testing.assert_array_almost_equal(reg.u[0],np.array([27.466734]),6)
@@ -49,13 +62,14 @@ class GM_Error_Hom_Tester(unittest.TestCase):
         X.append(db.by_col("INC"))
         X.append(db.by_col("CRIME"))
         self.X = np.array(X).T
+        self.X = sparse.csr_matrix(self.X)
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.GM_Error_Hom(self.y, self.X, self.w, A1='hom_sc')
+        reg = GM_Error_Hom(self.y, self.X, self.w, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([80.467003]),7)
         x = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.x[0],x,7)
+        np.testing.assert_array_almost_equal(reg.x[0].toarray()[0],x,7)
         betas = np.array([[ 47.9478524 ], [  0.70633223], [ -0.55595633], [  0.41288558]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         np.testing.assert_array_almost_equal(reg.u[0],np.array([27.46673388]),6)
@@ -93,6 +107,7 @@ class BaseGM_Endog_Error_Hom_Tester(unittest.TestCase):
         X.append(db.by_col("INC"))
         self.X = np.array(X).T
         self.X = np.hstack((np.ones(self.y.shape),self.X))
+        self.X = sparse.csr_matrix(self.X)
         yd = []
         yd.append(db.by_col("CRIME"))
         self.yd = np.array(yd).T
@@ -102,14 +117,14 @@ class BaseGM_Endog_Error_Hom_Tester(unittest.TestCase):
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.BaseGM_Endog_Error_Hom(self.y, self.X, self.yd, self.q, self.w.sparse, A1='hom_sc')
+        reg = BaseGM_Endog_Error_Hom(self.y, self.X, self.yd, self.q, self.w.sparse, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([ 80.467003]),7)
         x = np.array([  1.     ,  19.531])
-        np.testing.assert_array_almost_equal(reg.x[0],x,7)
+        np.testing.assert_array_almost_equal(reg.x[0].toarray()[0],x,7)
         z = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.z[0],z,7)
+        np.testing.assert_array_almost_equal(reg.z[0].toarray()[0],z,7)
         h = np.array([  1.   ,  19.531,   5.03 ])
-        np.testing.assert_array_almost_equal(reg.h[0],h,7)
+        np.testing.assert_array_almost_equal(reg.h[0].toarray()[0],h,7)
         yend = np.array([ 15.72598])
         np.testing.assert_array_almost_equal(reg.yend[0],yend,7)
         q = np.array([ 5.03])
@@ -148,6 +163,7 @@ class GM_Endog_Error_Hom_Tester(unittest.TestCase):
         X = []
         X.append(db.by_col("INC"))
         self.X = np.array(X).T
+        self.X = sparse.csr_matrix(self.X)
         yd = []
         yd.append(db.by_col("CRIME"))
         self.yd = np.array(yd).T
@@ -157,14 +173,14 @@ class GM_Endog_Error_Hom_Tester(unittest.TestCase):
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.GM_Endog_Error_Hom(self.y, self.X, self.yd, self.q, self.w, A1='hom_sc')
+        reg = GM_Endog_Error_Hom(self.y, self.X, self.yd, self.q, self.w, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([ 80.467003]),7)
         x = np.array([  1.     ,  19.531])
-        np.testing.assert_array_almost_equal(reg.x[0],x,7)
+        np.testing.assert_array_almost_equal(reg.x[0].toarray()[0],x,7)
         z = np.array([  1.     ,  19.531  ,  15.72598])
-        np.testing.assert_array_almost_equal(reg.z[0],z,7)
+        np.testing.assert_array_almost_equal(reg.z[0].toarray()[0],z,7)
         h = np.array([  1.   ,  19.531,   5.03 ])
-        np.testing.assert_array_almost_equal(reg.h[0],h,7)
+        np.testing.assert_array_almost_equal(reg.h[0].toarray()[0],h,7)
         yend = np.array([ 15.72598])
         np.testing.assert_array_almost_equal(reg.yend[0],yend,7)
         q = np.array([ 5.03])
@@ -212,10 +228,11 @@ class BaseGM_Combo_Hom_Tester(unittest.TestCase):
     def test_model(self):
         yd2, q2 = pysal.spreg.utils.set_endog(self.y, self.X, self.w, None, None, 1, True)
         self.X = np.hstack((np.ones(self.y.shape),self.X))
-        reg = HOM.BaseGM_Combo_Hom(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse, A1='hom_sc')
+        self.X = sparse.csr_matrix(self.X)
+        reg = BaseGM_Combo_Hom(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([80.467003]),7)
         x = np.array([  1.     ,  19.531])
-        np.testing.assert_array_almost_equal(reg.x[0],x,7)
+        np.testing.assert_array_almost_equal(reg.x[0].toarray()[0],x,7)
         betas = np.array([[ 10.12541428], [  1.56832263], [  0.15132076], [  0.21033397]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         np.testing.assert_array_almost_equal(reg.u[0],np.array([34.3450723]),7)
@@ -226,9 +243,9 @@ class BaseGM_Combo_Hom_Tester(unittest.TestCase):
         vm = np.array([[  2.33694742e+02,  -6.66856869e-01,  -5.58304254e+00, 4.85488380e+00], [ -6.66856869e-01,   1.94241504e-01, -5.42327138e-02, 5.37225570e-02], [ -5.58304254e+00,  -5.42327138e-02, 1.63860721e-01, -1.44425498e-01], [  4.85488380e+00, 5.37225570e-02, -1.44425498e-01, 1.78622255e-01]])
         np.testing.assert_array_almost_equal(reg.vm,vm,6)
         z = np.array([  1.       ,  19.531    ,  35.4585005])
-        np.testing.assert_array_almost_equal(reg.z[0],z,7)
+        np.testing.assert_array_almost_equal(reg.z[0].toarray()[0],z,7)
         h = np.array([  1.   ,  19.531,  18.594])
-        np.testing.assert_array_almost_equal(reg.h[0],h,7)
+        np.testing.assert_array_almost_equal(reg.h[0].toarray()[0],h,7)
         yend = np.array([ 35.4585005])
         np.testing.assert_array_almost_equal(reg.yend[0],yend,7)
         q = np.array([ 18.594])
@@ -241,9 +258,8 @@ class BaseGM_Combo_Hom_Tester(unittest.TestCase):
         self.assertAlmostEqual(reg.mean_y,my)
         std_y = 18.466069465206047
         self.assertAlmostEqual(reg.std_y,std_y)
-        sig2 = 232.22680651270042
-        #self.assertAlmostEqual(reg.sig2,sig2)
-        np.testing.assert_allclose(reg.sig2,sig2)
+        sig2 = 232.22680644168395
+        self.assertAlmostEqual(reg.sig2,sig2, places=6)
         hth = np.array([[    49.        ,    704.371999  ,    724.7435916 ], [   704.371999  ,  11686.67338121,  11092.519988  ], [   724.7435916 ,  11092.519988  , 11614.62257048]])
         np.testing.assert_array_almost_equal(reg.hth,hth,4)
 
@@ -256,13 +272,14 @@ class GM_Combo_Hom_Tester(unittest.TestCase):
         X = []
         X.append(db.by_col("INC"))
         self.X = np.array(X).T
+        self.X = sparse.csr_matrix(self.X)
         self.w = pysal.rook_from_shapefile(pysal.examples.get_path("columbus.shp"))
         self.w.transform = 'r'
     def test_model(self):
-        reg = HOM.GM_Combo_Hom(self.y, self.X, w=self.w, A1='hom_sc')
+        reg = GM_Combo_Hom(self.y, self.X, w=self.w, A1='hom_sc')
         np.testing.assert_array_almost_equal(reg.y[0],np.array([80.467003]),7)
         x = np.array([  1.     ,  19.531])
-        np.testing.assert_array_almost_equal(reg.x[0],x,7)
+        np.testing.assert_array_almost_equal(reg.x[0].toarray()[0],x,7)
         betas = np.array([[ 10.12541428], [  1.56832263], [  0.15132076], [  0.21033397]])
         np.testing.assert_array_almost_equal(reg.betas,betas,7)
         np.testing.assert_array_almost_equal(reg.u[0],np.array([34.3450723]),7)
@@ -273,13 +290,13 @@ class GM_Combo_Hom_Tester(unittest.TestCase):
         self.assertAlmostEquals(reg.n,49,7)
         self.assertAlmostEquals(reg.k,3,7)
         z = np.array([  1.       ,  19.531    ,  35.4585005])
-        np.testing.assert_array_almost_equal(reg.z[0],z,7)
+        np.testing.assert_array_almost_equal(reg.z[0].toarray()[0],z,7)
         h = np.array([  1.   ,  19.531,  18.594])
-        np.testing.assert_array_almost_equal(reg.h[0],h,7)
+        np.testing.assert_array_almost_equal(reg.h[0].toarray()[0],h,7)
         yend = np.array([ 35.4585005])
         np.testing.assert_array_almost_equal(reg.yend[0],yend,7)
         q = np.array([ 18.594])
-        np.testing.assert_array_almost_equal(reg.q[0],q,7)
+        np.testing.assert_array_almost_equal(reg.q[0].toarray()[0],q,7)
         i_s = 'Maximum number of iterations reached.'
         self.assertAlmostEqual(reg.iter_stop,i_s,7)
         self.assertAlmostEqual(reg.iteration,1,7)
@@ -291,9 +308,8 @@ class GM_Combo_Hom_Tester(unittest.TestCase):
         self.assertAlmostEqual(reg.pr2,pr2)
         pr2_e = 0.25082892555141506
         self.assertAlmostEqual(reg.pr2_e,pr2_e)
-        sig2 = 232.22680651270042
-        #self.assertAlmostEqual(reg.sig2, sig2)
-        np.testing.assert_allclose(reg.sig2, sig2)
+        sig2 = 232.22680644168395
+        self.assertAlmostEqual(reg.sig2,sig2, places=6)
         std_err = np.array([ 15.28707761,   0.44072838,   0.40479714, 0.42263726])
         np.testing.assert_array_almost_equal(reg.std_err,std_err,6)
         z_stat = np.array([[  6.62351206e-01,   5.07746167e-01], [  3.55847888e+00,   3.73008780e-04], [  3.73818749e-01,   7.08539170e-01], [  4.97670189e-01,   6.18716523e-01]])
diff --git a/pysal/spreg/tests/test_ml_error.py b/pysal/contrib/handler/tests/test_ml_error.py
similarity index 66%
copy from pysal/spreg/tests/test_ml_error.py
copy to pysal/contrib/handler/tests/test_ml_error.py
index 385ee8e..4418ae4 100644
--- a/pysal/spreg/tests/test_ml_error.py
+++ b/pysal/contrib/handler/tests/test_ml_error.py
@@ -2,9 +2,14 @@ import unittest
 import pysal
 import scipy
 import numpy as np
-from pysal.spreg.ml_error import ML_Error
+#from pysal.spreg.ml_error import ML_Error
 from pysal.spreg import utils
 
+from functools import partial
+from pysal.contrib.handler import Model
+
+ML_Error = partial(Model, mtype='ML_Error')
+
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
         "Max Likelihood requires SciPy version 11 or newer.")
 class TestMLError(unittest.TestCase):
@@ -24,48 +29,48 @@ class TestMLError(unittest.TestCase):
         reg = ML_Error(self.y,self.x,w=self.w,name_y=self.y_name,name_x=self.x_names,\
                name_w="south_q.gal")
         betas = np.array([[ 6.1492], [ 4.4024], [ 1.7784], [-0.3781], [ 0.4858], [ 0.2991]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         u = np.array([-5.97649777])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         predy = np.array([ 6.92258051])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         n = 1412
-        self.assertAlmostEqual(reg.n,n,4)
+        np.allclose(reg.n,n,4)
         k = 5
-        self.assertAlmostEqual(reg.k,k,4)
+        np.allclose(reg.k,k,4)
         y = np.array([ 0.94608274])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.allclose(reg.y[0],y,4)
         x = np.array([ 1.        , -0.39902838,  0.89645344,  6.85780705,  7.2636377 ])
-        np.testing.assert_array_almost_equal(reg.x[0],x,4)
+        np.allclose(reg.x[0],x,4)
         e = np.array([-4.92843327])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.allclose(reg.e_filtered[0],e,4)
         my = 9.5492931620846928
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.allclose(reg.mean_y,my)
         sy = 7.0388508798387219
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.allclose(reg.std_y,sy)
         vm = np.array([ 1.06476526,  0.05548248,  0.04544514,  0.00614425,  0.01481356,
         0.00143001])
-        np.testing.assert_array_almost_equal(reg.vm.diagonal(),vm,4)
+        np.allclose(reg.vm.diagonal(),vm,4)
         sig2 = [ 32.40685441]
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.allclose(reg.sig2,sig2,4)
         pr2 = 0.3057664820364818
-        self.assertAlmostEqual(reg.pr2,pr2)
+        np.allclose(reg.pr2,pr2)
         std_err = np.array([ 1.03187463,  0.23554719,  0.21317867,  0.07838525,  0.12171098,
         0.03781546])
-        np.testing.assert_array_almost_equal(reg.std_err,std_err,4)
+        np.allclose(reg.std_err,std_err,4)
         z_stat = [(5.9592751097983534, 2.5335926307459251e-09),
  (18.690182928021841, 5.9508619446611137e-78),
  (8.3421632936950338, 7.2943630281051907e-17),
  (-4.8232686291115678, 1.4122456582517099e-06),
  (3.9913060809142995, 6.5710406838016854e-05),
  (7.9088780724028922, 2.5971882547279339e-15)]
-        np.testing.assert_array_almost_equal(reg.z_stat,z_stat,4)
+        np.allclose(reg.z_stat,z_stat,4)
         logll = -4471.407066887894
-        self.assertAlmostEqual(reg.logll,logll,4)
+        np.allclose(reg.logll,logll,4)
         aic = 8952.8141337757879
-        self.assertAlmostEqual(reg.aic,aic,4)
+        np.allclose(reg.aic,aic,4)
         schwarz = 8979.0779458660545
-        self.assertAlmostEqual(reg.schwarz,schwarz,4)
+        np.allclose(reg.schwarz,schwarz,4)
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/pysal/spreg/tests/test_ml_error_regimes.py b/pysal/contrib/handler/tests/test_ml_error_regimes.py
similarity index 71%
copy from pysal/spreg/tests/test_ml_error_regimes.py
copy to pysal/contrib/handler/tests/test_ml_error_regimes.py
index dd205e1..9f21b5e 100644
--- a/pysal/spreg/tests/test_ml_error_regimes.py
+++ b/pysal/contrib/handler/tests/test_ml_error_regimes.py
@@ -2,10 +2,16 @@ import unittest
 import scipy
 import pysal
 import numpy as np
-from pysal.spreg.ml_error_regimes import ML_Error_Regimes
-from pysal.spreg.ml_error import ML_Error
+#from pysal.spreg.ml_error_regimes import ML_Error_Regimes
+#from pysal.spreg.ml_error import ML_Error
 from pysal.spreg import utils
 
+from functools import partial
+from pysal.contrib.handler import Model
+
+ML_Error_Regimes = partial(Model, mtype='ML_Error_Regimes')
+ML_Error = partial(Model, mtype='ML_Error')
+
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
          "Max Likelihood requires SciPy version 11 or newer.")
 class TestMLError(unittest.TestCase):
@@ -50,48 +56,48 @@ class TestMLError(unittest.TestCase):
        [ -0.23710892],
        [  0.80581127],
        [  0.61770744]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         u = np.array([ 30.46599009])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         predy = np.array([ 16.53400991])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         n = 211
-        self.assertAlmostEqual(reg.n,n,4)
+        np.allclose(reg.n,n,4)
         k = 8
-        self.assertAlmostEqual(reg.k,k,4)
+        np.allclose(reg.k,k,4)
         y = np.array([ 47.])
-        np.testing.assert_array_almost_equal(reg.y[0],y,4)
+        np.allclose(reg.y[0],y,4)
         x = np.array([   1.  ,    4.  ,  148.  ,   11.25,    0.  ,    0.  ,    0.  ,    0.  ])
-        np.testing.assert_array_almost_equal(reg.x[0],x,4)
+        np.allclose(reg.x[0],x,4)
         e = np.array([ 34.69181334])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.allclose(reg.e_filtered[0],e,4)
         my = 44.307180094786695
-        self.assertAlmostEqual(reg.mean_y,my)
+        np.allclose(reg.mean_y,my)
         sy = 23.606076835380495
-        self.assertAlmostEqual(reg.std_y,sy)
+        np.allclose(reg.std_y,sy)
         vm = np.array([ 58.50551173,   2.42952002,   0.00721525,   0.06391736,
         80.59249161,   3.1610047 ,   0.0119782 ,   0.0499432 ,   0.00502785])
-        np.testing.assert_array_almost_equal(reg.vm.diagonal(),vm,4)
+        np.allclose(reg.vm.diagonal(),vm,4)
         sig2 = np.array([[ 209.60639741]])
-        self.assertAlmostEqual(reg.sig2,sig2,4)
+        np.allclose(reg.sig2,sig2,4)
         pr2 = 0.43600837301477025
-        self.assertAlmostEqual(reg.pr2,pr2)
+        np.allclose(reg.pr2,pr2)
         std_err = np.array([ 7.64888957,  1.55869177,  0.08494262,  0.25281882,  8.9773321 ,
         1.77792146,  0.10944497,  0.22347975,  0.07090735])
-        np.testing.assert_array_almost_equal(reg.std_err,std_err,4)
+        np.allclose(reg.std_err,std_err,4)
         logll = -870.3331059537576
-        self.assertAlmostEqual(reg.logll,logll,4)
+        np.allclose(reg.logll,logll,4)
         aic = 1756.6662119075154
-        self.assertAlmostEqual(reg.aic,aic,4)
+        np.allclose(reg.aic,aic,4)
         schwarz = 1783.481076975324
-        self.assertAlmostEqual(reg.schwarz,schwarz,4)
+        np.allclose(reg.schwarz,schwarz,4)
         chow_r = np.array([[ 8.40437046,  0.0037432 ],
        [ 0.64080535,  0.42341932],
        [ 2.25389396,  0.13327865],
        [ 1.96544702,  0.16093197]])
-        np.testing.assert_array_almost_equal(reg.chow.regi,chow_r,4)
+        np.allclose(reg.chow.regi,chow_r,4)
         chow_j = 25.367913028011799
-        self.assertAlmostEqual(reg.chow.joint[0],chow_j,4)
+        np.allclose(reg.chow.joint[0],chow_j,4)
 
     def test_model2(self):
         reg = ML_Error_Regimes(self.y,self.x,self.regimes,w=self.w,name_y=self.y_name,name_x=self.x_names,\
@@ -106,33 +112,33 @@ class TestMLError(unittest.TestCase):
        [ -0.18803509],
        [  0.68956598],
        [  0.75599089]])
-        np.testing.assert_array_almost_equal(reg.betas,betas,4)
+        np.allclose(reg.betas,betas,4)
         vm = np.array([ 40.60994599,  -7.25413138,  -0.16605501,   0.48961884,
          0.        ,   0.        ,   0.        ,   0.        ,
          0.        ,   0.        ])
-        np.testing.assert_array_almost_equal(reg.vm[0],vm,4)
+        np.allclose(reg.vm[0],vm,4)
         u = np.array([ 31.97771505])
-        np.testing.assert_array_almost_equal(reg.u[0],u,4)
+        np.allclose(reg.u[0],u,4)
         predy = np.array([ 15.02228495])
-        np.testing.assert_array_almost_equal(reg.predy[0],predy,4)
+        np.allclose(reg.predy[0],predy,4)
         e = np.array([ 33.83065421])
-        np.testing.assert_array_almost_equal(reg.e_filtered[0],e,4)
+        np.allclose(reg.e_filtered[0],e,4)
         chow_r = np.array([[  6.88023639,   0.0087154 ],
        [  0.90512612,   0.34141092],
        [  0.75996258,   0.38334023],
        [  0.56882946,   0.45072443],
        [ 12.18358581,   0.00048212]])
-        np.testing.assert_array_almost_equal(reg.chow.regi,chow_r,4)
+        np.allclose(reg.chow.regi,chow_r,4)
         chow_j = 26.673798071789673
-        self.assertAlmostEqual(reg.chow.joint[0],chow_j,4)
+        np.allclose(reg.chow.joint[0],chow_j,4)
         #Artficial:
         model = ML_Error_Regimes(self.y_a, self.x_a, self.regi_a, w=self.w_a, regime_err_sep=True)
         model1 = ML_Error(self.y_a[0:(self.n2)].reshape((self.n2),1), self.x_a[0:(self.n2)], w=self.w_a1)
         model2 = ML_Error(self.y_a[(self.n2):].reshape((self.n2),1), self.x_a[(self.n2):], w=self.w_a1)
         tbetas = np.vstack((model1.betas, model2.betas))
-        np.testing.assert_array_almost_equal(model.betas,tbetas)
+        np.allclose(model.betas,tbetas)
         vm = np.hstack((model1.vm.diagonal(),model2.vm.diagonal()))
-        np.testing.assert_array_almost_equal(model.vm.diagonal(), vm, 4)
+        np.allclose(model.vm.diagonal(), vm, 4)
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/pysal/spreg/tests/test_ml_lag.py b/pysal/contrib/handler/tests/test_ml_lag.py
similarity index 94%
copy from pysal/spreg/tests/test_ml_lag.py
copy to pysal/contrib/handler/tests/test_ml_lag.py
index 462db18..09c9df3 100644
--- a/pysal/spreg/tests/test_ml_lag.py
+++ b/pysal/contrib/handler/tests/test_ml_lag.py
@@ -2,9 +2,14 @@ import unittest
 import pysal
 import scipy
 import numpy as np
-from pysal.spreg.ml_lag import ML_Lag
+#from pysal.spreg.ml_lag import ML_Lag
 from pysal.spreg import utils
 
+from functools import partial
+from pysal.contrib.handler import Model
+
+ML_Lag = partial(Model, mtype='ML_Lag')
+
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
         "Max Likelihood requires SciPy version 11 or newer.")
 class TestMLError(unittest.TestCase):
diff --git a/pysal/spreg/tests/test_ml_lag_regimes.py b/pysal/contrib/handler/tests/test_ml_lag_regimes.py
similarity index 94%
copy from pysal/spreg/tests/test_ml_lag_regimes.py
copy to pysal/contrib/handler/tests/test_ml_lag_regimes.py
index dd77ce1..b99ed52 100644
--- a/pysal/spreg/tests/test_ml_lag_regimes.py
+++ b/pysal/contrib/handler/tests/test_ml_lag_regimes.py
@@ -2,10 +2,16 @@ import unittest
 import scipy
 import pysal
 import numpy as np
-from pysal.spreg.ml_lag_regimes import ML_Lag_Regimes
-from pysal.spreg.ml_lag import ML_Lag
+#from pysal.spreg.ml_lag_regimes import ML_Lag_Regimes
+#from pysal.spreg.ml_lag import ML_Lag
 from pysal.spreg import utils
 
+from functools import partial
+from pysal.contrib.handler import Model
+
+ML_Lag = partial(Model, mtype='ML_Lag')
+ML_Lag_Regimes = partial(Model, mtype='ML_Lag_Regimes')
+
 @unittest.skipIf(int(scipy.__version__.split(".")[1]) < 11,
          "Max Likelihood requires SciPy version 11 or newer.")
 class TestMLError(unittest.TestCase):
diff --git a/pysal/spreg/tests/test_ols.py b/pysal/contrib/handler/tests/test_ols.py
similarity index 93%
copy from pysal/spreg/tests/test_ols.py
copy to pysal/contrib/handler/tests/test_ols.py
index f2495d9..daf466e 100644
--- a/pysal/spreg/tests/test_ols.py
+++ b/pysal/contrib/handler/tests/test_ols.py
@@ -2,7 +2,13 @@ import unittest
 import numpy as np
 import pysal
 from pysal.spreg import utils
-import pysal.spreg as EC
+#import pysal.spreg as EC
+
+from functools import partial
+from pysal.contrib.handler import Model
+
+OLS = partial(Model, mtype='OLS')
+BaseOLS = partial(Model, mtype='BaseOLS')
 
 PEGP = pysal.examples.get_path
 
@@ -19,7 +25,7 @@ class TestBaseOLS(unittest.TestCase):
 
     def test_ols(self):
         self.X = np.hstack((np.ones(self.y.shape),self.X))
-        ols = EC.ols.BaseOLS(self.y,self.X)
+        ols = BaseOLS(self.y,self.X)
         np.testing.assert_array_almost_equal(ols.betas, np.array([[
             46.42818268], [  0.62898397], [ -0.48488854]]))
         vm = np.array([[  1.74022453e+02,  -6.52060364e+00,  -2.15109867e+00],
@@ -29,7 +35,7 @@ class TestBaseOLS(unittest.TestCase):
 
     def test_ols_white1(self):
         self.X = np.hstack((np.ones(self.y.shape),self.X))
-        ols = EC.ols.BaseOLS(self.y,self.X,robust='white', sig2n_k=True)
+        ols = BaseOLS(self.y,self.X,robust='white', sig2n_k=True)
         np.testing.assert_array_almost_equal(ols.betas, np.array([[
             46.42818268], [  0.62898397], [ -0.48488854]]))
         vm = np.array([[  2.05819450e+02,  -6.83139266e+00,  -2.64825846e+00],
@@ -39,7 +45,7 @@ class TestBaseOLS(unittest.TestCase):
 
     def test_ols_white2(self):
         self.X = np.hstack((np.ones(self.y.shape),self.X))
-        ols = EC.ols.BaseOLS(self.y,self.X,robust='white', sig2n_k=False)
+        ols = BaseOLS(self.y,self.X,robust='white', sig2n_k=False)
         np.testing.assert_array_almost_equal(ols.betas, np.array([[
             46.42818268], [  0.62898397], [ -0.48488854]]))
         vm = np.array([[  1.93218259e+02,  -6.41314413e+00,  -2.48612018e+00],
@@ -48,7 +54,7 @@ class TestBaseOLS(unittest.TestCase):
         np.testing.assert_array_almost_equal(ols.vm, vm,6)
 
     def test_OLS(self):
-        ols = EC.OLS(self.y, self.X, self.w, spat_diag=True, moran=True, \
+        ols = OLS(self.y, self.X, self.w, spat_diag=True, moran=True, \
                 white_test=True, name_y='home value', name_x=['income','crime'], \
                 name_ds='columbus')
         
diff --git a/pysal/spreg/tests/test_ols_regimes.py b/pysal/contrib/handler/tests/test_ols_regimes.py
similarity index 96%
copy from pysal/spreg/tests/test_ols_regimes.py
copy to pysal/contrib/handler/tests/test_ols_regimes.py
index 20a9977..825f931 100644
--- a/pysal/spreg/tests/test_ols_regimes.py
+++ b/pysal/contrib/handler/tests/test_ols_regimes.py
@@ -1,8 +1,14 @@
 import unittest
 import numpy as np
 import pysal
-from pysal.spreg.ols import OLS
-from pysal.spreg.ols_regimes import OLS_Regimes
+#from pysal.spreg.ols import OLS
+#from pysal.spreg.ols_regimes import OLS_Regimes
+
+from functools import partial
+from pysal.contrib.handler import Model
+
+OLS = partial(Model, mtype='OLS')
+OLS_Regimes = partial(Model, mtype='OLS_Regimes')
 
 PEGP = pysal.examples.get_path
 
diff --git a/pysal/spreg/tests/test_ols_sparse.py b/pysal/contrib/handler/tests/test_ols_sparse.py
similarity index 94%
copy from pysal/spreg/tests/test_ols_sparse.py
copy to pysal/contrib/handler/tests/test_ols_sparse.py
index 1341c96..53cc2b0 100644
--- a/pysal/spreg/tests/test_ols_sparse.py
+++ b/pysal/contrib/handler/tests/test_ols_sparse.py
@@ -1,9 +1,15 @@
 import unittest
 import numpy as np
 import pysal
-import pysal.spreg as EC
+#import pysal.spreg as EC
 from scipy import sparse
 
+from pysal.contrib.handler import Model
+from functools import partial
+
+OLS = partial(Model, mtype='OLS')
+BaseOLS = partial(Model, mtype='BaseOLS')
+
 PEGP = pysal.examples.get_path
 
 class TestBaseOLS(unittest.TestCase):
@@ -20,7 +26,7 @@ class TestBaseOLS(unittest.TestCase):
     def test_ols(self):
         self.X = np.hstack((np.ones(self.y.shape),self.X))
         self.X = sparse.csr_matrix(self.X)
-        ols = EC.ols.BaseOLS(self.y,self.X)
+        ols = BaseOLS(self.y,self.X)
         np.testing.assert_array_almost_equal(ols.betas, np.array([[
             46.42818268], [  0.62898397], [ -0.48488854]]))
         vm = np.array([[  1.74022453e+02,  -6.52060364e+00,  -2.15109867e+00],
@@ -30,7 +36,7 @@ class TestBaseOLS(unittest.TestCase):
 
     def test_OLS(self):
         self.X = sparse.csr_matrix(self.X)
-        ols = EC.OLS(self.y, self.X, self.w, spat_diag=True, moran=True, \
+        ols = OLS(self.y, self.X, self.w, spat_diag=True, moran=True, \
                 name_y='home value', name_x=['income','crime'], \
                 name_ds='columbus', nonspat_diag=True, white_test=True)
         
diff --git a/pysal/spreg/tests/test_probit.py b/pysal/contrib/handler/tests/test_probit.py
similarity index 94%
copy from pysal/spreg/tests/test_probit.py
copy to pysal/contrib/handler/tests/test_probit.py
index 5c4e6dd..1546bd8 100644
--- a/pysal/spreg/tests/test_probit.py
+++ b/pysal/contrib/handler/tests/test_probit.py
@@ -1,7 +1,13 @@
 import unittest
 import pysal
 import numpy as np
-from pysal.spreg import probit as PB
+#from pysal.spreg import probit as PB
+
+from pysal.contrib.handler import Model
+from functools import partial
+
+Probit = partial(Model, mtype='Probit')
+BaseProbit = partial(Model, mtype='BaseProbit')
 
 class TestBaseProbit(unittest.TestCase):
     def setUp(self):
@@ -18,7 +24,7 @@ class TestBaseProbit(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = PB.BaseProbit(self.y, self.X, w=self.w)
+        reg = BaseProbit(self.y, self.X, w=self.w)
         betas = np.array([[ 3.35381078], [-0.1996531 ], [-0.02951371]])
         np.testing.assert_array_almost_equal(reg.betas,betas,6)
         predy = np.array([ 0.00174739])
@@ -68,7 +74,7 @@ class TestProbit(unittest.TestCase):
         self.w.transform = 'r'
 
     def test_model(self):
-        reg = PB.Probit(self.y, self.X, w=self.w)
+        reg = Probit(self.y, self.X, w=self.w)
         betas = np.array([[ 3.35381078], [-0.1996531 ], [-0.02951371]])
         np.testing.assert_array_almost_equal(reg.betas,betas,6)
         predy = np.array([ 0.00174739])
diff --git a/pysal/spreg/tests/test_twosls.py b/pysal/contrib/handler/tests/test_twosls.py
similarity index 98%
copy from pysal/spreg/tests/test_twosls.py
copy to pysal/contrib/handler/tests/test_twosls.py
index 71021e3..e656dc4 100644
--- a/pysal/spreg/tests/test_twosls.py
+++ b/pysal/contrib/handler/tests/test_twosls.py
@@ -1,7 +1,12 @@
 import unittest
 import numpy as np
 import pysal
-from pysal.spreg.twosls import BaseTSLS, TSLS
+#from pysal.spreg.twosls import BaseTSLS, TSLS
+from pysal.contrib.handler import Model
+from functools import partial
+
+BaseTSLS = partial(Model, mtype='BaseTSLS')
+TSLS = partial(Model, mtype='TSLS')
 
 class TestBaseTSLS(unittest.TestCase):
     def setUp(self):
diff --git a/pysal/spreg/tests/test_twosls_regimes.py b/pysal/contrib/handler/tests/test_twosls_regimes.py
similarity index 98%
copy from pysal/spreg/tests/test_twosls_regimes.py
copy to pysal/contrib/handler/tests/test_twosls_regimes.py
index 155bf03..62efd36 100644
--- a/pysal/spreg/tests/test_twosls_regimes.py
+++ b/pysal/contrib/handler/tests/test_twosls_regimes.py
@@ -1,8 +1,14 @@
 import unittest
 import numpy as np
 import pysal
-from pysal.spreg.twosls_regimes import TSLS_Regimes
-from pysal.spreg.twosls import TSLS
+#from pysal.spreg.twosls_regimes import TSLS_Regimes
+#from pysal.spreg.twosls import TSLS
+
+from pysal.contrib.handler import Model
+from functools import partial
+
+TSLS_Regimes = partial(Model, mtype='TSLS_Regimes')
+TSLS = partial(Model, mtype='TSLS')
 
 class TestTSLS(unittest.TestCase):
     def setUp(self):
diff --git a/pysal/spreg/tests/test_twosls_sp.py b/pysal/contrib/handler/tests/test_twosls_sp.py
similarity index 99%
copy from pysal/spreg/tests/test_twosls_sp.py
copy to pysal/contrib/handler/tests/test_twosls_sp.py
index 914aef7..34a5fc4 100644
--- a/pysal/spreg/tests/test_twosls_sp.py
+++ b/pysal/contrib/handler/tests/test_twosls_sp.py
@@ -2,7 +2,13 @@ import unittest
 import numpy as np
 import pysal
 import pysal.spreg.diagnostics as D
-from pysal.spreg.twosls_sp import BaseGM_Lag, GM_Lag
+#from pysal.spreg.twosls_sp import BaseGM_Lag, GM_Lag
+
+from pysal.contrib.handler import Model
+from functools import partial
+
+BaseGM_Lag = partial(Model, mtype='BaseGM_Lag')
+GM_Lag = partial(Model, mtype='GM_Lag')
 
 class TestBaseGMLag(unittest.TestCase):
     def setUp(self):
diff --git a/pysal/spreg/tests/test_twosls_sp_regimes.py b/pysal/contrib/handler/tests/test_twosls_sp_regimes.py
similarity index 98%
copy from pysal/spreg/tests/test_twosls_sp_regimes.py
copy to pysal/contrib/handler/tests/test_twosls_sp_regimes.py
index b311b17..1a524ff 100644
--- a/pysal/spreg/tests/test_twosls_sp_regimes.py
+++ b/pysal/contrib/handler/tests/test_twosls_sp_regimes.py
@@ -1,9 +1,15 @@
 import unittest
 import numpy as np
 import pysal
-from pysal.spreg.twosls_sp_regimes import GM_Lag_Regimes
+#from pysal.spreg.twosls_sp_regimes import GM_Lag_Regimes
 from pysal.spreg import utils
-from pysal.spreg.twosls_sp import GM_Lag
+#from pysal.spreg.twosls_sp import GM_Lag
+
+from pysal.contrib.handler import Model
+from functools import partial
+
+GM_Lag_Regimes = partial(Model, mtype='GM_Lag_Regimes')
+GM_Lag = partial(Model, mtype='GM_Lag')
 
 class TestGMLag_Regimes(unittest.TestCase):
     def setUp(self):
diff --git a/pysal/spreg/tests/test_twosls_sp_sparse.py b/pysal/contrib/handler/tests/test_twosls_sp_sparse.py
similarity index 99%
copy from pysal/spreg/tests/test_twosls_sp_sparse.py
copy to pysal/contrib/handler/tests/test_twosls_sp_sparse.py
index e6669e0..4dac949 100644
--- a/pysal/spreg/tests/test_twosls_sp_sparse.py
+++ b/pysal/contrib/handler/tests/test_twosls_sp_sparse.py
@@ -1,10 +1,15 @@
 import unittest
 import numpy as np
 import pysal
-from pysal.spreg.twosls_sp import BaseGM_Lag, GM_Lag
+#from pysal.spreg.twosls_sp import BaseGM_Lag, GM_Lag
 import pysal.spreg.diagnostics as D
 from scipy import sparse as SP
 
+from functools import partial
+from pysal.contrib.handler import Model
+
+GM_Lag = partial(Model, mtype='GM_Lag')
+BaseGM_Lag = partial(Model, mtype='BaseGM_Lag')
 
 class TestBaseGMLag(unittest.TestCase):
     def setUp(self):
diff --git a/pysal/spreg/tests/test_twosls_sparse.py b/pysal/contrib/handler/tests/test_twosls_sparse.py
similarity index 98%
copy from pysal/spreg/tests/test_twosls_sparse.py
copy to pysal/contrib/handler/tests/test_twosls_sparse.py
index 654dd5a..d3c8f10 100644
--- a/pysal/spreg/tests/test_twosls_sparse.py
+++ b/pysal/contrib/handler/tests/test_twosls_sparse.py
@@ -1,9 +1,14 @@
 import unittest
 import numpy as np
 import pysal
-from pysal.spreg.twosls import TSLS, BaseTSLS
+#from pysal.spreg.twosls import TSLS, BaseTSLS
 from scipy import sparse as SP
 
+from pysal.contrib.handler import Model
+from functools import partial
+
+TSLS = partial(Model, mtype='TSLS')
+BaseTSLS = partial(Model, mtype='BaseTSLS')
 
 class TestBaseTSLS(unittest.TestCase):
     def setUp(self):
diff --git a/pysal/contrib/pdutilities/__init__.py b/pysal/contrib/pdutilities/__init__.py
index e69de29..4df967d 100644
--- a/pysal/contrib/pdutilities/__init__.py
+++ b/pysal/contrib/pdutilities/__init__.py
@@ -0,0 +1,4 @@
+import dbf_utilities as dbio
+import shp_utilities as shio
+import file_utilities as fio
+from file_utilities import read_files, write_files
diff --git a/pysal/contrib/pdutilities/dbf_utilities.py b/pysal/contrib/pdutilities/dbf_utilities.py
index afe08f2..9395751 100644
--- a/pysal/contrib/pdutilities/dbf_utilities.py
+++ b/pysal/contrib/pdutilities/dbf_utilities.py
@@ -106,9 +106,6 @@ def df2dbf(df, dbf_path, my_specs=None):
     db.close()
     return dbf_path
 
-
-
-    
 def dbf2df(dbf_path, index=None, cols=False, incl_index=False):
     '''
     Read a dbf file as a pandas.DataFrame, optionally selecting the index
@@ -218,4 +215,3 @@ def dta2dbf(dta_path,dbf_path):
     db = pd.read_stata(dta_path)
     dp = df2dbf(db,dbf_path)
     return dp    
-    
diff --git a/pysal/contrib/pdutilities/file_utilities.py b/pysal/contrib/pdutilities/file_utilities.py
new file mode 100644
index 0000000..ad45a5e
--- /dev/null
+++ b/pysal/contrib/pdutilities/file_utilities.py
@@ -0,0 +1,65 @@
+import pysal as ps
+import os
+from shp_utilities import shp2series, series2shp
+from dbf_utilities import dbf2df, df2dbf
+
+
+def read_files(filepath, **kwargs):
+    """
+    Reads a dbf/shapefile pair, squashing geometries into a "geometry" column.
+    """
+    #keyword arguments wrapper will strip all around dbf2df's required arguments
+    geomcol = kwargs.pop('geomcol', 'geometry')
+    weights = kwargs.pop('weights', '')
+    
+    dbf_path, shp_path = _pairpath(filepath)
+
+    df = dbf2df(dbf_path, **kwargs)
+    df[geomcol] = shp2series(shp_path)
+
+    if weights != '' and isinstance(weights, str):
+        if weights.lower() in ['rook', 'queen']:
+            if weights.lower() == 'rook':
+                df.W = ps.rook_from_shapefile(shp_path)
+            else:
+                df.W = ps.queen_from_shapefile(shp_path)
+        else:
+            try:
+                W_path = os.path.splitext(dbf_path)[0] + '.' + weights
+                df.W = ps.open(W_path).read()
+            except IOError:
+                print('Weights construction failed! Passing on weights')
+    
+    return df
+   
+def write_files(df, filepath, **kwargs):
+    """
+    writes dataframes with potential geometric components out to files. 
+    """
+    geomcol = kwargs.pop('geomcol', 'geometry')
+    weights = kwargs.pop('weights', 'gal')
+    
+    dbf_path, shp_path = _pairpath(filepath)
+
+    if geomcol not in df.columns:
+        return df2dbf(df, dbf_path, **kwargs)
+    else:
+        shp_out = series2shp(df[geomcol], shp_path)
+        not_geom = [x for x in df.columns if x != geomcol]
+        dbf_out = df2dbf(df[not_geom], dbf_path, **kwargs)
+        if hasattr(df, 'W'):
+            W_path = os.path.splitext(filepath)[0] + '.' + weights
+            ps.open(W_path, 'w').write(df.W)
+        else:
+            W_path = 'no weights written'
+        return dbf_out, shp_out, W_path
+            
+
+
+def _pairpath(filepath):
+    """
+    return dbf/shp paths for any shp, dbf, or basepath passed to function. 
+    """
+    base = os.path.splitext(filepath)[0]
+    return base + '.dbf', base + '.shp'
+    
diff --git a/pysal/contrib/pdutilities/shp_utilities.py b/pysal/contrib/pdutilities/shp_utilities.py
new file mode 100644
index 0000000..7aaec2d
--- /dev/null
+++ b/pysal/contrib/pdutilities/shp_utilities.py
@@ -0,0 +1,21 @@
+import pandas as pd
+import pysal as ps
+
+def shp2series(filepath):
+    """
+    reads a shapefile, stuffing each shape into an element of a Pandas Series
+    """
+    f = ps.open(filepath)
+    s = pd.Series(poly for poly in f)
+    f.close()
+    return s
+
+def series2shp(series, filepath):
+    """
+    writes a series of pysal polygons to a file
+    """
+    f = ps.open(filepath, 'w')
+    for poly in series:
+        f.write(poly)
+    f.close()
+    return filepath
diff --git a/pysal/contrib/viz/mapping.py b/pysal/contrib/viz/mapping.py
index ebfc231..cfb38f6 100644
--- a/pysal/contrib/viz/mapping.py
+++ b/pysal/contrib/viz/mapping.py
@@ -64,7 +64,9 @@ def map_point_shp(shp, which='all', bbox=None):
                     pts.append(pt)
     pts = np.array(pts)
     sc = plt.scatter(pts[:, 0], pts[:, 1])
-    _ = _add_axes2col(sc, bbox)
+    #print(sc.get_axes().get_xlim())
+    #_ = _add_axes2col(sc, bbox)
+    #print(sc.get_axes().get_xlim())
     return sc
 
 def map_line_shp(shp, which='all', bbox=None):
@@ -117,7 +119,7 @@ def map_line_shp(shp, which='all', bbox=None):
                     rows.append(i)
                 i += 1
     lc = LineCollection(patches)
-    _ = _add_axes2col(lc, bbox)
+    #_ = _add_axes2col(lc, bbox)
     lc.shp2dbf_row = rows
     return lc
 
@@ -173,13 +175,13 @@ def map_poly_shp(shp, which='all', bbox=None):
                     rows.append(i)
                 i += 1
     pc = PolyCollection(patches)
-    _ = _add_axes2col(pc, bbox)
+    #_ = _add_axes2col(pc, bbox)
     pc.shp2dbf_row = rows
     return pc
 
 # Mid-level pieces
 
-def setup_ax(polyCos_list, ax=None):
+def setup_ax(polyCos_list, bboxs, ax=None):
     '''
     Generate an Axes object for a list of collections
     ...
@@ -189,6 +191,9 @@ def setup_ax(polyCos_list, ax=None):
     polyCos_list: list
                   List of Matplotlib collections (e.g. an object from
                   map_poly_shp)
+    bboxs       : list
+                  List of lists, each containing the bounding box of the
+                  respective polyCo, expressed as [xmin, ymin, xmax, ymax]
     ax          : AxesSubplot
                   (Optional) Pre-existing axes to which append the collections
                   and setup
@@ -201,28 +206,16 @@ def setup_ax(polyCos_list, ax=None):
     '''
     if not ax:
         ax = plt.axes()
-    # Determine bboxes of new axes
-    xlim = [np.inf, -np.inf]
-    ylim = [np.inf, -np.inf]
-    for polyCo in polyCos_list:
-        axs = polyCo.get_axes()
-        xmin, xmax = axs.get_xlim()
-        ymin, ymax = axs.get_ylim()
-        if xmin < xlim[0]:
-            xlim[0] = xmin
-        if xmax > xlim[1]:
-            xlim[1] = xmax
-        if ymin < ylim[0]:
-            ylim[0] = ymin
-        if ymax > ylim[1]:
-            ylim[1] = ymax
-    ax.set_xlim(xlim)
-    ax.set_ylim(ylim)
-    # Resize bbox of each coll and add it to axes
-    for polyCo in polyCos_list:
-        polyCo.get_axes().set_xlim(ax.get_xlim())
-        polyCo.get_axes().set_ylim(ax.get_ylim())
+
+    for polyCo, bbox in zip(polyCos_list, bboxs):
         ax.add_collection(polyCo)
+        polyCo.axes.set_xlim((bbox[0], bbox[2]))
+        polyCo.axes.set_ylim((bbox[1], bbox[3]))
+    abboxs = np.array(bboxs)
+    ax.set_xlim((abboxs[:, 0].min(), \
+                 abboxs[:, 2].max()))
+    ax.set_ylim((abboxs[:, 1].min(), \
+                 abboxs[:, 3].max()))
     ax.set_frame_on(False)
     ax.axes.get_yaxis().set_visible(False)
     ax.axes.get_xaxis().set_visible(False)
@@ -512,6 +505,7 @@ def _expand_values(values, shp2dbf_row):
 
 # High-level pieces
 
+
 def plot_poly_lines(shp_link,  savein=None, poly_col='none'):
     '''
     Quick plotting of shapefiles
@@ -528,15 +522,17 @@ def plot_poly_lines(shp_link,  savein=None, poly_col='none'):
                       Face color of polygons
     '''
     fig = plt.figure()
-    ax = fig.add_subplot(111)
     shp = ps.open(shp_link)
     patchco = map_poly_shp(shp)
     patchco.set_facecolor('none')
     patchco.set_edgecolor('0.8')
-    ax = setup_ax([patchco], ax)
+    ax = setup_ax([patchco], [shp.bbox])
+    fig.add_axes(ax)
+
     if savein:
         plt.savefig(savein)
     else:
+        print('callng plt.show()')
         plt.show()
     return None
 
@@ -633,7 +629,7 @@ def plot_choropleth(shp_link, values, type, k=5, cmap=None,
     map_obj.set_alpha(alpha)
     fig = plt.figure(figsize=figsize)
     ax = fig.add_subplot(111)
-    ax = setup_ax([map_obj], ax)
+    ax = setup_ax([map_obj], [shp.bbox], ax)
     if title:
         ax.set_title(title)
     if type=='quantiles' or type=='fisher_jenks' or type=='equal_interval':
@@ -655,8 +651,8 @@ lisa_clrs = {1: '#FF0000', 2: '#66CCFF', 3: '#003399', 4: '#CD5C5C', \
 lisa_lbls = {1: 'HH', 2: 'LH', 3: 'LL', 4: 'HL', \
              0: 'Non-significant'}
 
-def plot_lisa_cluster(shp_link, lisa, p_thres=0.01, shp_type='poly', 
-        title='', legend=True, savein=None, figsize=None, dpi=300, alpha=1., 
+def plot_lisa_cluster(shp_link, lisa, p_thres=0.01, shp_type='poly',
+        title='', legend=True, savein=None, figsize=None, dpi=300, alpha=1.,
         leg_loc=0):
     '''
     Plot LISA cluster maps easily
@@ -710,7 +706,7 @@ def plot_lisa_cluster(shp_link, lisa, p_thres=0.01, shp_type='poly',
     # Figure
     fig = plt.figure(figsize=figsize)
     ax = fig.add_subplot(111)
-    ax = setup_ax([lisa_obj], ax)
+    ax = setup_ax([lisa_obj], [shp.bbox], ax)
     # Legend
     if legend:
         boxes, labels = lisa_legend_components(lisa, p_thres)
@@ -722,7 +718,7 @@ def plot_lisa_cluster(shp_link, lisa, p_thres=0.01, shp_type='poly',
     else:
         plt.show()
     return None
-    
+
 
 if __name__ == '__main__':
 
@@ -783,11 +779,10 @@ if __name__ == '__main__':
     #ax = setup_ax([pc], ax)
     plt.show()
     '''
-    
+
     shp_link = ps.examples.get_path('columbus.shp')
     values = np.array(ps.open(ps.examples.get_path('columbus.dbf')).by_col('HOVAL'))
     w = ps.queen_from_shapefile(shp_link)
     lisa = ps.Moran_Local(values, w, permutations=999)
     _ = plot_lisa_cluster(shp_link, lisa)
     #_ = plot_choropleth(shp_link, values, 'fisher_jenks')
-
diff --git a/pysal/contrib/viz/mapping_guide.ipynb b/pysal/contrib/viz/mapping_guide.ipynb
index 10f14a2..e057820 100644
--- a/pysal/contrib/viz/mapping_guide.ipynb
+++ b/pysal/contrib/viz/mapping_guide.ipynb
@@ -1,327 +1,371 @@
 {
- "metadata": {
-  "name": "",
-  "signature": "sha256:d5daafa6a69a7136921bdccec96c48e0b8deaee29eaea96718e9a2c2ee5bb488"
- },
- "nbformat": 3,
- "nbformat_minor": 0,
- "worksheets": [
+ "cells": [
   {
-   "cells": [
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import numpy as np\n",
-      "import pysal as ps\n",
-      "import random as rdm\n",
-      "from pysal.contrib.viz import mapping as maps\n",
-      "%matplotlib inline\n",
-      "from pylab import *"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [],
-     "prompt_number": 1
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "# Guide for the `mapping` module in `PySAL`\n",
-      "\n",
-      "Contributors:\n",
-      "\n",
-      "* Dani Arribas-Bel `<daniel.arribas.bel at gmail.com>`\n",
-      "\n",
-      "\n",
-      "This document describes the main structure, components and usage of the mapping module in `PySAL`. The is organized around three main layers:\n",
-      "\n",
-      "* A lower-level layer that reads polygon, line and point shapefiles and returns a Matplotlib collection.\n",
-      "* A medium-level layer that performs some usual transformations on a Matplotlib object (e.g. color code polygons according to a vector of values).\n",
-      "* A higher-level layer intended for end-users for particularly useful cases and style preferences pre-defined (e.g. Create a choropleth)."
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "## Lower-level component\n",
-      "\n",
-      "This includes basic functionality to read spatial data from a file (currently only shapefiles supported) and produce rudimentary Matplotlib objects. The main methods are:"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "* `map_poly_shape`: to read in polygon shapefiles"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "* `map_line_shape`: to read in line shapefiles"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "* `map_point_shape`: to read in point shapefiles"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "These methods all support an option to subset the observations to be plotted (very useful when missing values are present). They can also be overlaid and combined by using the `setup_ax` function. the resulting object is very basic but also very flexible so, for minds used to matplotlib this should be good news as it allows to modify pretty much any property and attribute."
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "### Example"
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "shp_link = ps.examples.get_path('columbus.shp')\n",
-      "shp = ps.open(shp_link)\n",
-      "some = [bool(rdm.getrandbits(1)) for i in ps.open(shp_link)]\n",
-      "\n",
-      "fig = figure()\n",
-      "\n",
-      "base = maps.map_poly_shp(shp)\n",
-      "base.set_facecolor('none')\n",
-      "base.set_linewidth(0.75)\n",
-      "base.set_edgecolor('0.8')\n",
-      "some = maps.map_poly_shp(shp, which=some)\n",
-      "some.set_alpha(0.5)\n",
-      "some.set_linewidth(0.)\n",
-      "cents = np.array([poly.centroid for poly in ps.open(shp_link)])\n",
-      "pts = scatter(cents[:, 0], cents[:, 1])\n",
-      "pts.set_color('red')\n",
-      "\n",
-      "ax = maps.setup_ax([base, some, pts])\n",
-      "fig.add_axes(ax)\n",
-      "show()"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8VNXd/z93m30yM9khYSdsokCPgiLihtalrq1Fa/tY\nW2vt81TbPvhYq9XWpdan9udTW+tWta51q4q7iICsBuEQdghrEiD7Mklmv9vvjzvBEGYye0LgvF+v\n+xpy77nnnAmZz5z7Pd+F03UdDAaDwRgY+MGeAIPBYJxIMNFlMBiMAYSJLoPBYAwgTHQZDAZjAGGi\ny2AwGAMIE10Gg8EYQJjoMhgMxgDCRJfBYDAGECa6DAaDMYAw0WUwGIwBhIkug8FgDCBMdBkMBmMA\nYaLLYDAYAwgTXQaDwRhAmOgyGAzGAMJEl8FgMAYQJroMBoMxgDDRZTAYjAFEHOwJMBiZ8tpr23ft\n2WMNi6KuC [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x108f26e90>"
-       ]
-      }
-     ],
-     "prompt_number": 2
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "## Medium-level component\n",
-      "\n",
-      "This layer comprises functions that perform usual transformations on matplotlib objects, such as color coding objects (points, polygons, etc.) according to a series of values. This includes the following methods:"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "* `base_choropleth_classless`"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "* `base_choropleth_unique`\n",
-      "\n",
-      "### Example"
-     ]
-    },
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import numpy as np\n",
+    "import pysal as ps\n",
+    "import random as rdm\n",
+    "from pysal.contrib.viz import mapping as maps\n",
+    "%matplotlib inline\n",
+    "from pylab import *"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Guide for the `mapping` module in `PySAL`\n",
+    "\n",
+    "Contributors:\n",
+    "\n",
+    "* Dani Arribas-Bel `<daniel.arribas.bel at gmail.com>`\n",
+    "* Serge Rey `<sjsrey at gmail.com>`\n",
+    "\n",
+    "\n",
+    "This document describes the main structure, components and usage of the mapping module in `PySAL`. The is organized around three main layers:\n",
+    "\n",
+    "* A lower-level layer that reads polygon, line and point shapefiles and returns a Matplotlib collection.\n",
+    "* A medium-level layer that performs some usual transformations on a Matplotlib object (e.g. color code polygons according to a vector of values).\n",
+    "* A higher-level layer intended for end-users for particularly useful cases and style preferences pre-defined (e.g. Create a choropleth)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Lower-level component\n",
+    "\n",
+    "This includes basic functionality to read spatial data from a file (currently only shapefiles supported) and produce rudimentary Matplotlib objects. The main methods are:"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* `map_poly_shape`: to read in polygon shapefiles"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* `map_line_shape`: to read in line shapefiles"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* `map_point_shape`: to read in point shapefiles"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "These methods all support an option to subset the observations to be plotted (very useful when missing values are present). They can also be overlaid and combined by using the `setup_ax` function. the resulting object is very basic but also very flexible so, for minds used to matplotlib this should be good news as it allows to modify pretty much any property and attribute."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Example"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false,
+    "scrolled": true
+   },
+   "outputs": [
     {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "net_link = ps.examples.get_path('eberly_net.shp')\n",
-      "net = ps.open(net_link)\n",
-      "values = np.array(ps.open(net_link.replace('.shp', '.dbf')).by_col('TNODE'))\n",
-      "\n",
-      "pts_link = ps.examples.get_path('eberly_net_pts_onnetwork.shp')\n",
-      "pts = ps.open(pts_link)\n",
-      "\n",
-      "fig = figure()\n",
-      "\n",
-      "netm = maps.map_line_shp(net)\n",
-      "netc = maps.base_choropleth_unique(netm, values)\n",
-      "\n",
-      "ptsm = maps.map_point_shp(pts)\n",
-      "ptsm = maps.base_choropleth_classif(ptsm, values)\n",
-      "ptsm.set_alpha(0.5)\n",
-      "ptsm.set_linewidth(0.)\n",
-      "\n",
-      "ax = maps.setup_ax([netc, ptsm])\n",
-      "fig.add_axes(ax)\n",
-      "show()"
-     ],
-     "language": "python",
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8nFW9/z/n2WZNJnuapktautIF2gMtLQVkF5BVrgrX\nhcumoKKC4gJcr/jzqlfv5QrXqwjuqCBeFEFEtkKhpbQ9tIU26b6lSZo9M5n9eZ5zfn88Ewgly6yZ\npD3v1+th0mee55zvhMxnznzPdyFCCEgkEolkbFCKbYBEIpEcT0jRlUgkkjFEiq5EIpGMIVJ0JRKJ\nZAyRoiuRSCRjiBRdiUQiGUO0YhsgkWQCY0x9+umKLffe2/CErgvNMLim60LVdaFpmtB0nWuaJlRN\nE5qqQnMeB/4t1LPP7lt01VVdKymlR4r9WiTHJ1J0JRMKSqm9du1um3MiEgliJhKKmcn9y5eHJgGw\nCmSe [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x1060f0190>"
+      ]
+     },
      "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VFX6wPHvmVTIhIQSGKQXaQMKIo5iQXTXxuIKFnTF\nlt3fqljWggULanTFXVHX7q4aFHsBC+gqqCsWNKAiYhQUESkyoYXAAClkzu+PM2NCyPR7596ZnM/z\n+Jgyc+8bkrw5c8573iOklGiapmnJ4bA6AE3TtJZEJ11N07Qk0klX0zQtiXTS1TRNSyKddDVN05JI\nJ11N07Qk0kk3xTiFGH6mED/M6yh2z9tfVDiFeNXqmDRNi55OuinmMag9HjrdXcUHR+RTMKQVU62O\nSdO06Omkm0KeFaIV8EIWXD6/Ro5pnUHZZ276WB2XpmnR00k3tfwT+BaYGXj/VeBU68LRNC1WQm8D\nTg3PCjEGe [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x108f267d0>"
-       ]
-      }
-     ],
-     "prompt_number": 3
-    },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "shp_link = ps.examples.get_path('columbus.shp')\n",
+    "shp = ps.open(shp_link)\n",
+    "some = [bool(rdm.getrandbits(1)) for i in ps.open(shp_link)]\n",
+    "\n",
+    "fig = figure()\n",
+    "\n",
+    "base = maps.map_poly_shp(shp)\n",
+    "base.set_facecolor('none')\n",
+    "base.set_linewidth(0.75)\n",
+    "base.set_edgecolor('0.8')\n",
+    "some = maps.map_poly_shp(shp, which=some)\n",
+    "some.set_alpha(0.5)\n",
+    "some.set_linewidth(0.)\n",
+    "cents = np.array([poly.centroid for poly in ps.open(shp_link)])\n",
+    "pts = scatter(cents[:, 0], cents[:, 1])\n",
+    "pts.set_color('red')\n",
+    "\n",
+    "ax = maps.setup_ax([base, some, pts], [shp.bbox, shp.bbox, shp.bbox])\n",
+    "fig.add_axes(ax)\n",
+    "show()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Medium-level component\n",
+    "\n",
+    "This layer comprises functions that perform usual transformations on matplotlib objects, such as color coding objects (points, polygons, etc.) according to a series of values. This includes the following methods:"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* `base_choropleth_classless`"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* `base_choropleth_unique`\n",
+    "\n",
+    "### Example"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
     {
-     "cell_type": "markdown",
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VFX6wPHvmVTIJBAgMEgHgVAFAUdRRNR1saACanR1\nLdldC4qg2LAgomt0RX8iCu6qsSuoYMGKFcFgQEQElBKqgKGGJENLSM7vjzMxAZOp9869Mzmf5/Ex\n5eaeF0jenDn3Pe8RUko0TdO0yHBYHYCmaVp9opOupmlaBOmkq2maFkE66WqapkWQTrqapmkRpJOu\npmlaBOmkG2WcQvR7UIg1W246+8Dcj+/Z7hTiHatj0jQtcDrpRpk9UDYWWoz5aMlXpwzu0ajXce0n\nWB2TpmmBE3pzRPQoE6IBsBh4LFHKl2HWPGAyjJxjcWiapgVIz3Sjy3+AFcAr3vffAUZaF46macHS\nSTdK [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x10a03d150>"
+      ]
+     },
      "metadata": {},
-     "source": [
-      "\n",
-      "* `base_choropleth_classif`"
-     ]
-    },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "net_link = ps.examples.get_path('eberly_net.shp')\n",
+    "net = ps.open(net_link)\n",
+    "values = np.array(ps.open(net_link.replace('.shp', '.dbf')).by_col('TNODE'))\n",
+    "\n",
+    "pts_link = ps.examples.get_path('eberly_net_pts_onnetwork.shp')\n",
+    "pts = ps.open(pts_link)\n",
+    "\n",
+    "fig = figure()\n",
+    "\n",
+    "netm = maps.map_line_shp(net)\n",
+    "netc = maps.base_choropleth_unique(netm, values)\n",
+    "\n",
+    "ptsm = maps.map_point_shp(pts)\n",
+    "ptsm = maps.base_choropleth_classif(ptsm, values)\n",
+    "ptsm.set_alpha(0.5)\n",
+    "ptsm.set_linewidth(0.)\n",
+    "\n",
+    "ax = maps.setup_ax([netc, ptsm], [net.bbox, net.bbox])\n",
+    "fig.add_axes(ax)\n",
+    "show()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "\n",
+    "* `base_choropleth_classif`"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Higher-level component\n",
+    "\n",
+    "This currently includes the following end-user functions:"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* `plot_poly_lines`: very quick shapefile plotting."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
     {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "## Higher-level component\n",
-      "\n",
-      "This currently includes the following end-user functions:"
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "callng plt.show()\n"
      ]
     },
     {
-     "cell_type": "markdown",
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXeYJFXVh9/ZHIFlyTmjICAccs6gkkRAFEGQoGAAUcH4\nIUo28SEZQRERPgQEJEnO+QfskmFJCwsLLJtz/P44t3Z6Z7tnOlTonr3v89TTPT3dVbdnqk7de8Lv\ntM2bN49IJBKJ5EOPogcQiUQiixLR6EYikUiORKMbiUQiORKNbiQSieRINLqRSCSSI9HoRiKRSI70\nKnoAkUgtSFoJeB7YAugL9Kvx8Ujgy2b2RO6Dj0SIRjfSenwADABGm9mUWj8s6QvAnNRHFYlUSXQv\nRFoKM5sLvAWsWecuehKNbqRAotGNtCJvAmvV+dlodCOFEt0LkVZkBCnOdCW1hdd7AjPNLNbGRzIj\nGt1I [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x10a03ddd0>"
+      ]
+     },
      "metadata": {},
-     "source": [
-      "* `plot_poly_lines`: very quick shapefile plotting."
-     ]
-    },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "maps.plot_poly_lines(ps.examples.get_path('columbus.shp'))\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* `plot_choropleth`: for quick plotting of several types of chocopleths."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
     {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "maps.plot_poly_lines(ps.examples.get_path('columbus.shp'))"
-     ],
-     "language": "python",
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAD8CAYAAADUv3dIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4XNWZ/99z2/SiKSqjLluWbLkb44oxGEyHtcG0xGwg\nC4TNLoTd7D6/JDybUDaQhJKEkJAlZAkJsc2mOIbY2IBjg417lW1Zkq0ujUZlerlz2/n9oZEjbLXp\nEj6f55lnNPfeOffMaOY7733PWxDGGAgEAoGQGahsT4BAIBAuJ4joEggEQgYhoksgEAgZhIgugUAg\nZBAiugQCgZBBiOgSCARCBiGiS8gICKGvIIQ+TeP4uxBCX03X+ARCqiCiS/iigGM3AmFCQ0SXQCAQ\nMggRXULKQQgVI4T+hBDqQQj1IYRehYusUITQTxBCbQghH0LoMEJo+ZB9V8a2+RBC3Qihl2Lb1Qih\n38XG [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x10a429d10>"
+      ]
+     },
      "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXeYJFXVh9/ZHIFlyTmjICAccs6gkkRAFEGQoGAAUcH4\nIUo28SEZQRERPgQEJEnO+QfskmFJCwsLLJtz/P44t3Z6Z7tnOlTonr3v89TTPT3dVbdnqk7de8Lv\ntM2bN49IJBKJ5EOPogcQiUQiixLR6EYikUiORKMbiUQiORKNbiQSieRINLqRSCSSI9HoRiKRSI70\nKnoAkUgtSFoJeB7YAugL9Kvx8Ujgy2b2RO6Dj0SIRjfSenwADABGm9mUWj8s6QvAnNRHFYlUSXQv\nRFoKM5sLvAWsWecuehKNbqRAotGNtCJvAmvV+dlodCOFEt0LkVZkBCnOdCW1hdd7AjPNLNbGRzIj\nGt1IKzIC+ [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x104465cd0>"
-       ]
-      }
-     ],
-     "prompt_number": 4
+     "output_type": "display_data"
     },
     {
-     "cell_type": "markdown",
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAD8CAYAAADUv3dIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXd8JMd173tOVXdPTgAGOQO72F1sDlwuc86kAi0xKNFK\ntuxn05btq+vr+961pesrB9mSrGfJlmQFW7RoZVESc07LZdjIzQlY5DAJkzpV1f0D2OUGpBlMALj1\n/XzmM6m7+gww/ZvqUyegEAIkEolEUhpIuQ2QSCSSiwkpuhKJRFJCpOhKJBJJCZGiK5FIJCVEiq5E\nIpGUECm6EolEUkKk6EoKBiJ+AxH/Z7ntyAdE5IjYXm47JO9+UMbpSiSTogsAnUKIE+W2RfLuRs50\nJRKJpIRI0ZWcw/mX2Yj4PUT8wtTjaxCxHxE/i4gjiDiIiA9Mt+3U8z+b2qYfET9+9tiI+DwifuKs\nbR9A [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x10a6373d0>"
+      ]
+     },
      "metadata": {},
-     "source": [
-      "* `plot_choropleth`: for quick plotting of several types of chocopleths."
-     ]
+     "output_type": "display_data"
     },
     {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "shp_link = ps.examples.get_path('columbus.shp')\n",
-      "values = np.array(ps.open(ps.examples.get_path('columbus.dbf')).by_col('HOVAL'))\n",
-      "\n",
-      "types = ['classless', 'unique_values', 'quantiles', 'equal_interval', 'fisher_jenks']\n",
-      "for typ in types:\n",
-      "    maps.plot_choropleth(shp_link, values, typ, title=typ)"
-     ],
-     "language": "python",
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADxCAYAAABoIWSWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmcVNWZ//95zl1qr+rqfQW6oVkFQRYV3MAVEaMmqHEy\nJpkk40STTDJL/JloYnTMYszka5yJ0YmaaDTGuIG4awSD4oIgQrM3NN1N71t1bbfucs7vj6qGBlm6\nq6t6kft+ve6rbt/lnFPVVZ966jnPeR4SQsDGxsbGZnhgIz0AGxsbm5MJW3RtbGxshhFbdG1sbGyG\nEVt0bWxsbIYRW3RtbGxshhFbdG1sbGyGEVt0bT6TENFLRPSPqf2vENHfR3pMNjYAII/0AGxshgoR\n3Q5gohDiH/uOCSEuHbkR2dgcG9vStbGxsRlGbNG1yShENIeINhJRLxE9mdruPNpPfCLiRFSV2l9G\nRJuI [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x10a7770d0>"
+      ]
+     },
      "metadata": {},
-     "outputs": [
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAD8CAYAAADUv3dIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4XNWZ/99z2/SiKSqjLluWbLkb44oxGEyHtcG0xGwg\nC4TNLoTd7D6/JDybUDaQhJKEkJAlZAkJsc2mOIbY2IBjg417lW1Zkq0ujUZlerlz2/n9oZEjbLXp\nEj6f55lnNPfeOffMaOY7733PWxDGGAgEAoGQGahsT4BAIBAuJ4joEggEQgYhoksgEAgZhIgugUAg\nZBAiugQCgZBBiOgSCARCBiGiS8gICKGvIIQ+TeP4uxBCX03X+ARCqiCiS/iigGM3AmFCQ0SXQCAQ\nMggRXULKQQgVI4T+hBDqQQj1IYRehYusUITQTxBCbQghH0LoMEJo+ZB9V8a2+RBC3Qihl2Lb1Qih\n38XG9CCED [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x109255310>"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAD8CAYAAADUv3dIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXl8XFd9//39nrvMvkqjfZdseZPXeE1CVkgIJCwBAhT4\nhVACpU9/dKPlaWna0qfPj19ftH1Kf6yhUEohlFAge+IkDtnjON432bKtxdpGo9Hsd+7ce885zx+S\njRdJ1oxGM1J83q+XPJqZe8/9jjzzmXO+57sg5xwEAoFAUBpIuQ0QCASCqwkhugKBQFBChOgKBAJB\nCRGiKxAIBCVEiK5AIBCUECG6AoFAUEKE6AqKBiJ+GxG/Um47CgERGSK2ldsOwdsfFHG6AsGk6AJA\nB+f8TLltEby9ETNdgUAgKCFCdAUXcekyGxH/HRH/bur3GxFxEBH/GBHDiDiMiPdOd+zU/S9NHTOI\niPddODYi/ [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x109411750>"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADxCAYAAABoIWSWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmcVNWZ//95zl1qr+rqfQW6oVkFQRYV3MAVEaMmqHEy\nJpkk40STTDJL/JloYnTMYszka5yJ0YmaaDTGuIG4awSD4oIgQrM3NN1N71t1bbfucs7vj6qGBlm6\nq6t6kft+ve6rbt/lnFPVVZ966jnPeR4SQsDGxsbGZnhgIz0AGxsbm5MJW3RtbGxshhFbdG1sbGyG\nEVt0bWxsbIYRW3RtbGxshhFbdG1sbGyGEVt0bT6TENFLRPSPqf2vENHfR3pMNjYAII/0AGxshgoR\n3Q5gohDiH/uOCSEuHbkR2dgcG9vStbGxsRlGbNG1yShENIeINhJRLxE9mdruPNpPfCLiRFSV2l9G\nRJuIKERE9 [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x108f3fe10>"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADxCAYAAABoIWSWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8VNX5/z/PuffO3NkymSRkT8hCCJFdIAqICCiIiN+6\noNRvf2oXa+vX7v3q1+61tYu1dWvrbqutuOGC4gJKBYsFlUU0IQQI2SD7MpPZ5y7n98dMMLJmmUkC\n3PfrdV9z5y7nnBmYT577nOc8D3HOYWBgYGAwPLCRHoCBgYHBmYQhugYGBgbDiCG6BgYGBsOIIboG\nBgYGw4ghugYGBgbDiCG6BgYGBsOIIboGowYi2khEXz3JNf9NROuGa0xDgYj+TkS/GulxGIwuDNE1\nGE3w2Hb8Czh/mnO+pD+NEdENRPTvuIxscJz08xiceRiia2BwHIhIjEczcWjD4DTCEF2DY0JE2UT0\nIhG1EdEBI [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x1095ed550>"
-       ]
-      },
-      {
-       "metadata": {},
-       "output_type": "display_data",
-       "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADxCAYAAABoIWSWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXecVOX1/z/nuWXutJ2d7Y2yC0sRaSKooCKoICJ+jYoh\n/vJVU4xp3/TEr4lpJqao+Ro1iSVqEhNL7ChGRY1gVFRARJbOsg22t9lpd+be+zy/P2YWV+qWmVlW\n7vv1uq+Zufc+ZYblM8+cc55zSAgBGxsbG5vMwIZ7AjY2NjYnErbo2tjY2GQQW3RtbGxsMogtujY2\nNjYZxBZdGxsbmwxii66NjY1NBrFF12ZAENFEIvqAiHqIyCKiH/WjTS0RnZuBuVUR0dkp6OdnRPT3\nVMzJxuZg5OGegM2I4wcAXhNCzBhAG5E80ooQ4uRUdZWifmxsDsFe6doMlDEAtg3HwESUqUUCZWgc\nmxMQW3Rt+ [...]
-       "text": [
-        "<matplotlib.figure.Figure at 0x1099be190>"
-       ]
-      }
-     ],
-     "prompt_number": 5
+     "output_type": "display_data"
     },
     {
-     "cell_type": "markdown",
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADxCAYAAABoIWSWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8VNX5/z/PuffO3NkymSRkT8hCCJFdIAqICCiIiN+6\noNRvf2oXa+vX7v3q1+61tYu1dWvrbqutuOGC4gJKBYsFlUU0IQQI2SD7MpPZ5y7n98dMMLJmmUkC\n3PfrdV9z5y7nnBmYT577nOc8D3HOYWBgYGAwPLCRHoCBgYHBmYQhugYGBgbDiCG6BgYGBsOIIboG\nBgYGw4ghugYGBgbDiCG6BgYGBsOIIboGowYi2khEXz3JNf9NROuGa0xDgYj+TkS/GulxGIwuDNE1\nGE3w2Hb8Czh/mnO+pD+NEdENRPTvuIxscJz08xiceRiia2BwHIhIjEczcWjD4DTCEF2DY0JE2UT0\nIhG1 [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x10a936cd0>"
+      ]
+     },
      "metadata": {},
-     "source": [
-      "# To-Do list\n",
-      "\n",
-      "General concepts and specific ideas to implement over time, with enough description so they can be brought to life.\n",
-      "\n",
-      "* Support for points in medium and higher layer\n",
-      "* LISA cluster maps"
-     ]
+     "output_type": "display_data"
     },
     {
-     "cell_type": "markdown",
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADxCAYAAABoIWSWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXecVOX1/z/nuWXutJ2d7Y2yC0sRaSKooCKoICJ+jYoh\n/vJVU4xp3/TEr4lpJqao+Ro1iSVqEhNL7ChGRY1gVFRARJbOsg22t9lpd+be+zy/P2YWV+qWmVlW\n7vv1uq+Zufc+ZYblM8+cc55zSAgBGxsbG5vMwIZ7AjY2NjYnErbo2tjY2GQQW3RtbGxsMogtujY2\nNjYZxBZdGxsbmwxii66NjY1NBrFF12ZAENFEIvqAiHqIyCKiH/WjTS0RnZuBuVUR0dkp6OdnRPT3\nVMzJxuZg5OGegM2I4wcAXhNCzBhAG5E80ooQ4uRUdZWifmxsDsFe6doMlDEAtg3HwESUqUUCZWgc\nmxMQ [...]
+      "text/plain": [
+       "<matplotlib.figure.Figure at 0x10aa48810>"
+      ]
+     },
      "metadata": {},
-     "source": [
-      "## Caution note on plotting points\n",
-      "\n",
-      "Support for points (dots) is still not quite polished. Ideally, one would like to create a `PathCollection` from scratch so it is analogue to the creation of a `PolyCollection` or `LineCollection`. However, for the time being, we are relying on the wrapper `plt.scatter`, which makes it harder to extract the collection and plug it in a different figure. For that reason, it is recommended that, for the time being, one creates the line and/or polygon map as shown in this notebook and [...]
-      "\n",
-      "**NOTE**: the `PathCollection` created by `plt.scatter` is detailed on line 3142 of [`_axes.py`](https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/axes/_axes.py). Maybe we can take some inspiration from there to create our own `PathCollection` for points so they live at the same level as polygons."
-     ]
+     "output_type": "display_data"
     }
    ],
-   "metadata": {}
+   "source": [
+    "shp_link = ps.examples.get_path('columbus.shp')\n",
+    "values = np.array(ps.open(ps.examples.get_path('columbus.dbf')).by_col('HOVAL'))\n",
+    "\n",
+    "types = ['classless', 'unique_values', 'quantiles', 'equal_interval', 'fisher_jenks']\n",
+    "for typ in types:\n",
+    "    maps.plot_choropleth(shp_link, values, typ, title=typ)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# To-Do list\n",
+    "\n",
+    "General concepts and specific ideas to implement over time, with enough description so they can be brought to life.\n",
+    "\n",
+    "* Support for points in medium and higher layer\n",
+    "* LISA cluster maps"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Caution note on plotting points\n",
+    "\n",
+    "Support for points (dots) is still not quite polished. Ideally, one would like to create a `PathCollection` from scratch so it is analogue to the creation of a `PolyCollection` or `LineCollection`. However, for the time being, we are relying on the wrapper `plt.scatter`, which makes it harder to extract the collection and plug it in a different figure. For that reason, it is recommended that, for the time being, one creates the line and/or polygon map as shown in this notebook and t [...]
+    "\n",
+    "**NOTE**: the `PathCollection` created by `plt.scatter` is detailed on line 3142 of [`_axes.py`](https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/axes/_axes.py). Maybe we can take some inspiration from there to create our own `PathCollection` for points so they live at the same level as polygons."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": []
   }
- ]
-}
\ No newline at end of file
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 2",
+   "language": "python",
+   "name": "python2"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.10"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/pysal/core/IOHandlers/arcgis_swm.py b/pysal/core/IOHandlers/arcgis_swm.py
index 488b2d7..1fd96c9 100644
--- a/pysal/core/IOHandlers/arcgis_swm.py
+++ b/pysal/core/IOHandlers/arcgis_swm.py
@@ -107,6 +107,7 @@ class ArcGISSwmIO(FileIO.FileIO):
             raise StopIteration
 
         header01 = self.file.readline()
+        header01 = header01.decode()
         id_var, srs = header01[:-1].split(';')
         self.varName = id_var
         self.header_len = len(header01) + 8
@@ -191,7 +192,8 @@ class ArcGISSwmIO(FileIO.FileIO):
             if useIdIndex:
                 id2i = obj.id2i
                 obj = remap_ids(obj, id2i)
-            self.file.write('%s;Unknown\n' % self.varName)
+            unk = str('%s;Unknown\n' % self.varName).encode()
+            self.file.write(unk)
             self.file.write(pack('<l', obj.n))
             self.file.write(pack('<l', obj.transform.upper() == 'R'))
             for obs in obj.weights:
diff --git a/pysal/core/IOHandlers/csvWrapper.py b/pysal/core/IOHandlers/csvWrapper.py
index 2ef0e0b..8049d65 100644
--- a/pysal/core/IOHandlers/csvWrapper.py
+++ b/pysal/core/IOHandlers/csvWrapper.py
@@ -6,13 +6,12 @@ __all__ = ['csvWrapper']
 
 
 class csvWrapper(Tables.DataTable):
-
+    
     __doc__ = Tables.DataTable.__doc__
-
     FORMATS = ['csv']
     READ_MODES = ['r','Ur','rU','U']
     MODES = READ_MODES[:]
-
+    
     def __init__(self, *args, **kwargs):
         """
 
diff --git a/pysal/core/IOHandlers/pyDbfIO.py b/pysal/core/IOHandlers/pyDbfIO.py
index 0677b7d..5aecc6f 100644
--- a/pysal/core/IOHandlers/pyDbfIO.py
+++ b/pysal/core/IOHandlers/pyDbfIO.py
@@ -54,26 +54,28 @@ class DBF(pysal.core.Tables.DataTable):
         pysal.core.Tables.DataTable.__init__(self, *args, **kwargs)
         if self.mode == 'r':
             self.f = f = open(self.dataPath, 'rb')
-            numrec, lenheader = struct.unpack('<xxxxLH22x', f.read(32))
-            numfields = (lenheader - 33) // 32
+            numrec, lenheader = struct.unpack('<xxxxLH22x', f.read(32)) #from dbf file standards
+            numfields = (lenheader - 33) // 32 #each field is 32 bytes
             self.n_records = numrec
             self.n_fields = numfields
             self.field_info = [('DeletionFlag', 'C', 1, 0)]
             record_size = 1
-            fmt = 's'
+            fmt = 's' #each record is a string
             self._col_index = {}
             idx = 0
             for fieldno in xrange(numfields):
                 name, typ, size, deci = struct.unpack(
-                    '<11sc4xBB14x', f.read(32))
-                name = name.replace('\0', '')
-                    # eliminate NULs from string
+                    '<11sc4xBB14x', f.read(32)) #again, check struct for fmt def.
+                name = name.decode() #forces to unicode in 2, to str in 3
+                typ = typ.decode() 
+                name = name.replace('\0', '') #same as NULs, \x00
+                     #eliminate NULs from string
                 self._col_index[name] = (idx, record_size)
                 idx += 1
-                fmt += '%ds' % size
+                fmt += '%ds' % size #alt: str(size) + 's'
                 record_size += size
                 self.field_info.append((name, typ, size, deci))
-            terminator = f.read(1)
+            terminator = f.read(1).decode()
             assert terminator == '\r'
             self.header_size = self.f.tell()
             self.record_size = record_size
@@ -115,6 +117,7 @@ class DBF(pysal.core.Tables.DataTable):
         col = [0] * self.n_records
         for i in xrange(self.n_records):
             value = f.read(size)
+            value = value.decode()
             f.seek(gap, 1)
             if typ == 'N':
                 value = value.replace('\0', '').lstrip()
@@ -145,7 +148,7 @@ class DBF(pysal.core.Tables.DataTable):
                     value = pysal.MISSINGVALUE
                 else:
                     value = float(value)
-            if isinstance(value, str):
+            if isinstance(value, str) or isinstance(value, unicode):
                 value = value.rstrip()
             col[i] = value
         self.seek(prevPos)
@@ -155,6 +158,7 @@ class DBF(pysal.core.Tables.DataTable):
         self.seek(i)
         rec = list(struct.unpack(
             self.record_fmt, self.f.read(self.record_size)))
+        rec = [entry.decode() for entry in rec]
         if rec[0] != ' ':
             return self.read_record(i + 1)
         result = []
@@ -191,7 +195,7 @@ class DBF(pysal.core.Tables.DataTable):
                     value = pysal.MISSINGVALUE
                 else:
                     value = float(value)
-            if isinstance(value, str):
+            if isinstance(value, str) or isinstance(value, unicode):
                 value = value.rstrip()
             result.append(value)
         return result
@@ -215,7 +219,7 @@ class DBF(pysal.core.Tables.DataTable):
         if len(obj) != len(self.header):
             raise TypeError("Rows must contains %d fields" % len(self.header))
         self.numrec += 1
-        self.f.write(' ')                        # deletion flag
+        self.f.write(' '.encode())                        # deletion flag
         for (typ, size, deci), value in itertools.izip(self.field_spec, obj):
             if value is None:
                 if typ == 'C':
@@ -239,7 +243,7 @@ class DBF(pysal.core.Tables.DataTable):
             except:
                 print value, len(value), size
                 raise
-            self.f.write(value)
+            self.f.write(value.encode())
             self.pos += 1
 
     def flush(self):
@@ -251,7 +255,7 @@ class DBF(pysal.core.Tables.DataTable):
         if self.mode == 'w':
             self.flush()
             # End of file
-            self.f.write('\x1A')
+            self.f.write('\x1A'.encode())
         self.f.close()
         pysal.core.Tables.DataTable.close(self)
 
@@ -279,11 +283,14 @@ class DBF(pysal.core.Tables.DataTable):
         self.f.write(hdr)
         # field specs
         for name, (typ, size, deci) in itertools.izip(self.header, self.field_spec):
+            typ = typ.encode()
             name = name.ljust(11, '\x00')
+            name = name.encode()
             fld = struct.pack('<11sc4xBB14x', name, typ, size, deci)
             self.f.write(fld)
         # terminator
-        self.f.write('\r')
+        term = '\r'.encode()
+        self.f.write(term)
         if self.f.tell() != POS and not self.FIRST_WRITE:
             self.f.seek(POS)
 
diff --git a/pysal/core/IOHandlers/pyShpIO.py b/pysal/core/IOHandlers/pyShpIO.py
index d1a2c55..b123bda 100644
--- a/pysal/core/IOHandlers/pyShpIO.py
+++ b/pysal/core/IOHandlers/pyShpIO.py
@@ -70,7 +70,7 @@ class PurePyShpWrapper(pysal.core.FileIO.FileIO):
             self.__create()
 
     def __len__(self):
-        if self.dataObj:
+        if self.dataObj != None:
             return len(self.dataObj)
         else:
             return 0
@@ -127,7 +127,7 @@ class PurePyShpWrapper(pysal.core.FileIO.FileIO):
                 rec['NumParts'] = len(shape.parts)
                 all_parts = shape.parts
             partsIndex = [0]
-            for l in map(len, all_parts)[:-1]:
+            for l in [len(part) for part in all_parts][:-1]:
                 partsIndex.append(partsIndex[-1] + l)
             rec['Parts Index'] = partsIndex
             verts = sum(all_parts, [])
@@ -156,7 +156,7 @@ class PurePyShpWrapper(pysal.core.FileIO.FileIO):
                 parts = [rec['Vertices'][partsIndex[i]:partsIndex[
                     i + 1]] for i in xrange(rec['NumParts'])]
                 if self.dataObj.type() == 'POLYGON':
-                    is_cw = map(pysal.cg.is_clockwise, parts)
+                    is_cw = [pysal.cg.is_clockwise(part) for part in parts]
                     vertices = [part for part, cw in zip(parts, is_cw) if cw]
                     holes = [part for part, cw in zip(parts, is_cw) if not cw]
                     if not holes:
diff --git a/pysal/core/IOHandlers/tests/test_csvWrapper.py b/pysal/core/IOHandlers/tests/test_csvWrapper.py
index 70d0d52..2ceb46b 100644
--- a/pysal/core/IOHandlers/tests/test_csvWrapper.py
+++ b/pysal/core/IOHandlers/tests/test_csvWrapper.py
@@ -2,7 +2,9 @@ import unittest
 import pysal
 import tempfile
 import os
+from sys import version as V
 
+PY3 = int(V[0]) > 2
 
 class test_csvWrapper(unittest.TestCase):
     def setUp(self):
@@ -42,8 +44,12 @@ class test_csvWrapper(unittest.TestCase):
     def test_casting(self):
         self.obj.cast('WKT', pysal.core.util.WKTParser())
         verts = [(-89.585220336914062, 39.978794097900391), (-89.581146240234375, 40.094867706298828), (-89.603988647460938, 40.095306396484375), (-89.60589599609375, 40.136119842529297), (-89.6103515625, 40.3251953125), (-89.269027709960938, 40.329566955566406), (-89.268562316894531, 40.285579681396484), (-89.154655456542969, 40.285774230957031), (-89.152763366699219, 40.054969787597656), (-89.151618957519531, 39.919403076171875), (-89.224777221679688, 39.918678283691406), (-89.41185760 [...]
-        for i, pt in enumerate(self.obj.next()[0].vertices):
-            self.assertEquals(pt[:], verts[i])
+        if PY3:
+            for i, pt in enumerate(self.obj.__next__()[0].vertices):
+                self.assertEquals(pt[:], verts[i])
+        else:
+            for i, pt in enumerate(self.obj.next()[0].vertices):
+                self.assertEquals(pt[:], verts[i])
 
     def test_by_col(self):
         for field in self.obj.header:
diff --git a/pysal/core/IOHandlers/tests/test_pyDbfIO.py b/pysal/core/IOHandlers/tests/test_pyDbfIO.py
index df0c7cf..10a8c2b 100644
--- a/pysal/core/IOHandlers/tests/test_pyDbfIO.py
+++ b/pysal/core/IOHandlers/tests/test_pyDbfIO.py
@@ -1,64 +1,66 @@
+
+
 import unittest
 import pysal
 import tempfile
 import os
 
-
 class test_DBF(unittest.TestCase):
     def setUp(self):
         self.test_file = test_file = pysal.examples.get_path('10740.dbf')
         self.dbObj = pysal.core.IOHandlers.pyDbfIO.DBF(test_file, 'r')
 
     def test_len(self):
-        self.assertEquals(len(self.dbObj), 195)
+        self.assertEqual(len(self.dbObj), 195)
 
-    def test_cast(self):
-        self.assertEquals(self.dbObj._spec, [])
-        self.dbObj.cast('FIPSSTCO', float)
-        self.assertEquals(self.dbObj._spec[1], float)
     def test_tell(self):
-        self.assertEquals(self.dbObj.tell(), 0)
+        self.assertEqual(self.dbObj.tell(), 0)
         self.dbObj.read(1)
-        self.assertEquals(self.dbObj.tell(), 1)
+        self.assertEqual(self.dbObj.tell(), 1)
         self.dbObj.read(50)
-        self.assertEquals(self.dbObj.tell(), 51)
+        self.assertEqual(self.dbObj.tell(), 51)
         self.dbObj.read()
-        self.assertEquals(self.dbObj.tell(), 195)
+        self.assertEqual(self.dbObj.tell(), 195)
+    
+    def test_cast(self):
+        self.assertEqual(self.dbObj._spec, [])
+        self.dbObj.cast('FIPSSTCO', float)
+        self.assertEqual(self.dbObj._spec[1], float)
 
     def test_seek(self):
         self.dbObj.seek(0)
-        self.assertEquals(self.dbObj.tell(), 0)
+        self.assertEqual(self.dbObj.tell(), 0)
         self.dbObj.seek(55)
-        self.assertEquals(self.dbObj.tell(), 55)
+        self.assertEqual(self.dbObj.tell(), 55)
         self.dbObj.read(1)
-        self.assertEquals(self.dbObj.tell(), 56)
+        self.assertEqual(self.dbObj.tell(), 56)
 
     def test_read(self):
         self.dbObj.seek(0)
         objs = self.dbObj.read()
-        self.assertEquals(len(objs), 195)
+        self.assertEqual(len(objs), 195)
         self.dbObj.seek(0)
         objsB = list(self.dbObj)
-        self.assertEquals(len(objsB), 195)
+        self.assertEqual(len(objsB), 195)
         for rowA, rowB in zip(objs, objsB):
-            self.assertEquals(rowA, rowB)
+            self.assertEqual(rowA, rowB)
 
     def test_random_access(self):
         self.dbObj.seek(0)
         db0 = self.dbObj.read(1)[0]
-        self.assertEquals(db0, [1, '35001', '000107', '35001000107', '1.07'])
+        self.assertEqual(db0, [1, '35001', '000107', '35001000107', '1.07'])
         self.dbObj.seek(57)
         db57 = self.dbObj.read(1)[0]
-        self.assertEquals(db57, [58, '35001', '001900', '35001001900', '19'])
+        self.assertEqual(db57, [58, '35001', '001900', '35001001900', '19'])
         self.dbObj.seek(32)
         db32 = self.dbObj.read(1)[0]
-        self.assertEquals(db32, [33, '35001', '000500', '35001000500', '5'])
+        self.assertEqual(db32, [33, '35001', '000500', '35001000500', '5'])
         self.dbObj.seek(0)
-        self.assertEquals(self.dbObj.next(), db0)
+        self.assertEqual(next(self.dbObj), db0)
         self.dbObj.seek(57)
-        self.assertEquals(self.dbObj.next(), db57)
+        self.assertEqual(next(self.dbObj), db57)
         self.dbObj.seek(32)
-        self.assertEquals(self.dbObj.next(), db32)
+        self.assertEqual(next(self.dbObj), db32)
 
     def test_write(self):
         f = tempfile.NamedTemporaryFile(suffix='.dbf')
@@ -80,7 +82,7 @@ class test_DBF(unittest.TestCase):
 
         #PySAL writes proper DBF files with a terminator at the end, not everyone does.
         n = self.dbObj.record_size * self.dbObj.n_records  # bytes to read.
-        self.assertEquals(orig.read(n), copy.read(n))
+        self.assertEqual(orig.read(n), copy.read(n))
         #self.assertEquals(orig.read(1), copy.read(1)) # last byte may fail
         orig.close()
         copy.close()
@@ -107,7 +109,7 @@ class test_DBF(unittest.TestCase):
             db.write(rec)
         db.close()
         db2 = pysal.core.IOHandlers.pyDbfIO.DBF(fname, 'r')
-        self.assertEquals(records, db2.read())
+        self.assertEqual(records, db2.read())
 
         os.remove(fname)
 
diff --git a/pysal/core/IOHandlers/wk1.py b/pysal/core/IOHandlers/wk1.py
index fccca98..fd19049 100644
--- a/pysal/core/IOHandlers/wk1.py
+++ b/pysal/core/IOHandlers/wk1.py
@@ -306,7 +306,7 @@ class Wk1IO(FileIO.FileIO):
             hidcol = tuple(['<2H32b', 100, 32] + [0] * 32)
             f.write(pack(*hidcol))
             f.write(pack('<7H', 40, 10, 4, 76, 66, 2, 2))
-            f.write(pack('<2H1c', 41, 1, "'"))
+            f.write(pack('<2H1c', 41, 1, "'".encode()))
 
             id2i = obj.id2i
             for i, w_i in enumerate(obj):
diff --git a/pysal/core/Tables.py b/pysal/core/Tables.py
index 04c8a26..5fc03aa 100644
--- a/pysal/core/Tables.py
+++ b/pysal/core/Tables.py
@@ -48,14 +48,14 @@ class DataTable(FileIO.FileIO):
         else:
             raise AttributeError('Field: % s does not exist in header' % key)
 
-    def by_col_array(self, variable_names):
+    def by_col_array(self, *args):
         """
-        Return columns of table as a numpy array
+        Return columns of table as a numpy array.
 
         Parameters
         ----------
 
-        variable_names:  list of strings of length k
+        *args:  any number of strings of length k
                          names of variables to extract
 
         Returns
@@ -69,12 +69,22 @@ class DataTable(FileIO.FileIO):
         If the variables are not all of the same data type, then numpy rules
         for casting will result in a uniform type applied to all variables.
 
+        If only strings are passed to the function, then an array with those
+        columns will be constructed. 
+        
+        If only one list of strings is passed, the output is identical to those
+        strings being passed. 
+
+        If at least one list is passed and other strings or lists are passed,
+        this returns a tuple containing arrays constructed from each positional
+        argument.
+
         Examples
         --------
 
         >>> import pysal as ps
         >>> dbf = ps.open(ps.examples.get_path('NAT.dbf'))
-        >>> hr = dbf.by_col_array(['HR70', 'HR80'])
+        >>> hr = dbf.by_col_array('HR70', 'HR80')
         >>> hr[0:5]
         array([[  0.        ,   8.85582713],
                [  0.        ,  17.20874204],
@@ -98,7 +108,7 @@ class DataTable(FileIO.FileIO):
         
         Numpy only supports homogeneous arrays. See Notes above.
 
-        >>> hr = dbf.by_col_array(['STATE_NAME', 'HR80'])
+        >>> hr = dbf.by_col_array('STATE_NAME', 'HR80')
         >>> hr[0:5]
         array([['Minnesota', '8.8558271343'],
                ['Washington', '17.208742041'],
@@ -107,10 +117,35 @@ class DataTable(FileIO.FileIO):
                ['Washington', '7.77000777']], 
               dtype='|S20')
 
+        >>> y, X = dbf.by_col_array('STATE_NAME', ['HR80', 'HR70'])
+        >>> y[0:5]
+        array([['Minnesota'],
+               ['Washington'],
+               ['Washington'],
+               ['Washington'],
+               ['Washington']], 
+              dtype='|S20')
+        >>> X[0:5]
+        array([[  8.85582713,   0.        ],
+               [ 17.20874204,   0.        ],
+               [  3.4507747 ,   1.91515848],
+               [  3.26381409,   1.28864319],
+               [  7.77000777,   0.        ]])
 
         """
-        lst = [self._get_col(variable) for variable in variable_names]
-        return np.array(lst).T
+        if any([isinstance(arg, list) for arg in args]):
+            results = []
+            for namelist in args:
+                if isinstance(namelist, str):
+                    results.append([self._get_col(namelist)])
+                else:
+                    results.append([self._get_col(vbl) for vbl in namelist])
+            if len(results) == 1:
+                return np.array(results[0]).T
+            else:
+                return tuple(np.array(lst).T for lst in results)
+        else:
+            return np.array([self._get_col(name) for name in args]).T
 
     def __getitem__(self, key):
         """ DataTables fully support slicing in 2D,
diff --git a/pysal/core/util/shapefile.py b/pysal/core/util/shapefile.py
index 973b152..ef7d113 100644
--- a/pysal/core/util/shapefile.py
+++ b/pysal/core/util/shapefile.py
@@ -15,10 +15,18 @@ http://geodacenter.asu.edu
 __author__ = "Charles R Schmidt <schmidtc at gmail.com>"
 
 from struct import calcsize, unpack, pack
-from cStringIO import StringIO
+
 from itertools import izip, islice
 import array
 import sys
+
+PY3 = int(sys.version[0]) > 2
+
+if PY3:
+    import io
+else:
+    from cStringIO import StringIO
+
 if sys.byteorder == 'little':
     SYS_BYTE_ORDER = '<'
 else:
@@ -31,6 +39,14 @@ __all__ = ['shp_file', 'shx_file']
 
 #SHAPEFILE Globals
 
+def bufferIO(buf):
+    """
+    Helper function for 2-3 compatibility
+    """
+    if PY3:
+        return io.BytesIO(buf)
+    else:
+        return StringIO(buf)
 
 def struct2arrayinfo(struct):
     struct = list(struct)
@@ -336,11 +352,11 @@ class shp_file:
         self.__isreadable()
         if shpId + 1 > self.__numRecords:
             raise IndexError
-        fPosition, bytes = self._shx.index[shpId]
+        fPosition, byts = self._shx.index[shpId]
         self.__seek(fPosition)
         #the index does not include the 2 byte record header (which contains, Record ID and Content Length)
         rec_id, con_len = _unpackDict(URHEADERSTRUCT, self.fileObj)
-        return self.shape.unpack(StringIO(self.fileObj.read(bytes)))
+        return self.shape.unpack(bufferIO(self.fileObj.read(byts)))
         #return self.shape.unpack(self.fileObj.read(bytes))
 
     def __update_bbox(self, s):
@@ -378,13 +394,13 @@ class shp_file:
         self.__file_Length += con_len + 8
         rec_id, pos = self._shx.add_record(con_len)
         self.__seek(pos)
-        self.fileObj.write(pack('>ii', rec_id, con_len / 2))
+        self.fileObj.write(pack('>ii', rec_id, con_len // 2))
         self.fileObj.write(rec)
 
     def close(self):
         self._shx.close(self.header)
         if self.__mode == 'w':
-            self.header['File Length'] = self.__file_Length / 2
+            self.header['File Length'] = self.__file_Length // 2
             self.__seek(0)
             self.fileObj.write(_packDict(HEADERSTRUCT, self.header))
         self.fileObj.close()
@@ -444,7 +460,7 @@ class shx_file:
         self.__isreadable()
         self.fileObj = open(self.fileName + '.shx', 'rb')
         self._header = _unpackDict(UHEADERSTRUCT, self.fileObj)
-        self.numRecords = numRecords = (self._header['File Length'] - 50) / 4
+        self.numRecords = numRecords = (self._header['File Length'] - 50) // 4
         index = {}
         fmt = '>%di' % (2 * numRecords)
         size = calcsize(fmt)
@@ -515,13 +531,13 @@ class shx_file:
         if self.__mode == 'w':
             self.__iswritable()
             header['File Length'] = (
-                self.numRecords * calcsize('>ii') + 100) / 2
+                self.numRecords * calcsize('>ii') + 100) // 2
             self.fileObj.seek(0)
             self.fileObj.write(_packDict(HEADERSTRUCT, header))
             fmt = '>%di' % (2 * self.numRecords)
             values = []
             for off, size in self.index:
-                values.extend([off / 2, size / 2])
+                values.extend([off // 2, size // 2])
             self.fileObj.write(pack(fmt, *values))
         self.fileObj.close()
 
diff --git a/pysal/core/util/tests/test_shapefile.py b/pysal/core/util/tests/test_shapefile.py
index 06fed2b..a9eee1b 100644
--- a/pysal/core/util/tests/test_shapefile.py
+++ b/pysal/core/util/tests/test_shapefile.py
@@ -1,9 +1,24 @@
 import unittest
-from cStringIO import StringIO
+
+import sys
+PY3 = int(sys.version[0]) > 2
+if PY3:
+    import io
+else:
+    from cStringIO import StringIO
+
 from pysal.core.util.shapefile import noneMax, noneMin, shp_file, shx_file, NullShape, Point, PolyLine, MultiPoint, PointZ, PolyLineZ, PolygonZ, MultiPointZ, PointM, PolyLineM, PolygonM, MultiPointM, MultiPatch
 import os
 import pysal
 
+def bufferIO(buf):
+    """
+    Temp stringIO function to force compat
+    """
+    if PY3:
+        return io.BytesIO(buf)
+    else:
+        return StringIO(buf)
 
 class TestNoneMax(unittest.TestCase):
     def test_none_max(self):
@@ -152,7 +167,7 @@ class TestPoint(unittest.TestCase):
         self.assertEqual(expected, Point.pack(record))
 
     def test_unpack(self):
-        dat = StringIO(b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x40\x00\x00\x00\x00\x00\x00\x14\x40")
+        dat = bufferIO(b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x40\x00\x00\x00\x00\x00\x00\x14\x40")
         expected = {"X": 5, "Y": 5, "Shape Type": 1}
         self.assertEqual(expected, Point.unpack(dat))
 
@@ -172,7 +187,7 @@ class TestPolyLine(unittest.TestCase):
         self.assertEqual(expected, PolyLine.pack(record))
 
     def test_unpack(self):
-        dat = StringIO(b"""\x03\x00\x00\x00\xc0\x46\x52\x3a\xdd\x8a\x82\
+        dat = bufferIO(b"""\x03\x00\x00\x00\xc0\x46\x52\x3a\xdd\x8a\x82\
 \xbf\x3d\xc1\x65\xce\xc7\x92\xd0\xbf\x00\xc5\
 \xa0\xe5\x8f\xa4\x7e\x3f\x6b\x40\x7f\x60\x5c\
 \x88\xd0\xbf\x01\x00\x00\x00\x03\x00\x00\x00\
@@ -197,7 +212,7 @@ class TestPointZ(unittest.TestCase):
         self.assertEqual(expected, PointZ.pack(record))
 
     def test_unpack(self):
-        dat = StringIO(b"\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00\x14@")
+        dat = bufferIO(b"\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00\x14@")
         expected = {"X": 5, "Y": 5, "Z": 5, "M": 5, "Shape Type": 11}
         self.assertEqual(expected, PointZ.unpack(dat))
 
@@ -214,7 +229,7 @@ class TestPolyLineZ(unittest.TestCase):
         self.assertEqual(expected, PolyLineZ.pack(record))
 
     def test_unpack(self):
-        dat = StringIO(b"""\r\x00\x00\x00\xc0FR:\xdd\x8a\x82\xbf=\xc1e\xce\xc7\x92\xd0\xbf\x00\xc5\xa0\xe5\x8f\xa4~?k@\x7f`\\\x88\xd0\xbf\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xc0FR:\xdd\x8a\x82\xbfk@\x7f`\\\x88\xd0\xbf\x00\xc5\xa0\xe5\x8f\xa4~?=\xc1e\xce\xc7\x92\xd0\xbf\x00\xc5\xa0\xe5\x8f\xa4~?=\xc1e\xce\xc7\x92\xd0\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00$@\x00\x00\x00\x [...]
+        dat = bufferIO(b"""\r\x00\x00\x00\xc0FR:\xdd\x8a\x82\xbf=\xc1e\xce\xc7\x92\xd0\xbf\x00\xc5\xa0\xe5\x8f\xa4~?k@\x7f`\\\x88\xd0\xbf\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xc0FR:\xdd\x8a\x82\xbfk@\x7f`\\\x88\xd0\xbf\x00\xc5\xa0\xe5\x8f\xa4~?=\xc1e\xce\xc7\x92\xd0\xbf\x00\xc5\xa0\xe5\x8f\xa4~?=\xc1e\xce\xc7\x92\xd0\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00$@\x00\x00\x00\x [...]
         expected = {'BBOX Ymax': -0.25832280562918325, 'NumPoints': 3, 'BBOX Ymin': -0.25895877033237352, 'NumParts': 1, 'Vertices': [(-0.0090539248870159517, -0.25832280562918325), (0.0074811573959305822, -0.25895877033237352), (0.0074811573959305822, -0.25895877033237352)], 'BBOX Xmax': 0.0074811573959305822, 'BBOX Xmin': -0.0090539248870159517, 'Shape Type': 13, 'Parts Index': [0], 'Zmin': 0, 'Zmax': 10, 'Zarray': [0, 5, 10], 'Mmin': 2, 'Mmax': 4, 'Marray': [2, 3, 4]}
         self.assertEqual(expected, PolyLineZ.unpack(dat))
 
@@ -241,7 +256,7 @@ class TestPolygonZ(unittest.TestCase):
             'Mmax': 4,
             'Marray': [2, 4, 2, 2]
         }
-        dat = StringIO(PolygonZ.pack(record))
+        dat = bufferIO(PolygonZ.pack(record))
         self.assertEqual(record, PolygonZ.unpack(dat))
 
 
diff --git a/pysal/esda/mapclassify.py b/pysal/esda/mapclassify.py
index 97c526c..bc91801 100644
--- a/pysal/esda/mapclassify.py
+++ b/pysal/esda/mapclassify.py
@@ -1,6 +1,8 @@
 """
 A module of classification schemes for choropleth mapping.
 """
+
+
 __author__ = "Sergio J. Rey"
 
 __all__ = ['Map_Classifier', 'quantile', 'Box_Plot', 'Equal_Interval',
@@ -8,7 +10,7 @@ __all__ = ['Map_Classifier', 'quantile', 'Box_Plot', 'Equal_Interval',
            'Jenks_Caspall_Forced', 'Jenks_Caspall_Sampled',
            'Max_P_Classifier', 'Maximum_Breaks', 'Natural_Breaks',
            'Quantiles', 'Percentiles', 'Std_Mean', 'User_Defined',
-           'gadf', 'K_classifiers']
+           'gadf', 'K_classifiers', 'HeadTail_Breaks']
 
 
 K = 5  # default number of classes in any map scheme with this as an argument
@@ -17,6 +19,19 @@ import scipy.stats as stats
 import scipy as sp
 import copy
 import sys
+from scipy.cluster.vq import kmeans as KMEANS
+
+
+def headTail_breaks(values, cuts):
+    """
+    head tail breaks helper function
+    """
+    values = np.array(values)
+    mean = np.mean(values)
+    cuts.append(mean)
+    if (len(values) > 1):
+        return headTail_breaks(values[values >= mean], cuts)
+    return cuts
 
 
 def quantile(y, k=4):
@@ -237,7 +252,7 @@ def bin1d(x, bins):
         k -= 1
         l, r = cuts.pop(-1)
         binIds += (x > l) * (x <= r) * k
-    counts = np.bincount(binIds)
+    counts = np.bincount(binIds, minlength=len(bins))
     return (binIds, counts)
 
 
@@ -252,9 +267,35 @@ def load_example():
     return cal
 
 
-def natural_breaks(values, k=5, itmax=100):
+def _kmeans(y, k=5):
+    """
+    Helper function to do kmeans in one dimension
+    """
+
+    y = y * 1.   # KMEANS needs float or double dtype
+    centroids = KMEANS(y, k)[0]
+    centroids.sort()
+    try:
+        class_ids = np.abs(y - centroids).argmin(axis=1)
+    except:
+        class_ids = np.abs(y[:, np.newaxis] - centroids).argmin(axis=1)
+
+    uc = np.unique(class_ids)
+    cuts = np.array([y[class_ids == c].max() for c in uc])
+    y_cent = np.zeros_like(y)
+    for c in uc:
+        y_cent[class_ids == c] = centroids[c]
+    diffs = y - y_cent
+    diffs *= diffs
+
+    return class_ids, cuts, diffs.sum(), centroids
+
+
+def natural_breaks(values, k=5):
     """
     natural breaks helper function
+
+    Jenks natural breaks is kmeans in one dimension
     """
     values = np.array(values)
     uv = np.unique(values)
@@ -263,38 +304,12 @@ def natural_breaks(values, k=5, itmax=100):
         print 'Warning: Not enough unique values in array to form k classes'
         print "Warning: setting k to %d" % uvk
         k = uvk
-    sids = np.random.permutation(range(len(uv)))[0:k]
-    seeds = uv[sids]
-    seeds.sort()
-    diffs = abs(np.matrix([values - seed for seed in seeds]))
-    c0 = diffs.argmin(axis=0)
-    c0 = np.array(c0)[0]
-    solving = True
-    solved = False
-    rk = range(k)
-    it = 0
-    while solving:
-        # get centroids of clusters
-        seeds = [np.median(values[c0 == c]) for c in rk]
-        seeds.sort()
-        # for each value find closest centroid
-        diffs = abs(np.matrix([values - seed for seed in seeds]))
-        # assign value to that centroid
-        c1 = diffs.argmin(axis=0)
-        c1 = np.array(c1)[0]
-        # compare new classids to previous
-        d = abs(c1 - c0)
-        if d.sum() == 0:
-            solving = False
-            solved = True
-        else:
-            c0 = c1
-        it += 1
-        if it == itmax:
-            solving = False
-    class_ids = c1
-    cuts = [max(values[c1 == c]) for c in rk]
-    return sids, seeds, diffs, class_ids, solved, it, cuts
+    kres = _kmeans(values, k)
+    sids = kres[-1]  # centroids
+    fit = kres[-2]
+    class_ids = kres[0]
+    cuts = kres[1]
+    return (sids, class_ids, fit, cuts)
 
 
 def _fisher_jenks_means(values, classes=5, sort=True):
@@ -371,10 +386,10 @@ class Map_Classifier:
     """
     Abstract class for all map classifications [Slocum2008]_
 
-    For an array :math:`y` of :math:`n` values, a map classifier places each value
-    :math:`y_i` into one of :math:`k` mutually exclusive and exhaustive classes.
-    Each classifer defines the classes based on different criteria, but in all
-    cases the following hold for the classifiers in PySAL:
+    For an array :math:`y` of :math:`n` values, a map classifier places each
+    value :math:`y_i` into one of :math:`k` mutually exclusive and exhaustive
+    classes.  Each classifer defines the classes based on different criteria,
+    but in all cases the following hold for the classifiers in PySAL:
 
     .. math::
 
@@ -385,14 +400,13 @@ class Map_Classifier:
 
 
 
-
-
     Map Classifiers Supported
 
     * :class:`~pysal.esda.mapclassify.Box_Plot`
     * :class:`~pysal.esda.mapclassify.Equal_Interval`
     * :class:`~pysal.esda.mapclassify.Fisher_Jenks`
     * :class:`~pysal.esda.mapclassify.Fisher_Jenks_Sampled`
+    * :class:`~pysal.esda.mapclassify.HeadTail_Breaks`
     * :class:`~pysal.esda.mapclassify.Jenks_Caspall`
     * :class:`~pysal.esda.mapclassify.Jenks_Caspall_Forced`
     * :class:`~pysal.esda.mapclassify.Jenks_Caspall_Sampled`
@@ -531,6 +545,68 @@ class Map_Classifier:
         return table
 
 
+class HeadTail_Breaks(Map_Classifier):
+    """
+    Head/tail Breaks Map Classification for Heavy-tailed Distributions
+
+    Parameters
+    ----------
+    y       : array
+              (n,1), values to classify
+    Attributes
+    ----------
+    yb      : array
+              (n,1), bin ids for observations,
+    bins    : array
+              (k,1), the upper bounds of each class
+    k       : int
+              the number of classes
+    counts  : array
+              (k,1), the number of observations falling in each class
+    Examples
+    --------
+    >>> import numpy as np
+    >>> np.random.seed(10)
+    >>> cal = load_example()
+    >>> htb = HeadTail_Breaks(cal)
+    >>> htb.k
+    3
+    >>> htb.counts
+    array([50,  7,  1])
+    >>> htb.bins
+    array([  125.92810345,   811.26      ,  4111.45      ])
+    >>> np.random.seed(123456)
+    >>> x = np.random.lognormal(3, 1, 1000)
+    >>> htb = HeadTail_Breaks(x)
+    >>> htb.bins
+    array([  32.26204423,   72.50205622,  128.07150107,  190.2899093 ,
+            264.82847377,  457.88157946,  576.76046949])
+    >>> htb.counts
+    array([695, 209,  62,  22,  10,   1,   1])
+
+    Notes
+    -----
+
+    Head/tail Breaks is a relatively new classification method developed
+    and introduced by [Jiang2013]_ for data with a heavy-tailed distribution.
+
+
+    Based on contributions by Alessandra Sozzi <alessandra.sozzi at gmail.com>.
+
+    """
+    def __init__(self, y):
+        Map_Classifier.__init__(self, y)
+        self.name = 'HeadTail_Breaks'
+
+    def _set_bins(self):
+
+        x = self.y.copy()
+        bins = []
+        bins = headTail_breaks(x, bins)
+        self.bins = np.array(bins)
+        self.k = len(self.bins)
+
+
 class Equal_Interval(Map_Classifier):
     """
     Equal Interval Classification
@@ -977,20 +1053,20 @@ class Natural_Breaks(Map_Classifier):
 
     Examples
     --------
-    >>> import numpy as np
-    >>> np.random.seed(10)
-    >>> cal = load_example()
-    >>> nb = Natural_Breaks(cal, k = 5)
+    >>> import numpy
+    >>> import pysal
+    >>> numpy.random.seed(123456)
+    >>> cal = pysal.esda.mapclassify.load_example()
+    >>> nb = pysal.Natural_Breaks(cal, k=5)
     >>> nb.k
     5
     >>> nb.counts
-    array([14, 13, 14, 10,  7])
+    array([41,  9,  6,  1,  1])
     >>> nb.bins
-    array([  1.81000000e+00,   7.60000000e+00,   2.98200000e+01,
-             1.81270000e+02,   4.11145000e+03])
-    >>> x = np.array([1] * 50)
+    array([   29.82,   110.74,   370.5 ,   722.85,  4111.45])
+    >>> x = numpy.array([1] * 50)
     >>> x[-1] = 20
-    >>> nb = Natural_Breaks(x, k = 5, initial = 0)
+    >>> nb = pysal.Natural_Breaks(x, k = 5, initial = 0)
     Warning: Not enough unique values in array to form k classes
     Warning: setting k to 2
     >>> nb.bins
@@ -1002,11 +1078,10 @@ class Natural_Breaks(Map_Classifier):
     Notes
     -----
     There is a tradeoff here between speed and consistency of the
-    classification
-    If you want more speed, set initial to a smaller value (0
+    classification If you want more speed, set initial to a smaller value (0
     would result in the best speed, if you want more consistent classes in
-    multiple runs of Natural_Breaks on the same data, set initial to a
-    higher value.
+    multiple runs of Natural_Breaks on the same data, set initial to a higher
+    value.
 
 
     """
@@ -1020,16 +1095,29 @@ class Natural_Breaks(Map_Classifier):
 
         x = self.y.copy()
         k = self.k
-        res0 = natural_breaks(x, k)
-        fit = res0[2].sum()
-        for i in xrange(self.initial):
-            res = natural_breaks(x, k)
-            fit_i = res[2].sum()
-            if fit_i < fit:
-                res0 = res
-        self.bins = np.array(res0[-1])
-        self.k = len(self.bins)
-        self.iterations = res0[-2]
+        values = np.array(x)
+        uv = np.unique(values)
+        uvk = len(uv)
+        if uvk < k:
+            print 'Warning: Not enough unique values in array to form k classes'
+            print "Warning: setting k to %d" % uvk
+            k = uvk
+            uv.sort()
+            # we set the bins equal to the sorted unique values and ramp k
+            # downwards. no need to call kmeans.
+            self.bins = uv
+            self.k = k
+        else:
+            # find an initial solution and then try to find an improvement
+            res0 = natural_breaks(x, k)
+            fit = res0[2]
+            for i in xrange(self.initial):
+                res = natural_breaks(x, k)
+                fit_i = res[2]
+                if fit_i < fit:
+                    res0 = res
+            self.bins = np.array(res0[-1])
+            self.k = len(self.bins)
 
 
 class Fisher_Jenks(Map_Classifier):
@@ -1882,7 +1970,6 @@ def opt_part(x):
     tss = np.inf
     opt_i = -999
     for i in xrange(1, n):
-        print i
         left = x[:i].var() * i
         right = x[i:].var() * (n - i)
         tss_i = left + right
diff --git a/pysal/esda/moran.py b/pysal/esda/moran.py
index bd75770..c04862f 100644
--- a/pysal/esda/moran.py
+++ b/pysal/esda/moran.py
@@ -2,16 +2,16 @@
 Moran's I Spatial Autocorrelation Statistics
 
 """
-__author__ = "Sergio J. Rey <srey at asu.edu>"
+__author__ = "Sergio J. Rey <srey at asu.edu>, \
+        Dani Arribas-Bel <daniel.arribas.bel at gmail.com>"
 from pysal.weights.spatial_lag import lag_spatial as slag
 from pysal.esda.smoothing import assuncao_rate
 import scipy.stats as stats
 import numpy as np
 
 __all__ = ["Moran", "Moran_Local", "Moran_BV", "Moran_BV_matrix",
-           "Moran_Rate", "Moran_Local_Rate"]
+           "Moran_Local_BV", "Moran_Rate", "Moran_Local_Rate"]
 
-np.seterr(invalid='ignore')
 PERMUTATIONS = 999
 
 
@@ -128,11 +128,9 @@ class Moran:
     >>> mi_1.p_norm
     5.7916539074498452e-05
 
-
-    5.7916539074498452e-05
     """
     def __init__(self, y, w, transformation="r", permutations=PERMUTATIONS,
-        two_tailed=True):
+                 two_tailed=True):
         self.y = y
         w.transform = transformation
         self.w = w
@@ -153,7 +151,6 @@ class Moran:
             self.p_norm *= 2.
             self.p_rand *= 2.
 
-
         if permutations:
             sim = [self.__calc(np.random.permutation(self.z))
                    for i in xrange(permutations)]
@@ -175,7 +172,6 @@ class Moran:
     def __moments(self):
         self.n = len(self.y)
         y = self.y
-        #z = (y-y.mean())/y.std()
         z = y - y.mean()
         self.z = z
         self.z2ss = (z * z).sum()
@@ -312,6 +308,8 @@ class Moran_BV:
         zx = (x - x.mean()) / x.std(ddof=1)
         self.zx = zx
         self.zy = zy
+        n = x.shape[0]
+        self.den =  n - 1.  # zx'zx = zy'zy = n-1
         w.transform = transformation
         self.w = w
         self.I = self.__calc(zy)
@@ -336,7 +334,6 @@ class Moran_BV:
     def __calc(self, zy):
         wzy = slag(self.w, zy)
         self.num = (self.zx * wzy).sum()
-        self.den = (zy * zy).sum()
         return self.num / self.den
 
 
@@ -602,7 +599,8 @@ class Moran_Local:
     array([4, 4, 4, 2, 3, 3, 1, 4, 3, 3])
     >>> lm.p_z_sim[0]
     0.46756830387716064
-    >>> lm = ps.Moran_Local(y, w, transformation = "r", permutations = 99, geoda_quads=True)
+    >>> lm = ps.Moran_Local(y, w, transformation = "r", permutations = 99, \
+                            geoda_quads=True)
     >>> lm.q
     array([4, 4, 4, 3, 2, 2, 1, 4, 2, 2])
 
@@ -611,7 +609,7 @@ class Moran_Local:
     moved into unittests that are conditional on architectures
     """
     def __init__(self, y, w, transformation="r", permutations=PERMUTATIONS,
-        geoda_quads=False):
+                 geoda_quads=False):
         self.y = y
         n = len(y)
         self.n = n
@@ -694,8 +692,197 @@ class Moran_Local:
         np = (1 - zp) * lp
         nn = (1 - zp) * (1 - lp)
         pn = zp * (1 - lp)
-        self.q = self.quads[0] * pp + self.quads[1] * np + self.quads[2] * nn + self.quads[3] * pn
+        self.q = self.quads[0] * pp + self.quads[1] * np + self.quads[2] * nn \
+            + self.quads[3] * pn
+
+
+class Moran_Local_BV:
+    """Bivariate Local Moran Statistics
+
+
+    Parameters
+    ----------
+    x : array
+        x-axis variable
+    y : array
+        (n,1), wy will be on y axis
+    w : W
+        weight instance assumed to be aligned with y
+    transformation : {'R', 'B', 'D', 'U', 'V'}
+                     weights transformation,  default is row-standardized "r".
+                     Other options include
+                     "B": binary,
+                     "D": doubly-standardized,
+                     "U": untransformed (general weights),
+                     "V": variance-stabilizing.
+    permutations   : int
+                     number of random permutations for calculation of pseudo
+                     p_values
+    geoda_quads    : boolean
+                     (default=False)
+                     If True use GeoDa scheme: HH=1, LL=2, LH=3, HL=4
+                     If False use PySAL Scheme: HH=1, LH=2, LL=3, HL=4
+
+    Attributes
+    ----------
+
+    zx           : array
+                   original x variable standardized by mean and std
+    zy           : array
+                   original y variable standardized by mean and std
+    w            : W
+                   original w object
+    permutations : int
+                   number of random permutations for calculation of pseudo
+                   p_values
+    Is           : float
+                   value of Moran's I
+    q            : array
+                   (if permutations>0)
+                   values indicate quadrat location 1 HH,  2 LH,  3 LL,  4 HL
+    sim          : array
+                   (if permutations>0)
+                   vector of I values for permuted samples
+    p_sim        : array
+                   (if permutations>0)
+                   p-value based on permutations (one-sided)
+                   null: spatial randomness
+                   alternative: the observed Ii is further away or extreme
+                   from the median of simulated values. It is either extremelyi
+                   high or extremely low in the distribution of simulated Is.
+    EI_sim       : float
+                   (if permutations>0)
+                   average value of I from permutations
+    VI_sim       : float
+                   (if permutations>0)
+                   variance of I from permutations
+    seI_sim      : float
+                   (if permutations>0)
+                   standard deviation of I under permutations.
+    z_sim        : float
+                   (if permutations>0)
+                   standardized I based on permutations
+    p_z_sim      : float
+                   (if permutations>0)
+                   p-value based on standard normal approximation from
+                   permutations (one-sided)
+                   for two-sided tests, these values should be multiplied by 2
+
+    Examples
+    --------
+    >>> import pysal as ps
+    >>> import numpy as np
+    >>> np.random.seed(10)
+    >>> w = ps.open(ps.examples.get_path("sids2.gal")).read()
+    >>> f = ps.open(ps.examples.get_path("sids2.dbf"))
+    >>> x = np.array(f.by_col['SIDR79'])
+    >>> y = np.array(f.by_col['SIDR74'])
+    >>> lm = ps.Moran_Local_BV(x, y, w, transformation = "r", \
+                               permutations = 99)
+    >>> lm.q[:10]
+    array([3, 4, 3, 4, 2, 1, 4, 4, 2, 4])
+    >>> lm.p_z_sim[0]
+    0.0017240031348827456
+    >>> lm = ps.Moran_Local_BV(x, y, w, transformation = "r", \
+                               permutations = 99, geoda_quads=True)
+    >>> lm.q[:10]
+    array([2, 4, 2, 4, 3, 1, 4, 4, 3, 4])
 
+    Note random components result is slightly different values across
+    architectures so the results have been removed from doctests and will be
+    moved into unittests that are conditional on architectures
+    """
+    def __init__(self, x, y, w, transformation="r", permutations=PERMUTATIONS,
+                 geoda_quads=False):
+        self.y = y
+        n = len(y)
+        self.n = n
+        self.n_1 = n - 1
+        zx = x - x.mean()
+        zy = y - y.mean()
+        # setting for floating point noise
+        orig_settings = np.seterr()
+        np.seterr(all="ignore")
+        sx = x.std()
+        zx /= sx
+        sy = y.std()
+        zy /= sy
+        np.seterr(**orig_settings)
+        self.zx = zx
+        self.zy = zy
+        w.transform = transformation
+        self.w = w
+        self.permutations = permutations
+        self.den = (zx * zx).sum()
+        self.Is = self.calc(self.w, self.zx, self.zy)
+        self.geoda_quads = geoda_quads
+        quads = [1, 2, 3, 4]
+        if geoda_quads:
+            quads = [1, 3, 2, 4]
+        self.quads = quads
+        self.__quads()
+        if permutations:
+            self.__crand()
+            sim = np.transpose(self.rlisas)
+            above = sim >= self.Is
+            larger = above.sum(0)
+            low_extreme = (self.permutations - larger) < larger
+            larger[low_extreme] = self.permutations - larger[low_extreme]
+            self.p_sim = (larger + 1.0) / (permutations + 1.0)
+            self.sim = sim
+            self.EI_sim = sim.mean()
+            self.seI_sim = sim.std()
+            self.VI_sim = self.seI_sim * self.seI_sim
+            self.z_sim = (self.Is - self.EI_sim) / self.seI_sim
+            self.p_z_sim = 1 - stats.norm.cdf(np.abs(self.z_sim))
+
+    def calc(self, w, zx, zy):
+        zly = slag(w, zy)
+        return self.n_1 * self.zx * zly / self.den
+
+    def __crand(self):
+        """
+        conditional randomization
+
+        for observation i with ni neighbors,  the candidate set cannot include
+        i (we don't want i being a neighbor of i). we have to sample without
+        replacement from a set of ids that doesn't include i. numpy doesn't
+        directly support sampling wo replacement and it is expensive to
+        implement this. instead we omit i from the original ids,  permute the
+        ids and take the first ni elements of the permuted ids as the
+        neighbors to i in each randomization.
+
+        """
+        lisas = np.zeros((self.n, self.permutations))
+        n_1 = self.n - 1
+        prange = range(self.permutations)
+        k = self.w.max_neighbors + 1
+        nn = self.n - 1
+        rids = np.array([np.random.permutation(nn)[0:k] for i in prange])
+        ids = np.arange(self.w.n)
+        ido = self.w.id_order
+        w = [self.w.weights[ido[i]] for i in ids]
+        wc = [self.w.cardinalities[ido[i]] for i in ids]
+
+        zx = self.zx
+        zy = self.zy
+        for i in xrange(self.w.n):
+            idsi = ids[ids != i]
+            np.random.shuffle(idsi)
+            tmp = zy[idsi[rids[:, 0:wc[i]]]]
+            lisas[i] = zx[i] * (w[i] * tmp).sum(1)
+        self.rlisas = (n_1 / self.den) * lisas
+
+    def __quads(self):
+        zl = slag(self.w, self.zy)
+        zp = self.zx > 0
+        lp = zl > 0
+        pp = zp * lp
+        np = (1 - zp) * lp
+        nn = (1 - zp) * (1 - lp)
+        pn = zp * (1 - lp)
+        self.q = self.quads[0] * pp + self.quads[1] * np + self.quads[2] * nn \
+            + self.quads[3] * pn
 
 
 class Moran_Local_Rate(Moran_Local):
@@ -809,17 +996,3 @@ class Moran_Local_Rate(Moran_Local):
                              transformation=transformation,
                              permutations=permutations,
                              geoda_quads=geoda_quads)
-
-
-def _test():
-    import doctest
-    # the following line could be used to define an alternative to the
-    # '<BLANKLINE>' flag
-    # doctest.BLANKLINE_MARKER = 'something better than <BLANKLINE>'
-    start_suppress = np.get_printoptions()['suppress']
-    np.set_printoptions(suppress=True)
-    doctest.testmod()
-    np.set_printoptions(suppress=start_suppress)
-
-if __name__ == '__main__':
-    _test()
diff --git a/pysal/esda/smoothing.py b/pysal/esda/smoothing.py
index 6774a83..4bd9f90 100644
--- a/pysal/esda/smoothing.py
+++ b/pysal/esda/smoothing.py
@@ -151,7 +151,7 @@ def sum_by_n(d, w, n):
 
     """
     t = len(d)
-    h = t / n
+    h = t // n #must be floor!
     d = d * w
     return np.array([sum(d[i: i + h]) for i in range(0, t, h)])
 
@@ -205,7 +205,7 @@ def crude_age_standardization(e, b, n):
     """
     r = e * 1.0 / b
     b_by_n = sum_by_n(b, 1.0, n)
-    age_weight = b * 1.0 / b_by_n.repeat(len(e) / n)
+    age_weight = b * 1.0 / b_by_n.repeat(len(e) // n)
     return sum_by_n(r, age_weight, n)
 
 
@@ -269,13 +269,13 @@ def direct_age_standardization(e, b, s, n, alpha=0.05):
     [0.023744019138755977, 0.026650717703349279]
 
     """
-    age_weight = (1.0 / b) * (s * 1.0 / sum_by_n(s, 1.0, n).repeat(len(s) / n))
+    age_weight = (1.0 / b) * (s * 1.0 / sum_by_n(s, 1.0, n).repeat(len(s) // n))
     adjusted_r = sum_by_n(e, age_weight, n)
     var_estimate = sum_by_n(e, np.square(age_weight), n)
     g_a = np.square(adjusted_r) / var_estimate
     g_b = var_estimate / adjusted_r
-    k = [age_weight[i:i + len(b) / n].max() for i in range(0, len(b),
-                                                           len(b) / n)]
+    k = [age_weight[i:i + len(b) // n].max() for i in range(0, len(b),
+                                                           len(b) // n)]
     g_a_k = np.square(adjusted_r + k) / (var_estimate + np.square(k))
     g_b_k = (var_estimate + np.square(k)) / (adjusted_r + k)
     summed_b = sum_by_n(b, 1.0, n)
@@ -902,7 +902,7 @@ class Age_Adjusted_Smoother:
     """
     def __init__(self, e, b, w, s, alpha=0.05):
         t = len(e)
-        h = t / w.n
+        h = t // w.n
         w.transform = 'b'
         e_n, b_n = [], []
         for i in range(h):
@@ -1194,8 +1194,8 @@ class Spatial_Filtering:
         data_tree = KDTree(data)
         x_range = bbox[1][0] - bbox[0][0]
         y_range = bbox[1][1] - bbox[0][1]
-        x, y = np.mgrid[bbox[0][0]:bbox[1][0]:x_range / x_grid,
-                        bbox[0][1]:bbox[1][1]:y_range / y_grid]
+        x, y = np.mgrid[bbox[0][0]:bbox[1][0]:x_range // x_grid,
+                        bbox[0][1]:bbox[1][1]:y_range // y_grid]
         self.grid = zip(x.ravel(), y.ravel())
         self.r = []
         if r is None and pop is None:
diff --git a/pysal/esda/tests/test_mapclassify.py b/pysal/esda/tests/test_mapclassify.py
index 0bca060..d8ebc7e 100644
--- a/pysal/esda/tests/test_mapclassify.py
+++ b/pysal/esda/tests/test_mapclassify.py
@@ -109,7 +109,7 @@ class TestNaturalBreaks(unittest.TestCase):
         self.assertEquals(nb.k, 5)
         self.assertEquals(len(nb.counts), 5)
         np.testing.assert_array_almost_equal(
-            nb.counts, np.array([14, 13, 14, 10, 7]))
+            nb.counts, np.array([41, 9, 6, 1, 1]))
 
     def test_Natural_Breaks_stability(self):
         for i in range(10):
@@ -125,6 +125,23 @@ class TestNaturalBreaks(unittest.TestCase):
             self.assertEquals(len(nb.counts), 5)
 
 
+
+class TestHeadTailBreaks(unittest.TestCase):
+    def setUp(self):
+        x = range(1,1000)
+        y = []
+        for i in x:
+            y.append(i**(-2))
+        self.V = np.array(y)
+
+    def test_HeadTail_Breaks(self):
+        htb = HeadTail_Breaks(self.V)
+        self.assertEquals(htb.k, 4)
+        self.assertEquals(len(htb.counts), 4)
+        np.testing.assert_array_almost_equal(
+            htb.counts, np.array([975,  21,   2,   1]))
+
+
 class TestMapClassifier(unittest.TestCase):
     def test_Map_Classifier(self):
         # map__classifier = Map_Classifier(y)
diff --git a/pysal/esda/tests/test_moran.py b/pysal/esda/tests/test_moran.py
index 9701c75..f61e962 100644
--- a/pysal/esda/tests/test_moran.py
+++ b/pysal/esda/tests/test_moran.py
@@ -13,7 +13,7 @@ class Moran_Tester(unittest.TestCase):
     def test_moran(self):
         mi = moran.Moran(self.y, self.w, two_tailed=False)
         self.assertAlmostEquals(mi.I, 0.24365582621771659, 7)
-        self.assertAlmostEquals(mi.p_norm,0.00013573931385468807)
+        self.assertAlmostEquals(mi.p_norm, 0.00013573931385468807)
 
     def test_sids(self):
         w = pysal.open(pysal.examples.get_path("sids2.gal")).read()
@@ -67,6 +67,23 @@ class Moran_Local_Tester(unittest.TestCase):
         self.assertAlmostEquals(lm.VI_sim, 0.2067126047680822)
 
 
+class Moran_Local_BV_Tester(unittest.TestCase):
+    def setUp(self):
+        np.random.seed(10)
+        self.w = pysal.open(pysal.examples.get_path("sids2.gal")).read()
+        f = pysal.open(pysal.examples.get_path("sids2.dbf"))
+        self.x = np.array(f.by_col['SIDR79'])
+        self.y = np.array(f.by_col['SIDR74'])
+
+    def test_Moran_Local_BV(self):
+        lm = moran.Moran_Local_BV(self.x, self.y, self.w,
+                                  transformation="r", permutations=99)
+        self.assertAlmostEquals(lm.Is[0], 1.4649221250620736)
+        self.assertAlmostEquals(lm.z_sim[0], 2.9246889997781773)
+        self.assertAlmostEquals(lm.p_z_sim[0], 0.0017240031348827456)
+        self.assertAlmostEquals(lm.VI_sim, 0.24983591065175745)
+
+
 class Moran_Local_Rate_Tester(unittest.TestCase):
     def setUp(self):
         np.random.seed(10)
@@ -84,7 +101,9 @@ class Moran_Local_Rate_Tester(unittest.TestCase):
 
 
 suite = unittest.TestSuite()
-test_classes = [Moran_Tester, Moran_BV_matrix_Tester, Moran_Local_Tester]
+test_classes = [Moran_Tester, Moran_Rate_Tester, 
+                Moran_BV_matrix_Tester, Moran_Local_Tester,
+                Moran_Local_BV_Tester, Moran_Local_Rate_Tester]
 for i in test_classes:
     a = unittest.TestLoader().loadTestsFromTestCase(i)
     suite.addTest(a)
diff --git a/pysal/examples/10740/10740.dbf b/pysal/examples/10740/10740.dbf
new file mode 100644
index 0000000..4dc3bd5
Binary files /dev/null and b/pysal/examples/10740/10740.dbf differ
diff --git a/pysal/examples/10740/10740.shp b/pysal/examples/10740/10740.shp
new file mode 100644
index 0000000..34ee937
Binary files /dev/null and b/pysal/examples/10740/10740.shp differ
diff --git a/pysal/examples/10740/10740.shx b/pysal/examples/10740/10740.shx
new file mode 100644
index 0000000..9f72583
Binary files /dev/null and b/pysal/examples/10740/10740.shx differ
diff --git a/pysal/examples/10740/10740_queen.gal b/pysal/examples/10740/10740_queen.gal
new file mode 100644
index 0000000..72047ac
--- /dev/null
+++ b/pysal/examples/10740/10740_queen.gal
@@ -0,0 +1,391 @@
+195
+1 7
+84 7 6 5 2 86 102
+2 6
+84 5 4 3 1 86
+3 7
+84 83 14 11 5 4 2
+4 8
+15 14 11 8 7 5 2 3
+5 7
+8 7 6 1 2 3 4
+6 6
+19 10 7 1 5 102
+7 7
+10 9 8 1 4 5 6
+8 7
+15 14 10 9 4 5 7
+9 7
+21 20 17 15 10 7 8
+10 7
+21 20 19 6 7 8 9
+11 8
+84 83 78 14 13 12 3 4
+12 8
+80 78 27 24 13 11 14 83
+13 8
+28 27 24 16 11 12 14 15
+14 8
+16 15 3 4 8 11 13 12
+15 9
+21 18 17 16 4 8 9 14 13
+16 7
+28 27 18 13 14 15 17
+17 9
+38 37 34 22 21 18 9 15 16
+18 6
+31 28 15 16 17 34
+19 7
+42 41 23 20 6 10 102
+20 6
+23 22 21 9 10 19
+21 7
+23 22 9 10 20 15 17
+22 5
+37 23 20 21 17
+23 7
+42 41 37 19 20 21 22
+24 8
+98 80 78 27 26 25 12 13
+25 6
+98 80 74 27 26 24
+26 6
+74 29 28 27 24 25
+27 8
+29 28 12 13 16 24 25 26
+28 8
+31 29 13 16 18 26 27 34
+29 6
+74 31 30 26 27 28
+30 10
+74 68 59 58 57 56 33 32 31 29
+31 7
+74 32 18 28 29 30 34
+32 6
+56 36 33 30 31 34
+33 9
+56 50 49 48 47 36 30 32 34
+34 10
+38 37 36 35 17 33 32 31 28 18
+35 4
+46 36 34 38
+36 7
+48 47 46 32 33 34 35
+37 7
+42 39 38 22 23 17 34
+38 8
+46 45 44 39 37 17 34 35
+39 8
+45 44 43 42 41 37 40 38
+40 7
+45 44 43 41 104 102 39
+41 6
+42 19 23 39 40 102
+42 5
+19 23 37 39 41
+43 3
+44 39 40
+44 5
+45 40 39 43 38
+45 13
+105 51 50 49 48 47 46 40 44 104 139 39 38
+46 5
+48 35 36 38 45
+47 5
+49 48 33 36 45
+48 5
+33 36 45 46 47
+49 5
+56 50 33 45 47
+50 5
+56 51 33 45 49
+51 7
+105 56 55 54 52 45 50
+52 4
+105 54 53 51
+53 7
+106 62 61 60 52 54 105
+54 7
+60 59 58 55 51 52 53
+55 6
+59 58 57 56 51 54
+56 8
+57 30 32 33 49 50 51 55
+57 4
+58 30 56 55
+58 5
+59 30 57 54 55
+59 8
+74 68 67 60 30 58 54 55
+60 5
+67 61 53 54 59
+61 7
+67 66 65 63 62 53 60
+62 9
+114 107 106 65 64 63 53 61 105
+63 8
+133 132 114 70 65 64 61 62
+64 4
+114 107 62 63
+65 9
+132 70 69 67 66 61 62 63 68
+66 3
+67 61 65
+67 6
+59 60 61 65 66 68
+68 7
+74 73 69 30 59 67 65
+69 5
+71 70 65 68 73
+70 5
+132 71 63 65 69
+71 7
+132 125 69 70 72 73 76
+72 5
+76 75 74 73 71
+73 5
+74 68 72 71 69
+74 12
+99 98 75 25 26 29 30 31 59 68 72 73
+75 5
+99 77 76 72 74
+76 7
+132 125 122 77 72 75 71
+77 7
+125 122 119 99 140 75 76
+78 10
+98 90 89 80 11 12 24 81 82 83
+79 5
+97 95 88 87 81
+80 5
+98 12 24 25 78
+81 10
+95 94 93 92 91 89 88 82 79 78
+82 6
+93 89 84 83 81 78
+83 7
+93 84 3 11 82 78 12
+84 9
+93 92 1 2 3 86 11 82 83
+85 6
+140 96 94 86 102 147
+86 8
+94 92 91 85 102 84 2 1
+87 5
+99 88 79 97 140
+88 7
+99 90 89 79 81 87 97
+89 5
+90 78 81 82 88
+90 5
+99 98 78 88 89
+91 5
+95 94 92 86 81
+92 5
+93 84 86 91 81
+93 5
+84 92 81 82 83
+94 6
+96 95 85 86 91 81
+95 6
+97 96 91 94 79 81
+96 5
+140 97 85 94 95
+97 6
+140 95 96 79 88 87
+98 7
+99 24 25 78 80 90 74
+99 8
+87 88 90 98 74 75 140 77
+100 3
+147 102 101
+101 3
+103 102 100
+102 12
+100 101 103 104 147 86 85 41 40 19 6 1
+103 4
+172 104 101 102
+104 8
+171 139 174 172 103 102 45 40
+105 11
+138 113 112 109 106 45 51 139 52 62 53
+106 7
+110 109 108 107 53 62 105
+107 7
+135 114 110 108 62 64 106
+108 7
+135 118 117 112 110 106 107
+109 4
+112 110 105 106
+110 5
+112 108 109 106 107
+111 3
+138 118 113
+112 6
+118 113 105 108 109 110
+113 5
+138 118 105 111 112
+114 10
+135 134 133 132 116 115 62 63 64 107
+115 5
+116 114 117 134 136
+116 4
+117 135 114 115
+117 6
+136 135 118 108 116 115
+118 7
+138 136 108 111 112 113 117
+119 8
+161 154 150 149 122 120 140 77
+120 6
+154 123 122 121 119 161
+121 7
+154 144 136 124 123 120 156
+122 9
+136 126 125 124 123 76 77 119 120
+123 4
+124 120 121 122
+124 4
+136 123 121 122
+125 8
+132 131 128 126 71 76 122 77
+126 5
+136 128 127 125 122
+127 4
+136 129 128 126
+128 6
+131 130 129 125 126 127
+129 6
+136 134 131 130 127 128
+130 3
+131 128 129
+131 7
+134 133 132 125 128 129 130
+132 9
+133 63 65 70 71 76 125 131 114
+133 5
+134 63 131 132 114
+134 6
+136 129 131 114 133 115
+135 5
+108 117 107 114 116
+136 16
+170 144 141 138 137 117 118 126 127 129 122 134 121 124 156 115
+137 5
+177 141 138 178 136
+138 11
+182 178 177 139 179 105 111 113 118 136 137
+139 7
+179 171 104 174 138 105 45
+140 10
+165 149 85 96 97 147 119 99 87 77
+141 4
+170 136 137 144
+142 5
+156 144 143 145 167
+143 2
+145 142
+144 8
+170 169 168 121 156 136 142 141
+145 10
+163 162 156 155 151 148 147 146 143 142
+146 3
+147 145 163
+147 9
+165 163 148 100 145 146 140 102 85
+148 5
+166 165 151 147 145
+149 5
+151 150 140 165 119
+150 5
+161 152 151 119 149
+151 8
+155 152 148 165 166 149 150 145
+152 7
+161 160 159 155 153 151 150
+153 6
+160 157 154 152 155 156
+154 9
+160 158 157 119 120 153 161 121 156
+155 6
+157 156 151 152 145 153
+156 10
+158 157 155 145 142 154 153 144 136 121
+157 5
+158 153 155 154 156
+158 3
+157 154 156
+159 3
+160 152 161
+160 5
+152 153 159 161 154
+161 7
+119 150 152 160 159 154 120
+162 2
+163 145
+163 4
+162 147 145 146
+164 0
+
+165 6
+166 140 147 148 151 149
+166 3
+148 165 151
+167 1
+142
+168 2
+169 144
+169 2
+144 168
+170 3
+136 141 144
+171 5
+180 179 104 174 139
+172 4
+173 174 104 103
+173 3
+175 174 172
+174 12
+194 184 183 180 179 176 175 173 172 171 139 104
+175 3
+176 174 173
+176 3
+194 175 174
+177 5
+187 138 178 137 195
+178 6
+187 186 182 138 177 137
+179 7
+182 181 180 171 174 139 138
+180 5
+183 181 171 174 179
+181 7
+189 186 185 182 179 180 183
+182 5
+186 179 181 138 178
+183 5
+185 184 174 180 181
+184 5
+193 185 174 183 194
+185 7
+193 191 189 186 183 184 181
+186 7
+189 188 187 185 181 182 178
+187 5
+195 188 186 178 177
+188 4
+195 186 189 187
+189 7
+195 191 190 185 186 181 188
+190 3
+195 191 189
+191 7
+195 192 193 194 185 189 190
+192 4
+195 191 193 194
+193 5
+194 184 185 192 191
+194 6
+176 174 193 192 191 184
+195 7
+191 192 189 190 188 187 177
diff --git a/pysal/examples/10740/10740_rook.gal b/pysal/examples/10740/10740_rook.gal
new file mode 100644
index 0000000..90f3237
--- /dev/null
+++ b/pysal/examples/10740/10740_rook.gal
@@ -0,0 +1,391 @@
+195
+1 5
+6 5 2 86 102
+2 4
+84 5 3 1
+3 4
+84 11 4 2
+4 4
+14 8 5 3
+5 4
+7 1 2 4
+6 5
+19 10 7 1 102
+7 4
+10 8 5 6
+8 4
+15 9 4 7
+9 4
+21 15 10 8
+10 5
+20 19 6 7 9
+11 4
+83 14 12 3
+12 4
+78 24 13 11
+13 4
+27 16 12 14
+14 4
+15 4 11 13
+15 5
+17 16 8 9 14
+16 4
+28 18 13 15
+17 6
+37 34 22 21 18 15
+18 4
+28 16 17 34
+19 6
+41 23 20 6 10 102
+20 4
+23 21 10 19
+21 4
+22 9 20 17
+22 4
+37 23 21 17
+23 5
+42 37 19 20 22
+24 4
+80 27 25 12
+25 4
+98 74 26 24
+26 4
+74 29 27 25
+27 4
+28 13 24 26
+28 5
+31 29 16 18 27
+29 4
+74 31 26 28
+30 7
+74 59 58 57 56 32 31
+31 5
+32 28 29 30 34
+32 4
+33 30 31 34
+33 5
+56 49 47 36 32
+34 7
+38 36 35 17 32 31 18
+35 4
+46 36 34 38
+36 5
+48 46 33 34 35
+37 6
+42 39 38 22 23 17
+38 6
+46 45 39 37 34 35
+39 7
+44 43 42 41 37 40 38
+40 7
+45 44 43 41 104 102 39
+41 5
+42 19 39 40 102
+42 4
+23 37 39 41
+43 3
+44 39 40
+44 4
+45 40 39 43
+45 12
+105 51 50 49 48 47 46 40 44 104 139 38
+46 5
+48 35 36 38 45
+47 4
+49 48 33 45
+48 4
+36 45 46 47
+49 4
+50 33 45 47
+50 4
+56 51 45 49
+51 7
+105 56 55 54 52 45 50
+52 4
+105 54 53 51
+53 6
+62 61 60 52 54 105
+54 6
+60 59 55 51 52 53
+55 5
+58 57 56 51 54
+56 6
+57 30 33 50 51 55
+57 4
+58 30 56 55
+58 4
+59 30 57 55
+59 6
+68 67 60 30 58 54
+60 5
+67 61 53 54 59
+61 6
+67 66 65 62 53 60
+62 6
+107 106 64 63 53 61
+63 5
+132 114 65 64 62
+64 3
+114 62 63
+65 7
+70 69 67 66 61 63 68
+66 3
+67 61 65
+67 6
+59 60 61 65 66 68
+68 6
+74 73 69 59 67 65
+69 5
+71 70 65 68 73
+70 4
+132 71 65 69
+71 6
+132 69 70 72 73 76
+72 5
+76 75 74 73 71
+73 5
+74 68 72 71 69
+74 10
+99 98 75 25 26 29 30 68 72 73
+75 5
+99 77 76 72 74
+76 5
+125 77 72 75 71
+77 6
+122 119 99 140 75 76
+78 7
+98 90 89 80 12 82 83
+79 4
+97 95 88 81
+80 3
+98 24 78
+81 8
+95 93 92 91 89 88 82 79
+82 4
+93 83 81 78
+83 4
+84 11 82 78
+84 6
+93 92 2 3 86 83
+85 6
+140 96 94 86 102 147
+86 7
+94 92 91 85 102 84 1
+87 4
+99 88 97 140
+88 6
+99 90 89 79 81 87
+89 4
+90 78 81 88
+90 5
+99 98 78 88 89
+91 4
+94 92 86 81
+92 5
+93 84 86 91 81
+93 4
+84 92 81 82
+94 5
+96 95 85 86 91
+95 5
+97 96 94 79 81
+96 5
+140 97 85 94 95
+97 5
+140 95 96 79 87
+98 6
+99 25 78 80 90 74
+99 8
+87 88 90 98 74 75 140 77
+100 3
+147 102 101
+101 3
+103 102 100
+102 12
+100 101 103 104 147 86 85 41 40 19 6 1
+103 4
+172 104 101 102
+104 7
+139 174 172 103 102 45 40
+105 10
+138 113 112 109 106 45 51 139 52 53
+106 5
+110 109 107 62 105
+107 5
+135 114 108 62 106
+108 6
+135 118 117 112 110 107
+109 4
+112 110 105 106
+110 4
+112 108 109 106
+111 3
+138 118 113
+112 6
+118 113 105 108 109 110
+113 5
+138 118 105 111 112
+114 8
+135 134 133 116 115 63 64 107
+115 5
+116 114 117 134 136
+116 4
+117 135 114 115
+117 6
+136 135 118 108 116 115
+118 7
+138 136 108 111 112 113 117
+119 7
+161 150 149 122 120 140 77
+120 4
+154 122 121 119
+121 6
+154 136 124 123 120 156
+122 8
+136 126 125 124 123 77 119 120
+123 3
+124 121 122
+124 4
+136 123 121 122
+125 6
+132 131 128 126 76 122
+126 5
+136 128 127 125 122
+127 4
+136 129 128 126
+128 6
+131 130 129 125 126 127
+129 6
+136 134 131 130 127 128
+130 3
+131 128 129
+131 7
+134 133 132 125 128 129 130
+132 6
+133 63 70 71 125 131
+133 4
+134 131 132 114
+134 6
+136 129 131 114 133 115
+135 5
+108 117 107 114 116
+136 15
+170 144 141 138 137 117 118 126 127 129 122 134 121 124 115
+137 4
+177 141 138 136
+138 10
+182 178 139 179 105 111 113 118 136 137
+139 6
+179 171 104 138 105 45
+140 10
+165 149 85 96 97 147 119 99 87 77
+141 4
+170 136 137 144
+142 5
+156 144 143 145 167
+143 2
+145 142
+144 7
+170 169 168 156 136 142 141
+145 10
+163 162 156 155 151 148 147 146 143 142
+146 3
+147 145 163
+147 9
+165 163 148 100 145 146 140 102 85
+148 5
+166 165 151 147 145
+149 5
+151 150 140 165 119
+150 5
+161 152 151 119 149
+151 8
+155 152 148 165 166 149 150 145
+152 7
+161 160 159 155 153 151 150
+153 5
+160 157 154 152 155
+154 8
+160 158 157 120 153 161 121 156
+155 5
+156 151 152 145 153
+156 8
+158 157 155 145 142 154 144 121
+157 4
+158 153 154 156
+158 3
+157 154 156
+159 3
+160 152 161
+160 5
+152 153 159 161 154
+161 6
+119 150 152 160 159 154
+162 2
+163 145
+163 4
+162 147 145 146
+164 0
+
+165 6
+166 140 147 148 151 149
+166 3
+148 165 151
+167 1
+142
+168 2
+169 144
+169 2
+144 168
+170 3
+136 141 144
+171 3
+179 174 139
+172 4
+173 174 104 103
+173 3
+175 174 172
+174 10
+194 184 183 180 176 175 173 172 171 104
+175 3
+176 174 173
+176 3
+194 175 174
+177 4
+187 178 137 195
+178 5
+187 186 182 138 177
+179 6
+182 181 180 171 139 138
+180 4
+183 181 174 179
+181 6
+186 185 182 179 180 183
+182 5
+186 179 181 138 178
+183 5
+185 184 174 180 181
+184 5
+193 185 174 183 194
+185 6
+193 191 189 183 184 181
+186 6
+189 188 187 181 182 178
+187 5
+195 188 186 178 177
+188 4
+195 186 189 187
+189 6
+195 191 190 185 186 188
+190 3
+195 191 189
+191 6
+195 192 193 185 189 190
+192 3
+195 191 194
+193 4
+194 184 185 191
+194 5
+176 174 193 192 184
+195 7
+191 192 189 190 188 187 177
diff --git a/pysal/examples/10740/README.md b/pysal/examples/10740/README.md
new file mode 100644
index 0000000..ef6eccc
--- /dev/null
+++ b/pysal/examples/10740/README.md
@@ -0,0 +1,13 @@
+10740
+=====
+
+Albuquerque Census 2000 Tract Data
+----------------------------------
+
+Albuquerque, New Mexico, 2000 Census Tracts (n = 141)
+
+* 10740.dbf: attribute database file
+* 10740.shp: shapefile
+* 10740.shx: spatial index
+* 10740_queen.gal: queen contiguity GAL format
+* 10740_rook.gal: rook contiguity GAL format
diff --git a/pysal/examples/Line/Line.dbf b/pysal/examples/Line/Line.dbf
new file mode 100644
index 0000000..b3f7f90
Binary files /dev/null and b/pysal/examples/Line/Line.dbf differ
diff --git a/pysal/examples/Line/Line.prj b/pysal/examples/Line/Line.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/pysal/examples/Line/Line.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/pysal/examples/Line/Line.shp b/pysal/examples/Line/Line.shp
new file mode 100644
index 0000000..6e27301
Binary files /dev/null and b/pysal/examples/Line/Line.shp differ
diff --git a/pysal/examples/Line/Line.shx b/pysal/examples/Line/Line.shx
new file mode 100644
index 0000000..b27a051
Binary files /dev/null and b/pysal/examples/Line/Line.shx differ
diff --git a/pysal/examples/Line/README.md b/pysal/examples/Line/README.md
new file mode 100644
index 0000000..ea83d38
--- /dev/null
+++ b/pysal/examples/Line/README.md
@@ -0,0 +1,7 @@
+Point
+=====
+
+Point Shapefile
+---------------
+
+Used for testing
diff --git a/pysal/examples/Point/Point.dbf b/pysal/examples/Point/Point.dbf
new file mode 100644
index 0000000..13e7563
Binary files /dev/null and b/pysal/examples/Point/Point.dbf differ
diff --git a/pysal/examples/Point/Point.prj b/pysal/examples/Point/Point.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/pysal/examples/Point/Point.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/pysal/examples/Point/Point.shp b/pysal/examples/Point/Point.shp
new file mode 100644
index 0000000..846c2b3
Binary files /dev/null and b/pysal/examples/Point/Point.shp differ
diff --git a/pysal/examples/Point/Point.shx b/pysal/examples/Point/Point.shx
new file mode 100644
index 0000000..8a9f027
Binary files /dev/null and b/pysal/examples/Point/Point.shx differ
diff --git a/pysal/examples/Polygon/Polygon.dbf b/pysal/examples/Polygon/Polygon.dbf
new file mode 100644
index 0000000..d925117
Binary files /dev/null and b/pysal/examples/Polygon/Polygon.dbf differ
diff --git a/pysal/examples/Polygon/Polygon.prj b/pysal/examples/Polygon/Polygon.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/pysal/examples/Polygon/Polygon.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/pysal/examples/Polygon/Polygon.shp b/pysal/examples/Polygon/Polygon.shp
new file mode 100644
index 0000000..3ad50c2
Binary files /dev/null and b/pysal/examples/Polygon/Polygon.shp differ
diff --git a/pysal/examples/Polygon/Polygon.shx b/pysal/examples/Polygon/Polygon.shx
new file mode 100644
index 0000000..eb12139
Binary files /dev/null and b/pysal/examples/Polygon/Polygon.shx differ
diff --git a/pysal/examples/Polygon/README.md b/pysal/examples/Polygon/README.md
new file mode 100644
index 0000000..3f3a53b
--- /dev/null
+++ b/pysal/examples/Polygon/README.md
@@ -0,0 +1,7 @@
+Polygon
+=======
+
+Polygon Shapefile
+-----------------
+
+Used for testing
diff --git a/pysal/examples/README.txt b/pysal/examples/README.txt
new file mode 100644
index 0000000..11d7482
--- /dev/null
+++ b/pysal/examples/README.txt
@@ -0,0 +1,5 @@
+Documentation for all example data sets for PySAL can be found at
+
+http://pysal.org/users/tutorials/examples.html
+
+If you obtained this example data by downloading it as a separate zip file, it should be unzipped in the pysal directory, so that the path to the data herein would be like pysal/examples/rook31.dbf, for example. 
diff --git a/pysal/examples/__init__.py b/pysal/examples/__init__.py
new file mode 100644
index 0000000..7cd42bd
--- /dev/null
+++ b/pysal/examples/__init__.py
@@ -0,0 +1,77 @@
+import os
+import pysal
+
+__all__ = ['get_path']
+
+base = os.path.split(pysal.__file__)[0]
+example_dir = os.path.join(base, "examples")
+dirs = next(os.walk(example_dir))[1]
+file_2_dir = {}
+
+for d in dirs:
+    tmp = os.path.join(example_dir, d)
+    files_in_tmp = os.listdir(tmp)
+    for f in files_in_tmp:
+        file_2_dir[f] = tmp
+
+
+def get_path(example_name):
+    """
+    Get path of PySAL or example folders
+    """
+    if type(example_name) != str:
+        try:
+            example_name = str(example_name)
+        except:
+            raise KeyError('Cannot coerce requested example name to string')
+    if example_name in dirs:
+        return os.path.join(example_dir, example_name, example_name)
+    elif example_name in file_2_dir:
+        d = file_2_dir[example_name]
+        return os.path.join(d, example_name)
+    elif example_name == "":
+        return os.path.join(base, 'examples', example_name)
+    else:
+        raise KeyError(example_name + ' not found in PySAL built-in examples.')
+
+
+def available(verbose=False):
+    """
+    List available datasets in pysal.examples
+    """
+    base = get_path('')
+    examples = [os.path.join(get_path(''), d) for d in os.listdir(base)]
+    examples = [d for d in examples if os.path.isdir(d) and '__' not in d]
+    if not verbose:
+        return [os.path.split(d)[-1] for d in examples]
+    examples = [os.path.join(dty, 'README.md') for dty in examples]
+    descs = [_read_example(path) for path in examples]
+    return [{desc['name']:desc['description'] for desc in descs}]
+
+
+def _read_example(pth):
+    try:
+        with open(pth, 'r') as io:
+            title = io.readline().strip('\n')
+            io.readline()  # titling
+            io.readline()  # pad
+            short = io.readline().strip('\n')
+            io.readline()  # subtitling
+            io.readline()  # pad
+            rest = io.readlines()
+            rest = [l.strip('\n') for l in rest if l.strip('\n') != '']
+            d = {'name': title, 'description': short, 'explanation': rest}
+    except IOError:
+        basename = os.path.split(pth)[-2]
+        dirname = os.path.split(basename)[-1]
+        d = {'name': dirname, 'description': None, 'explanation': None}
+    return d
+
+
+def explain(name):  # would be nice to use pandas for display here
+    """
+    Explain a dataset by name
+    """
+    path = os.path.split(pysal.examples.get_path(name))[0]
+    fpath = os.path.join(path, 'README.md')
+    return _read_example(fpath)
diff --git a/pysal/examples/arcgis/README.md b/pysal/examples/arcgis/README.md
new file mode 100644
index 0000000..8204b83
--- /dev/null
+++ b/pysal/examples/arcgis/README.md
@@ -0,0 +1,7 @@
+arcgis
+======
+
+arcgis testing files
+--------------------
+
+Files used for internal testing
diff --git a/pysal/examples/arcgis/arcgis_ohio.dbf b/pysal/examples/arcgis/arcgis_ohio.dbf
new file mode 100644
index 0000000..34cef0a
Binary files /dev/null and b/pysal/examples/arcgis/arcgis_ohio.dbf differ
diff --git a/pysal/examples/arcgis/arcgis_txt.txt b/pysal/examples/arcgis/arcgis_txt.txt
new file mode 100644
index 0000000..1063e70
--- /dev/null
+++ b/pysal/examples/arcgis/arcgis_txt.txt
@@ -0,0 +1,9 @@
+StationID
+1  1   0.0
+1  2   0.1
+1  3   0.14286
+2  1   0.1
+2  3   0.05
+3  1   0.16667
+3  2   0.06667
+3  3   0.0
\ No newline at end of file
diff --git a/pysal/examples/baltim/README.md b/pysal/examples/baltim/README.md
new file mode 100644
index 0000000..00949c5
--- /dev/null
+++ b/pysal/examples/baltim/README.md
@@ -0,0 +1,16 @@
+baltim
+======
+
+Baltimore house sales prices and hedonics
+-----------------------------------------
+
+* baltim.dbf attribute data
+* baltim.shp shape file
+* baltim.shx spatial index file
+* baltim.tri.k12.kwt Kernel weights using a triangular kernel with 12 neares
+  neighbors
+* baltim_k4.gwt Nearest neighbor weights (4nn)
+* baltim_q.gal Queen contiguity file
+* baltimore.geojson
+
+Point data, n=211, k= 17.
diff --git a/pysal/examples/baltim/baltim.dbf b/pysal/examples/baltim/baltim.dbf
new file mode 100644
index 0000000..be9d815
Binary files /dev/null and b/pysal/examples/baltim/baltim.dbf differ
diff --git a/pysal/examples/baltim/baltim.shp b/pysal/examples/baltim/baltim.shp
new file mode 100644
index 0000000..f867886
Binary files /dev/null and b/pysal/examples/baltim/baltim.shp differ
diff --git a/pysal/examples/baltim/baltim.shx b/pysal/examples/baltim/baltim.shx
new file mode 100644
index 0000000..8414722
Binary files /dev/null and b/pysal/examples/baltim/baltim.shx differ
diff --git a/pysal/examples/baltim/baltim.tri.k12.kwt b/pysal/examples/baltim/baltim.tri.k12.kwt
new file mode 100644
index 0000000..1343b39
--- /dev/null
+++ b/pysal/examples/baltim/baltim.tri.k12.kwt
@@ -0,0 +1,2744 @@
+0 211 baltim.shp STATION
+1 1      1
+1 16 0.361123
+1 63 0.0564398
+1 89 0.0852681
+1 90 0.335676
+1 91 0.271569
+1 93 0.117922
+1 96 0.484921
+1 132  1E-07
+1 133 0.313022
+1 173 0.14137
+1 178 0.276841
+1 179 0.00768267
+2 2      1
+2 3 0.375736
+2 4 0.646447
+2 5 0.657003
+2 7 0.616518
+2 11 0.330277
+2 15 0.571254
+2 180 0.462782
+2 181 0.0528682
+2 185 0.577734
+2 190  1E-07
+2 193 0.0412939
+2 195 0.0955584
+3 2 0.495215
+3 3      1
+3 4 0.705826
+3 5 0.495215
+3 7 0.626606
+3 8 0.0342401
+3 11 0.122942
+3 12  1E-07
+3 14 0.153628
+3 15 0.156473
+3 180 0.0665151
+3 185 0.230229
+3 193 0.0342401
+4 2 0.696863
+4 3 0.688075
+4 4      1
+4 5 0.529233
+4 7 0.604075
+4 11 0.161726
+4 14  1E-07
+4 15 0.334235
+4 180 0.286236
+4 181 0.178005
+4 183 0.0136062
+4 185 0.489304
+4 193 0.250225
+5 2 0.633705
+5 3 0.333333
+5 4 0.413642
+5 5      1
+5 7 0.816853
+5 11 0.506861
+5 12 0.0796957
+5 13 0.136095
+5 14 0.26741
+5 15 0.413642
+5 180 0.184788
+5 185 0.200367
+5 195  1E-07
+6 6      1
+6 8 0.595112
+6 10 0.818929
+6 12 0.487853
+6 13 0.0249003
+6 14 0.40219
+6 48 0.282536
+6 53 0.0249003
+6 55  1E-07
+6 58 0.174187
+6 67 0.157969
+6 69 0.0905776
+6 70 0.691646
+7 2    0.6
+7 3 0.518336
+7 4 0.518336
+7 5 0.821115
+7 7      1
+7 8 0.0161302
+7 11 0.348847
+7 12 0.0661907
+7 13  1E-07
+7 14 0.262437
+7 15 0.27889
+7 180 0.0823945
+7 185 0.159762
+8 5 0.191548
+8 6 0.48869
+8 7 0.204588
+8 8      1
+8 10 0.276899
+8 11 0.175537
+8 12 0.771335
+8 13 0.156726
+8 14 0.739282
+8 65  1E-07
+8 67 0.197227
+8 69 0.0592731
+8 70 0.536989
+9 9      1
+9 11 0.260817
+9 13 0.349861
+9 15 0.181402
+9 65 0.186138
+9 68 0.405004
+9 76 0.492327
+9 180 0.030092
+9 192 0.0367581
+9 195 0.659443
+9 209  1E-07
+9 210 0.181402
+9 211 0.425634
+10 6 0.810764
+10 8 0.401584
+10 10      1
+10 12 0.317701
+10 14 0.212906
+10 48 0.435455
+10 53 0.0350828
+10 55 0.0406658
+10 56 0.0538209
+10 58 0.276931
+10 67 0.0476906
+10 69  1E-07
+10 70 0.616827
+11 2 0.133531
+11 5 0.40257
+11 7 0.192344
+11 9 0.192344
+11 11      1
+11 12 0.00772222
+11 13 0.529321
+11 14 0.133531
+11 15 0.33436
+11 65 0.0186353
+11 67 0.0570098
+11 180  1E-07
+11 195 0.175379
+12 5 0.118568
+12 6 0.215536
+12 7 0.0843246
+12 8 0.72265
+12 10  1E-07
+12 11 0.215536
+12 12      1
+12 13 0.245526
+12 14 0.803884
+12 65 0.0625321
+12 67 0.296985
+12 69 0.121846
+12 70 0.466506
+13 5 0.00557117
+13 9 0.325052
+13 11 0.552786
+13 12 0.0932354
+13 13      1
+13 14 0.099383
+13 15  1E-07
+13 65 0.514087
+13 67 0.514087
+13 68 0.208798
+13 69 0.339613
+13 195 0.11651
+13 211 0.150163
+14 2  1E-07
+14 5 0.333333
+14 6 0.129975
+14 7 0.312816
+14 8 0.699537
+14 11 0.349146
+14 12 0.813661
+14 13  0.288
+14 14      1
+14 65 0.0416668
+14 67 0.239655
+14 69 0.0599572
+14 70 0.312816
+15 2 0.484974
+15 4 0.067248
+15 5 0.340445
+15 7 0.169545
+15 9 0.169545
+15 11 0.381969
+15 13 0.0228066
+15 15      1
+15 180 0.686722
+15 182  1E-07
+15 185 0.442914
+15 190 0.195503
+15 195 0.424183
+16 1 0.348538
+16 16      1
+16 17 0.330466
+16 18 0.525169
+16 73 0.227461
+16 74 0.312869
+16 93 0.213847
+16 94 0.0378517
+16 95 0.200464
+16 96 0.399381
+16 135 0.041996
+16 173  1E-07
+16 179 0.41278
+17 16 0.39649
+17 17      1
+17 18 0.80304
+17 72 0.0715234
+17 73 0.350066
+17 74 0.625719
+17 95  1E-07
+17 134 0.425769
+17 135 0.533446
+17 137 0.291371
+17 139 0.439059
+17 173 0.0130158
+17 179 0.702742
+18 16 0.547975
+18 17 0.791987
+18 18      1
+18 72 0.0268016
+18 73 0.440983
+18 74 0.686061
+18 94  1E-07
+18 95 0.131203
+18 134 0.207912
+18 135 0.355124
+18 137 0.0480285
+18 139 0.209431
+18 179 0.643063
+19 19      1
+19 20 0.616518
+19 21 0.667044
+19 22 0.361847
+19 23 0.16931
+19 24 0.339204
+19 25 0.361847
+19 75  1E-07
+19 200 0.27395
+19 203 0.257009
+19 204 0.233035
+19 205 0.00113196
+19 206 0.0205737
+20 19 0.619942
+20 20      1
+20 21 0.466667
+20 22 0.0281748
+20 23  1E-07
+20 24 0.479317
+20 25 0.619942
+20 75 0.00111183
+20 184 0.176727
+20 187 0.119344
+20 191 0.30398
+20 192 0.197227
+20 200 0.514659
+21 19 0.683772
+21 20 0.488899
+21 21      1
+21 22 0.200766
+21 24 0.0852681
+21 25 0.456016
+21 200 0.410985
+21 203 0.494924
+21 204 0.242722
+21 205  1E-07
+21 206 0.175626
+21 207 0.0427506
+21 208 0.0908628
+22 19 0.377159
+22 20 0.0429482
+22 21 0.178679
+22 22      1
+22 23 0.480966
+22 24 0.0750117
+22 72 0.526568
+22 75 0.0785133
+22 203 0.159229
+22 204 0.584773
+22 205 0.49785
+22 206 0.206709
+22 207  1E-07
+23 19 0.178551
+23 20 0.00221494
+23 22 0.474121
+23 23      1
+23 24 0.315145
+23 72 0.670748
+23 73 0.294459
+23 74 0.125079
+23 75 0.556263
+23 94 0.106315
+23 95 0.048755
+23 204 0.053418
+23 205  1E-07
+24 19 0.313901
+24 20 0.454509
+24 21  1E-07
+24 22 0.0159815
+24 23 0.280922
+24 24      1
+24 25 0.0773845
+24 75 0.465804
+24 76 0.161884
+24 184 0.0461887
+24 191 0.280922
+24 192 0.308589
+24 210 0.185497
+25 19 0.390163
+25 20 0.633534
+25 21 0.452655
+25 24 0.150839
+25 25      1
+25 184 0.225937
+25 187 0.357176
+25 191 0.243486
+25 192 0.085245
+25 196  1E-07
+25 200 0.898361
+25 202 0.0368355
+25 208 0.125664
+26 26      1
+26 27 0.463843
+26 30 0.426472
+26 33  1E-07
+26 34 0.0468071
+26 35 0.260639
+26 37 0.907899
+26 38 0.48537
+26 39 0.144789
+26 43 0.17337
+26 46 0.433915
+26 50 0.257459
+26 52 0.0929121
+27 26 0.111093
+27 27      1
+27 28 0.109637
+27 30 0.856037
+27 33 0.2214
+27 34 0.285603
+27 35 0.440115
+27 37 0.0396461
+27 38 0.389216
+27 39 0.468602
+27 43 0.124306
+27 46 0.0275826
+27 50  1E-07
+28 27 0.212161
+28 28      1
+28 29 0.266839
+28 30 0.171991
+28 32 0.636894
+28 33 0.395755
+28 34 0.330466
+28 35 0.55643
+28 36  1E-07
+28 39 0.457674
+28 42 0.027769
+28 153 0.27799
+28 154 0.16225
+29 28 0.281972
+29 29      1
+29 31 0.385645
+29 32 0.49709
+29 33 0.406586
+29 34 0.313839
+29 36 0.325276
+29 39 0.228423
+29 40 0.292893
+29 42 0.762471
+29 78  1E-07
+29 84 0.000934388
+29 86 0.322054
+30 26 0.0378517
+30 27 0.854329
+30 28 0.0531359
+30 30      1
+30 33 0.282652
+30 34 0.362948
+30 35 0.322589
+30 38 0.474774
+30 39 0.514125
+30 43 0.257219
+30 46 0.100545
+30 47  1E-07
+30 50 0.110927
+31 29 0.332951
+31 31      1
+31 32 0.270541
+31 40 0.147319
+31 41 0.251914
+31 42 0.28163
+31 84 0.284766
+31 86 0.553197
+31 153  1E-07
+31 166 0.407617
+31 169 0.20293
+31 170 0.329522
+31 172 0.0409773
+32 28 0.634078
+32 29 0.482508
+32 31 0.308685
+32 32      1
+32 33 0.27239
+32 34 0.178005
+32 35 0.188091
+32 39 0.224425
+32 41 0.163104
+32 42 0.244609
+32 86  1E-07
+32 153 0.391069
+32 154 0.0425586
+33 27 0.136737
+33 28 0.242868
+33 29 0.240768
+33 30 0.213976
+33 32 0.095306
+33 33      1
+33 34 0.873811
+33 35 0.0406346
+33 36 0.479711
+33 39 0.717834
+33 42 0.0658633
+33 43  1E-07
+33 47 0.0813331
+34 27 0.235428
+34 28 0.190194
+34 29 0.152592
+34 30 0.3262
+34 32 0.0134436
+34 33 0.878194
+34 34      1
+34 35 0.0628031
+34 36 0.512775
+34 39 0.756387
+34 42  1E-07
+34 43 0.154344
+34 47 0.206854
+35 26  1E-07
+35 27 0.54325
+35 28 0.591048
+35 30 0.453854
+35 32 0.257219
+35 33 0.294113
+35 34 0.285616
+35 35      1
+35 38 0.0449771
+35 39 0.46825
+35 153 0.0715234
+35 154 0.206709
+35 163  1E-07
+36 29 0.235147
+36 33 0.539023
+36 34 0.552786
+36 36      1
+36 39 0.32918
+36 42 0.236783
+36 43 0.186059
+36 47 0.461484
+36 51 0.0291757
+36 77 0.373502
+36 78  1E-07
+36 79 0.1456
+36 81 0.175379
+37 26 0.910755
+37 27 0.438712
+37 30 0.414028
+37 33  1E-07
+37 34 0.049453
+37 35 0.214625
+37 37      1
+37 38 0.520325
+37 39 0.135253
+37 43 0.217447
+37 46 0.504891
+37 50 0.320333
+37 52 0.201772
+38 26 0.250333
+38 27 0.463344
+38 30 0.54393
+38 33 0.0513168
+38 34 0.1456
+38 37 0.27889
+38 38      1
+38 39 0.193774
+38 43 0.54393
+38 46 0.674424
+38 47 0.193774
+38 50 0.615292
+38 52  1E-07
+39 27 0.420876
+39 28 0.332053
+39 29 0.029671
+39 30 0.476697
+39 32 0.052128
+39 33 0.72265
+39 34 0.751931
+39 35 0.289637
+39 36 0.255792
+39 38  1E-07
+39 39      1
+39 43 0.0570098
+39 47 0.00772222
+40 29 0.121495
+40 31 0.0243198
+40 40      1
+40 42 0.394718
+40 78 0.23085
+40 80 0.114684
+40 81  1E-07
+40 82 0.480125
+40 83 0.0120851
+40 84 0.310221
+40 86 0.469716
+40 87 0.3996
+40 88 0.0197139
+41 31 0.277942
+41 32 0.147653
+41 41      1
+41 153 0.460928
+41 155  1E-07
+41 156 0.110844
+41 158 0.214175
+41 159 0.34628
+41 161 0.586551
+41 166 0.399075
+41 170 0.528596
+41 171 0.0515421
+41 172 0.443377
+42 29 0.732078
+42 31 0.253722
+42 32 0.171964
+42 33 0.17646
+42 34 0.0866774
+42 36 0.240571
+42 40 0.450473
+42 42      1
+42 78 0.1198
+42 81 0.0652475
+42 82  1E-07
+42 84 0.0199516
+42 86 0.355065
+43 27 0.0441862
+43 30 0.198766
+43 33 0.0155531
+43 34 0.137546
+43 36 0.0956212
+43 38 0.433442
+43 39 0.0555556
+43 43      1
+43 46 0.277778
+43 47 0.552097
+43 49 0.130418
+43 50 0.607163
+43 77  1E-07
+44 43 0.0128211
+44 44      1
+44 45 0.570217
+44 47 0.137475
+44 48 0.456363
+44 49 0.534639
+44 50  1E-07
+44 51 0.401701
+44 54 0.140434
+44 56 0.128659
+44 58 0.254739
+44 77 0.250478
+44 79 0.00574911
+45 36 0.0560799
+45 43 0.119272
+45 44 0.448653
+45 45      1
+45 47 0.384001
+45 49 0.488087
+45 51 0.669826
+45 54 0.174566
+45 56 0.0341253
+45 58  1E-07
+45 77 0.585382
+45 79 0.184788
+45 81 0.11098
+46 26 0.280075
+46 27 0.254076
+46 30 0.318136
+46 34  1E-07
+46 37 0.350188
+46 38 0.715759
+46 39 0.0215743
+46 43 0.492435
+46 46      1
+46 47 0.184749
+46 49 0.179159
+46 50 0.726696
+46 52 0.409166
+47 30  1E-07
+47 33 0.161598
+47 34 0.250111
+47 36 0.4453
+47 38 0.0715234
+47 39 0.0786932
+47 43 0.584773
+47 45 0.307103
+47 47      1
+47 49 0.225746
+47 50 0.262595
+47 51 0.16795
+47 77 0.482405
+48 6 0.110657
+48 10 0.330401
+48 44 0.459453
+48 45 0.168474
+48 48      1
+48 49  1E-07
+48 51 0.156444
+48 54 0.14532
+48 55 0.0745687
+48 56 0.258975
+48 57 0.0477391
+48 58 0.52387
+48 70 0.0745687
+49 36 0.0952129
+49 38 0.171509
+49 43 0.444514
+49 44 0.537284
+49 45 0.603225
+49 46 0.253893
+49 47 0.466488
+49 48  1E-07
+49 49      1
+49 50 0.46767
+49 51 0.348515
+49 52 0.224916
+49 77 0.368142
+50 27 0.140079
+50 30 0.244433
+50 34 0.0400751
+50 37  1E-07
+50 38 0.623486
+50 39 0.0125307
+50 43 0.690508
+50 45 0.0212997
+50 46 0.693618
+50 47 0.373326
+50 49 0.343468
+50 50      1
+50 52 0.234359
+51 36  1E-07
+51 44 0.136659
+51 45 0.628609
+51 47 0.16795
+51 49 0.0545377
+51 51      1
+51 54 0.424183
+51 56 0.220624
+51 58 0.0715234
+51 77 0.635822
+51 78 0.0545377
+51 79 0.424183
+51 81 0.330466
+52 26 0.136935
+52 27  1E-07
+52 30 0.0489812
+52 37 0.216205
+52 38 0.346838
+52 43 0.286885
+52 44 0.0648138
+52 45 0.0391629
+52 46 0.557968
+52 47 0.111603
+52 49 0.362037
+52 50 0.489028
+52 52      1
+53 53      1
+53 54 0.197254
+53 55 0.734055
+53 56 0.373161
+53 57 0.634493
+53 58 0.237417
+53 59 0.225911
+53 60 0.623897
+53 65  1E-07
+53 67 0.0483187
+53 69 0.200934
+53 71 0.126914
+53 83 0.0744832
+54 45 0.166667
+54 51 0.483189
+54 53 0.162829
+54 54      1
+54 55 0.437648
+54 56 0.738512
+54 57 0.53775
+54 58 0.415295
+54 77 0.247511
+54 78 0.34628
+54 79 0.53775
+54 81 0.460928
+54 83  1E-07
+55 51  1E-07
+55 53 0.73913
+55 54 0.471064
+55 55      1
+55 56 0.641469
+55 57 0.877025
+55 58 0.443207
+55 59 0.103673
+55 60 0.416678
+55 78 0.0756396
+55 79 0.104728
+55 81 0.0594215
+55 83 0.130435
+56 45 0.00446441
+56 48 0.014583
+56 51 0.285842
+56 53 0.332591
+56 54 0.733037
+56 55 0.610837
+56 56      1
+56 57 0.659687
+56 58 0.622457
+56 77  1E-07
+56 78 0.104577
+56 79 0.262823
+56 81 0.188062
+57 51  1E-07
+57 53 0.609092
+57 54 0.525955
+57 55 0.86592
+57 56 0.658161
+57 57      1
+57 58 0.364001
+57 59 0.0273401
+57 60 0.309779
+57 78 0.125903
+57 79 0.152002
+57 81 0.105573
+57 83 0.141467
+58 10  1E-07
+58 44 0.135954
+58 45 0.0962408
+58 48 0.444825
+58 51 0.254006
+58 53 0.288067
+58 54 0.476576
+58 55 0.470074
+58 56 0.668958
+58 57 0.444825
+58 58      1
+58 79 0.0747086
+58 81  1E-07
+59 53 0.15286
+59 55  1E-07
+59 57 0.00471711
+59 59      1
+59 60 0.512509
+59 61 0.689403
+59 62 0.542385
+59 63 0.105573
+59 64 0.512509
+59 66 0.272393
+59 71 0.340232
+59 80 0.259571
+59 83 0.340232
+60 53 0.577842
+60 55 0.332509
+60 57 0.275602
+60 59    0.5
+60 60      1
+60 61 0.242202
+60 62 0.0560249
+60 64  1E-07
+60 65 0.0339937
+60 66 0.0612839
+60 69 0.190098
+60 71 0.394743
+60 83 0.0826211
+61 59 0.662526
+61 60 0.197227
+61 61      1
+61 62 0.789182
+61 63 0.260255
+61 64 0.619942
+61 66 0.432354
+61 71 0.292893
+61 80 0.0281748
+61 83 0.0513168
+61 92 0.11651
+61 93 0.104021
+61 209  1E-07
+62 59 0.502786
+62 60  1E-07
+62 61 0.789182
+62 62      1
+62 63 0.470325
+62 64 0.764298
+62 66 0.325052
+62 71 0.099383
+62 80 0.0513168
+62 83 0.0281748
+62 91 0.130773
+62 92 0.155081
+62 93 0.28314
+63 1 0.0528083
+63 59 0.0651012
+63 61 0.288363
+63 62 0.490451
+63 63      1
+63 64 0.566802
+63 80  1E-07
+63 88 0.163801
+63 90 0.0930149
+63 91 0.659881
+63 92 0.0247274
+63 93 0.540874
+63 96 0.46103
+64 59 0.498133
+64 61 0.639895
+64 62 0.776672
+64 63 0.573333
+64 64      1
+64 66 0.140841
+64 80 0.293776
+64 83 0.239373
+64 88 0.116513
+64 91 0.300873
+64 92  1E-07
+64 93 0.250936
+64 96 0.057779
+65 9 0.250091
+65 11 0.172412
+65 12  1E-07
+65 13 0.568728
+65 60 0.0917351
+65 65      1
+65 66 0.0176615
+65 67 0.72724
+65 68 0.51486
+65 69 0.761478
+65 71 0.36375
+65 209 0.0356464
+65 211 0.436718
+66 59 0.205002
+66 60  1E-07
+66 61 0.429174
+66 62 0.32127
+66 64 0.0881554
+66 66      1
+66 68 0.227291
+66 71 0.525955
+66 92 0.426719
+66 94 0.0563638
+66 209 0.562952
+66 210 0.0227303
+66 211 0.235625
+67 9 0.0335025
+67 11 0.175379
+67 12 0.222372
+67 13 0.552786
+67 14 0.114828
+67 60  1E-07
+67 65 0.717157
+67 67      1
+67 68 0.216103
+67 69 0.78307
+67 70 0.0732728
+67 71 0.125525
+67 211 0.136355
+68 9 0.361719
+68 13 0.182439
+68 65 0.435184
+68 66 0.205996
+68 67 0.119893
+68 68      1
+68 69 0.200412
+68 71 0.361719
+68 76 0.159541
+68 195  1E-07
+68 209 0.396102
+68 210 0.20899
+68 211 0.906303
+69 9  1E-07
+69 11 0.0135754
+69 12 0.0507248
+69 13 0.406023
+69 53 0.145402
+69 60 0.22831
+69 65 0.758283
+69 67  0.788
+69 68 0.304008
+69 69      1
+69 70  1E-07
+69 71 0.334646
+69 211 0.222508
+70 6 0.586977
+70 8 0.508903
+70 10 0.508903
+70 12 0.533473
+70 13 0.0389957
+70 14 0.367545
+70 48  1E-07
+70 53 0.0513168
+70 58 0.0638
+70 65 0.0474493
+70 67 0.267358
+70 69 0.191043
+70 70      1
+71 53  1E-07
+71 59 0.30949
+71 60 0.382389
+71 61 0.318885
+71 62 0.132488
+71 65 0.30949
+71 66 0.545923
+71 67 0.0847794
+71 68 0.405004
+71 69 0.287447
+71 71      1
+71 209 0.318885
+71 211 0.357839
+72 17 0.0486971
+72 18 0.0558588
+72 22 0.514929
+72 23 0.667044
+72 72      1
+72 73 0.421345
+72 74 0.353044
+72 75 0.247929
+72 94 0.0368792
+72 95 0.0298576
+72 139  1E-07
+72 204 0.138559
+72 205 0.16931
+73 16 0.264565
+73 17 0.313594
+73 18 0.440983
+73 23 0.264565
+73 72 0.403536
+73 73      1
+73 74 0.701768
+73 75 0.0986123
+73 92 0.0959494
+73 93  1E-07
+73 94 0.440983
+73 95 0.50971
+73 179 0.0840622
+74 16 0.332917
+74 17 0.596887
+74 18 0.679844
+74 23 0.0699463
+74 72 0.319927
+74 73 0.695862
+74 74      1
+74 94   0.15
+74 95   0.25
+74 135 0.0944616
+74 137  1E-07
+74 139 0.179939
+74 179 0.32918
+75 19  1E-07
+75 22 0.0558588
+75 23 0.551271
+75 24 0.485504
+75 72 0.247929
+75 73 0.125525
+75 75      1
+75 76 0.132018
+75 92 0.0850662
+75 94 0.233035
+75 95 0.115237
+75 209 0.106332
+75 210 0.419393
+76 9 0.498114
+76 24 0.148272
+76 68 0.225468
+76 75 0.0841448
+76 76      1
+76 184  1E-07
+76 190 0.0745687
+76 191 0.190734
+76 192 0.38943
+76 195 0.447926
+76 209 0.136523
+76 210 0.5511
+76 211 0.29736
+77 34 0.0229389
+77 36 0.403335
+77 43 0.142857
+77 44  1E-07
+77 45 0.568791
+77 47 0.521435
+77 49 0.152167
+77 51 0.663283
+77 54 0.224818
+77 77      1
+77 78 0.152167
+77 79 0.467603
+77 81 0.418736
+78 40 0.260255
+78 42 0.06756
+78 51 0.0324717
+78 54 0.254644
+78 56  1E-07
+78 57 0.0281748
+78 77 0.0616209
+78 78      1
+78 79 0.619942
+78 80 0.150163
+78 81 0.701858
+78 82 0.28314
+78 83 0.232609
+79 36 0.170133
+79 40 0.0178481
+79 45 0.135337
+79 47 0.00947899
+79 51 0.457035
+79 54 0.514357
+79 55  1E-07
+79 56 0.241402
+79 57 0.131256
+79 77 0.457035
+79 78 0.649798
+79 79      1
+79 81 0.902871
+80 40 0.237948
+80 59 0.279984
+80 61 0.130232
+80 62 0.150943
+80 63 0.069666
+80 64 0.332918
+80 78 0.23941
+80 80      1
+80 82 0.683575
+80 83 0.811321
+80 84  1E-07
+80 87 0.476776
+80 88 0.33794
+81 36 0.150597
+81 40 0.0601655
+81 42 0.0323537
+81 45  1E-07
+81 51 0.330466
+81 54 0.399381
+81 56 0.113916
+81 57 0.0282506
+81 77 0.37133
+81 78 0.708657
+81 79 0.896995
+81 81      1
+81 82 0.0106671
+82 40 0.544092
+82 42 0.0340677
+82 64 0.0376608
+82 78 0.346355
+82 79  1E-07
+82 80 0.677624
+82 81 0.0768566
+82 82      1
+82 83 0.556937
+82 84 0.237059
+82 86 0.177623
+82 87 0.658694
+82 88 0.373414
+83 40 0.0223077
+83 57 0.0178057
+83 59 0.262357
+83 60  1E-07
+83 61 0.023813
+83 62  1E-07
+83 64 0.173954
+83 78 0.210361
+83 80 0.78307
+83 82    0.5
+83 83      1
+83 87 0.197357
+83 88 0.0223077
+84 31 0.295541
+84 40 0.40626
+84 42 0.0708147
+84 80  1E-07
+84 82 0.251143
+84 84      1
+84 85 0.418758
+84 86 0.653117
+84 87 0.516745
+84 88 0.394387
+84 89 0.189777
+84 166 0.136342
+84 169 0.479762
+85 84 0.365367
+85 85      1
+85 86 0.0230238
+85 87 0.0720378
+85 88 0.234359
+85 89 0.575299
+85 90 0.322589
+85 131 0.225746
+85 132 0.0503387
+85 133 0.124456
+85 166  1E-07
+85 168 0.0715234
+85 169 0.584773
+86 29 0.24772
+86 31 0.543372
+86 40 0.526376
+86 42 0.365533
+86 82 0.162436
+86 84 0.640067
+86 85 0.0715519
+86 86      1
+86 87 0.30561
+86 88 0.0682037
+86 166 0.14209
+86 169 0.263489
+86 170  1E-07
+87 40 0.460772
+87 78 0.00509982
+87 80 0.454076
+87 82 0.65046
+87 83 0.271599
+87 84 0.495779
+87 85 0.113232
+87 86 0.301753
+87 87      1
+87 88 0.653243
+87 89 0.101293
+87 91 0.0287538
+87 169  1E-07
+88 40 0.00772222
+88 63 0.0851651
+88 64 0.0186353
+88 80 0.221441
+88 82 0.27676
+88 83  1E-07
+88 84 0.28782
+88 85 0.175379
+88 87 0.609182
+88 88      1
+88 89 0.313874
+88 90    0.2
+88 91 0.270406
+89 1 0.0571911
+89 84 0.105815
+89 85 0.570719
+89 87 0.0494048
+89 88 0.356079
+89 89      1
+89 90 0.73971
+89 91 0.26379
+89 131 0.0429269
+89 132 0.141439
+89 133 0.364552
+89 169 0.152559
+89 178  1E-07
+90 1 0.377497
+90 63 0.153371
+90 85 0.377497
+90 87  1E-07
+90 88 0.317425
+90 89 0.76336
+90 90      1
+90 91 0.470857
+90 96 0.195424
+90 131 0.0151675
+90 132 0.241274
+90 133 0.517347
+90 178 0.216582
+91 1 0.292893
+91 61  1E-07
+91 62 0.191393
+91 63 0.671103
+91 64 0.313594
+91 87 0.0324497
+91 88 0.355124
+91 89 0.306625
+91 90 0.451839
+91 91      1
+91 93 0.362623
+91 96    0.5
+91 133 0.00844925
+92 61 0.150079
+92 62 0.187185
+92 63 0.0247274
+92 66 0.451574
+92 73 0.0651012
+92 75 0.0247274
+92 92      1
+92 93 0.350697
+92 94 0.641483
+92 95 0.546507
+92 96  1E-07
+92 209 0.433134
+92 210 0.10299
+93 1 0.0858795
+93 16 0.201028
+93 61 0.110179
+93 62 0.288067
+93 63 0.52602
+93 64 0.214864
+93 66  1E-07
+93 91 0.319549
+93 92 0.32969
+93 93      1
+93 94 0.270955
+93 95 0.363227
+93 96 0.618942
+94 16 0.0327065
+94 23 0.0162174
+94 66 0.0781183
+94 73 0.40964
+94 74 0.119773
+94 75 0.165104
+94 92 0.633874
+94 93 0.278815
+94 94      1
+94 95 0.836263
+94 96 0.00537648
+94 209 0.157115
+94 210  1E-07
+95 16 0.232379
+95 18 0.1238
+95 23  1E-07
+95 66 0.0247564
+95 73 0.505532
+95 74 0.258298
+95 75 0.0802361
+95 92 0.557734
+95 93 0.398454
+95 94 0.843635
+95 95      1
+95 96 0.177041
+95 209 0.05532
+96 1 0.505322
+96 16 0.434315
+96 18  1E-07
+96 62 0.0796421
+96 63 0.484362
+96 64 0.0847695
+96 90 0.175379
+96 91 0.505322
+96 92 0.04329
+96 93 0.646863
+96 94 0.0682086
+96 95 0.192681
+96 96      1
+97 97      1
+97 98 0.772691
+97 111  1E-07
+97 113 0.161726
+97 117 0.465053
+97 119 0.323339
+97 121 0.213589
+97 122 0.19338
+97 123 0.178005
+97 125 0.281186
+97 127 0.192641
+97 128 0.211318
+97 129 0.350921
+98 97 0.707743
+98 98      1
+98 111  1E-07
+98 113 0.19512
+98 117 0.594713
+98 119 0.366922
+98 121 0.26689
+98 122 0.185787
+98 123 0.0937508
+98 125 0.204976
+98 127 0.156847
+98 128 0.102859
+98 129 0.39234
+99 99      1
+99 100 0.538156
+99 103 0.219915
+99 104 0.822891
+99 105 0.69529
+99 106 0.567622
+99 108 0.569075
+99 109  1E-07
+99 110 0.492837
+99 112 0.213508
+99 114 0.00251267
+99 116 0.0132624
+99 208 0.406222
+100 99 0.559724
+100 100      1
+100 101 0.238168
+100 103 0.458664
+100 104 0.540711
+100 105 0.713472
+100 106 0.634748
+100 107 0.334855
+100 108 0.371886
+100 109 0.153113
+100 110 0.44617
+100 116 0.149754
+100 208  1E-07
+101 99 0.129476
+101 100 0.446927
+101 101      1
+101 103 0.418846
+101 104 0.141642
+101 105 0.262525
+101 106 0.306625
+101 107 0.531651
+101 108 0.0811144
+101 109 0.234142
+101 110 0.191393
+101 115  1E-07
+101 116 0.215153
+102 99 0.0366748
+102 100 0.198184
+102 101 0.422861
+102 102      1
+102 103 0.106229
+102 104 0.0145806
+102 105 0.146387
+102 106 0.0738125
+102 107 0.164611
+102 109  1E-07
+102 110 0.000733238
+102 115 0.0320263
+102 198 0.00449904
+103 99 0.0460904
+103 100 0.305611
+103 103      1
+103 104 0.201314
+103 105  1E-07
+103 106 0.571205
+103 107 0.684663
+103 108 0.273912
+103 109 0.58908
+103 110 0.506135
+103 111 0.0862732
+103 114 0.122942
+103 116 0.573399
+104 99 0.789088
+104 100 0.426257
+104 103 0.222194
+104 104      1
+104 105 0.485098
+104 106 0.637133
+104 108 0.692907
+104 109  1E-07
+104 110 0.599822
+104 112 0.224485
+104 114 0.0215854
+104 116 0.0188612
+104 208 0.204103
+105 99 0.723796
+105 100 0.727554
+105 101 0.0340862
+105 103 0.258728
+105 104 0.608071
+105 105      1
+105 106 0.518379
+105 107 0.107881
+105 108 0.382389
+105 110 0.376574
+105 112 0.0213623
+105 116  1E-07
+105 208 0.261515
+106 99 0.433325
+106 100 0.49785
+106 103 0.540428
+106 104 0.600647
+106 105 0.303643
+106 106      1
+106 107 0.227353
+106 108 0.571993
+106 109 0.234359
+106 110 0.737387
+106 112  1E-07
+106 114 0.0440748
+106 116 0.244275
+107 100 0.26591
+107 101  0.288
+107 103 0.728686
+107 104 0.0594034
+107 106 0.37974
+107 107      1
+107 108 0.104021
+107 109 0.545089
+107 110 0.30378
+107 111 0.102473
+107 113  1E-07
+107 114 0.0447514
+107 116 0.514087
+108 99 0.447592
+108 100 0.155369
+108 103 0.238829
+108 104 0.669427
+108 105 0.126566
+108 106 0.581362
+108 108      1
+108 109 0.132488
+108 110 0.755472
+108 112 0.431044
+108 114 0.27206
+108 116 0.162724
+108 208  1E-07
+109 100 0.0086311
+109 103  0.625
+109 104 0.0629169
+109 106 0.34808
+109 107 0.517494
+109 108 0.24481
+109 109      1
+109 110 0.429912
+109 111 0.524014
+109 112  1E-07
+109 113 0.323382
+109 114 0.440983
+109 116 0.960472
+110 99 0.262595
+110 100 0.155294
+110 103 0.41278
+110 104 0.511403
+110 105  1E-07
+110 106 0.708657
+110 107 0.0378517
+110 108 0.72265
+110 109 0.257219
+110 110      1
+110 112 0.150597
+110 114 0.215536
+110 116 0.284503
+111 103 0.224532
+111 106 0.0692927
+111 107 0.114684
+111 108 0.134755
+111 109 0.557342
+111 110 0.228025
+111 111      1
+111 112 0.141812
+111 113 0.632393
+111 114 0.661083
+111 116 0.580863
+111 117  1E-07
+111 121 0.1682
+112 99 0.0882074
+112 104 0.245028
+112 106 0.115431
+112 108 0.485456
+112 110 0.322737
+112 111 0.0413262
+112 112      1
+112 114 0.419252
+112 116  1E-07
+112 203 0.322737
+112 206 0.242797
+112 207 0.374515
+112 208 0.0475027
+113 98 0.0427348
+113 103 0.192853
+113 107 0.181987
+113 109 0.478172
+113 110 0.0971957
+113 111 0.695145
+113 113      1
+113 114 0.414392
+113 116 0.48085
+113 117 0.304823
+113 119 0.0359627
+113 121 0.286352
+113 129  1E-07
+114 103 0.192641
+114 104 0.0751618
+114 106 0.178973
+114 108 0.360793
+114 109 0.436116
+114 110 0.392679
+114 111 0.632393
+114 112 0.436116
+114 113 0.234072
+114 114      1
+114 116 0.475558
+114 121  1E-07
+114 207 0.0298576
+115 98 0.0627542
+115 101 0.203667
+115 103 0.199372
+115 106 0.00611636
+115 107 0.320095
+115 109 0.26333
+115 110  1E-07
+115 111 0.190143
+115 113 0.333683
+115 114 0.0356983
+115 115      1
+115 116 0.246704
+115 117 0.0182691
+116 100  1E-07
+116 103 0.608852
+116 104 0.076251
+116 106 0.353486
+116 107 0.482179
+116 108 0.26769
+116 109 0.960285
+116 110 0.448261
+116 111 0.547179
+116 112 0.0328749
+116 113 0.323677
+116 114 0.47763
+116 116      1
+117 97 0.0136062
+117 98 0.418762
+117 111  1E-07
+117 113 0.161726
+117 117      1
+117 119 0.558871
+117 121 0.529233
+117 122 0.297687
+117 123  1E-07
+117 125 0.0787788
+117 127 0.187929
+117 129 0.552786
+117 130 0.00677984
+118 118      1
+118 120 0.660818
+118 122 0.241567
+118 123 0.402069
+118 124 0.493406
+118 125 0.164928
+118 126 0.50758
+118 127 0.356448
+118 128 0.250959
+118 130 0.0480575
+118 136  1E-07
+118 137 0.0406493
+118 138 0.157543
+119 98  1E-07
+119 117 0.514134
+119 119      1
+119 120 0.243607
+119 121 0.563922
+119 122 0.705237
+119 123 0.347138
+119 125 0.367545
+119 126 0.0207063
+119 127 0.587094
+119 128 0.226462
+119 129 0.919022
+119 130 0.221182
+120 118 0.570889
+120 119 0.00568196
+120 120      1
+120 122 0.393146
+120 123 0.276067
+120 124 0.397832
+120 125  1E-07
+120 126 0.594653
+120 127 0.434214
+120 128 0.0185864
+120 130 0.201631
+120 136 0.0360611
+120 138 0.0904972
+121 111 0.0977859
+121 113 0.0666062
+121 114  1E-07
+121 117 0.489381
+121 119 0.570559
+121 120 0.100433
+121 121      1
+121 122 0.457674
+121 126  1E-07
+121 127 0.264785
+121 129 0.495647
+121 130 0.411288
+121 136 0.04889
+122 117  1E-07
+122 118 0.0563842
+122 119 0.618942
+122 120 0.403205
+122 121 0.288067
+122 122      1
+122 123 0.36108
+122 125 0.250571
+122 126 0.0994675
+122 127 0.738288
+122 128 0.133579
+122 129 0.578002
+122 130 0.207916
+123 118 0.442533
+123 119 0.367545
+123 120 0.466506
+123 121 0.00153975
+123 122 0.52122
+123 123      1
+123 124 0.0513168
+123 125 0.77812
+123 126 0.168875
+123 127 0.717157
+123 128 0.803884
+123 129 0.40257
+123 130  1E-07
+124 118 0.478421
+124 120 0.509949
+124 122 0.0490452
+124 124      1
+124 126 0.779137
+124 127 0.0500322
+124 130 0.243539
+124 134  1E-07
+124 136 0.387436
+124 137 0.379826
+124 138 0.642817
+124 139 0.2423
+124 205  1E-07
+125 117 0.136378
+125 118 0.315943
+125 119 0.461682
+125 120 0.352513
+125 121 0.101334
+125 122 0.506575
+125 123 0.805052
+125 125      1
+125 126 0.0901699
+125 127 0.655377
+125 128 0.857908
+125 129 0.51263
+125 130  1E-07
+126 118 0.51607
+126 119  1E-07
+126 120 0.685127
+126 122 0.288675
+126 123 0.123917
+126 124 0.789182
+126 126      1
+126 127 0.263875
+126 130 0.462516
+126 136 0.500428
+126 137 0.201497
+126 138 0.607768
+126 139 0.0754998
+127 118 0.302514
+127 119 0.535009
+127 120 0.515307
+127 121 0.15925
+127 122 0.77202
+127 123 0.671202
+127 124  1E-07
+127 125 0.544039
+127 126 0.188185
+127 127      1
+127 128 0.466312
+127 129 0.544039
+127 130 0.132476
+128 117 0.00470048
+128 118 0.390386
+128 119 0.345858
+128 120 0.368658
+128 121  1E-07
+128 122 0.433238
+128 123 0.828803
+128 124 0.0195344
+128 125 0.858828
+128 126 0.111095
+128 127 0.599239
+128 128      1
+128 129 0.390386
+129 98 0.0584931
+129 117 0.516845
+129 118  1E-07
+129 119 0.92057
+129 120 0.232975
+129 121 0.49764
+129 122 0.679807
+129 123 0.395078
+129 125 0.438344
+129 127 0.602849
+129 128 0.292893
+129 129      1
+129 130 0.165038
+130 119 0.147407
+130 120 0.335137
+130 121 0.345561
+130 122 0.329253
+130 124 0.225911
+130 126 0.423785
+130 127 0.156674
+130 129 0.0681367
+130 130      1
+130 136 0.591351
+130 138 0.311903
+130 206  1E-07
+130 207 0.112408
+131 85 0.213121
+131 89 0.0376969
+131 131      1
+131 132 0.421859
+131 133 0.180712
+131 149 0.108641
+131 167 0.433831
+131 168 0.424234
+131 169 0.128849
+131 171 0.0448411
+131 174 0.33379
+131 175 0.272836
+131 178  1E-07
+132 1 0.100974
+132 85 0.162724
+132 89 0.251118
+132 90 0.27206
+132 131 0.498456
+132 132      1
+132 133 0.695396
+132 167 0.104421
+132 173  1E-07
+132 174 0.536931
+132 175 0.382389
+132 177 0.182662
+132 178 0.633912
+133 1 0.387421
+133 85 0.234359
+133 89 0.450244
+133 90 0.540703
+133 91 0.0891683
+133 96  1E-07
+133 131 0.295048
+133 132 0.697878
+133 133      1
+133 173 0.0880555
+133 174 0.24503
+133 175 0.0880555
+133 178 0.681535
+134 16 0.118178
+134 17 0.518889
+134 18 0.371624
+134 74 0.21821
+134 124 0.102028
+134 134      1
+134 135 0.826054
+134 137 0.581083
+134 138  1E-07
+134 139 0.586535
+134 173 0.256903
+134 176 0.391189
+134 179 0.559948
+135 1  1E-07
+135 16 0.270406
+135 17 0.605811
+135 18 0.484099
+135 73 0.0578258
+135 74 0.289637
+135 134 0.824588
+135 135      1
+135 137 0.4453
+135 139 0.490098
+135 173 0.391092
+135 176 0.472306
+135 179 0.717157
+136 118  1E-07
+136 120 0.238074
+136 122 0.0388061
+136 124 0.405036
+136 126 0.491662
+136 130 0.612131
+136 136      1
+136 137 0.0178587
+136 138 0.653079
+136 204 0.201772
+136 205 0.357825
+136 206 0.321637
+136 207 0.359204
+137 17 0.330615
+137 18 0.148531
+137 74 0.122942
+137 118  1E-07
+137 124 0.372122
+137 126 0.15306
+137 134 0.52769
+137 135 0.379826
+137 137      1
+137 138 0.336385
+137 139 0.841886
+137 179 0.191393
+137 205 0.00578607
+138 118 0.0581041
+138 120 0.196248
+138 124 0.612131
+138 126 0.553777
+138 130 0.269804
+138 136 0.612131
+138 137 0.288216
+138 138      1
+138 139 0.199005
+138 204 0.0545873
+138 205 0.294459
+138 206 0.0314687
+138 207  1E-07
+139 17 0.451337
+139 18 0.267824
+139 72 0.0453587
+139 73 0.00309768
+139 74 0.255259
+139 124 0.20569
+139 134 0.51731
+139 135 0.4097
+139 137 0.83628
+139 138 0.226735
+139 139      1
+139 179 0.27206
+139 205  1E-07
+140 140      1
+140 141 0.283568
+140 142 0.461237
+140 148 0.196248
+140 150 0.0763674
+140 151 0.2557
+140 152 0.54494
+140 173 0.0545873
+140 174 0.158594
+140 175 0.153351
+140 176 0.132698
+140 177 0.387447
+140 178  1E-07
+141 140 0.563922
+141 141      1
+141 142 0.891357
+141 147  1E-07
+141 148 0.181765
+141 150 0.230074
+141 151 0.41103
+141 152 0.457389
+141 173 0.125967
+141 174 0.0577322
+141 175 0.0678775
+141 176 0.255622
+141 177 0.225827
+142 140 0.639368
+142 141 0.880525
+142 142      1
+142 147  1E-07
+142 148 0.206989
+142 150 0.239142
+142 151 0.430486
+142 152 0.508196
+142 173 0.12702
+142 174 0.0831562
+142 175 0.0931577
+142 176 0.254408
+142 177 0.265661
+143 143      1
+143 144 0.210098
+143 145 0.737055
+143 146 0.621399
+143 147 0.297079
+143 149 0.449054
+143 158 0.181784
+143 162 0.0422061
+143 164 0.0238943
+143 165 0.668923
+143 167 0.215453
+143 168  1E-07
+143 171 0.177673
+144 143 0.475507
+144 144      1
+144 145 0.617288
+144 146 0.590994
+144 147 0.284271
+144 148 0.0773403
+144 149 0.119818
+144 150 0.189291
+144 151 0.0210393
+144 162 0.0359627
+144 164 0.0773403
+144 165 0.377617
+144 167  1E-07
+145 143 0.779726
+145 144 0.517158
+145 145      1
+145 146 0.649177
+145 147 0.270244
+145 149 0.321505
+145 156  1E-07
+145 158 0.171513
+145 162 0.1969
+145 164 0.215536
+145 165 0.538462
+145 167 0.122942
+145 171 0.122942
+146 143 0.662222
+146 144 0.450443
+146 145 0.626373
+146 146      1
+146 147 0.557311
+146 148 0.258154
+146 149 0.303894
+146 150 0.300048
+146 151 0.0362268
+146 165 0.697882
+146 167 0.189002
+146 175 0.0141948
+146 177  1E-07
+147 143 0.118417
+147 146 0.377692
+147 147      1
+147 148 0.575299
+147 149 0.083022
+147 150 0.45252
+147 151 0.0990722
+147 152 0.067248
+147 165 0.511403
+147 167 0.150597
+147 174  1E-07
+147 175 0.185672
+147 177 0.213847
+148 140 0.14984
+148 146 0.0989556
+148 147 0.633048
+148 148      1
+148 149  1E-07
+148 150 0.599505
+148 151 0.419799
+148 152 0.520727
+148 165 0.242202
+148 167 0.179471
+148 174 0.362865
+148 175 0.508488
+148 177 0.652448
+149 131 0.149593
+149 143 0.330017
+149 145 0.0150763
+149 146 0.0511854
+149 147 0.110886
+149 149      1
+149 158 0.306245
+149 165 0.441681
+149 167 0.636449
+149 168 0.441681
+149 171 0.52889
+149 172 0.110886
+149 175  1E-07
+150 140 0.173732
+150 143  1E-07
+150 146 0.280975
+150 147 0.599929
+150 148 0.661281
+150 150      1
+150 151 0.726009
+150 152 0.579222
+150 165 0.257712
+150 167 0.0236509
+150 174 0.127051
+150 175 0.24635
+150 177 0.404931
+151 140 0.340665
+151 141 0.142841
+151 142 0.246305
+151 146 0.0196374
+151 147 0.34808
+151 148 0.514087
+151 150 0.728686
+151 151      1
+151 152 0.716177
+151 165  1E-07
+151 174 0.0564548
+151 175 0.150163
+151 177 0.362078
+152 140 0.619471
+152 141 0.254552
+152 142 0.38561
+152 147 0.362865
+152 148 0.621101
+152 150 0.606677
+152 151 0.732078
+152 152      1
+152 165 0.0339937
+152 167  1E-07
+152 174 0.320564
+152 175 0.384604
+152 177 0.606677
+153 28 0.303648
+153 31 0.0930042
+153 32 0.417229
+153 35 0.0287142
+153 41 0.493439
+153 153      1
+153 154 0.476947
+153 155 0.144386
+153 156  1E-07
+153 159 0.611486
+153 161 0.338384
+153 163 0.450558
+153 170 0.0643336
+154 28 0.318509
+154 32 0.227138
+154 35 0.300048
+154 41 0.154165
+154 153 0.55883
+154 154      1
+154 155 0.288635
+154 156  1E-07
+154 157 0.373944
+154 159 0.55883
+154 160 0.0833385
+154 161 0.141564
+154 163 0.816814
+155 41 0.173434
+155 153 0.247389
+155 154 0.258134
+155 155      1
+155 156 0.606624
+155 157 0.601096
+155 158  1E-07
+155 159 0.588487
+155 160 0.743693
+155 161 0.443683
+155 162 0.403171
+155 163 0.443683
+155 164 0.373342
+156 41 0.164468
+156 153  1E-07
+156 155 0.552786
+156 156      1
+156 157 0.104519
+156 158 0.256475
+156 159 0.313197
+156 160 0.476947
+156 161 0.552786
+156 162 0.74672
+156 163  1E-07
+156 164 0.649798
+156 172 0.125843
+157 28  1E-07
+157 41 0.168135
+157 153 0.337278
+157 154 0.516678
+157 155 0.704704
+157 156 0.416905
+157 157      1
+157 159 0.557281
+157 160 0.67751
+157 161 0.320589
+157 162 0.277228
+157 163 0.645599
+157 164 0.275569
+158 41 0.134723
+158 149 0.292893
+158 156 0.128755
+158 158      1
+158 161 0.292893
+158 162 0.20331
+158 164 0.0396461
+158 166 0.195222
+158 167  1E-07
+158 168 0.258904
+158 170 0.330533
+158 171 0.640092
+158 172 0.640092
+159 32 0.0592792
+159 41 0.405036
+159 153 0.623712
+159 154 0.493406
+159 155 0.546889
+159 156 0.33481
+159 157 0.341495
+159 159      1
+159 160 0.265274
+159 161 0.50938
+159 162 0.0937777
+159 163 0.623712
+159 172  1E-07
+160 41 0.0513168
+160 153 0.0944616
+160 154 0.141821
+160 155 0.769911
+160 156 0.586977
+160 157 0.608923
+160 158  1E-07
+160 159 0.400981
+160 160      1
+160 161 0.323504
+160 162 0.467525
+160 163 0.313149
+160 164 0.493571
+161 41 0.546507
+161 153 0.22773
+161 155 0.261768
+161 156 0.477991
+161 158 0.295625
+161 159 0.408718
+161 160  1E-07
+161 161      1
+161 162 0.282965
+161 164 0.114528
+161 166 0.0473958
+161 170 0.22773
+161 172 0.340874
+162 41 0.0232051
+162 143 0.000917952
+162 145  1E-07
+162 155 0.330891
+162 156 0.750229
+162 158 0.329522
+162 159 0.0772996
+162 160 0.335017
+162 161 0.394218
+162 162      1
+162 164 0.845555
+162 171 0.0373966
+162 172 0.121093
+163 28 0.0522259
+163 32  1E-07
+163 35  1E-07
+163 41 0.0827328
+163 153 0.474774
+163 154 0.792386
+163 155 0.39542
+163 156 0.0440748
+163 157 0.479722
+163 159 0.628609
+163 160 0.168508
+163 161 0.144995
+163 163      1
+164 143 0.0719481
+164 145 0.109673
+164 155 0.35964
+164 156 0.685222
+164 157  1E-07
+164 158 0.26333
+164 159 0.0719481
+164 160 0.423531
+164 161 0.318136
+164 162 0.859227
+164 164      1
+164 171 0.00458378
+164 172 0.0613321
+165 143 0.642647
+165 145 0.405328
+165 146 0.634493
+165 147 0.579504
+165 148 0.245186
+165 149 0.50444
+165 150 0.12579
+165 165      1
+165 167 0.382635
+165 168 0.0248672
+165 171 0.102503
+165 175 0.0873085
+165 177  1E-07
+166 31 0.362948
+166 41 0.330466
+166 84 0.0570098
+166 85  1E-07
+166 86 0.0972486
+166 158 0.185672
+166 161 0.0323537
+166 166      1
+166 168 0.26801
+166 169 0.41278
+166 170 0.814305
+166 171 0.271643
+166 172 0.539347
+167 131 0.449447
+167 143 0.0275826
+167 147 0.160558
+167 148 0.0614752
+167 149 0.629452
+167 158  1E-07
+167 165 0.291064
+167 167      1
+167 168 0.475966
+167 171 0.317123
+167 174 0.23652
+167 175 0.320927
+167 177 0.0437011
+168 85 0.178005
+168 131 0.498443
+168 149 0.49022
+168 158 0.336111
+168 166 0.351958
+168 167 0.53056
+168 168      1
+168 169 0.355174
+168 170 0.316059
+168 171 0.652751
+168 172 0.391673
+168 174  1E-07
+168 175 0.0136062
+169 31 0.161522
+169 84 0.444364
+169 85 0.593829
+169 86 0.241897
+169 88  1E-07
+169 89 0.179885
+169 131 0.161522
+169 166 0.425588
+169 168 0.28753
+169 169      1
+169 170 0.251058
+169 171 0.0309354
+169 172 0.0628915
+170 31 0.357663
+170 41 0.532102
+170 84  1E-07
+170 86 0.062585
+170 153 0.0116885
+170 158 0.396527
+170 161 0.301158
+170 166 0.834573
+170 168 0.311782
+170 169 0.317927
+170 170      1
+170 171 0.403544
+170 172 0.720915
+171 131 0.0987814
+171 143 0.0110366
+171 149 0.534089
+171 158 0.650785
+171 161 0.0159815
+171 165  1E-07
+171 166 0.30157
+171 167 0.337411
+171 168 0.623884
+171 169 0.0500322
+171 170 0.357976
+171 171      1
+171 172 0.580942
+172 31 0.0240421
+172 41 0.413129
+172 149 0.132262
+172 156 0.0191865
+172 158 0.655377
+172 161 0.366419
+172 162  1E-07
+172 166 0.564083
+172 168 0.349767
+172 169 0.0934392
+172 170 0.703544
+172 171 0.586453
+172 172      1
+173 1 0.24351
+173 16 0.135978
+173 17 0.0539295
+173 18 0.047671
+173 132 0.0200021
+173 133 0.0989556
+173 134 0.14984
+173 135 0.309183
+173 140  1E-07
+173 173      1
+173 176 0.685342
+173 178 0.370683
+173 179 0.338469
+174 131 0.419657
+174 132 0.535009
+174 133 0.235671
+174 140 0.0880786
+174 147 0.114684
+174 148 0.347164
+174 152 0.119394
+174 167 0.316059
+174 168  1E-07
+174 174      1
+174 175 0.835601
+174 177 0.624005
+174 178 0.322166
+175 131 0.309679
+175 132 0.324138
+175 140  1E-07
+175 147 0.214326
+175 148 0.451152
+175 149 0.00495062
+175 150 0.00495062
+175 152 0.130773
+175 167 0.337047
+175 174 0.820839
+175 175      1
+175 177 0.681826
+175 178 0.0837544
+176 1 0.096476
+176 16 0.0901465
+176 17 0.168414
+176 18 0.113306
+176 134 0.40712
+176 135 0.490408
+176 137  1E-07
+176 139 0.0122705
+176 140 0.219131
+176 173 0.732164
+176 176      1
+176 178 0.233035
+176 179 0.388067
+177 131 0.0178057
+177 132 0.126872
+177 140 0.293726
+177 147 0.259571
+177 148 0.621147
+177 150 0.233035
+177 151 0.169692
+177 152 0.457674
+177 167 0.088634
+177 174    0.6
+177 175 0.689403
+177 177      1
+177 178  1E-07
+178 1 0.397645
+178 89 0.191856
+178 90 0.303612
+178 131 0.196248
+178 132 0.660818
+178 133 0.702518
+178 140  1E-07
+178 173 0.405036
+178 174 0.37458
+178 175 0.224262
+178 176 0.148141
+178 177 0.132698
+178 178      1
+179 1  1E-07
+179 16 0.419666
+179 17 0.67409
+179 18 0.629452
+179 73 0.0491347
+179 74 0.317123
+179 134 0.424147
+179 135 0.632965
+179 137 0.0614752
+179 139 0.184032
+179 173 0.243337
+179 176 0.177707
+179 179      1
+180 2 0.354674
+180 5 0.083022
+180 9 0.0160439
+180 11 0.0715234
+180 15 0.686722
+180 180      1
+180 181 0.0545377
+180 182 0.312869
+180 184 0.041996
+180 185 0.607768
+180 190 0.442914
+180 192  1E-07
+180 195 0.340445
+181 2  1E-07
+181 180 0.168992
+181 181      1
+181 182 0.440067
+181 183 0.797556
+181 185 0.404594
+181 188 0.0482976
+181 189 0.610591
+181 190 0.0678775
+181 193 0.728393
+181 194 0.183922
+181 196 0.268675
+181 202 0.0312253
+182 180 0.268881
+182 181 0.322166
+182 182      1
+182 183 0.331085
+182 184 0.333333
+182 185 0.225016
+182 187 0.2855
+182 190 0.494772
+182 191 0.0813904
+182 193  1E-07
+182 194 0.007536
+182 196 0.480125
+182 202 0.0813904
+183 180 0.00332421
+183 181 0.789648
+183 182 0.425852
+183 183      1
+183 185 0.200387
+183 187 0.0122432
+183 188 0.199005
+183 189 0.641784
+183 190  1E-07
+183 193 0.579297
+183 194 0.360241
+183 196 0.381338
+183 202 0.177205
+184 20 0.0957355
+184 24  1E-07
+184 25 0.118252
+184 180 0.0368729
+184 182 0.370093
+184 184      1
+184 187 0.53113
+184 190 0.595601
+184 191 0.74111
+184 192 0.582552
+184 196 0.264096
+184 200 0.0839531
+184 202  1E-07
+185 2 0.5136
+185 4 0.313901
+185 5 0.137502
+185 7 0.0721124
+185 15 0.465804
+185 180 0.623884
+185 181 0.350422
+185 182 0.30157
+185 183 0.16043
+185 185      1
+185 190 0.196046
+185 193 0.246148
+185 195  1E-07
+186 181 0.0256089
+186 183 0.172115
+186 186      1
+186 188 0.808906
+186 189 0.263702
+186 193  1E-07
+186 194 0.442871
+186 196 0.0630855
+186 197 0.625234
+186 198 0.467358
+186 199 0.562952
+186 201 0.470001
+186 202 0.197966
+187 20 0.110403
+187 25 0.326565
+187 182 0.379124
+187 183  1E-07
+187 184 0.568791
+187 187      1
+187 190 0.292092
+187 191 0.380952
+187 192 0.201759
+187 194 0.189077
+187 196 0.607323
+187 200 0.352311
+187 202 0.484921
+188 181 0.0502418
+188 183 0.230691
+188 186 0.76965
+188 188      1
+188 189 0.311909
+188 193  1E-07
+188 194 0.511353
+188 196 0.0730785
+188 197 0.320865
+188 198 0.191878
+188 199 0.252214
+188 201 0.397285
+188 202 0.191878
+189 180  1E-07
+189 181 0.680518
+189 182 0.267503
+189 183 0.717157
+189 185 0.213037
+189 186 0.270333
+189 188 0.434315
+189 189      1
+189 193 0.737387
+189 194 0.368636
+189 196 0.256291
+189 201 0.0531359
+189 202 0.153099
+190 9  1E-07
+190 15 0.234142
+190 76 0.0959494
+190 180 0.46967
+190 182 0.547975
+190 184 0.617071
+190 185 0.201865
+190 187 0.271131
+190 190      1
+190 191    0.5
+190 192    0.5
+190 195 0.311845
+190 196 0.201865
+191 20 0.227174
+191 24 0.237883
+191 25 0.128849
+191 76 0.156004
+191 182 0.122582
+191 184 0.738288
+191 187 0.319549
+191 190 0.46621
+191 191      1
+191 192 0.79063
+191 195 0.0391215
+191 196  1E-07
+191 200 0.0636709
+192 9 0.0228066
+192 20 0.122942
+192 24 0.278963
+192 76 0.373444
+192 180  1E-07
+192 182 0.0545377
+192 184 0.584773
+192 187 0.136659
+192 190 0.474774
+192 191 0.79399
+192 192      1
+192 195 0.227461
+192 210 0.0282506
+193 2 0.139974
+193 4 0.215536
+193 180 0.156473
+193 181 0.769231
+193 182 0.298143
+193 183 0.65599
+193 185 0.41291
+193 188 0.148618
+193 189 0.728036
+193 190  1E-07
+193 193      1
+193 194 0.156473
+193 196 0.159987
+194 181 0.181402
+194 182 0.177632
+194 183 0.382389
+194 186 0.324967
+194 187 0.226735
+194 188 0.508841
+194 189 0.22807
+194 193 0.00413235
+194 194      1
+194 196 0.5325
+194 198  1E-07
+194 201 0.552786
+194 202 0.669427
+195 9 0.65451
+195 11 0.234359
+195 13 0.136659
+195 15 0.424183
+195 68 0.0543133
+195 76 0.433471
+195 180 0.340445
+195 190 0.277126
+195 191 0.0545377
+195 192 0.227461
+195 195      1
+195 210  1E-07
+195 211 0.083022
+196 181 0.212629
+196 182 0.53764
+196 183 0.358965
+196 184 0.307317
+196 187 0.598104
+196 188  1E-07
+196 189 0.0240421
+196 190 0.206619
+196 191 0.0688807
+196 194 0.498222
+196 196      1
+196 201 0.121381
+196 202 0.645189
+197 181 0.0136062
+197 183 0.121495
+197 186 0.726002
+197 188 0.58809
+197 189 0.193681
+197 193  1E-07
+197 194 0.362696
+197 196 0.0809818
+197 197      1
+197 198 0.751884
+197 199 0.835601
+197 201 0.494772
+197 202 0.216346
+198 105 0.024915
+198 183  1E-07
+198 186 0.578687
+198 188 0.469722
+198 189 0.018627
+198 194 0.347171
+198 196 0.0639988
+198 197 0.731567
+198 198      1
+198 199 0.554361
+198 201 0.587114
+198 202 0.250073
+198 208 0.0146059
+199 181 0.00336145
+199 183 0.0992588
+199 186 0.68154
+199 188 0.547977
+199 189 0.207605
+199 193 0.0169218
+199 194 0.279055
+199 196  1E-07
+199 197 0.836154
+199 198 0.589475
+199 199      1
+199 201 0.36308
+199 202 0.111764
+200 19 0.291371
+200 20 0.522037
+200 21 0.394707
+200 24 0.030642
+200 25 0.896193
+200 184 0.178679
+200 187 0.368568
+200 191 0.169545
+200 192  1E-07
+200 196 0.0206882
+200 200      1
+200 202 0.0879165
+200 208 0.189243
+201 183 0.103593
+201 186 0.456474
+201 187 0.157096
+201 188 0.487238
+201 189 0.0201439
+201 194 0.621478
+201 196 0.307137
+201 197 0.291328
+201 198 0.464689
+201 199 0.103593
+201 201      1
+201 202 0.561795
+201 208  1E-07
+202 25 0.00987418
+202 181  1E-07
+202 182 0.216714
+202 183 0.182613
+202 184 0.0975531
+202 186  1E-07
+202 187 0.494571
+202 188 0.164123
+202 194 0.659823
+202 196 0.659823
+202 200 0.0819616
+202 201 0.467231
+202 202      1
+203 19 0.330891
+203 20 0.0489022
+203 21 0.521087
+203 22 0.22422
+203 25 0.0232051
+203 112 0.293542
+203 200  1E-07
+203 203      1
+203 204 0.500459
+203 205 0.302692
+203 206 0.646771
+203 207 0.563164
+203 208 0.0138576
+204 19 0.333333
+204 20  1E-07
+204 21 0.306933
+204 22 0.6302
+204 23 0.16795
+204 72 0.251212
+204 136 0.215536
+204 138 0.168978
+204 203 0.51784
+204 204      1
+204 205 0.777351
+204 206 0.659061
+204 207 0.477024
+205 19 0.0513168
+205 21  1E-07
+205 22 0.511353
+205 23 0.039558
+205 72 0.211046
+205 136 0.310428
+205 138 0.322369
+205 139 0.00511522
+205 203 0.264598
+205 204 0.756723
+205 205      1
+205 206 0.528355
+205 207 0.365933
+206 19 0.217238
+206 21 0.306304
+206 22 0.350411
+206 72  1E-07
+206 112 0.299051
+206 130 0.142358
+206 136 0.387038
+206 138 0.217238
+206 203 0.686526
+206 204 0.686526
+206 205 0.603119
+206 206      1
+206 207 0.829995
+207 19  1E-07
+207 21 0.132039
+207 22 0.11766
+207 112 0.376092
+207 114 0.00336145
+207 130 0.179745
+207 136 0.376092
+207 138 0.129145
+207 203 0.582272
+207 204 0.481872
+207 205 0.425077
+207 206 0.816814
+207 207      1
+208 20  1E-07
+208 21 0.226548
+208 25 0.260724
+208 99 0.355744
+208 104 0.274845
+208 105 0.116038
+208 108 0.153598
+208 112 0.10855
+208 200 0.328794
+208 201  1E-07
+208 202 0.00295869
+208 203 0.115203
+208 208      1
+209 9  1E-07
+209 61 0.0367581
+209 66 0.581362
+209 68 0.437055
+209 71 0.318885
+209 75 0.046169
+209 76 0.126566
+209 92 0.432404
+209 94 0.173568
+209 95 0.030092
+209 209      1
+209 210 0.482273
+209 211 0.492327
+210 9 0.169545
+210 24 0.150597
+210 66 0.0503387
+210 68 0.251952
+210 75 0.37133
+210 76 0.539347
+210 92 0.0888257
+210 94 0.00531929
+210 192 0.0282506
+210 195  1E-07
+210 209 0.474774
+210 210      1
+210 211 0.340445
+211 9 0.364559
+211 13 0.0943571
+211 65 0.323677
+211 66 0.189968
+211 67  1E-07
+211 68 0.903369
+211 69 0.0788158
+211 71 0.289555
+211 76 0.213682
+211 195  1E-07
+211 209 0.438344
+211 210 0.280729
+211 211      1
diff --git a/pysal/examples/baltim/baltim_k4.gwt b/pysal/examples/baltim/baltim_k4.gwt
new file mode 100644
index 0000000..1f77dc6
--- /dev/null
+++ b/pysal/examples/baltim/baltim_k4.gwt
@@ -0,0 +1,845 @@
+0 211 baltim.shp STATION
+1 96      1
+1 16      1
+1 90      1
+1 133      1
+2 5      1
+2 4      1
+2 7      1
+2 185      1
+3 4      1
+3 7      1
+3 2      1
+3 5      1
+4 2      1
+4 3      1
+4 7      1
+4 5      1
+5 7      1
+5 2      1
+5 11      1
+5 4      1
+6 10      1
+6 70      1
+6 8      1
+6 12      1
+7 5      1
+7 2      1
+7 3      1
+7 4      1
+8 12      1
+8 14      1
+8 70      1
+8 6      1
+9 195      1
+9 76      1
+9 211      1
+9 68      1
+10 6      1
+10 70      1
+10 48      1
+10 8      1
+11 13      1
+11 5      1
+11 15      1
+11 7      1
+12 14      1
+12 8      1
+12 70      1
+12 67      1
+13 11      1
+13 65      1
+13 67      1
+13 69      1
+14 12      1
+14 8      1
+14 11      1
+14 5      1
+15 180      1
+15 2      1
+15 185      1
+15 195      1
+16 18      1
+16 179      1
+16 96      1
+16 1      1
+17 18      1
+17 179      1
+17 74      1
+17 135      1
+18 17      1
+18 74      1
+18 179      1
+18 16      1
+19 21      1
+19 20      1
+19 22      1
+19 25      1
+20 19      1
+20 25      1
+20 200      1
+20 24      1
+21 19      1
+21 203      1
+21 20      1
+21 25      1
+22 204      1
+22 72      1
+22 205      1
+22 23      1
+23 72      1
+23 75      1
+23 22      1
+23 24      1
+24 75      1
+24 20      1
+24 19      1
+24 192      1
+25 200      1
+25 20      1
+25 21      1
+25 19      1
+26 37      1
+26 38      1
+26 27      1
+26 46      1
+27 30      1
+27 39      1
+27 35      1
+27 38      1
+28 32      1
+28 35      1
+28 39      1
+28 33      1
+29 42      1
+29 32      1
+29 33      1
+29 31      1
+30 27      1
+30 39      1
+30 38      1
+30 34      1
+31 86      1
+31 166      1
+31 29      1
+31 170      1
+32 28      1
+32 29      1
+32 153      1
+32 31      1
+33 34      1
+33 39      1
+33 36      1
+33 28      1
+34 33      1
+34 39      1
+34 36      1
+34 30      1
+35 28      1
+35 27      1
+35 39      1
+35 30      1
+36 34      1
+36 33      1
+36 47      1
+36 77      1
+37 26      1
+37 38      1
+37 46      1
+37 27      1
+38 46      1
+38 50      1
+38 30      1
+38 43      1
+39 34      1
+39 33      1
+39 30      1
+39 27      1
+40 82      1
+40 86      1
+40 87      1
+40 42      1
+41 161      1
+41 170      1
+41 153      1
+41 172      1
+42 29      1
+42 40      1
+42 86      1
+42 31      1
+43 50      1
+43 47      1
+43 38      1
+43 46      1
+44 45      1
+44 49      1
+44 48      1
+44 51      1
+45 51      1
+45 77      1
+45 49      1
+45 44      1
+46 50      1
+46 38      1
+46 43      1
+46 52      1
+47 43      1
+47 77      1
+47 36      1
+47 45      1
+48 58      1
+48 44      1
+48 10      1
+48 56      1
+49 45      1
+49 44      1
+49 50      1
+49 47      1
+50 46      1
+50 43      1
+50 38      1
+50 47      1
+51 77      1
+51 45      1
+51 54      1
+51 79      1
+52 46      1
+52 50      1
+52 49      1
+52 38      1
+53 55      1
+53 57      1
+53 60      1
+53 56      1
+54 56      1
+54 57      1
+54 79      1
+54 51      1
+55 57      1
+55 53      1
+55 56      1
+55 54      1
+56 54      1
+56 57      1
+56 58      1
+56 55      1
+57 55      1
+57 56      1
+57 53      1
+57 54      1
+58 56      1
+58 54      1
+58 55      1
+58 57      1
+59 61      1
+59 62      1
+59 60      1
+59 64      1
+60 53      1
+60 59      1
+60 71      1
+60 55      1
+61 62      1
+61 59      1
+61 64      1
+61 66      1
+62 61      1
+62 64      1
+62 59      1
+62 63      1
+63 91      1
+63 64      1
+63 93      1
+63 62      1
+64 62      1
+64 61      1
+64 63      1
+64 59      1
+65 69      1
+65 67      1
+65 13      1
+65 68      1
+66 209      1
+66 71      1
+66 61      1
+66 92      1
+67 69      1
+67 65      1
+67 13      1
+67 12      1
+68 211      1
+68 65      1
+68 209      1
+68 71      1
+69 67      1
+69 65      1
+69 13      1
+69 71      1
+70 6      1
+70 12      1
+70 8      1
+70 10      1
+71 66      1
+71 68      1
+71 60      1
+71 211      1
+72 23      1
+72 22      1
+72 73      1
+72 74      1
+73 74      1
+73 95      1
+73 18      1
+73 94      1
+74 73      1
+74 18      1
+74 17      1
+74 16      1
+75 23      1
+75 24      1
+75 210      1
+75 72      1
+76 210      1
+76 9      1
+76 195      1
+76 192      1
+77 51      1
+77 45      1
+77 47      1
+77 79      1
+78 81      1
+78 79      1
+78 82      1
+78 40      1
+79 81      1
+79 78      1
+79 54      1
+79 77      1
+80 83      1
+80 82      1
+80 87      1
+80 88      1
+81 79      1
+81 78      1
+81 54      1
+81 77      1
+82 80      1
+82 87      1
+82 83      1
+82 40      1
+83 80      1
+83 82      1
+83 59      1
+83 78      1
+84 86      1
+84 87      1
+84 169      1
+84 85      1
+85 169      1
+85 89      1
+85 84      1
+85 90      1
+86 84      1
+86 31      1
+86 40      1
+86 42      1
+87 88      1
+87 82      1
+87 84      1
+87 40      1
+88 87      1
+88 89      1
+88 84      1
+88 82      1
+89 90      1
+89 85      1
+89 133      1
+89 88      1
+90 89      1
+90 133      1
+90 91      1
+90 85      1
+91 63      1
+91 96      1
+91 90      1
+91 93      1
+92 94      1
+92 95      1
+92 66      1
+92 209      1
+93 96      1
+93 63      1
+93 95      1
+93 92      1
+94 95      1
+94 92      1
+94 73      1
+94 93      1
+95 94      1
+95 92      1
+95 73      1
+95 93      1
+96 93      1
+96 1      1
+96 91      1
+96 63      1
+97 98      1
+97 117      1
+97 129      1
+97 119      1
+98 97      1
+98 117      1
+98 129      1
+98 119      1
+99 104      1
+99 105      1
+99 108      1
+99 106      1
+100 105      1
+100 106      1
+100 99      1
+100 104      1
+101 107      1
+101 100      1
+101 103      1
+101 106      1
+102 101      1
+102 100      1
+102 107      1
+102 105      1
+103 107      1
+103 109      1
+103 116      1
+103 106      1
+104 99      1
+104 108      1
+104 106      1
+104 110      1
+105 100      1
+105 99      1
+105 104      1
+105 106      1
+106 110      1
+106 104      1
+106 108      1
+106 103      1
+107 103      1
+107 109      1
+107 116      1
+107 106      1
+108 110      1
+108 104      1
+108 106      1
+108 99      1
+109 116      1
+109 103      1
+109 111      1
+109 107      1
+110 108      1
+110 106      1
+110 104      1
+110 103      1
+111 114      1
+111 113      1
+111 116      1
+111 109      1
+112 108      1
+112 114      1
+112 207      1
+112 110      1
+113 111      1
+113 116      1
+113 109      1
+113 114      1
+114 111      1
+114 116      1
+114 109      1
+114 112      1
+115 113      1
+115 107      1
+115 109      1
+115 116      1
+116 109      1
+116 103      1
+116 111      1
+116 107      1
+117 119      1
+117 129      1
+117 121      1
+117 98      1
+118 120      1
+118 126      1
+118 124      1
+118 123      1
+119 129      1
+119 122      1
+119 127      1
+119 121      1
+120 126      1
+120 118      1
+120 127      1
+120 124      1
+121 119      1
+121 129      1
+121 117      1
+121 122      1
+122 127      1
+122 119      1
+122 129      1
+122 120      1
+123 128      1
+123 125      1
+123 127      1
+123 122      1
+124 126      1
+124 138      1
+124 120      1
+124 118      1
+125 128      1
+125 123      1
+125 127      1
+125 129      1
+126 124      1
+126 120      1
+126 138      1
+126 118      1
+127 122      1
+127 123      1
+127 125      1
+127 129      1
+128 125      1
+128 123      1
+128 127      1
+128 122      1
+129 119      1
+129 122      1
+129 127      1
+129 117      1
+130 136      1
+130 126      1
+130 121      1
+130 120      1
+131 167      1
+131 168      1
+131 132      1
+131 174      1
+132 133      1
+132 178      1
+132 174      1
+132 131      1
+133 132      1
+133 178      1
+133 90      1
+133 89      1
+134 135      1
+134 139      1
+134 137      1
+134 179      1
+135 134      1
+135 179      1
+135 17      1
+135 139      1
+136 138      1
+136 130      1
+136 126      1
+136 124      1
+137 139      1
+137 134      1
+137 135      1
+137 124      1
+138 124      1
+138 136      1
+138 126      1
+138 205      1
+139 137      1
+139 134      1
+139 17      1
+139 135      1
+140 152      1
+140 142      1
+140 177      1
+140 141      1
+141 142      1
+141 140      1
+141 152      1
+141 151      1
+142 141      1
+142 140      1
+142 152      1
+142 151      1
+143 145      1
+143 165      1
+143 146      1
+143 149      1
+144 145      1
+144 146      1
+144 143      1
+144 165      1
+145 143      1
+145 146      1
+145 165      1
+145 144      1
+146 165      1
+146 143      1
+146 145      1
+146 147      1
+147 148      1
+147 165      1
+147 150      1
+147 146      1
+148 177      1
+148 147      1
+148 150      1
+148 152      1
+149 167      1
+149 171      1
+149 165      1
+149 168      1
+150 151      1
+150 148      1
+150 147      1
+150 152      1
+151 150      1
+151 152      1
+151 148      1
+151 177      1
+152 151      1
+152 148      1
+152 140      1
+152 150      1
+153 159      1
+153 41      1
+153 154      1
+153 163      1
+154 163      1
+154 153      1
+154 159      1
+154 157      1
+155 160      1
+155 156      1
+155 157      1
+155 159      1
+156 162      1
+156 164      1
+156 155      1
+156 161      1
+157 155      1
+157 160      1
+157 163      1
+157 159      1
+158 171      1
+158 172      1
+158 170      1
+158 161      1
+159 153      1
+159 163      1
+159 155      1
+159 161      1
+160 155      1
+160 157      1
+160 156      1
+160 164      1
+161 41      1
+161 156      1
+161 159      1
+161 172      1
+162 164      1
+162 156      1
+162 161      1
+162 160      1
+163 154      1
+163 159      1
+163 157      1
+163 153      1
+164 162      1
+164 156      1
+164 160      1
+164 155      1
+165 143      1
+165 146      1
+165 147      1
+165 149      1
+166 170      1
+166 172      1
+166 169      1
+166 31      1
+167 149      1
+167 168      1
+167 131      1
+167 175      1
+168 171      1
+168 167      1
+168 131      1
+168 149      1
+169 85      1
+169 84      1
+169 166      1
+169 168      1
+170 166      1
+170 172      1
+170 41      1
+170 171      1
+171 158      1
+171 168      1
+171 172      1
+171 149      1
+172 170      1
+172 158      1
+172 171      1
+172 166      1
+173 176      1
+173 178      1
+173 179      1
+173 135      1
+174 175      1
+174 177      1
+174 132      1
+174 131      1
+175 174      1
+175 177      1
+175 148      1
+175 167      1
+176 173      1
+176 135      1
+176 134      1
+176 179      1
+177 175      1
+177 148      1
+177 174      1
+177 152      1
+178 133      1
+178 132      1
+178 173      1
+178 1      1
+179 17      1
+179 135      1
+179 18      1
+179 134      1
+180 15      1
+180 185      1
+180 190      1
+180 2      1
+181 183      1
+181 193      1
+181 189      1
+181 182      1
+182 190      1
+182 196      1
+182 184      1
+182 183      1
+183 181      1
+183 189      1
+183 193      1
+183 182      1
+184 191      1
+184 190      1
+184 192      1
+184 187      1
+185 180      1
+185 2      1
+185 15      1
+185 181      1
+186 188      1
+186 197      1
+186 199      1
+186 201      1
+187 196      1
+187 184      1
+187 202      1
+187 191      1
+188 186      1
+188 194      1
+188 201      1
+188 197      1
+189 193      1
+189 183      1
+189 181      1
+189 188      1
+190 184      1
+190 182      1
+190 191      1
+190 192      1
+191 192      1
+191 184      1
+191 190      1
+191 187      1
+192 191      1
+192 184      1
+192 190      1
+192 76      1
+193 181      1
+193 189      1
+193 183      1
+193 185      1
+194 202      1
+194 201      1
+194 196      1
+194 188      1
+195 9      1
+195 76      1
+195 15      1
+195 180      1
+196 202      1
+196 187      1
+196 182      1
+196 194      1
+197 199      1
+197 198      1
+197 186      1
+197 188      1
+198 197      1
+198 201      1
+198 186      1
+198 199      1
+199 197      1
+199 186      1
+199 198      1
+199 188      1
+200 25      1
+200 20      1
+200 21      1
+200 187      1
+201 194      1
+201 202      1
+201 188      1
+201 198      1
+202 194      1
+202 196      1
+202 187      1
+202 201      1
+203 206      1
+203 207      1
+203 21      1
+203 204      1
+204 205      1
+204 206      1
+204 22      1
+204 203      1
+205 204      1
+205 206      1
+205 22      1
+205 207      1
+206 207      1
+206 203      1
+206 204      1
+206 205      1
+207 206      1
+207 203      1
+207 204      1
+207 205      1
+208 99      1
+208 200      1
+208 104      1
+208 25      1
+209 66      1
+209 211      1
+209 210      1
+209 68      1
+210 76      1
+210 209      1
+210 75      1
+210 211      1
+211 68      1
+211 209      1
+211 9      1
+211 65      1
diff --git a/pysal/examples/baltim/baltim_q.gal b/pysal/examples/baltim/baltim_q.gal
new file mode 100644
index 0000000..c6351d8
--- /dev/null
+++ b/pysal/examples/baltim/baltim_q.gal
@@ -0,0 +1,423 @@
+0 211 baltim STATION
+1 7
+178 173 133 96 91 90 16
+2 5
+185 15 7 5 4
+3 2
+7 4
+4 5
+193 185 7 3 2
+5 5
+15 14 11 7 2
+6 3
+70 10 8
+7 5
+14 5 4 3 2
+8 4
+70 14 12 6
+9 6
+211 195 76 68 13 11
+10 4
+70 58 48 6
+11 6
+195 15 14 13 9 5
+12 5
+70 67 14 13 8
+13 7
+68 67 65 14 12 11 9
+14 6
+13 12 11 8 7 5
+15 6
+195 185 180 11 5 2
+16 9
+179 173 96 95 93 74 73 18 1
+17 6
+179 139 135 134 74 18
+18 4
+179 74 17 16
+19 6
+204 24 23 22 21 20
+20 5
+191 25 24 21 19
+21 7
+208 204 203 200 25 20 19
+22 5
+205 204 72 23 19
+23 6
+75 73 72 24 22 19
+24 8
+210 192 191 76 75 23 20 19
+25 6
+200 191 187 184 21 20
+26 4
+38 37 35 27
+27 5
+39 38 35 30 26
+28 6
+154 153 39 35 33 32
+29 5
+42 36 33 32 31
+30 5
+43 39 38 34 27
+31 8
+170 169 166 86 42 41 32 29
+32 6
+153 41 33 31 29 28
+33 6
+39 36 34 32 29 28
+34 6
+47 43 39 36 33 30
+35 5
+154 39 28 27 26
+36 7
+81 77 47 42 34 33 29
+37 4
+52 46 38 26
+38 7
+50 46 43 37 30 27 26
+39 6
+35 34 33 30 28 27
+40 6
+87 86 84 82 78 42
+41 7
+172 170 161 159 153 32 31
+42 7
+86 81 78 40 36 31 29
+43 6
+50 49 47 38 34 30
+44 6
+58 52 51 49 48 45
+45 5
+77 51 49 47 44
+46 4
+52 50 38 37
+47 6
+77 49 45 43 36 34
+48 3
+58 44 10
+49 6
+52 50 47 45 44 43
+50 5
+52 49 46 43 38
+51 6
+79 77 58 54 45 44
+52 5
+50 49 46 44 37
+53 6
+70 69 60 58 57 55
+54 6
+79 78 58 57 56 51
+55 4
+58 57 56 53
+56 4
+58 57 55 54
+57 7
+83 78 60 56 55 54 53
+58 9
+70 56 55 54 53 51 48 44 10
+59 5
+83 71 64 61 60
+60 6
+83 71 69 59 57 53
+61 5
+71 66 64 62 59
+62 6
+93 92 66 64 63 61
+63 6
+96 93 91 88 64 62
+64 7
+88 83 80 63 62 61 59
+65 5
+71 69 68 67 13
+66 5
+209 92 71 62 61
+67 5
+70 69 65 13 12
+68 6
+211 209 71 65 13 9
+69 6
+71 70 67 65 60 53
+70 8
+69 67 58 53 12 10 8 6
+71 8
+209 69 68 66 65 61 60 59
+72 6
+205 139 74 73 23 22
+73 7
+95 94 75 74 72 23 16
+74 6
+139 73 72 18 17 16
+75 5
+210 94 73 24 23
+76 6
+211 210 195 192 24 9
+77 6
+81 79 51 47 45 36
+78 8
+83 82 81 79 57 54 42 40
+79 5
+81 78 77 54 51
+80 5
+88 87 83 82 64
+81 5
+79 78 77 42 36
+82 5
+87 83 80 78 40
+83 7
+82 80 78 64 60 59 57
+84 6
+169 88 87 86 85 40
+85 6
+169 133 131 89 88 84
+86 5
+169 84 42 40 31
+87 5
+88 84 82 80 40
+88 9
+91 90 89 87 85 84 80 64 63
+89 4
+133 90 88 85
+90 5
+133 91 89 88 1
+91 5
+96 90 88 63 1
+92 7
+210 209 95 94 93 66 62
+93 6
+96 95 92 63 62 16
+94 5
+210 95 92 75 73
+95 5
+94 93 92 73 16
+96 5
+93 91 63 16 1
+97 3
+125 115 98
+98 6
+129 125 117 115 113 97
+99 4
+208 105 104 100
+100 7
+107 106 105 104 103 101 99
+101 5
+115 107 105 102 100
+102 5
+199 198 197 105 101
+103 6
+116 110 109 107 106 100
+104 6
+208 110 108 106 100 99
+105 6
+208 198 102 101 100 99
+106 4
+110 104 103 100
+107 6
+115 113 109 103 101 100
+108 5
+208 114 112 110 104
+109 5
+116 113 111 107 103
+110 6
+116 114 108 106 104 103
+111 5
+121 116 114 113 109
+112 5
+208 207 203 114 108
+113 7
+121 117 115 111 109 107 98
+114 8
+207 130 121 116 112 111 110 108
+115 5
+113 107 101 98 97
+116 5
+114 111 110 109 103
+117 5
+129 121 119 113 98
+118 8
+141 137 134 128 126 124 123 120
+119 4
+129 122 121 117
+120 6
+130 127 126 123 122 118
+121 7
+130 122 119 117 114 113 111
+122 6
+130 129 127 121 120 119
+123 5
+128 127 125 120 118
+124 4
+138 137 126 118
+125 6
+129 128 127 123 98 97
+126 6
+138 136 130 124 120 118
+127 5
+129 125 123 122 120
+128 4
+141 125 123 118
+129 6
+127 125 122 119 117 98
+130 7
+207 136 126 122 121 120 114
+131 8
+175 174 169 168 167 133 132 85
+132 4
+178 174 133 131
+133 7
+178 132 131 90 89 85 1
+134 7
+176 141 139 137 135 118 17
+135 5
+179 176 173 134 17
+136 6
+207 206 205 138 130 126
+137 5
+139 138 134 124 118
+138 6
+205 139 137 136 126 124
+139 7
+205 138 137 134 74 72 17
+140 7
+178 177 176 174 173 152 142
+141 5
+176 142 134 128 118
+142 5
+176 152 151 141 140
+143 6
+165 162 158 149 146 145
+144 3
+164 146 145
+145 5
+164 162 146 144 143
+146 6
+165 150 147 145 144 143
+147 6
+175 167 165 150 148 146
+148 5
+177 175 152 150 147
+149 6
+171 168 167 165 158 143
+150 5
+152 151 148 147 146
+151 3
+152 150 142
+152 6
+177 151 150 148 142 140
+153 6
+163 159 154 41 32 28
+154 4
+163 153 35 28
+155 6
+163 161 160 159 157 156
+156 5
+164 162 161 160 155
+157 3
+163 160 155
+158 6
+172 171 162 161 149 143
+159 5
+163 161 155 153 41
+160 4
+164 157 156 155
+161 7
+172 162 159 158 156 155 41
+162 6
+164 161 158 156 145 143
+163 5
+159 157 155 154 153
+164 5
+162 160 156 145 144
+165 5
+167 149 147 146 143
+166 5
+172 170 169 168 31
+167 6
+175 168 165 149 147 131
+168 7
+172 171 169 167 166 149 131
+169 7
+168 166 131 86 85 84 31
+170 4
+172 166 41 31
+171 4
+172 168 158 149
+172 7
+171 170 168 166 161 158 41
+173 7
+179 178 176 140 135 16 1
+174 6
+178 177 175 140 132 131
+175 6
+177 174 167 148 147 131
+176 6
+173 142 141 140 135 134
+177 5
+175 174 152 148 140
+178 6
+174 173 140 133 132 1
+179 5
+173 135 18 17 16
+180 5
+195 190 185 182 15
+181 5
+193 189 185 183 182
+182 8
+196 190 187 185 184 183 181 180
+183 6
+196 194 189 188 182 181
+184 6
+192 191 190 187 182 25
+185 7
+193 182 181 180 15 4 2
+186 5
+201 199 198 197 188
+187 6
+202 200 196 184 182 25
+188 5
+201 194 189 186 183
+189 4
+193 188 183 181
+190 5
+195 192 184 182 180
+191 5
+192 184 25 24 20
+192 6
+195 191 190 184 76 24
+193 4
+189 185 181 4
+194 5
+202 201 196 188 183
+195 7
+192 190 180 76 15 11 9
+196 5
+202 194 187 183 182
+197 4
+199 198 186 102
+198 6
+208 201 197 186 105 102
+199 3
+197 186 102
+200 5
+208 202 187 25 21
+201 6
+208 202 198 194 188 186
+202 6
+208 201 200 196 194 187
+203 6
+208 207 206 204 112 21
+204 6
+206 205 203 22 21 19
+205 7
+206 204 139 138 136 72 22
+206 5
+207 205 204 203 136
+207 6
+206 203 136 130 114 112
+208 11
+203 202 201 200 198 112 108 105 104 99 21
+209 6
+211 210 92 71 68 66
+210 7
+211 209 94 92 76 75 24
+211 5
+210 209 76 68 9
diff --git a/pysal/examples/baltim/baltimore.geojson b/pysal/examples/baltim/baltimore.geojson
new file mode 100644
index 0000000..1c8c631
--- /dev/null
+++ b/pysal/examples/baltim/baltimore.geojson
@@ -0,0 +1,218 @@
+{
+"type": "FeatureCollection",
+"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
+                                                                                
+"features": [
+{ "type": "Feature", "properties": { "STATION": 1, "PRICE": 47.000000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 148.000000, "CITCOU": 0.000000, "LOTSZ": 5.700000, "SQFT": 11.250000, "X": 907.000000, "Y": 534.000000 }, "geometry": { "type": "Point", "coordinates": [ 907.0, 534.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 2, "PRICE": 113.000000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 9.000000, "CITCOU": 1.000000, "LOTSZ": 279.510000, "SQFT": 28.920000, "X": 922.000000, "Y": 574.000000 }, "geometry": { "type": "Point", "coordinates": [ 922.0, 574.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 3, "PRICE": 165.000000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 23.000000, "CITCOU": 1.000000, "LOTSZ": 70.640000, "SQFT": 30.620000, "X": 920.000000, "Y": 581.000000 }, "geometry": { "type": "Point", "coordinates": [ 920.0, 581.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 4, "PRICE": 104.300000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 5.000000, "CITCOU": 1.000000, "LOTSZ": 174.630000, "SQFT": 26.120000, "X": 923.000000, "Y": 578.000000 }, "geometry": { "type": "Point", "coordinates": [ 923.0, 578.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 5, "PRICE": 62.500000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 19.000000, "CITCOU": 1.000000, "LOTSZ": 107.800000, "SQFT": 22.040000, "X": 918.000000, "Y": 574.000000 }, "geometry": { "type": "Point", "coordinates": [ 918.0, 574.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 6, "PRICE": 70.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 3.000000, "GAR": 1.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 139.640000, "SQFT": 39.420000, "X": 900.000000, "Y": 577.000000 }, "geometry": { "type": "Point", "coordinates": [ 900.0, 577.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 7, "PRICE": 127.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 2.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 250.000000, "SQFT": 21.880000, "X": 918.000000, "Y": 576.000000 }, "geometry": { "type": "Point", "coordinates": [ 918.0, 576.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 8, "PRICE": 53.000000, "NROOM": 8.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 100.000000, "SQFT": 36.720000, "X": 907.000000, "Y": 576.000000 }, "geometry": { "type": "Point", "coordinates": [ 907.0, 576.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 9, "PRICE": 64.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 115.900000, "SQFT": 25.600000, "X": 918.000000, "Y": 562.000000 }, "geometry": { "type": "Point", "coordinates": [ 918.0, 562.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 10, "PRICE": 145.000000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 4.000000, "CITCOU": 1.000000, "LOTSZ": 365.070000, "SQFT": 44.120000, "X": 897.000000, "Y": 576.000000 }, "geometry": { "type": "Point", "coordinates": [ 897.0, 576.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 11, "PRICE": 63.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 23.000000, "CITCOU": 1.000000, "LOTSZ": 81.100000, "SQFT": 19.880000, "X": 916.000000, "Y": 569.000000 }, "geometry": { "type": "Point", "coordinates": [ 916.0, 569.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 12, "PRICE": 58.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 91.000000, "SQFT": 12.080000, "X": 908.000000, "Y": 573.000000 }, "geometry": { "type": "Point", "coordinates": [ 908.0, 573.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 13, "PRICE": 65.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 1.000000, "LOTSZ": 74.350000, "SQFT": 10.990000, "X": 913.000000, "Y": 566.000000 }, "geometry": { "type": "Point", "coordinates": [ 913.0, 566.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 14, "PRICE": 52.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 46.170000, "SQFT": 13.600000, "X": 910.000000, "Y": 574.000000 }, "geometry": { "type": "Point", "coordinates": [ 910.0, 574.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 15, "PRICE": 48.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 18.000000, "CITCOU": 1.000000, "LOTSZ": 23.100000, "SQFT": 12.800000, "X": 922.000000, "Y": 569.000000 }, "geometry": { "type": "Point", "coordinates": [ 922.0, 569.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 16, "PRICE": 3.500000, "NROOM": 9.000000, "DWELL": 0.000000, "NBATH": 3.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 75.000000, "CITCOU": 0.000000, "LOTSZ": 14.400000, "SQFT": 29.790000, "X": 913.000000, "Y": 536.000000 }, "geometry": { "type": "Point", "coordinates": [ 913.0, 536.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 17, "PRICE": 12.800000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 60.000000, "CITCOU": 0.000000, "LOTSZ": 8.970000, "SQFT": 14.300000, "X": 919.000000, "Y": 533.500000 }, "geometry": { "type": "Point", "coordinates": [ 919.0, 533.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 18, "PRICE": 17.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 65.000000, "CITCOU": 0.000000, "LOTSZ": 10.220000, "SQFT": 13.720000, "X": 917.500000, "Y": 535.000000 }, "geometry": { "type": "Point", "coordinates": [ 917.5, 535.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 19, "PRICE": 36.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 14.000000, "CITCOU": 1.000000, "LOTSZ": 38.890000, "SQFT": 11.840000, "X": 933.000000, "Y": 548.500000 }, "geometry": { "type": "Point", "coordinates": [ 933.0, 548.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 20, "PRICE": 41.900000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 45.000000, "CITCOU": 0.000000, "LOTSZ": 70.000000, "SQFT": 18.060000, "X": 932.500000, "Y": 552.500000 }, "geometry": { "type": "Point", "coordinates": [ 932.5, 552.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 21, "PRICE": 53.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 14.000000, "CITCOU": 1.000000, "LOTSZ": 70.820000, "SQFT": 10.720000, "X": 936.500000, "Y": 548.500000 }, "geometry": { "type": "Point", "coordinates": [ 936.5, 548.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 22, "PRICE": 24.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 0.000000, "LOTSZ": 18.390000, "SQFT": 8.960000, "X": 930.000000, "Y": 542.500000 }, "geometry": { "type": "Point", "coordinates": [ 930.0, 542.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 23, "PRICE": 24.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 35.000000, "CITCOU": 0.000000, "LOTSZ": 73.250000, "SQFT": 14.380000, "X": 925.000000, "Y": 545.000000 }, "geometry": { "type": "Point", "coordinates": [ 925.0, 545.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 24, "PRICE": 55.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 5.000000, "CITCOU": 0.000000, "LOTSZ": 56.120000, "SQFT": 36.750000, "X": 927.000000, "Y": 552.000000 }, "geometry": { "type": "Point", "coordinates": [ 927.0, 552.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 25, "PRICE": 60.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 60.000000, "CITCOU": 1.000000, "LOTSZ": 400.370000, "SQFT": 20.000000, "X": 936.000000, "Y": 554.500000 }, "geometry": { "type": "Point", "coordinates": [ 936.0, 554.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 26, "PRICE": 51.000000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 14.000000, "CITCOU": 1.000000, "LOTSZ": 87.960000, "SQFT": 22.820000, "X": 860.000000, "Y": 554.000000 }, "geometry": { "type": "Point", "coordinates": [ 860.0, 554.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 27, "PRICE": 46.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 19.000000, "CITCOU": 1.000000, "LOTSZ": 70.400000, "SQFT": 24.860000, "X": 868.000000, "Y": 550.500000 }, "geometry": { "type": "Point", "coordinates": [ 868.0, 550.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 28, "PRICE": 46.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 11.000000, "CITCOU": 1.000000, "LOTSZ": 84.000000, "SQFT": 19.200000, "X": 872.500000, "Y": 543.000000 }, "geometry": { "type": "Point", "coordinates": [ 872.5, 543.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 29, "PRICE": 44.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 16.000000, "CITCOU": 1.000000, "LOTSZ": 52.550000, "SQFT": 11.580000, "X": 880.500000, "Y": 544.500000 }, "geometry": { "type": "Point", "coordinates": [ 880.5, 544.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 30, "PRICE": 54.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 1.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 19.000000, "CITCOU": 1.000000, "LOTSZ": 77.760000, "SQFT": 26.000000, "X": 869.000000, "Y": 551.500000 }, "geometry": { "type": "Point", "coordinates": [ 869.0, 551.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 31, "PRICE": 42.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 17.000000, "CITCOU": 0.000000, "LOTSZ": 105.300000, "SQFT": 14.400000, "X": 883.000000, "Y": 538.000000 }, "geometry": { "type": "Point", "coordinates": [ 883.0, 538.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 32, "PRICE": 44.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 24.000000, "CITCOU": 1.000000, "LOTSZ": 70.000000, "SQFT": 11.620000, "X": 876.000000, "Y": 541.000000 }, "geometry": { "type": "Point", "coordinates": [ 876.0, 541.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 33, "PRICE": 44.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 65.000000, "SQFT": 23.080000, "X": 875.500000, "Y": 549.000000 }, "geometry": { "type": "Point", "coordinates": [ 875.5, 549.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 34, "PRICE": 37.900000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 27.000000, "CITCOU": 1.000000, "LOTSZ": 62.640000, "SQFT": 23.760000, "X": 875.000000, "Y": 550.000000 }, "geometry": { "type": "Point", "coordinates": [ 875.0, 550.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 35, "PRICE": 33.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 3.000000, "CITCOU": 1.000000, "LOTSZ": 175.460000, "SQFT": 15.600000, "X": 868.000000, "Y": 545.000000 }, "geometry": { "type": "Point", "coordinates": [ 868.0, 545.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 36, "PRICE": 43.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 21.000000, "CITCOU": 1.000000, "LOTSZ": 268.000000, "SQFT": 10.000000, "X": 879.000000, "Y": 552.000000 }, "geometry": { "type": "Point", "coordinates": [ 879.0, 552.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 37, "PRICE": 49.600000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 1.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 96.850000, "SQFT": 22.800000, "X": 860.000000, "Y": 555.500000 }, "geometry": { "type": "Point", "coordinates": [ 860.0, 555.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 38, "PRICE": 52.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 4.000000, "CITCOU": 1.000000, "LOTSZ": 16.940000, "SQFT": 16.760000, "X": 868.000000, "Y": 556.500000 }, "geometry": { "type": "Point", "coordinates": [ 868.0, 556.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 39, "PRICE": 45.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 24.000000, "CITCOU": 1.000000, "LOTSZ": 75.000000, "SQFT": 18.600000, "X": 873.000000, "Y": 549.000000 }, "geometry": { "type": "Point", "coordinates": [ 873.0, 549.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 40, "PRICE": 37.500000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 40.000000, "CITCOU": 0.000000, "LOTSZ": 84.000000, "SQFT": 22.100000, "X": 888.500000, "Y": 545.000000 }, "geometry": { "type": "Point", "coordinates": [ 888.5, 545.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 41, "PRICE": 50.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 23.000000, "CITCOU": 1.000000, "LOTSZ": 36.300000, "SQFT": 14.280000, "X": 878.000000, "Y": 532.000000 }, "geometry": { "type": "Point", "coordinates": [ 878.0, 532.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 42, "PRICE": 35.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 35.000000, "CITCOU": 0.000000, "LOTSZ": 67.760000, "SQFT": 15.360000, "X": 883.000000, "Y": 545.500000 }, "geometry": { "type": "Point", "coordinates": [ 883.0, 545.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 43, "PRICE": 42.900000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 77.030000, "SQFT": 16.000000, "X": 873.000000, "Y": 557.500000 }, "geometry": { "type": "Point", "coordinates": [ 873.0, 557.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 44, "PRICE": 107.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 17.000000, "CITCOU": 1.000000, "LOTSZ": 246.620000, "SQFT": 23.040000, "X": 882.000000, "Y": 568.000000 }, "geometry": { "type": "Point", "coordinates": [ 882.0, 568.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 45, "PRICE": 112.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 3.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 26.000000, "CITCOU": 1.000000, "LOTSZ": 91.050000, "SQFT": 24.940000, "X": 881.500000, "Y": 562.000000 }, "geometry": { "type": "Point", "coordinates": [ 881.5, 562.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 46, "PRICE": 44.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 15.000000, "CITCOU": 1.000000, "LOTSZ": 76.500000, "SQFT": 11.820000, "X": 867.000000, "Y": 560.000000 }, "geometry": { "type": "Point", "coordinates": [ 867.0, 560.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 47, "PRICE": 55.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 29.000000, "CITCOU": 1.000000, "LOTSZ": 75.000000, "SQFT": 12.880000, "X": 877.000000, "Y": 557.000000 }, "geometry": { "type": "Point", "coordinates": [ 877.0, 557.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 48, "PRICE": 102.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 24.000000, "CITCOU": 1.000000, "LOTSZ": 362.120000, "SQFT": 11.200000, "X": 889.000000, "Y": 571.000000 }, "geometry": { "type": "Point", "coordinates": [ 889.0, 571.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 49, "PRICE": 35.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 1.000000, "LOTSZ": 102.260000, "SQFT": 18.120000, "X": 876.500000, "Y": 564.500000 }, "geometry": { "type": "Point", "coordinates": [ 876.5, 564.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 50, "PRICE": 62.900000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 3.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 1.000000, "AGE": 19.000000, "CITCOU": 1.000000, "LOTSZ": 169.400000, "SQFT": 38.250000, "X": 870.500000, "Y": 560.000000 }, "geometry": { "type": "Point", "coordinates": [ 870.5, 560.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 51, "PRICE": 39.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 64.500000, "SQFT": 17.680000, "X": 884.500000, "Y": 560.000000 }, "geometry": { "type": "Point", "coordinates": [ 884.5, 560.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 52, "PRICE": 110.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 18.000000, "CITCOU": 1.000000, "LOTSZ": 315.900000, "SQFT": 19.020000, "X": 866.000000, "Y": 567.500000 }, "geometry": { "type": "Point", "coordinates": [ 866.0, 567.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 53, "PRICE": 8.000000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 74.000000, "CITCOU": 0.000000, "LOTSZ": 56.530000, "SQFT": 32.800000, "X": 899.000000, "Y": 560.000000 }, "geometry": { "type": "Point", "coordinates": [ 899.0, 560.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 54, "PRICE": 62.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 3.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 0.000000, "LOTSZ": 100.000000, "SQFT": 15.160000, "X": 890.000000, "Y": 559.000000 }, "geometry": { "type": "Point", "coordinates": [ 890.0, 559.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 55, "PRICE": 60.000000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 1.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 80.000000, "CITCOU": 0.000000, "LOTSZ": 119.970000, "SQFT": 25.080000, "X": 896.000000, "Y": 560.000000 }, "geometry": { "type": "Point", "coordinates": [ 896.0, 560.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 56, "PRICE": 85.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 1.500000, "GAR": 0.000000, "AGE": 24.000000, "CITCOU": 1.000000, "LOTSZ": 117.000000, "SQFT": 21.975000, "X": 892.000000, "Y": 561.000000 }, "geometry": { "type": "Point", "coordinates": [ 892.0, 561.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 57, "PRICE": 57.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 0.000000, "LOTSZ": 133.660000, "SQFT": 12.600000, "X": 895.000000, "Y": 559.000000 }, "geometry": { "type": "Point", "coordinates": [ 895.0, 559.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 58, "PRICE": 110.000000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 3.000000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 7.000000, "CITCOU": 1.000000, "LOTSZ": 144.420000, "SQFT": 23.520000, "X": 892.000000, "Y": 565.000000 }, "geometry": { "type": "Point", "coordinates": [ 892.0, 565.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 59, "PRICE": 67.700000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 47.000000, "CITCOU": 0.000000, "LOTSZ": 85.500000, "SQFT": 17.520000, "X": 902.500000, "Y": 552.000000 }, "geometry": { "type": "Point", "coordinates": [ 902.5, 552.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 60, "PRICE": 89.500000, "NROOM": 10.000000, "DWELL": 1.000000, "NBATH": 3.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 3.000000, "GAR": 1.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 263.500000, "SQFT": 47.610000, "X": 902.000000, "Y": 557.000000 }, "geometry": { "type": "Point", "coordinates": [ 902.0, 557.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 61, "PRICE": 70.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.500000, "GAR": 0.000000, "AGE": 45.000000, "CITCOU": 0.000000, "LOTSZ": 52.000000, "SQFT": 20.550000, "X": 905.000000, "Y": 550.000000 }, "geometry": { "type": "Point", "coordinates": [ 905.0, 550.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 62, "PRICE": 74.000000, "NROOM": 8.000000, "DWELL": 0.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 2.000000, "AGE": 48.000000, "CITCOU": 0.000000, "LOTSZ": 70.400000, "SQFT": 35.520000, "X": 905.000000, "Y": 548.000000 }, "geometry": { "type": "Point", "coordinates": [ 905.0, 548.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 63, "PRICE": 22.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 1.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 12.960000, "SQFT": 14.400000, "X": 904.500000, "Y": 543.000000 }, "geometry": { "type": "Point", "coordinates": [ 904.5, 543.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 64, "PRICE": 13.000000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 7.500000, "SQFT": 8.400000, "X": 903.000000, "Y": 547.000000 }, "geometry": { "type": "Point", "coordinates": [ 903.0, 547.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 65, "PRICE": 48.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 48.000000, "CITCOU": 1.000000, "LOTSZ": 62.500000, "SQFT": 13.680000, "X": 910.000000, "Y": 562.500000 }, "geometry": { "type": "Point", "coordinates": [ 910.0, 562.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 66, "PRICE": 24.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 55.000000, "CITCOU": 0.000000, "LOTSZ": 24.910000, "SQFT": 14.480000, "X": 910.000000, "Y": 552.000000 }, "geometry": { "type": "Point", "coordinates": [ 910.0, 552.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 67, "PRICE": 53.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 27.000000, "CITCOU": 1.000000, "LOTSZ": 29.500000, "SQFT": 12.800000, "X": 908.500000, "Y": 565.000000 }, "geometry": { "type": "Point", "coordinates": [ 908.5, 565.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 68, "PRICE": 34.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 0.000000, "LOTSZ": 37.600000, "SQFT": 12.800000, "X": 913.300000, "Y": 558.500000 }, "geometry": { "type": "Point", "coordinates": [ 913.3, 558.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 69, "PRICE": 53.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 33.000000, "CITCOU": 1.000000, "LOTSZ": 22.000000, "SQFT": 18.000000, "X": 907.500000, "Y": 563.000000 }, "geometry": { "type": "Point", "coordinates": [ 907.5, 563.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 70, "PRICE": 87.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 3.000000, "AGE": 40.000000, "CITCOU": 1.000000, "LOTSZ": 108.050000, "SQFT": 15.400000, "X": 902.000000, "Y": 572.000000 }, "geometry": { "type": "Point", "coordinates": [ 902.0, 572.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 71, "PRICE": 33.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 20.520000, "SQFT": 10.080000, "X": 908.000000, "Y": 556.000000 }, "geometry": { "type": "Point", "coordinates": [ 908.0, 556.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 72, "PRICE": 24.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 17.600000, "SQFT": 8.960000, "X": 925.000000, "Y": 541.500000 }, "geometry": { "type": "Point", "coordinates": [ 925.0, 541.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 73, "PRICE": 9.600000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 40.000000, "CITCOU": 0.000000, "LOTSZ": 11.200000, "SQFT": 8.960000, "X": 919.000000, "Y": 540.500000 }, "geometry": { "type": "Point", "coordinates": [ 919.0, 540.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 74, "PRICE": 30.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.500000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 0.000000, "LOTSZ": 19.990000, "SQFT": 20.000000, "X": 919.500000, "Y": 537.500000 }, "geometry": { "type": "Point", "coordinates": [ 919.5, 537.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 75, "PRICE": 41.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 40.000000, "CITCOU": 0.000000, "LOTSZ": 92.310000, "SQFT": 12.880000, "X": 922.500000, "Y": 549.000000 }, "geometry": { "type": "Point", "coordinates": [ 922.5, 549.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 76, "PRICE": 30.000000, "NROOM": 3.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 0.000000, "LOTSZ": 31.500000, "SQFT": 12.000000, "X": 921.000000, "Y": 558.000000 }, "geometry": { "type": "Point", "coordinates": [ 921.0, 558.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 77, "PRICE": 38.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 3.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 28.940000, "SQFT": 18.160000, "X": 882.000000, "Y": 557.500000 }, "geometry": { "type": "Point", "coordinates": [ 882.0, 557.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 78, "PRICE": 20.700000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 29.000000, "CITCOU": 0.000000, "LOTSZ": 18.480000, "SQFT": 14.280000, "X": 889.000000, "Y": 552.000000 }, "geometry": { "type": "Point", "coordinates": [ 889.0, 552.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 79, "PRICE": 49.900000, "NROOM": 9.000000, "DWELL": 1.000000, "NBATH": 3.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.500000, "GAR": 2.000000, "AGE": 49.000000, "CITCOU": 0.000000, "LOTSZ": 127.100000, "SQFT": 26.000000, "X": 887.000000, "Y": 555.000000 }, "geometry": { "type": "Point", "coordinates": [ 887.0, 555.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 80, "PRICE": 18.600000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 35.000000, "CITCOU": 0.000000, "LOTSZ": 14.060000, "SQFT": 12.020000, "X": 896.000000, "Y": 548.000000 }, "geometry": { "type": "Point", "coordinates": [ 896.0, 548.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 81, "PRICE": 39.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 55.000000, "CITCOU": 0.000000, "LOTSZ": 127.100000, "SQFT": 20.800000, "X": 887.000000, "Y": 554.000000 }, "geometry": { "type": "Point", "coordinates": [ 887.0, 554.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 82, "PRICE": 34.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 0.000000, "LOTSZ": 19.000000, "SQFT": 11.780000, "X": 893.000000, "Y": 546.500000 }, "geometry": { "type": "Point", "coordinates": [ 893.0, 546.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 83, "PRICE": 16.000000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 15.000000, "CITCOU": 0.000000, "LOTSZ": 16.100000, "SQFT": 8.680000, "X": 896.000000, "Y": 550.000000 }, "geometry": { "type": "Point", "coordinates": [ 896.0, 550.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 84, "PRICE": 18.900000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 40.000000, "CITCOU": 0.000000, "LOTSZ": 23.980000, "SQFT": 17.600000, "X": 890.400000, "Y": 539.000000 }, "geometry": { "type": "Point", "coordinates": [ 890.4, 539.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 85, "PRICE": 15.200000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 35.000000, "CITCOU": 0.000000, "LOTSZ": 19.000000, "SQFT": 11.400000, "X": 894.000000, "Y": 534.000000 }, "geometry": { "type": "Point", "coordinates": [ 894.0, 534.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 86, "PRICE": 41.500000, "NROOM": 9.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 70.000000, "CITCOU": 0.000000, "LOTSZ": 132.210000, "SQFT": 44.550000, "X": 887.000000, "Y": 540.400000 }, "geometry": { "type": "Point", "coordinates": [ 887.0, 540.4 ] } },
+{ "type": "Feature", "properties": { "STATION": 87, "PRICE": 53.000000, "NROOM": 10.000000, "DWELL": 1.000000, "NBATH": 5.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 122.100000, "SQFT": 46.320000, "X": 893.600000, "Y": 543.000000 }, "geometry": { "type": "Point", "coordinates": [ 893.6, 543.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 88, "PRICE": 22.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 16.000000, "SQFT": 10.240000, "X": 896.500000, "Y": 541.000000 }, "geometry": { "type": "Point", "coordinates": [ 896.5, 541.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 89, "PRICE": 24.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 0.000000, "LOTSZ": 23.780000, "SQFT": 9.600000, "X": 898.000000, "Y": 535.000000 }, "geometry": { "type": "Point", "coordinates": [ 898.0, 535.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 90, "PRICE": 6.700000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 0.000000, "LOTSZ": 12.000000, "SQFT": 31.200000, "X": 900.500000, "Y": 535.000000 }, "geometry": { "type": "Point", "coordinates": [ 900.5, 535.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 91, "PRICE": 32.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 3.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 23.760000, "SQFT": 26.400000, "X": 903.000000, "Y": 540.000000 }, "geometry": { "type": "Point", "coordinates": [ 903.0, 540.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 92, "PRICE": 30.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 19.900000, "SQFT": 13.600000, "X": 913.000000, "Y": 547.500000 }, "geometry": { "type": "Point", "coordinates": [ 913.0, 547.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 93, "PRICE": 59.000000, "NROOM": 8.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 1.000000, "AGE": 70.000000, "CITCOU": 0.000000, "LOTSZ": 20.300000, "SQFT": 27.480000, "X": 909.000000, "Y": 542.500000 }, "geometry": { "type": "Point", "coordinates": [ 909.0, 542.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 94, "PRICE": 29.500000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 55.000000, "CITCOU": 0.000000, "LOTSZ": 27.600000, "SQFT": 17.860000, "X": 915.500000, "Y": 545.000000 }, "geometry": { "type": "Point", "coordinates": [ 915.5, 545.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 95, "PRICE": 26.000000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 40.000000, "CITCOU": 0.000000, "LOTSZ": 29.690000, "SQFT": 18.040000, "X": 915.000000, "Y": 543.500000 }, "geometry": { "type": "Point", "coordinates": [ 915.0, 543.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 96, "PRICE": 16.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 70.000000, "CITCOU": 0.000000, "LOTSZ": 14.720000, "SQFT": 14.840000, "X": 908.000000, "Y": 539.000000 }, "geometry": { "type": "Point", "coordinates": [ 908.0, 539.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 97, "PRICE": 39.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 70.400000, "SQFT": 10.460000, "X": 957.000000, "Y": 508.000000 }, "geometry": { "type": "Point", "coordinates": [ 957.0, 508.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 98, "PRICE": 48.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 66.250000, "SQFT": 14.560000, "X": 955.500000, "Y": 513.500000 }, "geometry": { "type": "Point", "coordinates": [ 955.5, 513.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 99, "PRICE": 33.500000, "NROOM": 3.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 58.500000, "SQFT": 6.960000, "X": 953.500000, "Y": 550.500000 }, "geometry": { "type": "Point", "coordinates": [ 953.5, 550.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 100, "PRICE": 46.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 18.000000, "CITCOU": 1.000000, "LOTSZ": 91.250000, "SQFT": 9.500000, "X": 960.000000, "Y": 550.000000 }, "geometry": { "type": "Point", "coordinates": [ 960.0, 550.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 101, "PRICE": 54.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 93.120000, "SQFT": 11.860000, "X": 971.000000, "Y": 547.500000 }, "geometry": { "type": "Point", "coordinates": [ 971.0, 547.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 102, "PRICE": 57.900000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 2.000000, "CITCOU": 1.000000, "LOTSZ": 104.500000, "SQFT": 12.880000, "X": 987.500000, "Y": 561.000000 }, "geometry": { "type": "Point", "coordinates": [ 987.5, 561.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 103, "PRICE": 37.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 8.000000, "CITCOU": 1.000000, "LOTSZ": 42.740000, "SQFT": 12.320000, "X": 960.500000, "Y": 542.000000 }, "geometry": { "type": "Point", "coordinates": [ 960.5, 542.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 104, "PRICE": 32.000000, "NROOM": 3.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 50.000000, "SQFT": 6.720000, "X": 953.500000, "Y": 548.000000 }, "geometry": { "type": "Point", "coordinates": [ 953.5, 548.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 105, "PRICE": 31.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 18.000000, "CITCOU": 1.000000, "LOTSZ": 25.190000, "SQFT": 10.080000, "X": 957.000000, "Y": 553.000000 }, "geometry": { "type": "Point", "coordinates": [ 957.0, 553.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 106, "PRICE": 34.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 1.000000, "LOTSZ": 75.000000, "SQFT": 15.600000, "X": 957.000000, "Y": 545.500000 }, "geometry": { "type": "Point", "coordinates": [ 957.0, 545.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 107, "PRICE": 29.000000, "NROOM": 3.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 35.000000, "CITCOU": 1.000000, "LOTSZ": 46.160000, "SQFT": 6.720000, "X": 964.000000, "Y": 541.000000 }, "geometry": { "type": "Point", "coordinates": [ 964.0, 541.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 108, "PRICE": 32.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 21.000000, "CITCOU": 1.000000, "LOTSZ": 18.000000, "SQFT": 11.520000, "X": 952.500000, "Y": 544.500000 }, "geometry": { "type": "Point", "coordinates": [ 952.5, 544.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 109, "PRICE": 51.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 169.850000, "SQFT": 11.760000, "X": 959.000000, "Y": 537.500000 }, "geometry": { "type": "Point", "coordinates": [ 959.0, 537.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 110, "PRICE": 31.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 24.000000, "CITCOU": 1.000000, "LOTSZ": 28.000000, "SQFT": 10.240000, "X": 955.000000, "Y": 543.500000 }, "geometry": { "type": "Point", "coordinates": [ 955.0, 543.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 111, "PRICE": 41.800000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 13.000000, "CITCOU": 1.000000, "LOTSZ": 49.130000, "SQFT": 11.520000, "X": 955.000000, "Y": 533.000000 }, "geometry": { "type": "Point", "coordinates": [ 955.0, 533.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 112, "PRICE": 48.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 65.250000, "SQFT": 9.280000, "X": 947.000000, "Y": 541.500000 }, "geometry": { "type": "Point", "coordinates": [ 947.0, 541.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 113, "PRICE": 28.000000, "NROOM": 3.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 18.000000, "CITCOU": 1.000000, "LOTSZ": 100.000000, "SQFT": 6.720000, "X": 958.000000, "Y": 529.000000 }, "geometry": { "type": "Point", "coordinates": [ 958.0, 529.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 114, "PRICE": 35.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 1.000000, "LOTSZ": 70.000000, "SQFT": 15.600000, "X": 952.000000, "Y": 536.500000 }, "geometry": { "type": "Point", "coordinates": [ 952.0, 536.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 115, "PRICE": 46.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 303.830000, "SQFT": 15.500000, "X": 975.000000, "Y": 527.500000 }, "geometry": { "type": "Point", "coordinates": [ 975.0, 527.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 116, "PRICE": 51.900000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 300.000000, "SQFT": 9.840000, "X": 958.500000, "Y": 537.500000 }, "geometry": { "type": "Point", "coordinates": [ 958.5, 537.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 117, "PRICE": 35.400000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 28.000000, "CITCOU": 1.000000, "LOTSZ": 59.800000, "SQFT": 15.600000, "X": 951.000000, "Y": 520.000000 }, "geometry": { "type": "Point", "coordinates": [ 951.0, 520.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 118, "PRICE": 16.000000, "NROOM": 3.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 45.000000, "SQFT": 13.760000, "X": 932.500000, "Y": 520.500000 }, "geometry": { "type": "Point", "coordinates": [ 932.5, 520.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 119, "PRICE": 35.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 51.710000, "SQFT": 10.240000, "X": 945.000000, "Y": 520.000000 }, "geometry": { "type": "Point", "coordinates": [ 945.0, 520.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 120, "PRICE": 35.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 38.000000, "CITCOU": 1.000000, "LOTSZ": 51.420000, "SQFT": 5.760000, "X": 936.000000, "Y": 522.500000 }, "geometry": { "type": "Point", "coordinates": [ 936.0, 522.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 121, "PRICE": 36.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 17.000000, "CITCOU": 1.000000, "LOTSZ": 18.020000, "SQFT": 10.080000, "X": 947.000000, "Y": 525.000000 }, "geometry": { "type": "Point", "coordinates": [ 947.0, 525.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 122, "PRICE": 35.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 20.690000, "SQFT": 11.520000, "X": 941.500000, "Y": 521.000000 }, "geometry": { "type": "Point", "coordinates": [ 941.5, 521.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 123, "PRICE": 45.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.500000, "GAR": 0.000000, "AGE": 27.000000, "CITCOU": 1.000000, "LOTSZ": 79.810000, "SQFT": 12.150000, "X": 938.000000, "Y": 516.000000 }, "geometry": { "type": "Point", "coordinates": [ 938.0, 516.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 124, "PRICE": 40.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 62.500000, "SQFT": 9.770000, "X": 932.000000, "Y": 526.500000 }, "geometry": { "type": "Point", "coordinates": [ 932.0, 526.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 125, "PRICE": 35.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 50.000000, "SQFT": 15.000000, "X": 940.000000, "Y": 514.000000 }, "geometry": { "type": "Point", "coordinates": [ 940.0, 514.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 126, "PRICE": 38.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 55.000000, "SQFT": 14.400000, "X": 934.500000, "Y": 526.000000 }, "geometry": { "type": "Point", "coordinates": [ 934.5, 526.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 127, "PRICE": 37.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 1.000000, "LOTSZ": 54.840000, "SQFT": 14.500000, "X": 940.000000, "Y": 519.000000 }, "geometry": { "type": "Point", "coordinates": [ 940.0, 519.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 128, "PRICE": 23.000000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 1.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 60.000000, "CITCOU": 1.000000, "LOTSZ": 68.540000, "SQFT": 22.540000, "X": 938.000000, "Y": 513.500000 }, "geometry": { "type": "Point", "coordinates": [ 938.0, 513.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 129, "PRICE": 25.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 16.160000, "SQFT": 10.240000, "X": 945.000000, "Y": 519.000000 }, "geometry": { "type": "Point", "coordinates": [ 945.0, 519.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 130, "PRICE": 39.500000, "NROOM": 3.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 30.000000, "CITCOU": 1.000000, "LOTSZ": 62.500000, "SQFT": 7.800000, "X": 940.500000, "Y": 528.500000 }, "geometry": { "type": "Point", "coordinates": [ 940.5, 528.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 131, "PRICE": 21.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 28.000000, "CITCOU": 0.000000, "LOTSZ": 11.980000, "SQFT": 8.400000, "X": 894.500000, "Y": 526.500000 }, "geometry": { "type": "Point", "coordinates": [ 894.5, 526.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 132, "PRICE": 9.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 45.000000, "CITCOU": 0.000000, "LOTSZ": 9.100000, "SQFT": 10.920000, "X": 900.000000, "Y": 527.000000 }, "geometry": { "type": "Point", "coordinates": [ 900.0, 527.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 133, "PRICE": 67.500000, "NROOM": 8.000000, "DWELL": 0.000000, "NBATH": 3.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 100.000000, "CITCOU": 0.000000, "LOTSZ": 21.120000, "SQFT": 42.900000, "X": 901.500000, "Y": 530.000000 }, "geometry": { "type": "Point", "coordinates": [ 901.5, 530.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 134, "PRICE": 13.400000, "NROOM": 3.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 60.000000, "CITCOU": 0.000000, "LOTSZ": 7.000000, "SQFT": 9.000000, "X": 920.500000, "Y": 527.500000 }, "geometry": { "type": "Point", "coordinates": [ 920.5, 527.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 135, "PRICE": 12.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 10.130000, "SQFT": 10.500000, "X": 918.500000, "Y": 528.500000 }, "geometry": { "type": "Point", "coordinates": [ 918.5, 528.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 136, "PRICE": 28.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 35.000000, "CITCOU": 1.000000, "LOTSZ": 21.600000, "SQFT": 10.080000, "X": 937.000000, "Y": 531.500000 }, "geometry": { "type": "Point", "coordinates": [ 937.0, 531.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 137, "PRICE": 23.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 9.660000, "SQFT": 12.600000, "X": 925.500000, "Y": 529.500000 }, "geometry": { "type": "Point", "coordinates": [ 925.5, 529.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 138, "PRICE": 33.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 24.000000, "CITCOU": 1.000000, "LOTSZ": 16.000000, "SQFT": 8.960000, "X": 933.000000, "Y": 530.500000 }, "geometry": { "type": "Point", "coordinates": [ 933.0, 530.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 139, "PRICE": 9.000000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 8.600000, "SQFT": 8.580000, "X": 924.500000, "Y": 531.000000 }, "geometry": { "type": "Point", "coordinates": [ 924.5, 531.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 140, "PRICE": 11.000000, "NROOM": 3.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 33.000000, "CITCOU": 0.000000, "LOTSZ": 19.840000, "SQFT": 7.560000, "X": 907.000000, "Y": 516.000000 }, "geometry": { "type": "Point", "coordinates": [ 907.0, 516.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 141, "PRICE": 30.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 40.000000, "CITCOU": 0.000000, "LOTSZ": 18.000000, "SQFT": 10.800000, "X": 912.500000, "Y": 509.500000 }, "geometry": { "type": "Point", "coordinates": [ 912.5, 509.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 142, "PRICE": 31.650000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 18.000000, "SQFT": 13.440000, "X": 911.000000, "Y": 511.000000 }, "geometry": { "type": "Point", "coordinates": [ 911.0, 511.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 143, "PRICE": 33.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 17.600000, "SQFT": 10.240000, "X": 885.000000, "Y": 515.000000 }, "geometry": { "type": "Point", "coordinates": [ 885.0, 515.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 144, "PRICE": 33.400000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 48.000000, "CITCOU": 1.000000, "LOTSZ": 36.440000, "SQFT": 14.440000, "X": 883.500000, "Y": 505.500000 }, "geometry": { "type": "Point", "coordinates": [ 883.5, 505.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 145, "PRICE": 47.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 10.000000, "CITCOU": 1.000000, "LOTSZ": 23.400000, "SQFT": 12.240000, "X": 883.000000, "Y": 512.500000 }, "geometry": { "type": "Point", "coordinates": [ 883.0, 512.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 146, "PRICE": 40.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.500000, "GAR": 0.000000, "AGE": 45.000000, "CITCOU": 1.000000, "LOTSZ": 70.000000, "SQFT": 13.200000, "X": 888.000000, "Y": 511.500000 }, "geometry": { "type": "Point", "coordinates": [ 888.0, 511.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 147, "PRICE": 46.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 20.000000, "CITCOU": 1.000000, "LOTSZ": 51.790000, "SQFT": 9.600000, "X": 893.500000, "Y": 514.000000 }, "geometry": { "type": "Point", "coordinates": [ 893.5, 514.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 148, "PRICE": 45.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 61.740000, "SQFT": 15.220000, "X": 897.500000, "Y": 515.000000 }, "geometry": { "type": "Point", "coordinates": [ 897.5, 515.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 149, "PRICE": 57.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 60.250000, "SQFT": 24.160000, "X": 888.000000, "Y": 521.000000 }, "geometry": { "type": "Point", "coordinates": [ 888.0, 521.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 150, "PRICE": 29.900000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 33.660000, "SQFT": 10.240000, "X": 897.500000, "Y": 510.500000 }, "geometry": { "type": "Point", "coordinates": [ 897.5, 510.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 151, "PRICE": 30.000000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 21.000000, "CITCOU": 1.000000, "LOTSZ": 29.340000, "SQFT": 10.240000, "X": 901.000000, "Y": 509.500000 }, "geometry": { "type": "Point", "coordinates": [ 901.0, 509.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 152, "PRICE": 34.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 29.000000, "CITCOU": 1.000000, "LOTSZ": 56.250000, "SQFT": 9.880000, "X": 902.500000, "Y": 513.000000 }, "geometry": { "type": "Point", "coordinates": [ 902.5, 513.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 153, "PRICE": 51.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 18.000000, "CITCOU": 1.000000, "LOTSZ": 66.300000, "SQFT": 23.200000, "X": 873.000000, "Y": 535.000000 }, "geometry": { "type": "Point", "coordinates": [ 873.0, 535.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 154, "PRICE": 64.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 2.000000, "CITCOU": 1.000000, "LOTSZ": 95.930000, "SQFT": 17.680000, "X": 867.000000, "Y": 535.500000 }, "geometry": { "type": "Point", "coordinates": [ 867.0, 535.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 155, "PRICE": 57.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 19.000000, "CITCOU": 1.000000, "LOTSZ": 104.500000, "SQFT": 24.300000, "X": 869.000000, "Y": 526.000000 }, "geometry": { "type": "Point", "coordinates": [ 869.0, 526.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 156, "PRICE": 85.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 49.000000, "CITCOU": 1.000000, "LOTSZ": 360.000000, "SQFT": 35.940000, "X": 873.500000, "Y": 523.500000 }, "geometry": { "type": "Point", "coordinates": [ 873.5, 523.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 157, "PRICE": 61.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 10.000000, "CITCOU": 1.000000, "LOTSZ": 60.000000, "SQFT": 21.600000, "X": 864.000000, "Y": 527.500000 }, "geometry": { "type": "Point", "coordinates": [ 864.0, 527.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 158, "PRICE": 38.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 1.000000, "LOTSZ": 19.000000, "SQFT": 11.020000, "X": 882.000000, "Y": 524.500000 }, "geometry": { "type": "Point", "coordinates": [ 882.0, 524.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 159, "PRICE": 56.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 16.000000, "CITCOU": 1.000000, "LOTSZ": 90.090000, "SQFT": 21.000000, "X": 871.000000, "Y": 531.000000 }, "geometry": { "type": "Point", "coordinates": [ 871.0, 531.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 160, "PRICE": 60.400000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 17.000000, "CITCOU": 1.000000, "LOTSZ": 84.640000, "SQFT": 23.920000, "X": 867.500000, "Y": 523.000000 }, "geometry": { "type": "Point", "coordinates": [ 867.5, 523.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 161, "PRICE": 51.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 27.000000, "CITCOU": 1.000000, "LOTSZ": 23.300000, "SQFT": 14.400000, "X": 876.000000, "Y": 528.000000 }, "geometry": { "type": "Point", "coordinates": [ 876.0, 528.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 162, "PRICE": 54.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 34.000000, "CITCOU": 1.000000, "LOTSZ": 253.000000, "SQFT": 28.000000, "X": 875.000000, "Y": 521.000000 }, "geometry": { "type": "Point", "coordinates": [ 875.0, 521.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 163, "PRICE": 69.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 2.000000, "CITCOU": 1.000000, "LOTSZ": 82.860000, "SQFT": 11.440000, "X": 867.000000, "Y": 533.000000 }, "geometry": { "type": "Point", "coordinates": [ 867.0, 533.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 164, "PRICE": 56.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 24.000000, "CITCOU": 1.000000, "LOTSZ": 67.000000, "SQFT": 21.940000, "X": 874.000000, "Y": 519.500000 }, "geometry": { "type": "Point", "coordinates": [ 874.0, 519.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 165, "PRICE": 27.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 23.000000, "CITCOU": 0.000000, "LOTSZ": 17.280000, "SQFT": 10.240000, "X": 889.000000, "Y": 515.500000 }, "geometry": { "type": "Point", "coordinates": [ 889.0, 515.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 166, "PRICE": 37.500000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 40.000000, "CITCOU": 0.000000, "LOTSZ": 38.720000, "SQFT": 16.860000, "X": 884.500000, "Y": 532.000000 }, "geometry": { "type": "Point", "coordinates": [ 884.5, 532.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 167, "PRICE": 32.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 19.040000, "SQFT": 9.920000, "X": 891.500000, "Y": 522.000000 }, "geometry": { "type": "Point", "coordinates": [ 891.5, 522.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 168, "PRICE": 22.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 45.000000, "CITCOU": 0.000000, "LOTSZ": 14.980000, "SQFT": 13.440000, "X": 889.000000, "Y": 526.500000 }, "geometry": { "type": "Point", "coordinates": [ 889.0, 526.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 169, "PRICE": 29.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 26.000000, "CITCOU": 0.000000, "LOTSZ": 20.000000, "SQFT": 12.000000, "X": 890.000000, "Y": 533.500000 }, "geometry": { "type": "Point", "coordinates": [ 890.0, 533.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 170, "PRICE": 39.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 37.000000, "CITCOU": 0.000000, "LOTSZ": 33.600000, "SQFT": 14.760000, "X": 883.000000, "Y": 531.000000 }, "geometry": { "type": "Point", "coordinates": [ 883.0, 531.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 171, "PRICE": 32.600000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 15.000000, "CITCOU": 0.000000, "LOTSZ": 16.000000, "SQFT": 8.960000, "X": 885.500000, "Y": 525.000000 }, "geometry": { "type": "Point", "coordinates": [ 885.5, 525.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 172, "PRICE": 38.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 0.000000, "LOTSZ": 34.440000, "SQFT": 11.520000, "X": 882.500000, "Y": 528.000000 }, "geometry": { "type": "Point", "coordinates": [ 882.5, 528.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 173, "PRICE": 21.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 75.000000, "CITCOU": 0.000000, "LOTSZ": 9.450000, "SQFT": 8.640000, "X": 911.000000, "Y": 526.500000 }, "geometry": { "type": "Point", "coordinates": [ 911.0, 526.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 174, "PRICE": 25.900000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 28.000000, "CITCOU": 0.000000, "LOTSZ": 12.320000, "SQFT": 8.120000, "X": 899.000000, "Y": 522.000000 }, "geometry": { "type": "Point", "coordinates": [ 899.0, 522.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 175, "PRICE": 27.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 31.000000, "CITCOU": 0.000000, "LOTSZ": 23.200000, "SQFT": 11.120000, "X": 898.000000, "Y": 520.500000 }, "geometry": { "type": "Point", "coordinates": [ 898.0, 520.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 176, "PRICE": 22.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 100.000000, "CITCOU": 0.000000, "LOTSZ": 8.730000, "SQFT": 11.280000, "X": 913.500000, "Y": 524.000000 }, "geometry": { "type": "Point", "coordinates": [ 913.5, 524.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 177, "PRICE": 31.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 15.000000, "CITCOU": 0.000000, "LOTSZ": 20.000000, "SQFT": 10.360000, "X": 900.000000, "Y": 518.000000 }, "geometry": { "type": "Point", "coordinates": [ 900.0, 518.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 178, "PRICE": 8.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 80.000000, "CITCOU": 0.000000, "LOTSZ": 9.000000, "SQFT": 11.520000, "X": 904.000000, "Y": 527.500000 }, "geometry": { "type": "Point", "coordinates": [ 904.0, 527.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 179, "PRICE": 5.500000, "NROOM": 3.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 75.000000, "CITCOU": 0.000000, "LOTSZ": 9.360000, "SQFT": 17.100000, "X": 916.500000, "Y": 531.500000 }, "geometry": { "type": "Point", "coordinates": [ 916.5, 531.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 180, "PRICE": 33.000000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 23.000000, "CITCOU": 1.000000, "LOTSZ": 60.000000, "SQFT": 17.520000, "X": 925.000000, "Y": 568.500000 }, "geometry": { "type": "Point", "coordinates": [ 925.0, 568.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 181, "PRICE": 57.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 15.000000, "CITCOU": 1.000000, "LOTSZ": 82.600000, "SQFT": 10.730000, "X": 933.000000, "Y": 573.000000 }, "geometry": { "type": "Point", "coordinates": [ 933.0, 573.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 182, "PRICE": 47.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 21.000000, "CITCOU": 1.000000, "LOTSZ": 75.300000, "SQFT": 11.200000, "X": 931.500000, "Y": 567.000000 }, "geometry": { "type": "Point", "coordinates": [ 931.5, 567.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 183, "PRICE": 43.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 2.000000, "CITCOU": 1.000000, "LOTSZ": 21.000000, "SQFT": 12.800000, "X": 935.000000, "Y": 572.000000 }, "geometry": { "type": "Point", "coordinates": [ 935.0, 572.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 184, "PRICE": 43.900000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 25.000000, "CITCOU": 0.000000, "LOTSZ": 43.750000, "SQFT": 12.000000, "X": 930.500000, "Y": 561.000000 }, "geometry": { "type": "Point", "coordinates": [ 930.5, 561.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 185, "PRICE": 68.500000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 1.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 23.000000, "CITCOU": 1.000000, "LOTSZ": 239.690000, "SQFT": 41.070000, "X": 926.500000, "Y": 572.000000 }, "geometry": { "type": "Point", "coordinates": [ 926.5, 572.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 186, "PRICE": 44.250000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 0.000000, "CITCOU": 1.000000, "LOTSZ": 20.830000, "SQFT": 12.800000, "X": 946.000000, "Y": 573.000000 }, "geometry": { "type": "Point", "coordinates": [ 946.0, 573.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 187, "PRICE": 61.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 1.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 4.000000, "CITCOU": 1.000000, "LOTSZ": 67.640000, "SQFT": 22.360000, "X": 935.000000, "Y": 561.500000 }, "geometry": { "type": "Point", "coordinates": [ 935.0, 561.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 188, "PRICE": 40.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 40.000000, "CITCOU": 1.000000, "LOTSZ": 172.040000, "SQFT": 10.560000, "X": 943.500000, "Y": 572.500000 }, "geometry": { "type": "Point", "coordinates": [ 943.5, 572.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 189, "PRICE": 44.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 55.000000, "CITCOU": 1.000000, "LOTSZ": 289.970000, "SQFT": 13.440000, "X": 936.500000, "Y": 575.500000 }, "geometry": { "type": "Point", "coordinates": [ 936.5, 575.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 190, "PRICE": 57.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 21.000000, "CITCOU": 1.000000, "LOTSZ": 71.050000, "SQFT": 11.020000, "X": 928.000000, "Y": 564.000000 }, "geometry": { "type": "Point", "coordinates": [ 928.0, 564.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 191, "PRICE": 35.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 45.000000, "CITCOU": 0.000000, "LOTSZ": 59.000000, "SQFT": 17.980000, "X": 929.000000, "Y": 559.000000 }, "geometry": { "type": "Point", "coordinates": [ 929.0, 559.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 192, "PRICE": 35.100000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 2.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 50.000000, "CITCOU": 0.000000, "LOTSZ": 62.500000, "SQFT": 18.880000, "X": 927.000000, "Y": 559.000000 }, "geometry": { "type": "Point", "coordinates": [ 927.0, 559.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 193, "PRICE": 64.500000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 5.000000, "CITCOU": 1.000000, "LOTSZ": 86.250000, "SQFT": 11.760000, "X": 933.000000, "Y": 576.000000 }, "geometry": { "type": "Point", "coordinates": [ 933.0, 576.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 194, "PRICE": 40.000000, "NROOM": 4.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 1.000000, "AGE": 50.000000, "CITCOU": 1.000000, "LOTSZ": 50.200000, "SQFT": 9.360000, "X": 940.500000, "Y": 568.000000 }, "geometry": { "type": "Point", "coordinates": [ 940.5, 568.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 195, "PRICE": 42.600000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 21.420000, "SQFT": 11.520000, "X": 921.000000, "Y": 563.500000 }, "geometry": { "type": "Point", "coordinates": [ 921.0, 563.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 196, "PRICE": 50.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 3.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 1.000000, "LOTSZ": 75.000000, "SQFT": 27.300000, "X": 936.000000, "Y": 565.500000 }, "geometry": { "type": "Point", "coordinates": [ 936.0, 565.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 197, "PRICE": 58.000000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 6.000000, "CITCOU": 1.000000, "LOTSZ": 73.920000, "SQFT": 23.040000, "X": 951.000000, "Y": 573.000000 }, "geometry": { "type": "Point", "coordinates": [ 951.0, 573.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 198, "PRICE": 58.000000, "NROOM": 7.000000, "DWELL": 1.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 18.000000, "CITCOU": 1.000000, "LOTSZ": 63.000000, "SQFT": 17.680000, "X": 951.500000, "Y": 568.500000 }, "geometry": { "type": "Point", "coordinates": [ 951.5, 568.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 199, "PRICE": 55.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 18.000000, "CITCOU": 1.000000, "LOTSZ": 115.000000, "SQFT": 13.360000, "X": 951.000000, "Y": 576.000000 }, "geometry": { "type": "Point", "coordinates": [ 951.0, 576.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 200, "PRICE": 43.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 2.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 23.000000, "CITCOU": 1.000000, "LOTSZ": 42.860000, "SQFT": 11.600000, "X": 937.000000, "Y": 555.000000 }, "geometry": { "type": "Point", "coordinates": [ 937.0, 555.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 201, "PRICE": 54.000000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 3.000000, "CITCOU": 1.000000, "LOTSZ": 47.150000, "SQFT": 11.520000, "X": 945.000000, "Y": 566.000000 }, "geometry": { "type": "Point", "coordinates": [ 945.0, 566.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 202, "PRICE": 39.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 1.000000, "CITCOU": 1.000000, "LOTSZ": 17.260000, "SQFT": 9.980000, "X": 939.500000, "Y": 564.500000 }, "geometry": { "type": "Point", "coordinates": [ 939.5, 564.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 203, "PRICE": 45.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 2.000000, "AGE": 47.000000, "CITCOU": 1.000000, "LOTSZ": 75.000000, "SQFT": 12.960000, "X": 939.000000, "Y": 543.500000 }, "geometry": { "type": "Point", "coordinates": [ 939.0, 543.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 204, "PRICE": 42.000000, "NROOM": 5.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 1.000000, "GAR": 0.000000, "AGE": 21.000000, "CITCOU": 1.000000, "LOTSZ": 60.500000, "SQFT": 11.130000, "X": 934.000000, "Y": 540.500000 }, "geometry": { "type": "Point", "coordinates": [ 934.0, 540.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 205, "PRICE": 38.900000, "NROOM": 6.000000, "DWELL": 1.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 29.000000, "CITCOU": 1.000000, "LOTSZ": 42.350000, "SQFT": 19.600000, "X": 933.000000, "Y": 538.000000 }, "geometry": { "type": "Point", "coordinates": [ 933.0, 538.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 206, "PRICE": 37.500000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 0.000000, "BMENT": 0.000000, "NSTOR": 2.000000, "GAR": 1.000000, "AGE": 23.000000, "CITCOU": 1.000000, "LOTSZ": 134.880000, "SQFT": 20.660000, "X": 938.000000, "Y": 539.500000 }, "geometry": { "type": "Point", "coordinates": [ 938.0, 539.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 207, "PRICE": 39.000000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 2.000000, "CITCOU": 1.000000, "LOTSZ": 19.240000, "SQFT": 12.600000, "X": 940.000000, "Y": 538.500000 }, "geometry": { "type": "Point", "coordinates": [ 940.0, 538.5 ] } },
+{ "type": "Feature", "properties": { "STATION": 208, "PRICE": 43.215000, "NROOM": 4.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 1.000000, "AC": 1.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 0.000000, "CITCOU": 1.000000, "LOTSZ": 13.260000, "SQFT": 11.520000, "X": 945.500000, "Y": 553.000000 }, "geometry": { "type": "Point", "coordinates": [ 945.5, 553.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 209, "PRICE": 26.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 3.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 29.000000, "CITCOU": 0.000000, "LOTSZ": 26.030000, "SQFT": 12.160000, "X": 914.000000, "Y": 553.000000 }, "geometry": { "type": "Point", "coordinates": [ 914.0, 553.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 210, "PRICE": 30.000000, "NROOM": 6.000000, "DWELL": 0.000000, "NBATH": 1.500000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 1.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 24.000000, "CITCOU": 0.000000, "LOTSZ": 20.000000, "SQFT": 12.800000, "X": 919.000000, "Y": 554.000000 }, "geometry": { "type": "Point", "coordinates": [ 919.0, 554.0 ] } },
+{ "type": "Feature", "properties": { "STATION": 211, "PRICE": 29.500000, "NROOM": 5.000000, "DWELL": 0.000000, "NBATH": 1.000000, "PATIO": 0.000000, "FIREPL": 0.000000, "AC": 0.000000, "BMENT": 2.000000, "NSTOR": 2.000000, "GAR": 0.000000, "AGE": 22.000000, "CITCOU": 0.000000, "LOTSZ": 35.840000, "SQFT": 10.640000, "X": 914.000000, "Y": 558.000000 }, "geometry": { "type": "Point", "coordinates": [ 914.0, 558.0 ] } }
+]
+}
diff --git a/pysal/examples/book/README.md b/pysal/examples/book/README.md
new file mode 100644
index 0000000..b9dc8b9
--- /dev/null
+++ b/pysal/examples/book/README.md
@@ -0,0 +1,10 @@
+book
+====
+
+Synthetic data to illustrate spatial weights 
+--------------------------------------------
+
+* book.gal: rook contiguity for regular lattice
+* book.txt: attribute data for regular lattice
+
+Source: Anselin, L. and S.J. Rey (in progress) Spatial Econometrics: Foundations.
diff --git a/pysal/examples/book/book.gal b/pysal/examples/book/book.gal
new file mode 100644
index 0000000..4d6fc1d
--- /dev/null
+++ b/pysal/examples/book/book.gal
@@ -0,0 +1,33 @@
+16
+1 2
+2 5
+2 3
+1 3 6
+3 3
+2 4 7
+4 2
+3 8
+5 3
+1 6 9
+6 4
+2 5 7 10
+7 4
+3 6 8 11
+8 3
+4 7 12
+9 3
+5 10 13
+10 4
+6 9 11 14
+11 4
+7 10 12 15
+12 3
+8 11 16
+13 2
+9 14
+14 3
+10 13 15
+15 3
+11 14 16
+16 2
+12 15
diff --git a/pysal/examples/book/book.txt b/pysal/examples/book/book.txt
new file mode 100644
index 0000000..87bd9c9
--- /dev/null
+++ b/pysal/examples/book/book.txt
@@ -0,0 +1,18 @@
+16,6
+"id","y","z","z2","z4","wzz"
+1,39,-6.375,40.640625,1.651660e+03,68.531250
+2,41,-4.375,19.140625,3.663635e+02,74.921875
+3,38,-7.375,54.390625,2.958340e+03,67.296875
+4,45,-0.375,0.140625,1.977539e-02,4.031250
+5,39,-6.375,40.640625,1.651660e+03,45.421875
+6,42,-3.375,11.390625,1.297463e+02,38.812500
+7,41,-4.375,19.140625,3.663635e+02,50.312500
+8,42,-3.375,11.390625,1.297463e+02,-2.953125
+9,48,2.625,6.890625,4.748071e+01,-2.953125
+10,49,3.625,13.140625,1.726760e+02,27.187500
+11,48,2.625,6.890625,4.748071e+01,24.937500
+12,51,5.625,31.640625,1.001129e+03,49.921875
+13,47,1.625,2.640625,6.972900e+00,13.406250
+14,51,5.625,31.640625,1.001129e+03,55.546875
+15,50,4.625,21.390625,4.575588e+02,82.671875
+16,55,9.625,92.640625,8.582285e+03,98.6562509
diff --git a/pysal/examples/burkitt/README.md b/pysal/examples/burkitt/README.md
new file mode 100644
index 0000000..de37cf8
--- /dev/null
+++ b/pysal/examples/burkitt/README.md
@@ -0,0 +1,11 @@
+burkitt
+=======
+
+Burkitt's lymphoma in the Western Nile district of Uganda
+---------------------------------------------------------
+
+ * burkitt.dbf attribute file
+ * burkitt.shp shapefile
+ * burkitt.shx spatial index
+
+ Point data, n=188, k=6 
diff --git a/pysal/examples/burkitt/burkitt.dbf b/pysal/examples/burkitt/burkitt.dbf
new file mode 100644
index 0000000..e7ecd09
Binary files /dev/null and b/pysal/examples/burkitt/burkitt.dbf differ
diff --git a/pysal/examples/burkitt/burkitt.shp b/pysal/examples/burkitt/burkitt.shp
new file mode 100644
index 0000000..bcd3d72
Binary files /dev/null and b/pysal/examples/burkitt/burkitt.shp differ
diff --git a/pysal/examples/burkitt/burkitt.shx b/pysal/examples/burkitt/burkitt.shx
new file mode 100644
index 0000000..459563f
Binary files /dev/null and b/pysal/examples/burkitt/burkitt.shx differ
diff --git a/pysal/examples/calemp/README.md b/pysal/examples/calemp/README.md
new file mode 100644
index 0000000..76c0e9c
--- /dev/null
+++ b/pysal/examples/calemp/README.md
@@ -0,0 +1,15 @@
+calemp
+======
+
+Employment density for California counties
+------------------------------------------
+
+* calempdensity.csv: data on employment and employment density in California
+  counties.
+
+Polygon data, n=58, k=11.
+
+Source: Anselin, L. and S.J. Rey (in progress) Spatial Econometrics: Foundations.
+
+
+
diff --git a/pysal/examples/calemp/calempdensity.csv b/pysal/examples/calemp/calempdensity.csv
new file mode 100644
index 0000000..bfe8734
--- /dev/null
+++ b/pysal/examples/calemp/calempdensity.csv
@@ -0,0 +1,59 @@
+"Geographic Area","Geographic Area","Geographic Name","GEONAME","GEOCOMP","STATE","Number of Employees for All Sectors","Number of employees","Class Number","sq. km","emp/sq km"
+"05000US06001","06001","Alameda County, California","Alameda County, California","00","06",630171,630171,5,1910.1,329.92
+"05000US06003","06003","Alpine County, California","Alpine County, California","00","06",813,813,1,1913.1,0.42
+"05000US06005","06005","Amador County, California","Amador County, California","00","06",9061,9061,2,1534.7,5.9
+"05000US06007","06007","Butte County, California","Butte County, California","00","06",59578,59578,3,4246.6,14.03
+"05000US06009","06009","Calaveras County, California","Calaveras County, California","00","06",7344,7344,2,2642.3,2.78
+"05000US06011","06011","Colusa County, California","Colusa County, California","00","06",4000,4000,1,2980.5,1.34
+"05000US06013","06013","Contra Costa County, California","Contra Costa County, California","00","06",338156,338156,5,1865.5,181.27
+"05000US06015","06015","Del Norte County, California","Del Norte County, California","00","06",4303,4303,1,2610.4,1.65
+"05000US06017","06017","El Dorado County, California","El Dorado County, California","00","06",44477,44477,3,4432.8,10.03
+"05000US06019","06019","Fresno County, California","Fresno County, California","00","06",257975,257975,4,15444.7,16.7
+"05000US06021","06021","Glenn County, California","Glenn County, California","00","06",4487,4487,1,3405.5,1.32
+"05000US06023","06023","Humboldt County, California","Humboldt County, California","00","06",36962,36962,3,9253.5,3.99
+"05000US06025","06025","Imperial County, California","Imperial County, California","00","06",34156,34156,3,10813.4,3.16
+"05000US06027","06027","Inyo County, California","Inyo County, California","00","06",5820,5820,1,26397.5,0.22
+"05000US06029","06029","Kern County, California","Kern County, California","00","06",183412,183412,4,21086.8,8.7
+"05000US06031","06031","Kings County, California","Kings County, California","00","06",23610,23610,2,3598.8,6.56
+"05000US06033","06033","Lake County, California","Lake County, California","00","06",10648,10648,2,3259.4,3.27
+"05000US06035","06035","Lassen County, California","Lassen County, California","00","06",3860,3860,1,11803.9,0.33
+"05000US06037","06037","Los Angeles County, California","Los Angeles County, California","00","06",3895886,3895886,5,10515.3,370.5
+"05000US06039","06039","Madera County, California","Madera County, California","00","06",24957,24957,2,5538.5,4.51
+"05000US06041","06041","Marin County, California","Marin County, California","00","06",101358,101358,4,1346.2,75.29
+"05000US06043","06043","Mariposa County, California","Mariposa County, California","00","06",3739,3739,1,3758.6,0.99
+"05000US06045","06045","Mendocino County, California","Mendocino County, California","00","06",24898,24898,2,9089,2.74
+"05000US06047","06047","Merced County, California","Merced County, California","00","06",43369,43369,3,4995.8,8.68
+"05000US06049","06049","Modoc County, California","Modoc County, California","00","06",1467,1467,1,10215.9,0.14
+"05000US06051","06051","Mono County, California","Mono County, California","00","06",7289,7289,1,7885.2,0.92
+"05000US06053","06053","Monterey County, California","Monterey County, California","00","06",108660,108660,4,8603.8,12.63
+"05000US06055","06055","Napa County, California","Napa County, California","00","06",56029,56029,3,1952.5,28.7
+"05000US06057","06057","Nevada County, California","Nevada County, California","00","06",29805,29805,3,2480.3,12.02
+"05000US06059","06059","Orange County, California","Orange County, California","00","06",1478452,1478452,5,2045.3,722.85
+"05000US06061","06061","Placer County, California","Placer County, California","00","06",133427,133427,4,3637.4,36.68
+"05000US06063","06063","Plumas County, California","Plumas County, California","00","06",4863,4863,1,6614.8,0.74
+"05000US06065","06065","Riverside County, California","Riverside County, California","00","06",556789,556789,5,18669.1,29.82
+"05000US06067","06067","Sacramento County, California","Sacramento County, California","00","06",480346,480346,5,2501.1,192.05
+"05000US06069","06069","San Benito County, California","San Benito County, California","00","06",12163,12163,2,3597.9,3.38
+"05000US06071","06071","San Bernardino County, California","San Bernardino County, California","00","06",579135,579135,5,51961.2,11.15
+"05000US06073","06073","San Diego County, California","San Diego County, California","00","06",1205862,1205862,5,10889.6,110.74
+"05000US06075","06075","San Francisco County, California","San Francisco County, California","00","06",497485,497485,5,121,4111.45
+"05000US06077","06077","San Joaquin County, California","San Joaquin County, California","00","06",179276,179276,4,3624.1,49.47
+"05000US06079","06079","San Luis Obispo County, California","San Luis Obispo County, California","00","06",88413,88413,3,8558.7,10.33
+"05000US06081","06081","San Mateo County, California","San Mateo County, California","00","06",368859,368859,5,1163.2,317.11
+"05000US06083","06083","Santa Barbara County, California","Santa Barbara County, California","00","06",145202,145202,4,7092.6,20.47
+"05000US06085","06085","Santa Clara County, California","Santa Clara County, California","00","06",886011,886011,5,3344.3,264.93
+"05000US06087","06087","Santa Cruz County, California","Santa Cruz County, California","00","06",76488,76488,3,1154.3,66.26
+"05000US06089","06089","Shasta County, California","Shasta County, California","00","06",52804,52804,3,9804.8,5.39
+"05000US06091","06091","Sierra County, California","Sierra County, California","00","06",324,324,1,2469.4,0.13
+"05000US06093","06093","Siskiyou County, California","Siskiyou County, California","00","06",9992,9992,2,16284,0.61
+"05000US06095","06095","Solano County, California","Solano County, California","00","06",108653,108653,4,2145,50.65
+"05000US06097","06097","Sonoma County, California","Sonoma County, California","00","06",165261,165261,4,4082.4,40.48
+"05000US06099","06099","Stanislaus County, California","Stanislaus County, California","00","06",141928,141928,4,3870.9,36.67
+"05000US06101","06101","Sutter County, California","Sutter County, California","00","06",20430,20430,2,1561,13.09
+"05000US06103","06103","Tehama County, California","Tehama County, California","00","06",13809,13809,2,7643.2,1.81
+"05000US06105","06105","Trinity County, California","Trinity County, California","00","06",1668,1668,1,8233.3,0.2
+"05000US06107","06107","Tulare County, California","Tulare County, California","00","06",94949,94949,4,12495,7.6
+"05000US06109","06109","Tuolumne County, California","Tuolumne County, California","00","06",14519,14519,2,5790.3,2.51
+"05000US06111","06111","Ventura County, California","Ventura County, California","00","06",273745,273745,5,4781,57.26
+"05000US06113","06113","Yolo County, California","Yolo County, California","00","06",63769,63769,3,2622.2,24.32
+"05000US06115","06115","Yuba County, California","Yuba County, California","00","06",11374,11374,2,1632.9,6.97
diff --git a/pysal/examples/chicago/Chicago77.dbf b/pysal/examples/chicago/Chicago77.dbf
new file mode 100644
index 0000000..cfa0934
Binary files /dev/null and b/pysal/examples/chicago/Chicago77.dbf differ
diff --git a/pysal/examples/chicago/Chicago77.shp b/pysal/examples/chicago/Chicago77.shp
new file mode 100644
index 0000000..ee30858
Binary files /dev/null and b/pysal/examples/chicago/Chicago77.shp differ
diff --git a/pysal/examples/chicago/Chicago77.shx b/pysal/examples/chicago/Chicago77.shx
new file mode 100644
index 0000000..56f35b4
Binary files /dev/null and b/pysal/examples/chicago/Chicago77.shx differ
diff --git a/pysal/examples/chicago/README.md b/pysal/examples/chicago/README.md
new file mode 100644
index 0000000..2184228
--- /dev/null
+++ b/pysal/examples/chicago/README.md
@@ -0,0 +1,11 @@
+chicago
+=======
+
+Chicago neighborhoods
+--------------------
+
+ * Chicago77.dbf attribute file
+ * Chicago77.shp shapefile
+ * Chicago77.shx spatial index
+
+Polygons, n=77, k=11
diff --git a/pysal/examples/columbus/columbus.dbf b/pysal/examples/columbus/columbus.dbf
new file mode 100644
index 0000000..f850bda
Binary files /dev/null and b/pysal/examples/columbus/columbus.dbf differ
diff --git a/pysal/examples/columbus/columbus.gal b/pysal/examples/columbus/columbus.gal
new file mode 100644
index 0000000..b8edabc
--- /dev/null
+++ b/pysal/examples/columbus/columbus.gal
@@ -0,0 +1,99 @@
+49
+1 2
+2 3
+2 3
+4 3 1
+3 4
+5 4 2 1
+4 4
+8 3 5 2
+5 8
+16 15 11 8 9 6 3 4
+6 2
+9 5
+7 4
+14 13 12 8
+8 6
+13 12 11 5 4 7
+9 8
+26 25 22 20 15 10 6 5
+10 4
+22 20 17 9
+11 5
+16 15 12 5 8
+12 6
+16 14 13 11 8 7
+13 4
+14 12 7 8
+14 6
+19 12 13 16 18 7
+15 6
+25 16 26 5 9 11
+16 8
+25 24 18 15 5 11 12 14
+17 3
+23 20 10
+18 4
+24 19 16 14
+19 3
+18 24 14
+20 10
+35 33 27 22 23 32 40 17 10 9
+21 3
+34 24 30
+22 6
+28 27 26 20 10 9
+23 3
+32 17 20
+24 7
+30 29 25 16 18 21 19
+25 8
+30 29 15 26 28 16 24 9
+26 6
+29 28 22 9 25 15
+27 4
+33 28 20 22
+28 9
+38 37 29 27 33 35 22 26 25
+29 7
+37 30 28 38 24 25 26
+30 5
+37 29 24 25 21
+31 3
+39 36 34
+32 4
+41 40 23 20
+33 4
+35 20 27 28
+34 4
+42 36 21 31
+35 7
+44 43 38 40 20 33 28
+36 5
+46 39 34 42 31
+37 6
+45 38 43 28 29 30
+38 6
+43 35 44 28 37 29
+39 3
+46 36 31
+40 5
+47 41 32 35 20
+41 3
+47 32 40
+42 2
+34 36
+43 6
+48 45 35 44 38 37
+44 5
+49 48 35 43 38
+45 4
+48 49 37 43
+46 2
+36 39
+47 2
+40 41
+48 4
+49 44 43 45
+49 3
+44 48 45
diff --git a/pysal/examples/columbus/columbus.html b/pysal/examples/columbus/columbus.html
new file mode 100644
index 0000000..af8b1ac
--- /dev/null
+++ b/pysal/examples/columbus/columbus.html
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>SAL Data Sets - Columbus</title>
+</head>
+
+<body>
+<h1>Columbus</h1>
+
+<h2>Data provided "as is," no warranties</h2>
+
+<h2>Description</h2>
+
+<p>Crime data for 49 neighborhoods in Columbus, OH, 1980</p>
+
+<p>Type = polygon shape file, projected, arbitrary units</p>
+
+<p>Observations = 49</p>
+
+<p>Variables = 20</p>
+
+<h2>Source</h2>
+
+<p>Anselin, Luc (1988). Spatial Econometrics. Boston, Kluwer 
+   Academic, Table 12.1, p. 189.</p>
+
+<h2>Variables</h2>
+
+<table>
+  <thead>
+    <tr>
+      <th>Variable</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>AREA</td>
+      <td>neighborhood area (computed by ArcView)</td>
+    </tr>
+    <tr>
+       <td>PERIMETER</td>
+       <td>neighborhood perimeter (computed by ArcView)</td>
+    </tr>
+    <tr>
+       <td>COLUMBUS_</td>
+       <td>internal polygon ID (generated by ArcView)</td>
+    </tr>
+    <tr>
+       <td>COLUMBUS_I</td>
+       <td>internal polygon ID (geneated by ArcView)</td>
+    </tr>
+    <tr>
+       <td>POLYID</td>
+       <td>neighborhood ID, used in GeoDa User's Guide and tutorials</td>
+    </tr>
+    <tr>
+       <td>NEIG</td>
+       <td>neighborhood ID, used in Spatial Econometrics examples</td>
+    </tr>
+    <tr>
+       <td>HOVAL</td>
+       <td>housing value (in $1,000)</td>
+    </tr>
+    <tr>
+       <td>INC</td>
+       <td>household income (in $1,000)</td>
+    </tr>
+    <tr>
+       <td>CRIME</td>
+       <td>residential burglaries and vehicle thefts per 1000 households</td>
+    </tr>
+    <tr>
+       <td>OPEN</td>
+       <td>open space (area)</td>
+    </tr>
+    <tr>
+       <td>PLUMB</td>
+       <td>percent housing units without plumbing</td>
+    </tr>
+    <tr>
+       <td>DISCBD</td>
+       <td>distance to CBD</td>
+    </tr>
+    <tr>
+       <td>X</td>
+       <td>centroid x coordinate (in arbitrary digitizing units)</td>
+    </tr>
+    <tr>
+       <td>Y</td>
+       <td>centroid y coordinate (in arbitrary digitizing units)</td>
+    </tr>
+    <tr>
+       <td>NSA</td>
+       <td>north-south indicator variable (North = 1)</td>
+    </tr>
+    <tr>
+       <td>NSB</td>
+       <td>other north-south indicator variable (North = 1)</td>
+    </tr>
+    <tr>
+       <td>EW</td>
+       <td>east-west indicator variable (East = 1)</td>
+    </tr>
+    <tr>
+       <td>CP</td>
+       <td>core-periphery indicator variable (Core = 1)</td>
+    </tr>
+    <tr>
+       <td>THOUS</td>
+       <td>constant (= 1000)</td>
+    </tr>
+    <tr>
+       <td>NEIGNO</td>
+       <td>another neighborhood ID variable (NEIG + 1000)</td>
+    </tr>
+  </tbody>
+</table>
+
+<br />
+<hr />
+
+<p>Prepared by <a href="mailto:anselin at uiuc.edu">Luc Anselin</a></p>
+
+<p><a href="http://sal.agecon.uiuc.edu">UIUC-ACE Spatial Analysis
+Laboratory</a></p>
+
+<p>Last updated June 16, 2003</p>
+</body>
+</html>
diff --git a/pysal/examples/columbus/columbus.json b/pysal/examples/columbus/columbus.json
new file mode 100644
index 0000000..579b7c3
--- /dev/null
+++ b/pysal/examples/columbus/columbus.json
@@ -0,0 +1,104 @@
+{
+"type": "FeatureCollection",
+                                                                                
+"features": [
+{ "type": "Feature", "properties": { "AREA": 0.309441, "PERIMETER": 2.440629, "COLUMBUS_": 2.0, "COLUMBUS_I": 5.0, "POLYID": 1.0, "NEIG": 5, "HOVAL": 80.467003, "INC": 19.531, "CRIME": 15.72598, "OPEN": 2.850747, "PLUMB": 0.217155, "DISCBD": 5.03, "X": 38.799999, "Y": 44.07, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1005.0 }, "bbox": [ 8.559700012207031, 13.995059967041016, 9.09996509552002, 14.742449760437012 ], "geometry": { "type": "Polygon", "coordinate [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.259329, "PERIMETER": 2.236939, "COLUMBUS_": 3.0, "COLUMBUS_I": 1.0, "POLYID": 2.0, "NEIG": 1, "HOVAL": 44.567001, "INC": 21.232, "CRIME": 18.801754, "OPEN": 5.29672, "PLUMB": 0.320581, "DISCBD": 4.27, "X": 35.619999, "Y": 42.380001, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1001.0 }, "bbox": [ 7.950088977813721, 13.727390289306641, 8.666550636291504, 14.263930320739746 ], "geometry": { "type": "Polygon", "coord [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.192468, "PERIMETER": 2.187547, "COLUMBUS_": 4.0, "COLUMBUS_I": 6.0, "POLYID": 3.0, "NEIG": 6, "HOVAL": 26.35, "INC": 15.956, "CRIME": 30.626781, "OPEN": 4.534649, "PLUMB": 0.374404, "DISCBD": 3.89, "X": 39.82, "Y": 41.18, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1006.0 }, "bbox": [ 8.653305053710938, 13.544429779052734, 9.351485252380371, 14.008090019226074 ], "geometry": { "type": "Polygon", "coordinates": [  [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.083841, "PERIMETER": 1.427635, "COLUMBUS_": 5.0, "COLUMBUS_I": 2.0, "POLYID": 4.0, "NEIG": 2, "HOVAL": 33.200001, "INC": 4.477, "CRIME": 32.38776, "OPEN": 0.394427, "PLUMB": 1.186944, "DISCBD": 3.7, "X": 36.5, "Y": 40.52, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1002.0 }, "bbox": [ 8.19859504699707, 13.586509704589844, 8.685274124145508, 13.861700057983398 ], "geometry": { "type": "Polygon", "coordinates": [ [ [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.488888, "PERIMETER": 2.997133, "COLUMBUS_": 6.0, "COLUMBUS_I": 7.0, "POLYID": 5.0, "NEIG": 7, "HOVAL": 23.225, "INC": 11.252, "CRIME": 50.73151, "OPEN": 0.405664, "PLUMB": 0.624596, "DISCBD": 2.83, "X": 40.009998, "Y": 38.0, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1007.0 }, "bbox": [ 8.677577018737793, 12.861089706420898, 9.401384353637695, 13.722209930419922 ], "geometry": { "type": "Polygon", "coordinates": [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.283079, "PERIMETER": 2.335634, "COLUMBUS_": 7.0, "COLUMBUS_I": 8.0, "POLYID": 6.0, "NEIG": 8, "HOVAL": 28.75, "INC": 16.028999, "CRIME": 26.066658, "OPEN": 0.563075, "PLUMB": 0.25413, "DISCBD": 3.78, "X": 43.75, "Y": 39.279999, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1008.0 }, "bbox": [ 9.333296775817871, 13.272419929504395, 10.180600166320801, 13.698240280151367 ], "geometry": { "type": "Polygon", "coordinat [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.257084, "PERIMETER": 2.554577, "COLUMBUS_": 8.0, "COLUMBUS_I": 4.0, "POLYID": 7.0, "NEIG": 4, "HOVAL": 75.0, "INC": 8.438, "CRIME": 0.178269, "OPEN": 0.0, "PLUMB": 2.402402, "DISCBD": 2.74, "X": 33.360001, "Y": 38.41, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1004.0 }, "bbox": [ 7.801973819732666, 12.942020416259766, 8.456572532653809, 13.644510269165039 ], "geometry": { "type": "Polygon", "coordinates": [ [ [  [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.204954, "PERIMETER": 2.139524, "COLUMBUS_": 9.0, "COLUMBUS_I": 3.0, "POLYID": 8.0, "NEIG": 3, "HOVAL": 37.125, "INC": 11.337, "CRIME": 38.425858, "OPEN": 3.483478, "PLUMB": 2.739726, "DISCBD": 2.89, "X": 36.709999, "Y": 38.709999, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1003.0 }, "bbox": [ 8.10498046875, 13.104069709777832, 8.733969688415527, 13.644430160522461 ], "geometry": { "type": "Polygon", "coordinates [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.500755, "PERIMETER": 3.169707, "COLUMBUS_": 10.0, "COLUMBUS_I": 18.0, "POLYID": 9.0, "NEIG": 18, "HOVAL": 52.599998, "INC": 17.586, "CRIME": 30.515917, "OPEN": 0.527488, "PLUMB": 0.890736, "DISCBD": 3.17, "X": 43.439999, "Y": 35.919998, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1018.0 }, "bbox": [ 9.124277114868164, 12.595190048217773, 10.095430374145508, 13.298540115356445 ], "geometry": { "type": "Polygon", " [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.246689, "PERIMETER": 2.087235, "COLUMBUS_": 11.0, "COLUMBUS_I": 10.0, "POLYID": 10.0, "NEIG": 10, "HOVAL": 96.400002, "INC": 13.598, "CRIME": 34.000835, "OPEN": 1.548348, "PLUMB": 0.557724, "DISCBD": 4.33, "X": 47.610001, "Y": 36.419998, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1010.0 }, "bbox": [ 10.015439987182617, 12.72404956817627, 10.649680137634277, 13.272509574890137 ], "geometry": { "type": "Polygon",  [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.041012, "PERIMETER": 0.919488, "COLUMBUS_": 12.0, "COLUMBUS_I": 38.0, "POLYID": 11.0, "NEIG": 38, "HOVAL": 19.700001, "INC": 7.467, "CRIME": 62.275448, "OPEN": 0.0, "PLUMB": 1.479915, "DISCBD": 1.9, "X": 37.849998, "Y": 36.299999, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1038.0 }, "bbox": [ 8.572946548461914, 12.810150146484375, 8.757728576660156, 13.116339683532715 ], "geometry": { "type": "Polygon", "coordin [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.035769, "PERIMETER": 0.902125, "COLUMBUS_": 13.0, "COLUMBUS_I": 37.0, "POLYID": 12.0, "NEIG": 37, "HOVAL": 19.9, "INC": 10.048, "CRIME": 56.705669, "OPEN": 3.157895, "PLUMB": 2.635046, "DISCBD": 1.91, "X": 37.130001, "Y": 36.119999, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1037.0 }, "bbox": [ 8.456572532653809, 12.809200286865234, 8.632829666137695, 13.106889724731445 ], "geometry": { "type": "Polygon", "coord [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.034377, "PERIMETER": 0.93659, "COLUMBUS_": 14.0, "COLUMBUS_I": 39.0, "POLYID": 13.0, "NEIG": 39, "HOVAL": 41.700001, "INC": 9.549, "CRIME": 46.716129, "OPEN": 0.0, "PLUMB": 6.328423, "DISCBD": 2.09, "X": 35.950001, "Y": 36.400002, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1039.0 }, "bbox": [ 8.145203590393066, 12.930660247802734, 8.487373352050781, 13.104069709777832 ], "geometry": { "type": "Polygon", "coordin [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.060884, "PERIMETER": 1.128424, "COLUMBUS_": 15.0, "COLUMBUS_I": 40.0, "POLYID": 14.0, "NEIG": 40, "HOVAL": 42.900002, "INC": 9.963, "CRIME": 57.066132, "OPEN": 0.477104, "PLUMB": 5.110962, "DISCBD": 1.83, "X": 35.720001, "Y": 35.599998, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1040.0 }, "bbox": [ 8.062442779541016, 12.787229537963867, 8.512937545776367, 12.944100379943848 ], "geometry": { "type": "Polygon", "c [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.106653, "PERIMETER": 1.437606, "COLUMBUS_": 16.0, "COLUMBUS_I": 9.0, "POLYID": 15.0, "NEIG": 9, "HOVAL": 18.0, "INC": 9.873, "CRIME": 48.585487, "OPEN": 0.174325, "PLUMB": 1.311475, "DISCBD": 1.7, "X": 39.610001, "Y": 34.91, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1009.0 }, "bbox": [ 8.757728576660156, 12.532369613647461, 9.233386993408203, 12.86400032043457 ], "geometry": { "type": "Polygon", "coordinates":  [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.093154, "PERIMETER": 1.340061, "COLUMBUS_": 17.0, "COLUMBUS_I": 36.0, "POLYID": 16.0, "NEIG": 36, "HOVAL": 18.799999, "INC": 7.625, "CRIME": 54.838711, "OPEN": 0.533737, "PLUMB": 4.6875, "DISCBD": 1.1, "X": 37.599998, "Y": 34.080002, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1036.0 }, "bbox": [ 8.50916576385498, 12.361550331115723, 8.785566329956055, 12.861089706420898 ], "geometry": { "type": "Polygon", "coord [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.102087, "PERIMETER": 1.382359, "COLUMBUS_": 18.0, "COLUMBUS_I": 11.0, "POLYID": 17.0, "NEIG": 11, "HOVAL": 41.75, "INC": 9.798, "CRIME": 36.868774, "OPEN": 0.448232, "PLUMB": 1.619745, "DISCBD": 4.47, "X": 48.580002, "Y": 34.459999, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1011.0 }, "bbox": [ 10.356060028076172, 12.44025993347168, 10.709790229797363, 12.838859558105469 ], "geometry": { "type": "Polygon", "coor [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.055494, "PERIMETER": 1.183352, "COLUMBUS_": 19.0, "COLUMBUS_I": 42.0, "POLYID": 18.0, "NEIG": 42, "HOVAL": 60.0, "INC": 13.185, "CRIME": 43.962486, "OPEN": 24.998068, "PLUMB": 13.849287, "DISCBD": 1.58, "X": 36.150002, "Y": 33.919998, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1042.0 }, "bbox": [ 8.358473777770996, 12.355310440063477, 8.589687347412109, 12.788189888000488 ], "geometry": { "type": "Polygon", "coo [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.061342, "PERIMETER": 1.249247, "COLUMBUS_": 20.0, "COLUMBUS_I": 41.0, "POLYID": 19.0, "NEIG": 41, "HOVAL": 30.6, "INC": 11.618, "CRIME": 54.521965, "OPEN": 0.111111, "PLUMB": 2.622951, "DISCBD": 1.53, "X": 35.759998, "Y": 34.66, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1041.0 }, "bbox": [ 8.122319221496582, 12.445659637451172, 8.431012153625488, 12.788060188293457 ], "geometry": { "type": "Polygon", "coordinat [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.444629, "PERIMETER": 3.174601, "COLUMBUS_": 21.0, "COLUMBUS_I": 17.0, "POLYID": 20.0, "NEIG": 17, "HOVAL": 81.266998, "INC": 31.07, "CRIME": 0.223797, "OPEN": 5.318607, "PLUMB": 0.167224, "DISCBD": 3.57, "X": 46.73, "Y": 31.91, "NSA": 0.0, "NSB": 1.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1017.0 }, "bbox": [ 9.841083526611328, 11.741860389709473, 10.425640106201172, 12.781140327453613 ], "geometry": { "type": "Polygon", "coordinat [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.699258, "PERIMETER": 5.07749, "COLUMBUS_": 22.0, "COLUMBUS_I": 43.0, "POLYID": 21.0, "NEIG": 43, "HOVAL": 19.975, "INC": 10.655, "CRIME": 40.074074, "OPEN": 1.643756, "PLUMB": 1.559576, "DISCBD": 1.41, "X": 34.080002, "Y": 30.42, "NSA": 0.0, "NSB": 0.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1043.0 }, "bbox": [ 7.06132984161377, 11.527389526367188, 8.563572883605957, 12.725419998168945 ], "geometry": { "type": "Polygon", "coordinat [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.192891, "PERIMETER": 1.992717, "COLUMBUS_": 23.0, "COLUMBUS_I": 19.0, "POLYID": 22.0, "NEIG": 19, "HOVAL": 30.450001, "INC": 11.709, "CRIME": 33.705048, "OPEN": 4.539754, "PLUMB": 1.785714, "DISCBD": 2.45, "X": 43.369999, "Y": 33.459999, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1019.0 }, "bbox": [ 9.357977867126465, 12.226559638977051, 10.015439987182617, 12.72404956817627 ], "geometry": { "type": "Polygon", " [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.24712, "PERIMETER": 2.147528, "COLUMBUS_": 24.0, "COLUMBUS_I": 12.0, "POLYID": 23.0, "NEIG": 12, "HOVAL": 47.733002, "INC": 21.155001, "CRIME": 20.048504, "OPEN": 0.532632, "PLUMB": 0.216763, "DISCBD": 4.78, "X": 49.610001, "Y": 32.650002, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1012.0 }, "bbox": [ 10.421750068664551, 11.990639686584473, 10.888489723205566, 12.652009963989258 ], "geometry": { "type": "Polygon [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.192226, "PERIMETER": 2.240392, "COLUMBUS_": 25.0, "COLUMBUS_I": 35.0, "POLYID": 24.0, "NEIG": 35, "HOVAL": 53.200001, "INC": 14.236, "CRIME": 38.297871, "OPEN": 0.62622, "PLUMB": 18.811075, "DISCBD": 0.42, "X": 36.599998, "Y": 32.09, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1035.0 }, "bbox": [ 8.131139755249023, 12.088789939880371, 8.790392875671387, 12.645350456237793 ], "geometry": { "type": "Polygon", "coor [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.17168, "PERIMETER": 1.666489, "COLUMBUS_": 26.0, "COLUMBUS_I": 32.0, "POLYID": 25.0, "NEIG": 32, "HOVAL": 17.9, "INC": 8.461, "CRIME": 61.299175, "OPEN": 0.0, "PLUMB": 6.529851, "DISCBD": 0.83, "X": 39.360001, "Y": 32.880001, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1032.0 }, "bbox": [ 8.707547187805176, 12.125729560852051, 9.131059646606445, 12.63424015045166 ], "geometry": { "type": "Polygon", "coordinates": [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.107298, "PERIMETER": 1.406823, "COLUMBUS_": 27.0, "COLUMBUS_I": 20.0, "POLYID": 26.0, "NEIG": 20, "HOVAL": 20.299999, "INC": 8.085, "CRIME": 40.969742, "OPEN": 1.238288, "PLUMB": 2.534275, "DISCBD": 1.5, "X": 41.130001, "Y": 33.139999, "NSA": 1.0, "NSB": 1.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1020.0 }, "bbox": [ 9.124277114868164, 12.182160377502441, 9.394844055175781, 12.63424015045166 ], "geometry": { "type": "Polygon", "coo [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.137802, "PERIMETER": 1.780751, "COLUMBUS_": 28.0, "COLUMBUS_I": 21.0, "POLYID": 27.0, "NEIG": 21, "HOVAL": 34.099998, "INC": 10.822, "CRIME": 52.79443, "OPEN": 19.368099, "PLUMB": 1.483516, "DISCBD": 2.24, "X": 43.950001, "Y": 31.610001, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1021.0 }, "bbox": [ 9.468775749206543, 12.002750396728516, 10.007160186767578, 12.341389656066895 ], "geometry": { "type": "Polygon",  [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.174773, "PERIMETER": 1.637148, "COLUMBUS_": 29.0, "COLUMBUS_I": 31.0, "POLYID": 28.0, "NEIG": 31, "HOVAL": 22.85, "INC": 7.856, "CRIME": 56.919785, "OPEN": 0.509305, "PLUMB": 3.001072, "DISCBD": 1.41, "X": 41.310001, "Y": 30.9, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1031.0 }, "bbox": [ 9.084967613220215, 11.734999656677246, 9.492551803588867, 12.234550476074219 ], "geometry": { "type": "Polygon", "coordinate [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.085972, "PERIMETER": 1.312158, "COLUMBUS_": 30.0, "COLUMBUS_I": 33.0, "POLYID": 29.0, "NEIG": 33, "HOVAL": 32.5, "INC": 8.681, "CRIME": 60.750446, "OPEN": 0.0, "PLUMB": 2.645051, "DISCBD": 0.81, "X": 39.720001, "Y": 30.639999, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1033.0 }, "bbox": [ 8.790384292602539, 11.792989730834961, 9.131059646606445, 12.182160377502441 ], "geometry": { "type": "Polygon", "coordinates [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.104355, "PERIMETER": 1.524931, "COLUMBUS_": 31.0, "COLUMBUS_I": 34.0, "POLYID": 30.0, "NEIG": 34, "HOVAL": 22.5, "INC": 13.906, "CRIME": 68.892044, "OPEN": 1.63878, "PLUMB": 15.600624, "DISCBD": 0.37, "X": 38.290001, "Y": 30.35, "NSA": 0.0, "NSB": 0.0, "EW": 0.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1034.0 }, "bbox": [ 8.386432647705078, 11.785490036010742, 8.898137092590332, 12.125729560852051 ], "geometry": { "type": "Polygon", "coordinat [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.117409, "PERIMETER": 1.716047, "COLUMBUS_": 32.0, "COLUMBUS_I": 45.0, "POLYID": 31.0, "NEIG": 45, "HOVAL": 31.799999, "INC": 16.940001, "CRIME": 17.677214, "OPEN": 3.936443, "PLUMB": 0.85389, "DISCBD": 3.78, "X": 27.940001, "Y": 29.85, "NSA": 1.0, "NSB": 1.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1045.0 }, "bbox": [ 6.456532001495361, 11.781330108642578, 7.185831069946289, 12.078980445861816 ], "geometry": { "type": "Polygon", "co [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.18558, "PERIMETER": 2.108951, "COLUMBUS_": 33.0, "COLUMBUS_I": 13.0, "POLYID": 32.0, "NEIG": 13, "HOVAL": 40.299999, "INC": 18.941999, "CRIME": 19.145592, "OPEN": 2.221022, "PLUMB": 0.255102, "DISCBD": 4.76, "X": 50.110001, "Y": 29.91, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1013.0 }, "bbox": [ 10.424249649047852, 11.633870124816895, 11.204830169677734, 12.037540435791016 ], "geometry": { "type": "Polygon", " [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.087472, "PERIMETER": 1.507971, "COLUMBUS_": 34.0, "COLUMBUS_I": 22.0, "POLYID": 33.0, "NEIG": 22, "HOVAL": 23.6, "INC": 9.918, "CRIME": 41.968163, "OPEN": 0.0, "PLUMB": 1.023891, "DISCBD": 2.28, "X": 44.099998, "Y": 30.4, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1022.0 }, "bbox": [ 9.480667114257812, 11.76294994354248, 10.049909591674805, 12.009679794311523 ], "geometry": { "type": "Polygon", "coordinates": [  [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.226594, "PERIMETER": 2.519132, "COLUMBUS_": 35.0, "COLUMBUS_I": 44.0, "POLYID": 34.0, "NEIG": 44, "HOVAL": 28.450001, "INC": 14.948, "CRIME": 23.974028, "OPEN": 3.029087, "PLUMB": 0.386803, "DISCBD": 3.06, "X": 30.32, "Y": 28.26, "NSA": 0.0, "NSB": 0.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1044.0 }, "bbox": [ 6.966993808746338, 11.329950332641602, 7.733179092407227, 11.872119903564453 ], "geometry": { "type": "Polygon", "coordina [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.175453, "PERIMETER": 1.974937, "COLUMBUS_": 36.0, "COLUMBUS_I": 23.0, "POLYID": 35.0, "NEIG": 23, "HOVAL": 27.0, "INC": 12.814, "CRIME": 39.175053, "OPEN": 4.220401, "PLUMB": 0.633675, "DISCBD": 2.37, "X": 43.700001, "Y": 29.18, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1023.0 }, "bbox": [ 9.341614723205566, 11.531109809875488, 10.05659008026123, 11.866829872131348 ], "geometry": { "type": "Polygon", "coordinat [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.17813, "PERIMETER": 1.790058, "COLUMBUS_": 37.0, "COLUMBUS_I": 46.0, "POLYID": 36.0, "NEIG": 46, "HOVAL": 36.299999, "INC": 18.739, "CRIME": 14.305556, "OPEN": 6.773331, "PLUMB": 0.332349, "DISCBD": 4.23, "X": 27.27, "Y": 28.209999, "NSA": 0.0, "NSB": 0.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1046.0 }, "bbox": [ 6.456532001495361, 11.439629554748535, 7.019946098327637, 11.82621955871582 ], "geometry": { "type": "Polygon", "coordi [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.121154, "PERIMETER": 1.402252, "COLUMBUS_": 38.0, "COLUMBUS_I": 30.0, "POLYID": 37.0, "NEIG": 30, "HOVAL": 43.299999, "INC": 17.017, "CRIME": 42.445076, "OPEN": 4.839273, "PLUMB": 1.230329, "DISCBD": 1.08, "X": 38.32, "Y": 28.82, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1030.0 }, "bbox": [ 8.713337898254395, 11.434320449829102, 9.095859527587891, 11.810020446777344 ], "geometry": { "type": "Polygon", "coordina [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.053881, "PERIMETER": 0.934509, "COLUMBUS_": 39.0, "COLUMBUS_I": 24.0, "POLYID": 38.0, "NEIG": 24, "HOVAL": 22.700001, "INC": 11.107, "CRIME": 53.710938, "OPEN": 0.0, "PLUMB": 0.8, "DISCBD": 1.58, "X": 41.040001, "Y": 28.780001, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1024.0 }, "bbox": [ 9.084967613220215, 11.546170234680176, 9.343691825866699, 11.792989730834961 ], "geometry": { "type": "Polygon", "coordinate [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.174823, "PERIMETER": 2.335402, "COLUMBUS_": 40.0, "COLUMBUS_I": 47.0, "POLYID": 39.0, "NEIG": 47, "HOVAL": 39.599998, "INC": 18.476999, "CRIME": 19.100863, "OPEN": 0.0, "PLUMB": 0.314663, "DISCBD": 5.53, "X": 24.25, "Y": 26.690001, "NSA": 0.0, "NSB": 0.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1047.0 }, "bbox": [ 5.87490701675415, 11.057000160217285, 6.481366157531738, 11.781330108642578 ], "geometry": { "type": "Polygon", "coordin [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.302908, "PERIMETER": 2.285487, "COLUMBUS_": 41.0, "COLUMBUS_I": 16.0, "POLYID": 40.0, "NEIG": 16, "HOVAL": 61.950001, "INC": 29.833, "CRIME": 16.241299, "OPEN": 6.45131, "PLUMB": 0.132743, "DISCBD": 4.4, "X": 48.439999, "Y": 27.93, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1016.0 }, "bbox": [ 10.05659008026123, 11.213310241699219, 10.808690071105957, 11.74390983581543 ], "geometry": { "type": "Polygon", "coordi [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.137024, "PERIMETER": 1.525097, "COLUMBUS_": 42.0, "COLUMBUS_I": 14.0, "POLYID": 41.0, "NEIG": 14, "HOVAL": 42.099998, "INC": 22.207001, "CRIME": 18.905146, "OPEN": 0.293317, "PLUMB": 0.247036, "DISCBD": 5.33, "X": 51.240002, "Y": 27.799999, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1014.0 }, "bbox": [ 10.799189567565918, 11.232259750366211, 11.141839981079102, 11.727809906005859 ], "geometry": { "type": "Polygo [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.266541, "PERIMETER": 2.176543, "COLUMBUS_": 43.0, "COLUMBUS_I": 49.0, "POLYID": 42.0, "NEIG": 49, "HOVAL": 44.333, "INC": 25.872999, "CRIME": 16.49189, "OPEN": 1.792993, "PLUMB": 0.134439, "DISCBD": 3.87, "X": 29.02, "Y": 26.58, "NSA": 0.0, "NSB": 0.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1049.0 }, "bbox": [ 6.75403881072998, 10.997920036315918, 7.404403209686279, 11.586389541625977 ], "geometry": { "type": "Polygon", "coordinate [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.060241, "PERIMETER": 0.967793, "COLUMBUS_": 44.0, "COLUMBUS_I": 29.0, "POLYID": 43.0, "NEIG": 29, "HOVAL": 25.700001, "INC": 13.38, "CRIME": 36.663612, "OPEN": 0.0, "PLUMB": 0.589226, "DISCBD": 1.95, "X": 41.09, "Y": 27.49, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1029.0 }, "bbox": [ 9.082836151123047, 11.308409690856934, 9.341614723205566, 11.559189796447754 ], "geometry": { "type": "Polygon", "coordinates":  [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.173337, "PERIMETER": 1.868044, "COLUMBUS_": 45.0, "COLUMBUS_I": 25.0, "POLYID": 44.0, "NEIG": 25, "HOVAL": 33.5, "INC": 16.961, "CRIME": 25.962263, "OPEN": 1.463993, "PLUMB": 0.329761, "DISCBD": 2.67, "X": 43.23, "Y": 27.309999, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1025.0 }, "bbox": [ 9.335508346557617, 11.211409568786621, 9.963891983032227, 11.546170234680176 ], "geometry": { "type": "Polygon", "coordinat [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.256431, "PERIMETER": 2.193039, "COLUMBUS_": 46.0, "COLUMBUS_I": 28.0, "POLYID": 45.0, "NEIG": 28, "HOVAL": 27.733, "INC": 14.135, "CRIME": 29.028488, "OPEN": 1.006118, "PLUMB": 2.3912, "DISCBD": 2.13, "X": 39.32, "Y": 25.85, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1028.0 }, "bbox": [ 8.622117042541504, 10.821869850158691, 9.178548812866211, 11.460300445556641 ], "geometry": { "type": "Polygon", "coordinates": [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.124728, "PERIMETER": 1.841029, "COLUMBUS_": 47.0, "COLUMBUS_I": 48.0, "POLYID": 46.0, "NEIG": 48, "HOVAL": 76.099998, "INC": 18.323999, "CRIME": 16.530533, "OPEN": 9.683953, "PLUMB": 0.424628, "DISCBD": 5.27, "X": 25.469999, "Y": 25.709999, "NSA": 0.0, "NSB": 0.0, "EW": 0.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1048.0 }, "bbox": [ 6.167585849761963, 10.978030204772949, 6.678176879882812, 11.447600364685059 ], "geometry": { "type": "Polygon" [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.245249, "PERIMETER": 2.079986, "COLUMBUS_": 48.0, "COLUMBUS_I": 15.0, "POLYID": 47.0, "NEIG": 15, "HOVAL": 42.5, "INC": 18.950001, "CRIME": 27.822861, "OPEN": 0.0, "PLUMB": 0.268817, "DISCBD": 5.57, "X": 50.889999, "Y": 25.24, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1015.0 }, "bbox": [ 10.588159561157227, 10.788629531860352, 11.287420272827148, 11.315879821777344 ], "geometry": { "type": "Polygon", "coordinat [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.069762, "PERIMETER": 1.102032, "COLUMBUS_": 49.0, "COLUMBUS_I": 27.0, "POLYID": 48.0, "NEIG": 27, "HOVAL": 26.799999, "INC": 11.813, "CRIME": 26.645266, "OPEN": 4.884389, "PLUMB": 1.034807, "DISCBD": 2.33, "X": 41.209999, "Y": 25.9, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 1.0, "THOUS": 1000.0, "NEIGNO": 1027.0 }, "bbox": [ 9.093674659729004, 11.048029899597168, 9.3948974609375, 11.312379837036133 ], "geometry": { "type": "Polygon", "coordin [...]
+,
+{ "type": "Feature", "properties": { "AREA": 0.205964, "PERIMETER": 2.199169, "COLUMBUS_": 50.0, "COLUMBUS_I": 26.0, "POLYID": 49.0, "NEIG": 26, "HOVAL": 35.799999, "INC": 18.796, "CRIME": 22.541491, "OPEN": 0.259826, "PLUMB": 0.901442, "DISCBD": 3.03, "X": 42.669998, "Y": 24.959999, "NSA": 0.0, "NSB": 0.0, "EW": 1.0, "CP": 0.0, "THOUS": 1000.0, "NEIGNO": 1026.0 }, "bbox": [ 9.095559120178223, 10.828829765319824, 9.78189754486084, 11.285369873046875 ], "geometry": { "type": "Polygon", "c [...]
+
+]
+}
diff --git a/pysal/examples/columbus/columbus.shp b/pysal/examples/columbus/columbus.shp
new file mode 100644
index 0000000..d6dde43
Binary files /dev/null and b/pysal/examples/columbus/columbus.shp differ
diff --git a/pysal/examples/columbus/columbus.shx b/pysal/examples/columbus/columbus.shx
new file mode 100644
index 0000000..7086b6f
Binary files /dev/null and b/pysal/examples/columbus/columbus.shx differ
diff --git a/pysal/examples/desmith/README.md b/pysal/examples/desmith/README.md
new file mode 100644
index 0000000..2ffd8ef
--- /dev/null
+++ b/pysal/examples/desmith/README.md
@@ -0,0 +1,13 @@
+desmith
+=======
+
+Small data set to illustrate Moran's I statistic
+------------------------------------------------
+
+Figure 5-31 of de Smith, Goodchild and Longley (2015)
+
+Polygons, n=12, k=1
+
+Source: <http://www.spatialanalysisonline.com/>
+
+Used with permission.
diff --git a/pysal/examples/desmith/desmith.gal b/pysal/examples/desmith/desmith.gal
new file mode 100644
index 0000000..43bb702
--- /dev/null
+++ b/pysal/examples/desmith/desmith.gal
@@ -0,0 +1,21 @@
+10
+1 2
+2 4
+2 2
+1 5
+3 2
+4 7
+4 4
+1 3 5 8
+5 4
+2 4 6 9
+6 2
+5 10
+7 2
+3 8
+8 3
+4 7 9
+9 3
+5 8 10
+10 2
+6 9
diff --git a/pysal/examples/desmith/desmith.txt b/pysal/examples/desmith/desmith.txt
new file mode 100644
index 0000000..2b0194a
--- /dev/null
+++ b/pysal/examples/desmith/desmith.txt
@@ -0,0 +1,12 @@
+10,2
+"id","z"
+1,2.24
+2,3.10
+3,4.55
+4,-5.15
+5,-4.39
+6,0.46
+7,5.54
+8,9.02
+9,-2.09
+10,-3.06
diff --git a/pysal/examples/examples.txt b/pysal/examples/examples.txt
new file mode 100644
index 0000000..68640e3
--- /dev/null
+++ b/pysal/examples/examples.txt
@@ -0,0 +1,141 @@
+******************************************************************
+PySAL: Example Data Sets 
+******************************************************************
+
+PySAL comes with a number of example data sets that are used in some of the
+documentation strings in the source code. All the example data sets can be
+found in the **examples** directory.
+
+10740
+=====
+Polygon shapefile for Albuquerque New Mexico.
+
+* 10740.dbf: attribute database file
+* 10740.shp: shapefile
+* 10740.shx: spatial index
+* 10740_queen.gal: queen contiguity GAL format
+* 10740_rook.gal: rook contiguity GAL format
+
+
+book
+====
+Synthetic data to illustrate spatial weights. Source: Anselin, L. and S.J. Rey (in
+progress) Spatial Econometrics: Foundations.
+
+* book.gal: rook contiguity for regular lattice
+* book.txt: attribute data for regular lattice
+
+calempdensity
+=============
+Employment density for California counties. Source: Anselin, L. and S.J. Rey (in
+progress) Spatial Econometrics: Foundations.
+
+* calempdensity.csv: data on employment and employment density in California
+  counties.
+
+chicago77
+=========
+Chicago Community Areas (n=77). Source: Anselin, L. and S.J. Rey (in
+progress) Spatial Econometrics: Foundations.
+
+* Chicago77.dbf: attribute data
+* Chicago77.shp: shapefile
+* Chicago77.shx: spatial index
+
+
+desmith
+=======
+Example data for autocorrelation analysis. Source: de Smith et al (2009)
+`Geospatial Analysis
+<http://www.spatialanalysisonline.com/output/html/MoranIandGearyC.html>`_ (Used
+with permission)
+
+* desmith.txt: attribute data for 10 spatial units
+* desmith.gal: spatial weights in GAL format
+
+juvenile
+========
+Cardiff juvenile delinquent residences.
+
+* juvenile.dbf: attribute data
+* juvenile.html: documentation
+* juvenile.shp: shapefile
+* juvenile.shx: spatial index
+
+mexico
+======
+State regional income Mexican states 1940-2000. Source:  Rey, S.J. and M.L.
+Sastre Gutierrez. "Interregional inequality dynamics in Mexico." Spatial
+Economic Analysis. Forthcoming.
+
+* mexico.csv: attribute data
+* mexico.gal: spatial weights in GAL format
+
+rook31
+======
+Small test shapefile
+
+* rook31.dbf: attribute data
+* rook31.gal: spatia weights in GAL format
+* rook31.shp: shapefile
+* rook31.shx: spatial index
+
+
+sacramento2
+===========
+1998 and 2001 Zip Code Business Patterns (Census Bureau) for Sacramento MSA
+
+ * sacramento2.dbf
+ * sacramento2.sbn
+ * sacramento2.sbx
+ * sacramento2.shp
+ * sacramento2.shx
+
+shp_test
+========
+Sample Shapefiles used only for testing purposes. Each example include a ".shp" Shapefile, ".shx" Shapefile Index, ".dbf" DBase file, and a ".prj" ESRI Projection file.
+
+Examples include:
+
+ * Point: Example of an ESRI Shapefile of Type 1 (Point).
+ * Line: Example of an ESRI Shapefile of Type 3 (Line).
+ * Polygon: Example of an ESRI Shapefile of Type 5 (Polygon).
+
+sids2
+=====
+North Carolina county SIDS death counts and rates
+ 
+ * sids2.dbf:  attribute data
+ * sids2.html: documentation
+ * sids2.shp:  shapefile
+ * sids2.shx:  spatial index
+ * sids2.gal:  GAL file for spatial weights
+
+stl_hom
+=======
+Homicides and selected socio-economic characteristics for counties surrounding St Louis, MO. Data aggregated for three time periods: 1979-84 (steady decline in homicides), 1984-88 (stable period), and 1988-93 (steady increase in homicides). Source: S. Messner, L. Anselin, D. Hawkins, G. Deane, S. Tolnay, R. Baller (2000). An Atlas of the Spatial Patterning of County-Level Homicide, 1960-1990. Pittsburgh, PA, National Consortium on Violence Research (NCOVR).
+
+ * stl_hom.html: Metadata
+ * stl_hom.txt: txt file with attribute data
+ * stl_hom.wkt: A Well-Known-Text representation of the geometry.
+ * stl_hom.csv: attribute data and WKT geometry.
+ * stl.hom.gal: GAL file for spatial weights
+ 
+
+US Regional Incomes
+===================
+Per capita income for the lower 48 US states, 1929-2010
+
+ * us48.shp: shapefile 
+ * us48.dbf: dbf for shapefile
+ * us48.shx: index for shapefile
+ * usjoin.csv: attribute data (comma delimited file)
+
+Virginia
+========
+Virginia Counties Shapefile.
+
+  * virginia.shp: Shapefile
+  * virginia.shx: shapefile index
+  * virginia.dbf: attributes
+  * virginia.prj: shapefile projection
diff --git a/pysal/examples/geodanet/README.md b/pysal/examples/geodanet/README.md
new file mode 100644
index 0000000..f8b53da
--- /dev/null
+++ b/pysal/examples/geodanet/README.md
@@ -0,0 +1,26 @@
+geodanet
+========
+
+Datasets from geodanet for network analysis
+-------------------------------------------
+
+* crimes.dbf attribute data for crime point set
+* crimes.prj projection
+* crimes.sbn spatial index
+* crimes.sbx spatial index
+* crimes.shp shapefile for crime point data
+* crimes.shp.xml metadata
+* crimes.shx shape index
+* schools.dbf attribute data for schools point set
+* schools.prj projection
+* schools.sbn spatial index
+* schools.sbx spatial index
+* schools.shp spatial index
+* schools.shp.xml metadata
+* schools.shx shape index
+* streets.dbf attribute data for street polyline
+* streets.prj projection
+* streets.sbn spatial index
+* streets.sbx spatial index
+* streets.shp shapefile
+* streets.shx shape index
diff --git a/pysal/examples/geodanet/crimes.dbf b/pysal/examples/geodanet/crimes.dbf
new file mode 100644
index 0000000..523c2c8
Binary files /dev/null and b/pysal/examples/geodanet/crimes.dbf differ
diff --git a/pysal/examples/geodanet/crimes.prj b/pysal/examples/geodanet/crimes.prj
new file mode 100644
index 0000000..b7b18c8
--- /dev/null
+++ b/pysal/examples/geodanet/crimes.prj
@@ -0,0 +1 @@
+PROJCS["NAD_1983_StatePlane_Arizona_Central_FIPS_0202_Feet",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",699998.6],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-111.9166666666667],PARAMETER["Scale_Factor",0.9999],PARAMETER["Latitude_Of_Origin",31.0],UNIT["Foot_US",0.3048006096012192]]
\ No newline at end of file
diff --git a/pysal/examples/geodanet/crimes.sbn b/pysal/examples/geodanet/crimes.sbn
new file mode 100644
index 0000000..4646933
Binary files /dev/null and b/pysal/examples/geodanet/crimes.sbn differ
diff --git a/pysal/examples/geodanet/crimes.sbx b/pysal/examples/geodanet/crimes.sbx
new file mode 100644
index 0000000..4a7fea5
Binary files /dev/null and b/pysal/examples/geodanet/crimes.sbx differ
diff --git a/pysal/examples/geodanet/crimes.shp b/pysal/examples/geodanet/crimes.shp
new file mode 100644
index 0000000..efc7d25
Binary files /dev/null and b/pysal/examples/geodanet/crimes.shp differ
diff --git a/pysal/examples/geodanet/crimes.shp.xml b/pysal/examples/geodanet/crimes.shp.xml
new file mode 100644
index 0000000..6ec0a37
--- /dev/null
+++ b/pysal/examples/geodanet/crimes.shp.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!--<!DOCTYPE metadata SYSTEM "http://www.esri.com/metadata/esriprof80.dtd">-->
+<metadata xml:lang="en"><Esri><CreaDate>20120210</CreaDate><CreaTime>09543000</CreaTime><SyncOnce>FALSE</SyncOnce><DataProperties><lineage><Process ToolSource="C:\Program Files\ArcGIS\ArcToolbox\Toolboxes\Data Management Tools.tbx\DefineProjection" Date="20100423" Time="143725">DefineProjection MesaCrime_SPCentral_feet PROJCS['NAD_1983_StatePlane_Arizona_Central_FIPS_0202_Feet',GEOGCS['GCS_North_American_1983',DATUM['D_North_American_1983',SPHEROID['GRS_1980',6378137.0,298.257222101]],PR [...]
diff --git a/pysal/examples/geodanet/crimes.shx b/pysal/examples/geodanet/crimes.shx
new file mode 100644
index 0000000..8a794bc
Binary files /dev/null and b/pysal/examples/geodanet/crimes.shx differ
diff --git a/pysal/examples/geodanet/schools.dbf b/pysal/examples/geodanet/schools.dbf
new file mode 100644
index 0000000..70ab8d1
Binary files /dev/null and b/pysal/examples/geodanet/schools.dbf differ
diff --git a/pysal/examples/geodanet/schools.prj b/pysal/examples/geodanet/schools.prj
new file mode 100644
index 0000000..b7b18c8
--- /dev/null
+++ b/pysal/examples/geodanet/schools.prj
@@ -0,0 +1 @@
+PROJCS["NAD_1983_StatePlane_Arizona_Central_FIPS_0202_Feet",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",699998.6],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-111.9166666666667],PARAMETER["Scale_Factor",0.9999],PARAMETER["Latitude_Of_Origin",31.0],UNIT["Foot_US",0.3048006096012192]]
\ No newline at end of file
diff --git a/pysal/examples/geodanet/schools.sbn b/pysal/examples/geodanet/schools.sbn
new file mode 100644
index 0000000..0508084
Binary files /dev/null and b/pysal/examples/geodanet/schools.sbn differ
diff --git a/pysal/examples/geodanet/schools.sbx b/pysal/examples/geodanet/schools.sbx
new file mode 100644
index 0000000..abadf28
Binary files /dev/null and b/pysal/examples/geodanet/schools.sbx differ
diff --git a/pysal/examples/geodanet/schools.shp b/pysal/examples/geodanet/schools.shp
new file mode 100644
index 0000000..b71949e
Binary files /dev/null and b/pysal/examples/geodanet/schools.shp differ
diff --git a/pysal/examples/geodanet/schools.shp.xml b/pysal/examples/geodanet/schools.shp.xml
new file mode 100644
index 0000000..c09b39c
--- /dev/null
+++ b/pysal/examples/geodanet/schools.shp.xml
@@ -0,0 +1,546 @@
+<?xml version="1.0"?>
+<metadata><idinfo><citation><citeinfo><origin>Arizona Department of Environmental Quality, Arizona Department of Health Services</origin><pubdate>August 14, 2007</pubdate><title Sync="TRUE">SCHOOLS_EVERYTHING_8_7_08</title><edition>Schools 8-14-2007</edition><geoform Sync="TRUE">vector digital data</geoform><onlink>\\adeq.lcl\gisprod\data\adeq\schools-everything-8-14-07.shp</onlink><ftname Sync="TRUE">SCHOOLS_EVERYTHING_8_7_08</ftname></citeinfo></citation><descript><abstract>This data s [...]
+
+All data are provided "as is" and may contain errors. The data are for reference and illustration purposes only and are not suitable for site-specific decision making. Information found here should not be used for making financial or any other commitments. Conclusions drawn from such information are the responsibility of the user.  
+
+ADEQ assumes no responsibility for errors arising from misuse of the data or maps derived from the data. ADEQ disclaims any liability for injury, damage or loss that might result from the use of this information. In no event shall ADEQ become liable to users of these data and maps, or any other party, arising from the use or modification of the data.</useconst><ptcontac><cntinfo><cntorgp><cntorg>Arizona Department of Environmental Quality</cntorg></cntorgp><cntaddr><addrtype>mailing and  [...]
+aW5mbz4NCiAgICA8Y2l0YXRpb24+DQogICAgICA8Y2l0ZWluZm8+DQogICAgICAgIDxvcmlnaW4+
+QXJpem9uYSBEZXBhcnRtZW50IG9mIEVudmlyb25tZW50YWwgUXVhbGl0eSwgQXJpem9uYSBEZXBh
+cnRtZW50IG9mIEhlYWx0aCBTZXJ2aWNlczwvb3JpZ2luPg0KICAgICAgICA8cHViZGF0ZT5BdWd1
+c3QgMTQsIDIwMDc8L3B1YmRhdGU+DQogICAgICAgIDxlZGl0aW9uPlNjaG9vbHMgOC0xNC0yMDA3
+PC9lZGl0aW9uPg0KICAgICAgICA8b25saW5rPlxcYWRlcS5sY2xcZ2lzcHJvZFxkYXRhXGFkZXFc
+c2Nob29scy1ldmVyeXRoaW5nLTgtMTQtMDcuc2hwPC9vbmxpbms+DQogICAgICA8L2NpdGVpbmZv
+Pg0KICAgIDwvY2l0YXRpb24+DQogICAgPGRlc2NyaXB0Pg0KICAgICAgPGFic3RyYWN0PlRoaXMg
+ZGF0YSBzZXQgaXMgYSBnZW5lcmFsIHJlZmVyZW5jZSBmb3Igc2Nob29scyBvciAibGVhcm5pbmcg
+c2l0ZXMiIGluIEFyaXpvbmEuICBJdCByZXByZXNlbnRzIHNjaG9vbHMgZnJvbSB0aGUgQVogRGVw
+YXJ0bWVudCBvZiBFZHVjYXRpb24gKENURFMgbnVtYmVycywgY2hhcnRlciBhbmQgcHVibGljIHNj
+aG9vbHMpLCBBWiBTY2hvb2wgRmFjaWxpdGllcyBCb2FyZCwgcHJpdmF0ZSBzY2hvb2xzLCBzb21l
+IHRlY2huaWNhbCBzY2hvb2xzLCBjb2xsZWdlcyBhbmQgdW5pdmVyc2l0aWVzLjwvYWJzdHJhY3Q+
+DQogICAgICA8cHVycG9zZT5UaGUgaW50ZW50aW9uIHdpdGggd2hpY2ggdGhlIGRhdGEgc2V0IHdh
+cyBkZXZlbG9wZWQgaXMgZm9yIGdlbmVyYWwgcmVmZXJlbmNlIG9ubHkuICBJdCBpcyByZXByZXNl
+bnRhdGl2ZSBvbmx5IHByZXNlbnRpbmcgYSBzaW5nbGUgcG9pbnQgaW4gdGltZSBmb3IgdGhlIHRv
+cGljICJsZWFybmluZyBzaXRlcy4iICBJdCBpcyBub3QgdGhlIGZpbmFsIG9yIGF1dGhvcml0YXRp
+dmUgbGVnYWwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxlYXJuaW5nIHNpdGVzIGRhdGEgb3IgbG9j
+YXRpb25zLjwvcHVycG9zZT4NCiAgICAgIDxzdXBwbGluZj5UaGlzIGRhdGEgc2V0IGRvZXMgbm90
+IGNvbnRhaW4gbG9jYXRpb25zIGZvciBhbGwgY29zbWV0b2xvZ3kgb3IgYmVhdXR5IGNvbGxlZ2Vz
+LCBob3JzZXNob2Vpbmcgb3Igd2VsZGluZyB0ZWNobmljYWwgc2Nob29scywgb3Igb3RoZXIgdHJh
+ZGUgc2Nob29scy48L3N1cHBsaW5mPg0KICAgIDwvZGVzY3JpcHQ+DQogICAgPHRpbWVwZXJkPg0K
+ICAgICAgPGN1cnJlbnQ+cHVibGljYXRpb24gZGF0ZTwvY3VycmVudD4NCiAgICA8L3RpbWVwZXJk
+Pg0KICAgIDxzdGF0dXM+DQogICAgICA8cHJvZ3Jlc3M+SW4gd29yazwvcHJvZ3Jlc3M+DQogICAg
+ICA8dXBkYXRlPkFzIG5lZWRlZDwvdXBkYXRlPg0KICAgIDwvc3RhdHVzPg0KICAgIDxrZXl3b3Jk
+cz4NCiAgICAgIDx0aGVtZT4NCiAgICAgICAgPHRoZW1la2V5PkFERVE8L3RoZW1la2V5Pg0KICAg
+ICAgICA8dGhlbWVrZXk+ZW52aXJvbm1lbnQ8L3RoZW1la2V5Pg0KICAgICAgICA8dGhlbWVrZXk+
+QXJpem9uYTwvdGhlbWVrZXk+DQogICAgICAgIDx0aGVtZWtleT5FbnZpcm9ubWVudGFsIFF1YWxp
+dHk8L3RoZW1la2V5Pg0KICAgICAgICA8dGhlbWVrZXk+RGVwYXJ0bWVudCBvZiBFbnZpcm9ubWVu
+dGFsIFF1YWxpdHk8L3RoZW1la2V5Pg0KICAgICAgICA8dGhlbWVrZXk+c2Nob29sczwvdGhlbWVr
+ZXk+DQogICAgICAgIDx0aGVtZWtleT5sZWFybmluZyBzaXRlczwvdGhlbWVrZXk+DQogICAgICAg
+IDx0aGVtZWtleT5jb2xsZWdlczwvdGhlbWVrZXk+DQogICAgICAgIDx0aGVtZWtleT51bml2ZXJz
+aXRpZXM8L3RoZW1la2V5Pg0KICAgICAgICA8dGhlbWVrZXk+Z3JhZGUgc2Nob29sPC90aGVtZWtl
+eT4NCiAgICAgICAgPHRoZW1la2V5PmVsZW1lbnRhcnkgc2Nob29sPC90aGVtZWtleT4NCiAgICAg
+ICAgPHRoZW1la2V5PmhpZ2ggc2Nob29sPC90aGVtZWtleT4NCiAgICAgICAgPHRoZW1la2V5Pm1p
+ZGRsZSBzY2hvb2w8L3RoZW1la2V5Pg0KICAgICAgICA8dGhlbWVrZXk+a2luZGVyZ2FydGVuPC90
+aGVtZWtleT4NCiAgICAgICAgPHRoZW1la2V5PnByaXZhdGUgc2Nob29sPC90aGVtZWtleT4NCiAg
+ICAgICAgPHRoZW1la2V5PnBhcm9jaGlhbCBzY2hvb2w8L3RoZW1la2V5Pg0KICAgICAgICA8dGhl
+bWVrZXk+bW9udGVzc29yaTwvdGhlbWVrZXk+DQogICAgICAgIDx0aGVtZWtleT5jb21tdW5pdHkg
+Y29sbGVnZTwvdGhlbWVrZXk+DQogICAgICAgIDx0aGVtZWtleT5qdW5pb3IgY29sbGVnZTwvdGhl
+bWVrZXk+DQogICAgICAgIDx0aGVtZWtleT51bml2ZXJzaXR5PC90aGVtZWtleT4NCiAgICAgICAg
+PHRoZW1la2V5PkFyaXpvbmEgIERlcGFydG1lbnQgb2YgRWR1Y2F0aW9uPC90aGVtZWtleT4NCiAg
+ICAgICAgPHRoZW1la2V5PkNoYXJ0ZXIgU2Nob29sPC90aGVtZWtleT4NCiAgICAgIDwvdGhlbWU+
+DQogICAgICA8cGxhY2U+DQogICAgICAgIDxwbGFjZWtleT5Bcml6b25hPC9wbGFjZWtleT4NCiAg
+ICAgIDwvcGxhY2U+DQogICAgICA8dGVtcG9yYWw+DQogICAgICAgIDx0ZW1wa2V5PjIwMDg8L3Rl
+bXBrZXk+DQogICAgICA8L3RlbXBvcmFsPg0KICAgIDwva2V5d29yZHM+DQogICAgPGFjY2NvbnN0
+PkFjY2VzcyB0byB0aGVzZSBkYXRhIGFyZSBhbGxvd2VkIGZvciBub24tY29tbWVyY2lhbCBhcHBs
+aWNhdGlvbnMgd2l0aG91dCBjaGFyZ2UuICBDb21tZXJjaWFsIHVzZXMgcmVxdWlyZSBwYXltZW50
+LjwvYWNjY29uc3Q+DQogICAgPHVzZWNvbnN0PlRoZSBBcml6b25hIERlcGFydG1lbnQgb2YgRW52
+aXJvbm1lbnRhbCBRdWFsaXR5IGFuZCBvdGhlcnMgaGF2ZSBjb21waWxlZCB0aGlzIGRhdGEgYXMg
+YSBzZXJ2aWNlIHRvIG91ciBjdXN0b21lcnMgdXNpbmcgaW5mb3JtYXRpb24gZnJvbSB2YXJpb3Vz
+IHNvdXJjZXMuIEFERVEgYW5kIGl0cyBjb2xsYWJvcmF0b3JzIGNhbm5vdCBlbnN1cmUgdGhhdCB0
+aGUgaW5mb3JtYXRpb24gaXMgYWNjdXJhdGUsIGN1cnJlbnQgb3IgY29tcGxldGUuIE5laXRoZXIg
+dGhlIGluZm9ybWF0aW9uIHByZXNlbnRlZCBub3IgbWFwcyBkZXJpdmVkIGZyb20gdGhlbSBhcmUg
+b2ZmaWNpYWwgZG9jdW1lbnRzLiAgDQoNCkFsbCBkYXRhIGFyZSBwcm92aWRlZCAiYXMgaXMiIGFu
+ZCBtYXkgY29udGFpbiBlcnJvcnMuIFRoZSBkYXRhIGFyZSBmb3IgcmVmZXJlbmNlIGFuZCBpbGx1
+c3RyYXRpb24gcHVycG9zZXMgb25seSBhbmQgYXJlIG5vdCBzdWl0YWJsZSBmb3Igc2l0ZS1zcGVj
+aWZpYyBkZWNpc2lvbiBtYWtpbmcuIEluZm9ybWF0aW9uIGZvdW5kIGhlcmUgc2hvdWxkIG5vdCBi
+ZSB1c2VkIGZvciBtYWtpbmcgZmluYW5jaWFsIG9yIGFueSBvdGhlciBjb21taXRtZW50cy4gQ29u
+Y2x1c2lvbnMgZHJhd24gZnJvbSBzdWNoIGluZm9ybWF0aW9uIGFyZSB0aGUgcmVzcG9uc2liaWxp
+dHkgb2YgdGhlIHVzZXIuICANCg0KQURFUSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciBl
+cnJvcnMgYXJpc2luZyBmcm9tIG1pc3VzZSBvZiB0aGUgZGF0YSBvciBtYXBzIGRlcml2ZWQgZnJv
+bSB0aGUgZGF0YS4gQURFUSBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSBmb3IgaW5qdXJ5LCBkYW1h
+Z2Ugb3IgbG9zcyB0aGF0IG1pZ2h0IHJlc3VsdCBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBpbmZvcm1h
+dGlvbi4gSW4gbm8gZXZlbnQgc2hhbGwgQURFUSBiZWNvbWUgbGlhYmxlIHRvIHVzZXJzIG9mIHRo
+ZXNlIGRhdGEgYW5kIG1hcHMsIG9yIGFueSBvdGhlciBwYXJ0eSwgYXJpc2luZyBmcm9tIHRoZSB1
+c2Ugb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBkYXRhLjwvdXNlY29uc3Q+DQogICAgPHB0Y29udGFj
+Pg0KICAgICAgPGNudGluZm8+DQogICAgICAgIDxjbnRvcmdwPg0KICAgICAgICAgIDxjbnRvcmc+
+QXJpem9uYSBEZXBhcnRtZW50IG9mIEVudmlyb25tZW50YWwgUXVhbGl0eTwvY250b3JnPg0KICAg
+ICAgICA8L2NudG9yZ3A+DQogICAgICAgIDxjbnRhZGRyPg0KICAgICAgICAgIDxhZGRydHlwZT5t
+YWlsaW5nIGFuZCBwaHlzaWNhbCBhZGRyZXNzPC9hZGRydHlwZT4NCiAgICAgICAgICA8YWRkcmVz
+cz4xMTEwIFcgV2FzaGluZ3RvbiBTdDwvYWRkcmVzcz4NCiAgICAgICAgICA8Y2l0eT5QaG9lbml4
+PC9jaXR5Pg0KICAgICAgICAgIDxzdGF0ZT5Bcml6b25hPC9zdGF0ZT4NCiAgICAgICAgICA8cG9z
+dGFsPjg1MDA3PC9wb3N0YWw+DQogICAgICAgICAgPGNvdW50cnk+VVNBPC9jb3VudHJ5Pg0KICAg
+ICAgICA8L2NudGFkZHI+DQogICAgICA8L2NudGluZm8+DQogICAgPC9wdGNvbnRhYz4NCiAgICA8
+ZGF0YWNyZWQ+VGhpcyBkYXRhIHNldCBoYXMgYmVlbiBjcmVhdGVkIGluIGNvbGxhYm9yYXRpb24g
+d2l0aCB0aGUgQXJpem9uYSBEZXBhcnRtZW50IG9mIEVkdWNhdGlvbiwgQXJpem9uYSBEZXBhcnRt
+ZW50IG9mIEhlYWx0aCBTZXJ2aWNlcywgQXJpem9uYSBTdGF0ZSBMYW5kIERlcGFydG1lbnQgIGFu
+ZCB0aGUgQXJpem9uYSBTdGF0ZSBDYXJ0b2dyYXBoZXJzIE9mZmljZS48L2RhdGFjcmVkPg0KICAg
+IDxzZWNpbmZvPg0KICAgICAgPHNlY2NsYXNzPlVuY2xhc3NpZmllZDwvc2VjY2xhc3M+DQogICAg
+PC9zZWNpbmZvPg0KICA8L2lkaW5mbz4NCiAgPGRhdGFxdWFsPg0KICAgIDxsaW5lYWdlPg0KICAg
+ICAgPHByb2NzdGVwPg0KICAgICAgICA8cHJvY2Rlc2M+RGF0YXNldCBjb3BpZWQuPC9wcm9jZGVz
+Yz4NCiAgICAgIDwvcHJvY3N0ZXA+DQogICAgICA8cHJvY3N0ZXA+DQogICAgICAgIDxwcm9jZGVz
+Yz5NZXRhZGF0YSBpbXBvcnRlZC48L3Byb2NkZXNjPg0KICAgICAgICA8c3JjdXNlZD5EOlxET0NV
+TUV+MVxWTUd+MS5BREVcTE9DQUxTfjFcVGVtcFx4bWxDQS50bXA8L3NyY3VzZWQ+DQogICAgICA8
+L3Byb2NzdGVwPg0KICAgICAgPHByb2NzdGVwPg0KICAgICAgICA8cHJvY2Rlc2M+TWV0YWRhdGEg
+aW1wb3J0ZWQuPC9wcm9jZGVzYz4NCiAgICAgICAgPHNyY3VzZWQ+UzpcY29tbW9uXHZtZ1xzY2hv
+b2xzbWV0YWRhdGEueG1sPC9zcmN1c2VkPg0KICAgICAgPC9wcm9jc3RlcD4NCiAgICA8L2xpbmVh
+Z2U+DQogIDwvZGF0YXF1YWw+DQogIDxzcGRvaW5mbz4NCiAgICA8cHR2Y3RpbmY+DQogICAgICA8
+ZXNyaXRlcm0gTmFtZT0iU0NIT09MU19FVkVSWVRISU5HXzhfN18wOCIgLz4NCiAgICA8L3B0dmN0
+aW5mPg0KICA8L3NwZG9pbmZvPg0KICA8ZWFpbmZvPg0KICAgIDxkZXRhaWxlZCBOYW1lPSJTQ0hP
+T0xTX0VWRVJZVEhJTkdfOF83XzA4Ij4NCiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+
+RklEPC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJkZWY+SW50ZXJuYWwgZmVhdHVyZSBudW1iZXIu
+PC9hdHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+RVNSSTwvYXR0cmRlZnM+DQogICAgICAgIDxh
+dHRyZG9tdj4NCiAgICAgICAgICA8dWRvbT5TZXF1ZW50aWFsIHVuaXF1ZSB3aG9sZSBudW1iZXJz
+IHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLjwvdWRvbT4NCiAgICAgICAgPC9hdHRy
+ZG9tdj4NCiAgICAgIDwvYXR0cj4NCiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+U2hh
+cGU8L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5GZWF0dXJlIGdlb21ldHJ5LjwvYXR0cmRl
+Zj4NCiAgICAgICAgPGF0dHJkZWZzPkVTUkk8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cmRvbXY+
+DQogICAgICAgICAgPHVkb20+Q29vcmRpbmF0ZXMgZGVmaW5pbmcgdGhlIGZlYXR1cmVzLjwvdWRv
+bT4NCiAgICAgICAgPC9hdHRyZG9tdj4NCiAgICAgIDwvYXR0cj4NCiAgICAgIDxhdHRyPg0KICAg
+ICAgICA8YXR0cmxhYmw+TkFNRTwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPlNjaG9vbCBv
+ciBsZWFybmluZyBzaXRlIG5hbWU8L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8
+L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPkdvb2Q8L2F0
+dHJ2YT4NCiAgICAgICAgICA8YXR0cnZhZT5OYW1lcyB2ZXJpZmllZCB0byBtdWxpdHBsZSBzb3Vy
+Y2VzPC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICAgIDxhdHRybWZycT5BcyBu
+ZWVkZWQ8L2F0dHJtZnJxPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxh
+dHRybGFibD5BRERSRVNTPC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJkZWY+UGh5c2ljYWwgYWRk
+cmVzcyBvZiBzY2hvb2wgb3IgbGVhcm5pbmcgc2l0ZTwvYXR0cmRlZj4NCiAgICAgICAgPGF0dHJk
+ZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAgICAgIDxhdHRy
+dmE+R29vZDwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPlZlcmlmaWVkIHRvIG11bHRpcGxl
+IHNvdXJjZXM8L2F0dHJ2YWU+DQogICAgICAgIDwvYXR0cnZhaT4NCiAgICAgICAgPGF0dHJtZnJx
+PkFzIG5lZWRlZDwvYXR0cm1mcnE+DQogICAgICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAgICAg
+ICAgPGF0dHJsYWJsPlpJUDwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPlpJUCBDb2RlIG9m
+IHBoeXNpY2FsIGxvY2F0aW9uPC9hdHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+VVNQUyBaSVAg
+Q29kZTwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAgICAgIDxhdHRydmE+R29v
+ZDwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPlZlcmlmaWVkIHRvIG91dHNpZGUgc291cmNl
+PC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICAgIDxhdHRybWZycT5BcyBuZWVk
+ZWQ8L2F0dHJtZnJxPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRy
+bGFibD5DVERTPC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJkZWY+QVogRGVwdCBvZiBFZHVjYXRp
+b24gSWRlbnRpZmljYXRpb24gTnVtYmVyLCAoQ291bnR5IENvZGUsIFR5cGUgQ29kZSwgRGlzdHJp
+Y3QgQ29kZSAmYW1wOyBTaXRlIE51bWJlcjwvYXR0cmRlZj4NCiAgICAgICAgPGF0dHJkZWZzPkFa
+IERlcHQuIG9mIEVkdWNhdGlvbjwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAg
+ICAgIDxhdHRydmE+TWVkaXVtPC9hdHRydmE+DQogICAgICAgICAgPGF0dHJ2YWU+TWlzc2luZyBs
+ZWFkaW5nIHplcm9zIGluIHN0cmluZyBmaWVsZDwvYXR0cnZhZT4NCiAgICAgICAgPC9hdHRydmFp
+Pg0KICAgICAgICA8YXR0cm1mcnE+QXMgbmVlZGVkPC9hdHRybWZycT4NCiAgICAgIDwvYXR0cj4N
+CiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+Q1REU19OVU08L2F0dHJsYWJsPg0KICAg
+ICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFibD5TVEFUVVM8L2F0dHJs
+YWJsPg0KICAgICAgICA8YXR0cmRlZj5PcGVyYXRpbmcgU3RhdHVzIChvcGVuICwgY2xvc2VkLCBw
+cm9wb3NlZCk8L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8L2F0dHJkZWZzPg0K
+ICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPkdvb2Q8L2F0dHJ2YT4NCiAgICAg
+ICAgICA8YXR0cnZhZT5WYWxpZGF0ZWQgdG8gbXVsdGlwbGUgc291cmNlczwvYXR0cnZhZT4NCiAg
+ICAgICAgPC9hdHRydmFpPg0KICAgICAgICA8YXR0cm1mcnE+QXMgbmVlZGVkPC9hdHRybWZycT4N
+CiAgICAgIDwvYXR0cj4NCiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+TE9DQVRJT048
+L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5Mb2NhdGlvbiBjaGVjayBtZXRob2Q8L2F0dHJk
+ZWY+DQogICAgICAgIDxhdHRyZGVmcz5BREVRPC9hdHRyZGVmcz4NCiAgICAgICAgPGF0dHJkb212
+Pg0KICAgICAgICAgIDxlZG9tPg0KICAgICAgICAgICAgPGVkb212PkRJRzwvZWRvbXY+DQogICAg
+ICAgICAgICA8ZWRvbXZkPkRpZ2l0YWxseSB2ZXJpZmllZCBhZ2FpbnN0IHJhc3RlciBkYXRhIG9y
+IG90aGVyIGRhdGEgc2V0IChwYXJjZWxzKTwvZWRvbXZkPg0KICAgICAgICAgICAgPGVkb212ZHM+
+QURFUTwvZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+DQogICAgICAgICAgPGVkb20+DQogICAg
+ICAgICAgICA8ZWRvbXY+Tk9OPC9lZG9tdj4NCiAgICAgICAgICAgIDxlZG9tdmQ+Tm9uLXNwZWNp
+ZmljLCBtdWx0aXBsZSBtZXRob2RzIG9mIHZlcmlmaWNhdGlvbiAoZGlnaXRhbCwgZ2VvY29kaW5n
+LCBHUFMsIGV0Yy4pPC9lZG9tdmQ+DQogICAgICAgICAgICA8ZWRvbXZkcz5BREVRPC9lZG9tdmRz
+Pg0KICAgICAgICAgIDwvZWRvbT4NCiAgICAgICAgICA8ZWRvbT4NCiAgICAgICAgICAgIDxlZG9t
+dj5HUFM8L2Vkb212Pg0KICAgICAgICAgICAgPGVkb212ZD5HbG9iYWwgUG9zaXRpb25pbmcgU3lz
+dGVtIC0gZmllbGQgY29sbGVjdGVkPC9lZG9tdmQ+DQogICAgICAgICAgICA8ZWRvbXZkcz5BREVR
+PC9lZG9tdmRzPg0KICAgICAgICAgIDwvZWRvbT4NCiAgICAgICAgICA8ZWRvbT4NCiAgICAgICAg
+ICAgIDxlZG9tdj5HRU88L2Vkb212Pg0KICAgICAgICAgICAgPGVkb212ZD5PcmlnaW5hbGx5IGdl
+b2NvZGVkIC0gYWRkcmVzcyBtYXRjaGVkIFtsb2NhdGlvbiB2ZXJpZmllZCBieSBvdGhlciBtZXRo
+b2RzXTwvZWRvbXZkPg0KICAgICAgICAgICAgPGVkb212ZHM+QURFUTwvZWRvbXZkcz4NCiAgICAg
+ICAgICA8L2Vkb20+DQogICAgICAgIDwvYXR0cmRvbXY+DQogICAgICAgIDxhdHRydmFpPg0KICAg
+ICAgICAgIDxhdHRydmE+R29vZDwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPlZlcmlmaWVk
+PC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICAgIDxhdHRybWZycT5BcyBuZWVk
+ZWQ8L2F0dHJtZnJxPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRy
+bGFibD5RQV9RQzwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPlF1YWxpdHkgQXNzdXJhbmNl
+IC8gUXVhbGl0eSBDb250cm9sIENvZGU8L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5BREVR
+PC9hdHRyZGVmcz4NCiAgICAgICAgPGF0dHJkb212Pg0KICAgICAgICAgIDxlZG9tPg0KICAgICAg
+ICAgICAgPGVkb212PjA8L2Vkb212Pg0KICAgICAgICAgICAgPGVkb212ZD5Vc2VkIGFzIGlkZW50
+aWZpZXIgZm9yIHZlcnNpb24gYWRkaXRpb25zIHRvIGRhdGEgc2V0IC0gR1BTXSwgbG9jYXRpb24g
+cXVhbGl0eSBpcyAib2siPC9lZG9tdmQ+DQogICAgICAgICAgICA8ZWRvbXZkcz5BREVRPC9lZG9t
+dmRzPg0KICAgICAgICAgIDwvZWRvbT4NCiAgICAgICAgICA8ZWRvbT4NCiAgICAgICAgICAgIDxl
+ZG9tdj4xPC9lZG9tdj4NCiAgICAgICAgICAgIDxlZG9tdmQ+VmVyeSBoaWdoIGNvbmZpZGVuY2Ug
+b2YgbG9jYXRpb24gYWNjdXJhY3ksIG1hdGNoZWQgdG8gYXQgbGVhc3QgdHdvIGluZGVwZW5kZW50
+IHNvdXJjZXM8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRzPkFERVE8L2Vkb212ZHM+DQog
+ICAgICAgICAgPC9lZG9tPg0KICAgICAgICAgIDxlZG9tPg0KICAgICAgICAgICAgPGVkb212PjI8
+L2Vkb212Pg0KICAgICAgICAgICAgPGVkb212ZD5Mb3cgY29uZmlkZW5jZSBvZiBsb2NhdGlvbmFs
+IGFjY3VyYWN5LCB1bmFibGUgdG8gbWF0Y2ggdG8gb3RoZXIgc291cmNlczwvZWRvbXZkPg0KICAg
+ICAgICAgICAgPGVkb212ZHM+QURFUTwvZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+DQogICAg
+ICAgICAgPGVkb20+DQogICAgICAgICAgICA8ZWRvbXY+MzwvZWRvbXY+DQogICAgICAgICAgICA8
+ZWRvbXZkPlVzZWQgYXMgaWRlbnRpZmllciBmb3IgdmVyc2lvbiBhZGRpdGlvbnMgdG8gZGF0YSBz
+ZXQgLSBHUFMgb3IgTk9OLCBsb2NhdGlvbiBxdWFsaXR5IGlzICJvayI8L2Vkb212ZD4NCiAgICAg
+ICAgICAgIDxlZG9tdmRzPkFERVE8L2Vkb212ZHM+DQogICAgICAgICAgPC9lZG9tPg0KICAgICAg
+ICAgIDxlZG9tPg0KICAgICAgICAgICAgPGVkb212PjQ8L2Vkb212Pg0KICAgICAgICAgICAgPGVk
+b212ZD5Vc2VkIGFzIGlkZW50aWZpZXIgZm9yIHZlcnNpb24gYWRkaXRpb25zIHRvIGRhdGEgc2V0
+IC0gR1BTIG9yIE5PTiwgbG9jYXRpb24gcXVhbGl0eSBpcyAib2siPC9lZG9tdmQ+DQogICAgICAg
+ICAgICA8ZWRvbXZkcz5BREVRPC9lZG9tdmRzPg0KICAgICAgICAgIDwvZWRvbT4NCiAgICAgICAg
+ICA8ZWRvbT4NCiAgICAgICAgICAgIDxlZG9tdj41PC9lZG9tdj4NCiAgICAgICAgICAgIDxlZG9t
+dmQ+VmVyeSBoaWdoIGNvbmZpZGVuY2Ugb2YgbG9jYXRpb24gYWNjdXJhY3ksIG1hdGNoZWQgZGln
+aXRhbGx5LCBldGMuIHRvIGF0IGxlYXN0IHR3byBpbmRlcGVuZGVudCBzb3VyY2VzPC9lZG9tdmQ+
+DQogICAgICAgICAgICA8ZWRvbXZkcz5BREVRPC9lZG9tdmRzPg0KICAgICAgICAgIDwvZWRvbT4N
+CiAgICAgICAgPC9hdHRyZG9tdj4NCiAgICAgICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2
+YT5Hb29kPC9hdHRydmE+DQogICAgICAgIDwvYXR0cnZhaT4NCiAgICAgIDwvYXR0cj4NCiAgICAg
+IDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+Q0lUWTwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRy
+ZGVmPlBoeXNpY2FsIGxvY2F0aW9uIGNpdHkgb3IgdG93bjwvYXR0cmRlZj4NCiAgICAgICAgPGF0
+dHJkZWZzPkRpZ2l0YWw8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8
+YXR0cnZhPkdvb2Q8L2F0dHJ2YT4NCiAgICAgICAgICA8YXR0cnZhZT5WZXJpZmllZDwvYXR0cnZh
+ZT4NCiAgICAgICAgPC9hdHRydmFpPg0KICAgICAgICA8YXR0cm1mcnE+QXMgbmVlZGVkPC9hdHRy
+bWZycT4NCiAgICAgIDwvYXR0cj4NCiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+Q09V
+TlRZPC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJkZWY+Q291bnR5PC9hdHRyZGVmPg0KICAgICAg
+ICA8YXR0cmRlZnM+RGlnaXRhbDwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAg
+ICAgIDxhdHRydmE+R29vZDwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPlZlcmlmaWVkPC9h
+dHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICAgIDxhdHRybWZycT5BcyBuZWVkZWQ8
+L2F0dHJtZnJxPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFi
+bD5QSE9ORTwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPlBob25lIE51bWJlcjwvYXR0cmRl
+Zj4NCiAgICAgICAgPGF0dHJkZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFp
+Pg0KICAgICAgICAgIDxhdHRydmE+TWVkaXVtPC9hdHRydmE+DQogICAgICAgICAgPGF0dHJ2YWU+
+Tm90IHZlcmlmaWVkPC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICAgIDxhdHRy
+bWZycT5BcyBuZWVkZWQ8L2F0dHJtZnJxPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQog
+ICAgICAgIDxhdHRybGFibD5GQVg8L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5GQVggTnVt
+YmVyPC9hdHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+VmFyaWVzPC9hdHRyZGVmcz4NCiAgICAg
+ICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5NZWRpdW08L2F0dHJ2YT4NCiAgICAgICAg
+ICA8YXR0cnZhZT5Ob3QgdmVyaWZpZWQ8L2F0dHJ2YWU+DQogICAgICAgIDwvYXR0cnZhaT4NCiAg
+ICAgICAgPGF0dHJtZnJxPkFzIG5lZWRlZDwvYXR0cm1mcnE+DQogICAgICA8L2F0dHI+DQogICAg
+ICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPkxPV0dSQURFPC9hdHRybGFibD4NCiAgICAgICAg
+PGF0dHJkZWY+TG93ZXN0IGNsYXNzIGxldmVsPC9hdHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+
+VmFyaWVzPC9hdHRyZGVmcz4NCiAgICAgICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5N
+ZWRpdW08L2F0dHJ2YT4NCiAgICAgICAgICA8YXR0cnZhZT5Ob3QgVmVyaWZpZWQ8L2F0dHJ2YWU+
+DQogICAgICAgIDwvYXR0cnZhaT4NCiAgICAgICAgPGF0dHJtZnJxPkFzIG5lZWRlZDwvYXR0cm1m
+cnE+DQogICAgICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPkhJR0hH
+UkFERTwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPkhpZ2hlc3QgY2xhc3MgbGV2ZWwgdGF1
+Z2h0PC9hdHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+VmFyaWVzPC9hdHRyZGVmcz4NCiAgICAg
+ICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5NZWRpdW08L2F0dHJ2YT4NCiAgICAgICAg
+ICA8YXR0cnZhZT5Ob3QgdmVyaWZpZWQ8L2F0dHJ2YWU+DQogICAgICAgIDwvYXR0cnZhaT4NCiAg
+ICAgICAgPGF0dHJtZnJxPkFzIG5lZWRlZDwvYXR0cm1mcnE+DQogICAgICA8L2F0dHI+DQogICAg
+ICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPkNPTU1FTlQ8L2F0dHJsYWJsPg0KICAgICAgICA8
+YXR0cmRlZj5Db21tZW50cyBGaWVsZDwvYXR0cmRlZj4NCiAgICAgICAgPGF0dHJkZWZzPlZhcmll
+czwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRybWZycT5BcyBuZWVkZWQ8L2F0dHJtZnJxPg0KICAg
+ICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFibD5ESVNUUklDVDwvYXR0
+cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPlNjaG9vbCBEaXN0cmljdCBvciBDaGFydGVyIEhvbGRl
+cjwvYXR0cmRlZj4NCiAgICAgICAgPGF0dHJkZWZzPkFaIERlcGFydG1lbnQgb2YgRWR1Y2F0aW9u
+PC9hdHRyZGVmcz4NCiAgICAgICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5NZWRpdW08
+L2F0dHJ2YT4NCiAgICAgICAgICA8YXR0cnZhZT5Ob3QgZnVsbHkgdmVyaWZpZWQ8L2F0dHJ2YWU+
+DQogICAgICAgIDwvYXR0cnZhaT4NCiAgICAgICAgPGF0dHJtZnJxPkFzIG5lZWRlZDwvYXR0cm1m
+cnE+DQogICAgICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPkdSQURF
+PC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJkZWY+UmFuZ2Ugb2YgY2xhc3NlcyB0YXVnaHQ8L2F0
+dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0
+cm1mcnE+QXMgbmVlZGVkPC9hdHRybWZycT4NCiAgICAgIDwvYXR0cj4NCiAgICAgIDxhdHRyPg0K
+ICAgICAgICA8YXR0cmxhYmw+TlVSU0U8L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5TY2hv
+b2wgTnVyc2UgcHJlc2VudD88L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8L2F0
+dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPlVua25vd248L2F0
+dHJ2YT4NCiAgICAgICAgPC9hdHRydmFpPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQog
+ICAgICAgIDxhdHRybGFibD5STl9QSE48L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5SZWdp
+c3RlciBOdXJzZSBQaG9uZSBOdW1iZXI8L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJp
+ZXM8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPlVua25v
+d248L2F0dHJ2YT4NCiAgICAgICAgPC9hdHRydmFpPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0
+dHI+DQogICAgICAgIDxhdHRybGFibD5KVVZfUE9QPC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJk
+ZWY+SnV2ZW5pbGUgUG9wdWxhdGlvbiAobnVtYmVyIG9mIHN0dWRlbnRzKTwvYXR0cmRlZj4NCiAg
+ICAgICAgPGF0dHJkZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFpPg0KICAg
+ICAgICAgIDxhdHRydmE+VW5rbm93bjwvYXR0cnZhPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAg
+ICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPkRJU1ROVU08L2F0dHJs
+YWJsPg0KICAgICAgICA8YXR0cmRlZj5TY2hvb2wgRGlzdHJpY3QgTnVtYmVyIG9yIENoYXJ0ZXIg
+SG9sZGVyIE51bWJlcjwvYXR0cmRlZj4NCiAgICAgICAgPGF0dHJkZWZzPkFaIERlcGFydG1lbnQg
+b2YgRWR1Y2F0aW9uPC9hdHRyZGVmcz4NCiAgICAgICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0
+dHJ2YT5NZWRpdW08L2F0dHJ2YT4NCiAgICAgICAgICA8YXR0cnZhZT5QYXJ0aWFsbHkgdmVyaWZp
+ZWQ8L2F0dHJ2YWU+DQogICAgICAgIDwvYXR0cnZhaT4NCiAgICAgIDwvYXR0cj4NCiAgICAgIDxh
+dHRyPg0KICAgICAgICA8YXR0cmxhYmw+TUFJTFRPPC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJk
+ZWY+TWFpbGluZyBBZGRyZXNzPC9hdHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+VmFyaWVzPC9h
+dHRyZGVmcz4NCiAgICAgICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5NZWRpdW08L2F0
+dHJ2YT4NCiAgICAgICAgICA8YXR0cnZhZT5Ob3QgdmVyaWZpZWQ8L2F0dHJ2YWU+DQogICAgICAg
+IDwvYXR0cnZhaT4NCiAgICAgICAgPGF0dHJtZnJxPkFzIG5lZWRlZDwvYXR0cm1mcnE+DQogICAg
+ICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPk1BSUxDSVRZPC9hdHRy
+bGFibD4NCiAgICAgICAgPGF0dHJkZWY+TWFpbGluZyBBZGRyZXNzIENpdHk8L2F0dHJkZWY+DQog
+ICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAg
+ICAgICAgICA8YXR0cnZhPk1lZGl1bTwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPk5vdCB2
+ZXJpZmllZDwvYXR0cnZhZT4NCiAgICAgICAgPC9hdHRydmFpPg0KICAgICAgPC9hdHRyPg0KICAg
+ICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFibD5NQUlMU1RBVDwvYXR0cmxhYmw+DQogICAgICAg
+IDxhdHRyZGVmPk1haWxpbmcgQWRkcmVzcyBTdGF0ZTwvYXR0cmRlZj4NCiAgICAgICAgPGF0dHJk
+ZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAgICAgIDxhdHRy
+dmE+TWVkaXVtPC9hdHRydmE+DQogICAgICAgICAgPGF0dHJ2YWU+Tm90IHZlcmlmaWVkPC9hdHRy
+dmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAg
+ICAgICAgPGF0dHJsYWJsPk1BSUxaSVA8L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5NYWls
+aW5nIEFkZHJlc3MgWklQPC9hdHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+VmFyaWVzPC9hdHRy
+ZGVmcz4NCiAgICAgICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5NZWRpdW08L2F0dHJ2
+YT4NCiAgICAgICAgICA8YXR0cnZhZT5Ob3QgdmVyaWZpZWQ8L2F0dHJ2YWU+DQogICAgICAgIDwv
+YXR0cnZhaT4NCiAgICAgIDwvYXR0cj4NCiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+
+Q0xBU1M8L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5DbGFzcyAtIGdyYWRlIGxldmVsczwv
+YXR0cmRlZj4NCiAgICAgICAgPGF0dHJkZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxh
+dHRyZG9tdj4NCiAgICAgICAgICA8ZWRvbT4NCiAgICAgICAgICAgIDxlZG9tdj5Vbml2ZXJzaXR5
+PC9lZG9tdj4NCiAgICAgICAgICAgIDxlZG9tdmQ+VW5pdmVyc2l0eSBsZXZlbDwvZWRvbXZkPg0K
+ICAgICAgICAgICAgPGVkb212ZHM+VmFyaWVzPC9lZG9tdmRzPg0KICAgICAgICAgIDwvZWRvbT4N
+CiAgICAgICAgICA8ZWRvbT4NCiAgICAgICAgICAgIDxlZG9tdj5Db21tLiBDb2xsZWdlPC9lZG9t
+dj4NCiAgICAgICAgICAgIDxlZG9tdmQ+Q29tbXVuaXR5IENvbGxlZ2UgLSBwYXJ0IG9mIGNvbW11
+bml0eSBjb2xsZWdlIG5ldHdvcms8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRzPlZhcmll
+czwvZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+DQogICAgICAgICAgPGVkb20+DQogICAgICAg
+ICAgICA8ZWRvbXY+Q29sbGVnZTwvZWRvbXY+DQogICAgICAgICAgICA8ZWRvbXZkPkNvbGxlZ2Ug
+LSBub24tdW5pdmVyc2l0eSBvciBjb21tdW5pdHkgY29sbGVnZTwvZWRvbXZkPg0KICAgICAgICAg
+ICAgPGVkb212ZHM+VmFyaWVzPC9lZG9tdmRzPg0KICAgICAgICAgIDwvZWRvbT4NCiAgICAgICAg
+ICA8ZWRvbT4NCiAgICAgICAgICAgIDxlZG9tdj5UZWNoPC9lZG9tdj4NCiAgICAgICAgICAgIDxl
+ZG9tdmQ+VGVjaG5pY2FsIFNjaG9vbHM8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRzPlZh
+cmllczwvZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+DQogICAgICAgICAgPGVkb20+DQogICAg
+ICAgICAgICA8ZWRvbXY+UmVsLiBDb2xsZWdlPC9lZG9tdj4NCiAgICAgICAgICAgIDxlZG9tdmQ+
+UmVsaWdpb3VzIENvbGxlZ2U8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRzPlZhcmllczwv
+ZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+DQogICAgICAgICAgPGVkb20+DQogICAgICAgICAg
+ICA8ZWRvbXY+U3BlY2lhbCBOZWVkczwvZWRvbXY+DQogICAgICAgICAgICA8ZWRvbXZkPlNwZWNp
+YWwgbmVlZHMgc2Nob29sczwvZWRvbXZkPg0KICAgICAgICAgICAgPGVkb212ZHM+QURFUTwvZWRv
+bXZkcz4NCiAgICAgICAgICA8L2Vkb20+DQogICAgICAgICAgPGVkb20+DQogICAgICAgICAgICA8
+ZWRvbXY+QWxsIEdyYWRlczwvZWRvbXY+DQogICAgICAgICAgICA8ZWRvbXZkPkFsbCBncmFkZSBs
+ZXZlbHM8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRzPkFERVE8L2Vkb212ZHM+DQogICAg
+ICAgICAgPC9lZG9tPg0KICAgICAgICAgIDxlZG9tPg0KICAgICAgICAgICAgPGVkb212PkhpZ2g8
+L2Vkb212Pg0KICAgICAgICAgICAgPGVkb212ZD5IaWdoIFNjaG9vbDwvZWRvbXZkPg0KICAgICAg
+ICAgICAgPGVkb212ZHM+VmFyaWVzPC9lZG9tdmRzPg0KICAgICAgICAgIDwvZWRvbT4NCiAgICAg
+ICAgICA8ZWRvbT4NCiAgICAgICAgICAgIDxlZG9tdj5KUi9TUiBIaWdoPC9lZG9tdj4NCiAgICAg
+ICAgICAgIDxlZG9tdmQ+U2V2ZW50aCB0aHJvdWdoIHR3ZWxmdGggZ3JhZGU8L2Vkb212ZD4NCiAg
+ICAgICAgICAgIDxlZG9tdmRzPkFERVE8L2Vkb212ZHM+DQogICAgICAgICAgPC9lZG9tPg0KICAg
+ICAgICAgIDxlZG9tPg0KICAgICAgICAgICAgPGVkb212Pk1pZGRsZTwvZWRvbXY+DQogICAgICAg
+ICAgICA8ZWRvbXZkPk1pZGRsZSBTY2hvb2w8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRz
+PlZhcmllczwvZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+DQogICAgICAgICAgPGVkb20+DQog
+ICAgICAgICAgICA8ZWRvbXY+UHJpbWFyeTwvZWRvbXY+DQogICAgICAgICAgICA8ZWRvbXZkPlBy
+aW1hcnkgb3IgZWxlbWVudGFyeSBzY2hvb2w8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRz
+PlZhcmllczwvZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+DQogICAgICAgICAgPGVkb20+DQog
+ICAgICAgICAgICA8ZWRvbXY+KEJsYW5rKTwvZWRvbXY+DQogICAgICAgICAgICA8ZWRvbXZkPlVu
+a25vd24gZ3JhZGUgbGV2ZWxzPC9lZG9tdmQ+DQogICAgICAgICAgPC9lZG9tPg0KICAgICAgICA8
+L2F0dHJkb212Pg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPkdvb2Q8L2F0
+dHJ2YT4NCiAgICAgICAgICA8YXR0cnZhZT5WZXJpZmllZDwvYXR0cnZhZT4NCiAgICAgICAgPC9h
+dHRydmFpPg0KICAgICAgICA8YXR0cm1mcnE+QXMgbmVlZGVkPC9hdHRybWZycT4NCiAgICAgIDwv
+YXR0cj4NCiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+VFlQRV8xPC9hdHRybGFibD4N
+CiAgICAgICAgPGF0dHJkZWY+VHlwZSBvZiBTY2hvb2w8L2F0dHJkZWY+DQogICAgICAgIDxhdHRy
+ZGVmcz5WYXJpZXM8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cmRvbXY+DQogICAgICAgICAgPGVk
+b20+DQogICAgICAgICAgICA8ZWRvbXY+Q2hhcnRlcjwvZWRvbXY+DQogICAgICAgICAgICA8ZWRv
+bXZkPkFyaXpvbmEgQ2hhcnRlciBTY2hvb2w8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRz
+PkFyaXpvbmEgQm9hcmQgb2YgQ2hhcnRlciBTY2hvb2xzPC9lZG9tdmRzPg0KICAgICAgICAgIDwv
+ZWRvbT4NCiAgICAgICAgICA8ZWRvbT4NCiAgICAgICAgICAgIDxlZG9tdj5QdWJsaWM8L2Vkb212
+Pg0KICAgICAgICAgICAgPGVkb212ZD5QdWJsaWMgU2Nob29sPC9lZG9tdmQ+DQogICAgICAgICAg
+ICA8ZWRvbXZkcz5BeiBEZXBhcnRlbWVudCBvZiBFZHVjYXRpb248L2Vkb212ZHM+DQogICAgICAg
+ICAgPC9lZG9tPg0KICAgICAgICAgIDxlZG9tPg0KICAgICAgICAgICAgPGVkb212PkJJQTwvZWRv
+bXY+DQogICAgICAgICAgICA8ZWRvbXZkPkJ1cmVhdSBvZiBJbmRpYW4gQWZmYWlycyBvcGVyYXRl
+ZCBzY2hvb2w8L2Vkb212ZD4NCiAgICAgICAgICAgIDxlZG9tdmRzPlVTIEJJQTwvZWRvbXZkcz4N
+CiAgICAgICAgICA8L2Vkb20+DQogICAgICAgICAgPGVkb20+DQogICAgICAgICAgICA8ZWRvbXY+
+Q2xvc2VkPC9lZG9tdj4NCiAgICAgICAgICAgIDxlZG9tdmQ+Q2xvc2VkIFNjaG9vbDwvZWRvbXZk
+Pg0KICAgICAgICAgICAgPGVkb212ZHM+QURFUTwvZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+
+DQogICAgICAgICAgPGVkb20+DQogICAgICAgICAgICA8ZWRvbXY+UHJpdmF0ZTwvZWRvbXY+DQog
+ICAgICAgICAgICA8ZWRvbXZkPlByaXZhdGUgb3IgUGFyb2NoaWFsIG9wZXJhdGVkIHNjaG9vbDwv
+ZWRvbXZkPg0KICAgICAgICAgICAgPGVkb212ZHM+VmFyaWVzPC9lZG9tdmRzPg0KICAgICAgICAg
+IDwvZWRvbT4NCiAgICAgICAgICA8ZWRvbT4NCiAgICAgICAgICAgIDxlZG9tdj5UcmliYWw8L2Vk
+b212Pg0KICAgICAgICAgICAgPGVkb212ZD5UcmliZSBvcGVyYXRlZCBzY2hvb2w8L2Vkb212ZD4N
+CiAgICAgICAgICAgIDxlZG9tdmRzPlZhcmllczwvZWRvbXZkcz4NCiAgICAgICAgICA8L2Vkb20+
+DQogICAgICAgIDwvYXR0cmRvbXY+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAgICAgIDxhdHRy
+dmE+R29vZDwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPnZlcmlmaWVkPC9hdHRydmFlPg0K
+ICAgICAgICA8L2F0dHJ2YWk+DQogICAgICAgIDxhdHRybWZycT5BcyBuZWVkZWQ8L2F0dHJtZnJx
+Pg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFibD5LSU5ERVI8
+L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5LaW5kZXJnYXJkZW4gVGF1Z2h0PzwvYXR0cmRl
+Zj4NCiAgICAgICAgPGF0dHJkZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFp
+Pg0KICAgICAgICAgIDxhdHRydmE+TWVkaXVtPC9hdHRydmE+DQogICAgICAgICAgPGF0dHJ2YWU+
+Tm90IFZlcmlmaWVkPC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICA8L2F0dHI+
+DQogICAgICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPkZJUlNUPC9hdHRybGFibD4NCiAgICAg
+ICAgPGF0dHJkZWY+Rmlyc3QgR3JhZGUgVGF1Z2h0PzwvYXR0cmRlZj4NCiAgICAgICAgPGF0dHJk
+ZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAgICAgIDxhdHRy
+dmE+TWVkaXVtPC9hdHRydmE+DQogICAgICAgICAgPGF0dHJ2YWU+Tm90IFZlcmlmaWVkPC9hdHRy
+dmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAg
+ICAgICAgPGF0dHJsYWJsPlNFQ09ORDwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPlNlY29u
+ZCBHcmFkZSBUYXVnaHQ/PC9hdHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+VmFyaWVzPC9hdHRy
+ZGVmcz4NCiAgICAgICAgPGF0dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5NZWRpdW08L2F0dHJ2
+YT4NCiAgICAgICAgICA8YXR0cnZhZT5Ob3QgVmVyaWZpZWQ8L2F0dHJ2YWU+DQogICAgICAgIDwv
+YXR0cnZhaT4NCiAgICAgIDwvYXR0cj4NCiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+
+VEhJUkQ8L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5UaGlyZCBHcmFkZSBUYXVnaHQ/PC9h
+dHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+VmFyaWVzPC9hdHRyZGVmcz4NCiAgICAgICAgPGF0
+dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5NZWRpdW08L2F0dHJ2YT4NCiAgICAgICAgICA8YXR0
+cnZhZT5Ob3QgVmVyaWZpZWQ8L2F0dHJ2YWU+DQogICAgICAgIDwvYXR0cnZhaT4NCiAgICAgIDwv
+YXR0cj4NCiAgICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+Rk9VUlRIPC9hdHRybGFibD4N
+CiAgICAgICAgPGF0dHJkZWY+Rm91cnRoIEdyYWRlIFRhdWdodD88L2F0dHJkZWY+DQogICAgICAg
+IDxhdHRyZGVmcz5WYXJpZXM8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAg
+ICA8YXR0cnZhPk1lZGl1bTwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPk5vdCBWZXJpZmll
+ZDwvYXR0cnZhZT4NCiAgICAgICAgPC9hdHRydmFpPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0
+dHI+DQogICAgICAgIDxhdHRybGFibD5GSUZUSDwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVm
+PkZpZnRoIEdyYWRlIFRhdWdodD88L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8
+L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPk1lZGl1bTwv
+YXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPk5vdCBWZXJpZmllZDwvYXR0cnZhZT4NCiAgICAg
+ICAgPC9hdHRydmFpPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRy
+bGFibD5TSVhUSDwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPlNpeHRoIEdyYWRlIFRhdWdo
+dD88L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8L2F0dHJkZWZzPg0KICAgICAg
+ICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPk1lZGl1bTwvYXR0cnZhPg0KICAgICAgICAg
+IDxhdHRydmFlPk5vdCBWZXJpZmllZDwvYXR0cnZhZT4NCiAgICAgICAgPC9hdHRydmFpPg0KICAg
+ICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFibD5TRVZFTlRIPC9hdHRy
+bGFibD4NCiAgICAgICAgPGF0dHJkZWY+U2V2ZW50aCBHcmFkZSBUYXVnaHQ/PC9hdHRyZGVmPg0K
+ICAgICAgICA8YXR0cmRlZnM+VmFyaWVzPC9hdHRyZGVmcz4NCiAgICAgICAgPGF0dHJ2YWk+DQog
+ICAgICAgICAgPGF0dHJ2YT5NZWRpdW08L2F0dHJ2YT4NCiAgICAgICAgICA8YXR0cnZhZT5Ob3Qg
+VmVyaWZpZWQ8L2F0dHJ2YWU+DQogICAgICAgIDwvYXR0cnZhaT4NCiAgICAgIDwvYXR0cj4NCiAg
+ICAgIDxhdHRyPg0KICAgICAgICA8YXR0cmxhYmw+RUlHSFRIPC9hdHRybGFibD4NCiAgICAgICAg
+PGF0dHJkZWY+RWlnaHRoIEdyYWRlIFRhdWdodD88L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVm
+cz5WYXJpZXM8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZh
+Pk1lZGl1bTwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPk5vdCBWZXJpZmllZDwvYXR0cnZh
+ZT4NCiAgICAgICAgPC9hdHRydmFpPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAg
+ICAgIDxhdHRybGFibD5OSU5USDwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPk5pbnRoIEdy
+YWRlIFRhdWdodDwvYXR0cmRlZj4NCiAgICAgICAgPGF0dHJkZWZzPlZhcmllczwvYXR0cmRlZnM+
+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAgICAgIDxhdHRydmE+TWVkaXVtPC9hdHRydmE+DQog
+ICAgICAgICAgPGF0dHJ2YWU+Tm90IFZlcmlmaWVkPC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2
+YWk+DQogICAgICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPlRFTlRI
+PC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJkZWY+VGVudGggR3JhZGUgVGF1Z2h0PzwvYXR0cmRl
+Zj4NCiAgICAgICAgPGF0dHJkZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFp
+Pg0KICAgICAgICAgIDxhdHRydmE+TWVkaXVtPC9hdHRydmE+DQogICAgICAgICAgPGF0dHJ2YWU+
+Tm90IFZlcmlmaWVkPC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICA8L2F0dHI+
+DQogICAgICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPkVMRVZFTlRIPC9hdHRybGFibD4NCiAg
+ICAgICAgPGF0dHJkZWY+RWxldmVudGggR3JhZGUgVGF1Z2h0PzwvYXR0cmRlZj4NCiAgICAgICAg
+PGF0dHJkZWZzPlZhcmllczwvYXR0cmRlZnM+DQogICAgICAgIDxhdHRydmFpPg0KICAgICAgICAg
+IDxhdHRydmE+TWVkaXVtPC9hdHRydmE+DQogICAgICAgICAgPGF0dHJ2YWU+Tm90IFZlcmlmaWVk
+PC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQogICAgICA8L2F0dHI+DQogICAgICA8YXR0
+cj4NCiAgICAgICAgPGF0dHJsYWJsPlRXRUxGVEg8L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRl
+Zj5Ud2VsZnRoIEdyYWRlIFRhdWdodD88L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJp
+ZXM8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPk1lZGl1
+bTwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPk5vdCBWZXJpZmllZDwvYXR0cnZhZT4NCiAg
+ICAgICAgPC9hdHRydmFpPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxh
+dHRybGFibD5QUkVTQ0hMPC9hdHRybGFibD4NCiAgICAgICAgPGF0dHJkZWY+UHJlc2Nob29sIExl
+dmVsIFRhdWdodD88L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8L2F0dHJkZWZz
+Pg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPk1lZGl1bTwvYXR0cnZhPg0K
+ICAgICAgICAgIDxhdHRydmFlPk5vdCBWZXJpZmllZDwvYXR0cnZhZT4NCiAgICAgICAgPC9hdHRy
+dmFpPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFibD5BQ0NV
+UkFDWTwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPk9yaWdpbmFsICBBY2N1cmFjeTwvYXR0
+cmRlZj4NCiAgICAgICAgPGF0dHJkZWZzPkFESFM8L2F0dHJkZWZzPg0KICAgICAgPC9hdHRyPg0K
+ICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFibD5CT0FSRElORzwvYXR0cmxhYmw+DQogICAg
+ICAgIDxhdHRyZGVmPkJvYXJkaW5nIFNjaG9vbD88L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVm
+cz5WYXJpZXM8L2F0dHJkZWZzPg0KICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZh
+Pk1lZGl1bTwvYXR0cnZhPg0KICAgICAgICAgIDxhdHRydmFlPk5vdCBWZXJpZmllZDwvYXR0cnZh
+ZT4NCiAgICAgICAgPC9hdHRydmFpPg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAg
+ICAgIDxhdHRybGFibD5SRUdJT048L2F0dHJsYWJsPg0KICAgICAgICA8YXR0cmRlZj5SZWdpb24g
+b2YgU3RhdGU8L2F0dHJkZWY+DQogICAgICAgIDxhdHRyZGVmcz5WYXJpZXM8L2F0dHJkZWZzPg0K
+ICAgICAgICA8YXR0cnZhaT4NCiAgICAgICAgICA8YXR0cnZhPk1lZGl1bTwvYXR0cnZhPg0KICAg
+ICAgICAgIDxhdHRydmFlPk5vdCBWZXJpZmllZDwvYXR0cnZhZT4NCiAgICAgICAgPC9hdHRydmFp
+Pg0KICAgICAgPC9hdHRyPg0KICAgICAgPGF0dHI+DQogICAgICAgIDxhdHRybGFibD5XRUJfUEFH
+RTwvYXR0cmxhYmw+DQogICAgICAgIDxhdHRyZGVmPlNjaG9vbCBXZWIgUGFnZSBBZGRyZXNzPC9h
+dHRyZGVmPg0KICAgICAgICA8YXR0cmRlZnM+VmFyaWVzPC9hdHRyZGVmcz4NCiAgICAgICAgPGF0
+dHJ2YWk+DQogICAgICAgICAgPGF0dHJ2YT5NZWRpdW08L2F0dHJ2YT4NCiAgICAgICAgICA8YXR0
+cnZhZT5QYXJpdGlhbGx5IFZlcmlmaWVkPC9hdHRydmFlPg0KICAgICAgICA8L2F0dHJ2YWk+DQog
+ICAgICA8L2F0dHI+DQogICAgICA8YXR0cj4NCiAgICAgICAgPGF0dHJsYWJsPlBMQUNfSUROTzwv
+YXR0cmxhYmw+DQogICAgICA8L2F0dHI+DQogICAgPC9kZXRhaWxlZD4NCiAgPC9lYWluZm8+DQog
+IDxkaXN0aW5mbz4NCiAgICA8cmVzZGVzYz5Eb3dubG9hZGFibGUgRGF0YTwvcmVzZGVzYz4NCiAg
+ICA8c3Rkb3JkZXI+DQogICAgICA8ZGlnZm9ybT4NCiAgICAgICAgPGRpZ3RpbmZvPg0KICAgICAg
+ICAgIDx0cmFuc2l6ZT4zLjAxNzwvdHJhbnNpemU+DQogICAgICAgIDwvZGlndGluZm8+DQogICAg
+ICA8L2RpZ2Zvcm0+DQogICAgPC9zdGRvcmRlcj4NCiAgPC9kaXN0aW5mbz4NCiAgPG1ldGFpbmZv
+Pg0KICAgIDxtZXRleHRucz4NCiAgICAgIDxvbmxpbms+aHR0cDovL3d3dy5lc3JpLmNvbS9tZXRh
+ZGF0YS9lc3JpcHJvZjgwLmh0bWw8L29ubGluaz4NCiAgICAgIDxtZXRwcm9mPkVTUkkgTWV0YWRh
+dGEgUHJvZmlsZTwvbWV0cHJvZj4NCiAgICA8L21ldGV4dG5zPg0KICAgIDxtZXRleHRucz4NCiAg
+ICAgIDxvbmxpbms+aHR0cDovL3d3dy5lc3JpLmNvbS9tZXRhZGF0YS9lc3JpcHJvZjgwLmh0bWw8
+L29ubGluaz4NCiAgICAgIDxtZXRwcm9mPkVTUkkgTWV0YWRhdGEgUHJvZmlsZTwvbWV0cHJvZj4N
+CiAgICA8L21ldGV4dG5zPg0KICAgIDxtZXRleHRucz4NCiAgICAgIDxvbmxpbms+aHR0cDovL3d3
+dy5lc3JpLmNvbS9tZXRhZGF0YS9lc3JpcHJvZjgwLmh0bWw8L29ubGluaz4NCiAgICAgIDxtZXRw
+cm9mPkVTUkkgTWV0YWRhdGEgUHJvZmlsZTwvbWV0cHJvZj4NCiAgICA8L21ldGV4dG5zPg0KICA8
+L21ldGFpbmZvPg0KICA8RXNyaT4NCiAgICA8Q3JlYURhdGU+MjAwODA4MTE8L0NyZWFEYXRlPg0K
+ICAgIDxDcmVhVGltZT4xMDA1MjQwMDwvQ3JlYVRpbWU+DQogICAgPFN5bmNPbmNlPkZBTFNFPC9T
+eW5jT25jZT4NCiAgICA8U3luY0RhdGU+MjAxMTA2MjA8L1N5bmNEYXRlPg0KICAgIDxTeW5jVGlt
+ZT4xMzEyMDkwMDwvU3luY1RpbWU+DQogICAgPE1vZERhdGU+MjAxMTA2MjA8L01vZERhdGU+DQog
+ICAgPE1vZFRpbWU+MTMxMjA5MDA8L01vZFRpbWU+DQogICAgPE1ldGFJRD57MDEyODg5MzEtOEY1
+Qi00OTg4LTlGNTUtRTcwODFGMDkxMkU3fTwvTWV0YUlEPg0KICA8L0Vzcmk+DQogIDxkYXRhSWRJ
+bmZvPg0KICAgIDxkYXRhRXh0Pg0KICAgICAgPGdlb0VsZT4NCiAgICAgICAgPEdlb0JuZEJveCBl
+c3JpRXh0ZW50VHlwZT0ic2VhcmNoIiAvPg0KICAgICAgPC9nZW9FbGU+DQogICAgPC9kYXRhRXh0
+Pg0KICAgIDxnZW9Cb3ggZXNyaUV4dGVudFR5cGU9ImRlY2RlZ3JlZXMiIC8+DQogICAgPGRlc2NL
+ZXlzPg0KICAgICAgPHRoZXNhTmFtZSB1dWlkcmVmPSI3MjNmNjk5OC0wNThlLTExZGMtODMxNC0w
+ODAwMjAwYzlhNjYiIC8+DQogICAgPC9kZXNjS2V5cz4NCiAgPC9kYXRhSWRJbmZvPg0KICA8c3Bh
+dFJlcEluZm8+DQogICAgPFZlY3RTcGF0UmVwPg0KICAgICAgPGdlb21ldE9ianMgTmFtZT0iU0NI
+T09MU19FVkVSWVRISU5HXzhfN18wOCIgLz4NCiAgICA8L1ZlY3RTcGF0UmVwPg0KICA8L3NwYXRS
+ZXBJbmZvPg0KPC9tZXRhZGF0YT4=</Data></Enclosure><Thumbnail><Data EsriPropertyType="PictureX">/9j/4AAQSkZJRgABAQEAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
+HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
+MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACFAMgDASIA
+AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
+AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
+p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
+AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
+BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
+U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
+uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii
+gAooooAKKKKACiiigChba3pl7qt5pdtfQy31mFNxAjZaMN0z/njj1q/UENla29zcXENtFHPcEGaR
+EAaQgYG49Tgcc1PQBzEPjzRn8Tavoc7S2kulrG01xcqEhO/AUByeuWA5xntnBrXttc0281m+0i3u
+le/sVRriIA5QOMrz0PHpUmoaTp2rWz2+oWNvdQuVLpNGGDFTlc564NWljRWLKihiACQOSB0oAdVS
+51Sws720s7m8ghubtmW3idwGlIGTtHfAq3WLrHhbStc1bSdTvYWa70qYzWzo5XBI6HHUZAOPUemQ
+QDaorNj1/S5fEM2gx3kbapDALiS3GcqhOASemeRx1wQe9Ns/EWmX2v6holvOzX+nqj3EZRgFDjK8
+kYPHp60AalNd1jjZ3YKigliewFY+hNr9zBqC+Ibe0gJuZFtRZysSYOiljwQ3uMfQVnx6feeGbTT9
+I05lTQYraf7VqN3eZntjjKsN4IPJPXgAdgMEA1NN8TaLq2n2F9Z6jA9vfsUtSzbDKwzlVDYJI2nj
+2rWrgbvVvCHhW20bS/Emqw6hqmmiJoJZ4Q8wLnYJAFHH88AE5OCe+oAKKKKACiiigAooooAKKKKA
+CiiigAooooAKKKKACiiigCpqmow6RpV1qNwsrw20TSusKF3IAycAdTUlldx39jb3kSyLHPGsiiRC
+jAEZGVPIPsanooAKzb+/v7bVdNtrbSpLq1uXcXN0sqqLYBcqSp5bJ446UaJpt1pVjJBd6rc6lI08
+komuAoZVZiQg2gcAcfywMAO1LVtLsJ7Oy1C7hik1CQwW8UhwZmxyo/z1IHUigCtqFxdRXNjdaNpl
+tf8A2qdIbu4EyoY4Bu+bODu2kn5fc+ta4RA7OFUOwALAcnHT+Zrm4NFl8I6JZaZ4R0y3e3F4DNHc
+3LDy4nYl2UnJJGeB/PocK68Yadp/xLv49ZvNS0mGwsdsYuHUWVyrfNvXj/WcMAMknaR1BFAHd393
+b2NjNc3V3HaQIvzTyMFVOwJJ46+tcXqsE2m6Tpmm+K9f0m90SaGaPUptRURSXLY3J5e0gDAH14z1
+xjEvtKtvE/iubSNG1WG50TVoHvtZBu1uHG+NVh8tGyY/4XDD2zwFFdXq/hjSIfCtkNU0yXxA+hw+
+ZbiRA80jIvYcBicDg8HA4OKAKuhwm78aPqNjE0/hu40i2FlMvleQhRyQqLjeMDB9jnP8OO2rBGtS
+Ww0KKDQrqOzvkw7fJGtgNgKq6545wuB9OuAd6gAooooAKKKKACiiigAooooAKKKKACiiigArNmtd
+UfxDa3UWoxx6XHA6T2ZgBaSQkbWD5yMc8fzzxzfxL8eS+BNGtZ7XTWvry9n8iBN2FDYzyB8x9gB+
+I72PFdr42u4RJ4a1DT7VTYyrJbzxkuZyBtKv2xzjIAz1Bz8oB1U8wt7eWYpI4jQuVjUszYGcADqf
+aue8IeJ77xRBc3dx4evdJtAV+yvdsA86kcnZ1XB/PNVPCX/CX6fYaFpmu2kd032OQ32oG6DPHIG/
+doRj5ztIBbuQTnj5uwoAKKzZtGjn8Q2usG7vFktoHhFukxELhiDuZO5GP84GK03/AAksl3rEcP8A
+ZsNv5C/2ZM29m83ad3mr6bsdO3rQBt1HJBDM8TyxRu8Tb42ZQSjYIyPQ4JH0JrB0u08VxS6S2p6p
+YTxRWbLqCRWxVpp+NrIc4AHPYDrxyNvKeFJviL4qk1qTX/8AinrGSGS1tIYoR5ySbjiQE8nA4z0b
+gjHWgD0a8vLbT7Oa8vJ44LaFC8ksjYVVHUk1g+Kbjw3N4dh1TWLCPV9OV0eHy7b7VnzPlDKADkYb
+r/XFPu/DuoXc2kxya5LJYW0Dw39tNBG4v8pty/GBzkkAY57U7wxZ28Hh6TSk1xtWFvJJbyTq6B4j
+k/u/3eNhUEDHBHGMDAABjeL/AA1b3l7Z3Fhb2VrLextZ3d7G7RXYt9hYCDaPmf5emDwMdCcQXcui
++NPhvbXuq3eq6JpUcis0lzceRLIiNtHmNk5D/mSQRzW5pPgbQ9J0rSLD7O14NIkaWzmu23yRuxJJ
+B/Hp04B6gGt27s7XULSS1vLeK4t5Bh4pUDKw9weDQBwPjHwoniPwlYeD/Dt/arDZT2puo3uC0iWw
+BxzycnAIz1xXoiqEQKOgGK4zQtB12Px9rGuX4sLSzkX7PDDaRqWukGCkkjkbtyjK4/oBntKACiii
+gAooooAKKKKACiiigAooooAKKKKAOG+KXg678Y+H7aKzcGSxuPtX2YnH2napAj3ZwpJPUg1v3Fpq
++pWujzJetpE0Usc15bxKswkXb80O4jpk/eHpW1XG+FdC8W6T4p12fWNeTUdGupDJZRPkyREnOOgC
+gDjAyDweO4B0Wt61ZeHtHuNV1F3S0twDIyRs5GSAOACepFXkcSRq652sARkY4+hpxAIwRkGs3W9G
+j1yxjtZLu8tQk8c2+0mMTkowbaSOxxz/AI0AaVcFYeJdStvitrOk6qLiHS3hhNjJO0aQhuBhTwWL
+MSMZJ+Xp6XvE+r+LEs9bttB0BzdQpCLC7aWNlmZzhztJGNg9frjFec/Ef4UXtxHrHi+fWL7UNRjj
+ikt7aG2DBCpG9QpJ+QckAdBnO7uAanjr40HTH1XQ9BsLka9Z3Hl5uIdyeWqlnkAB7AcZ7EH2r0/Q
+NWh1zQLHUoJ4ZluIVcvCRt3Y+YdTjByMZOMV50fC+l/GLRrTVtT0yfTzDOnk3u1Flv7cAZLAcqGJ
+bA5x2Jru3vdO8LvpOi22nTQ2kwdI2toP3FsqLuJkbooPPPfkmgDcrJ0vw1o+iHUG0yyjtG1CUzXD
+RZBZyOue3fAHAycdafF4h0iefUoItQgeXTAGvFVsmEFdwJ/AH8j6Vi2XjObVPEOlwabo9xd6DqNo
+08erxn5FYZ+VlIyvTHODk9OtAFfQfCGvaL4mhkbxPc3OgWtqYYLOYl5JHY5LSsepB6EYwMDgZ3dr
+XAnxu2ueJtHh8OatpX2FbqaDU7e7by7nK4UbEbDdSMYHUrnvXVX+pXttrOmWVtprXMF0z/aLhZlX
+7MqrkMVPLAnjjp+IoA1KKxfDlt4htob0eIdQtLyR7p2tjbQmMJCfuqff88erda2qACiiigAooooA
+KKKKACiiigAooooAKKKKAIL27jsLG4vJVkaOCNpGEaF2IAycKOSfYVzel3NvY2Op+MLrWdQfSr6F
+Lxbe8TaLONU5CrjOT7deOvU7Ot6ldaVYxz2mlXOpSNPHEYbcqGVWYAudxHAHP88DJESS61L4murW
+40+0/sD7KpiuPNzI8pJDKyYxjH9OTkhQDQs7u31CygvLWUS288ayxOOjKwyD+RqtrOuab4fs0u9U
+ult4HmSFXYE5dzhRx/kVU8V+H5fEvh+XSYNVudMErKJJrXG5o8/MnsCMjj9RkHStbGC00+3slDSQ
+26IiGZjIx24wSTyTwDk96AOJ8erpFpruiX+veIdVtrVp44rbTbMsFlnDhg7bBuIHQj6Y569PremC
+9ay1Bbm5STTXa5jiiufJjnOwgLIeQV5/DnsSDPrUFneaXdWt1ClwDC37nzAjNuBUANkbSclQcjrX
+zNqfxI8WeD4JPCTiI20cYVra7XfLBFJH/qC6kZChhhhg8DpytAH0l4V1lvEHhfT9UdLeOS4iDPHb
+ziZEboQGHBxj8Onal8TeHrLxToFzo+oS3EdrOBva3l2MMHPXoRx0IIr5K+H/AI6uvC3ibSri+vtR
+bSLQyK1rBLlQrg5AQnGN2CR7Z619XodN8eeDFMsNyNO1W2BMb7opArfr/Q+4PIBBBolx4bsNJ0/w
+vaWQto5o47xrt28wwKpBIYcs/QDPA6dOlzW9Vl0K1sfsejXV+stzHbGO0Vf3KNxvIPRR+XTkda1I
+II7a3igiBEcSBFBYsQAMDk8n6mpKAPO/iB8PfDXiKC6vBJZaZrtun2sX3yqQF6NKP4k+XGSOMfUH
+Y8KWFxqS2viTxBplnD4gSBrQXNrP5kcsO7IdcHADdR1OD74EXjfwLH4n069/s+S30/VbyFLWa+aH
+ezW4bc0fUYz6+2Pp02laemk6RZadExdLWBIFYgAsFUDOBx2oAzbez8RL4zvLufUrZvD7WyJb2axf
+vFlz8zFvz+oIGBjJ3a53xrbwPoK3k1pql4bC4ju47fTJCssjq3AwCMjnJHtkciugRi8asVZSQDtb
+qPY0AOooooAKKKKACiiigAooooAKKKKACiiigAorL1jWRpthevaW51C/toPOGnwSKJnBJA4PQEg8
+98HAJ4q09/Db6Z9vvmWyiWISTfaHVRCMZIY5xx9cUAWqKo6nq9ho+jz6tfXCxWMEfmPKAWG31GMk
+9ulV7vxBb20ukLHb3d1HqkmyKa2hLogKlgzn+FSB1/oDQBwfxK+G2o+KtbXVdL+w7xYNbyRzyOnm
+uGBjJwCCF5YdOVGcg8eZT/ALxhcXuqSXd3bTOkRmhuBLu+1ynkpzgg9fmbHOOucj3u/1XxP/AGvL
+aab4eia2imtx9rubsKssTZ80qoBIK4HB+voDpazpt1qcVqlrqtzpxhuY5na3CkyqpyYzkHg/5yOK
+APi3WPCXiPw3DFc6tpF5YxOyiOWWMqCxG4DPrjt14Poa9C+BviLxP/wl1ro1pfCbS9p861upTsRO
+SWjHZh6DrzngEjqPiH4Vtk1jxNqWuX3iHVooLI31pbrGY7e3d2EahZASuVxnG0fKOc4OcH4aeGtY
+8XeO5PFlkLPSbWzkidVMSzBwQBtH+1sBLPwdx7EnAB7ne3+r6tca7oenWt1pVxBAn2XVpoleGRnB
++6M846d8dx0B5CSX4teGfDVvM40zxBcRF1liSNvOI3rtOQVDfKG6AEbuQcZHfeI9IuNc0d7G11a7
+0uVnRxc2pG8bWBxz2OP8jINHwfrV1qVtfWOp3ME+rabctBdtbwPHHk/Mu3cOflIzj+WCQDoElBEY
+ceXK67vLZhuHTI464z2pl6Lo2NwLFoluzG3kmYEoHx8u4DnGcZxWXrvhq21iRL6Nvs2sW0EsVlfA
+bmtzIuCwU8N+P4YrmdH+J+kx69F4T1k39prCP9mWa9gEa3TDADjbwN5yR29+RkA7bSxfrpVqNUeB
+78RL9oaAERl8c7c84zVusSHSbu08T32tz69dPYS26ounyBRDAV5Lg/56nJPGNugAooooAKKKKACi
+iigAooooAKKKKACo5zIsEhhUNKFJQHuccelSUUAeGeF/hLqXirU7nxT46uL601Ge5Dra27iIjYeM
+sCSF4XGMEbc56GvTPFHgXTfF0sf9p3eoi3WEwtawXTJFIN6vllHU5Uf/AKwCOnooAiW2gS1W1WGM
+W6p5Yi2jaFxjbj0xxipaKKAGh0MhjDKXUBiueQDnBx+B/I06ss6TpGn6te+Imhjhu5bcR3N0zEDy
+kyecnAA7n2HpWfpnipNT1iJYvsZ0a8t1k029F0N93JyXQRkZ+UDn0/HAAN+5toby1mtbiNZYJkaO
+SNhkMpGCD7EGuAuPB+j/AA4t7/xP4atPKmitFhazmv8AybaTDD53Z8/MBnknnPqc11mjaFbeHI9R
+aC4vZ0url7tlnlaYxluSqDrjOTjk5PesvU9d8Na38PJ9W1jdBodxCfM+2QbWXnA+RgctuA24BycY
+zQBEPid4Uk0a3v4tYgb7TcfZIURWdjNkAgIAGIG4HOOhHqKwfhs3iDVvEmp+INTn0u5t5IfsTT2F
+3I6tLFIwyIydqjaR+hH3mr548ZaAPCfiGC304XYh8tJ7S+Zx/pQPzLNHtHyjkYGSRjnnivevgf4r
++0+ALqTWtXtf9DvDGWmYI6B8EGRifmLOzYJ5JzyewB6drMupQaNdy6PbQ3OorGTbwzvsR27An/8A
+V9R1CLptrcz2uoX2nWh1KKML5uwO0R6lVcgHGc+n0q4ZowkjBtwjzuCDcQQM4wOc+1c54Vvb7xFo
+d5f3d2xs7+WQ2QS3e2mggI2gNk53AgncPqDyAADW1zRLHxFo1zpOpRvJaXChZFSQoSAQRyDnqBVy
+CCK1t4reBAkUSBEQdFUDAH5Vh2ug6lpiaFaafrUp0+wDJdJdp50t2u3C5kONpB54H6DFdBQAUUUU
+AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAAQCMEZBqg+i6W81jK2nWvmWGfsjeUP3AIwQn90
+Y9Kv0UAcj4o0zxC/inw5qmiXdz9nhuPJ1C0EyrE0DclyCOSMAdz0xjk1093Z2uoWklreW8VxbyDD
+xSoGVh7g8Gp6zbVdZGuX7XctmdKKR/Y0jVhKGwd+8njrjGKAPPfiDpl14r+InhjRLKRzBprC/vYV
+lkgxGXUK6uBjI2kDBzzxjkjTh8F+C10TUfACXivcXWbu4RpkN1lmyJOnUYGOOmM9ec34l6xP4J8Z
++HPFkVnJdwSJJp13FHuLFWKsu3nbuyCQMc4PtjpPDHhBbMSarqd5JqWrXBkaG/urVEuLeGTkR9O3
+oeBkgADigDH0PRtI+FdxeXdx4hvLqx1q9ihhjnXzWFwSwJLqOSe5IH3ecmtW/k1XSvEdpbnxbaKd
+U1LzILK7thu+zrH88UZUjnODk+3fO7zvwRBqnw08e6n4b1UX1/ockJube4WFjDEVBk38/KpwGBxx
+uAq7qHj6PULjwl4yv9GvrXS4XvpEEbSSSMqphXwnyAEZyHI6Nzt5IB61rOs2Hh/SZ9U1S4FvZwAG
+SQgnGSAOByeSKuo6yRq6MGRgCpHcGqWl6jaa/olrqECO1peQrIizR7SVIzyp/wD1VfoAKKKKACii
+igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAGuiSAB1VgCCMjOCOhp1FFABTFijWERL
+GoiC7QgHAHTGPSiigB4AAwBgCiiigAooooAKKKKACiiigD//2Q==</Data></Thumbnail></Binary><mdHrLvName Sync="TRUE">dataset</mdHrLvName><refSysInfo><RefSystem><refSysID><identCode code="26912"></identCode><idCodeSpace Sync="TRUE">EPSG</idCodeSpace><idVersion Sync="TRUE">7.4.1</idVersion></refSysID></RefSystem></refSysInfo><mdDateSt Sync="TRUE">20110620</mdDateSt></metadata>
diff --git a/pysal/examples/geodanet/schools.shx b/pysal/examples/geodanet/schools.shx
new file mode 100644
index 0000000..5c20492
Binary files /dev/null and b/pysal/examples/geodanet/schools.shx differ
diff --git a/pysal/examples/geodanet/streets.dbf b/pysal/examples/geodanet/streets.dbf
new file mode 100644
index 0000000..ce6d200
Binary files /dev/null and b/pysal/examples/geodanet/streets.dbf differ
diff --git a/pysal/examples/geodanet/streets.prj b/pysal/examples/geodanet/streets.prj
new file mode 100644
index 0000000..b7b18c8
--- /dev/null
+++ b/pysal/examples/geodanet/streets.prj
@@ -0,0 +1 @@
+PROJCS["NAD_1983_StatePlane_Arizona_Central_FIPS_0202_Feet",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",699998.6],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-111.9166666666667],PARAMETER["Scale_Factor",0.9999],PARAMETER["Latitude_Of_Origin",31.0],UNIT["Foot_US",0.3048006096012192]]
\ No newline at end of file
diff --git a/pysal/examples/geodanet/streets.sbn b/pysal/examples/geodanet/streets.sbn
new file mode 100644
index 0000000..4f4e82f
Binary files /dev/null and b/pysal/examples/geodanet/streets.sbn differ
diff --git a/pysal/examples/geodanet/streets.sbx b/pysal/examples/geodanet/streets.sbx
new file mode 100644
index 0000000..5fc350e
Binary files /dev/null and b/pysal/examples/geodanet/streets.sbx differ
diff --git a/pysal/examples/geodanet/streets.shp b/pysal/examples/geodanet/streets.shp
new file mode 100644
index 0000000..b5809a7
Binary files /dev/null and b/pysal/examples/geodanet/streets.shp differ
diff --git a/pysal/examples/geodanet/streets.shx b/pysal/examples/geodanet/streets.shx
new file mode 100644
index 0000000..4733484
Binary files /dev/null and b/pysal/examples/geodanet/streets.shx differ
diff --git a/pysal/examples/juvenile/README.md b/pysal/examples/juvenile/README.md
new file mode 100644
index 0000000..a9e1066
--- /dev/null
+++ b/pysal/examples/juvenile/README.md
@@ -0,0 +1,14 @@
+juvenile
+========
+
+Residences of juvenile offenders in Cardiff, UK
+-----------------------------------------------
+
+ * juvenile.dbf attribute file
+ * juvenile.gwt spatial weights
+ * juvenile.shp shapefile
+ * juvenile.shx spatial index
+
+Point data, unknown coordinates, n=168, k=3. 
+
+Source: http://geodacenter.org/downloads/data-files/juvenile.zip
diff --git a/pysal/examples/juvenile/juvenile.dbf b/pysal/examples/juvenile/juvenile.dbf
new file mode 100644
index 0000000..c5e8e3f
Binary files /dev/null and b/pysal/examples/juvenile/juvenile.dbf differ
diff --git a/pysal/examples/juvenile/juvenile.gwt b/pysal/examples/juvenile/juvenile.gwt
new file mode 100644
index 0000000..6d9f409
--- /dev/null
+++ b/pysal/examples/juvenile/juvenile.gwt
@@ -0,0 +1,2803 @@
+1 168 juvenile ID
+1 2         14.1421356
+2 1         14.1421356
+2 58                  7
+2 57         7.61577311
+2 5                  5
+2 4         3.60555128
+2 3         5.09901951
+2 6         14.1421356
+3 2         5.09901951
+3 57         2.82842712
+3 5         3.60555128
+3 4         2.23606798
+3 6         13.3416641
+3 56          9.8488578
+3 55         9.43398113
+3 54         11.4017543
+3 53         11.3137085
+3 52         14.1421356
+3 58         2.23606798
+3 59         13.3416641
+4 2         3.60555128
+4 3         2.23606798
+4 57         4.12310563
+4 5                  2
+4 7         14.1421356
+4 6         12.0415946
+4 56         11.4017543
+4 55         10.7703296
+4 54         12.5299641
+4 53         12.2065556
+4 58         4.47213595
+5 2                  5
+5 3         3.60555128
+5 4                  2
+5 7         12.1655251
+5 6         10.0498756
+5 56          11.045361
+5 55          10.198039
+5 54         11.7046999
+5 53         11.1803399
+5 52          13.892444
+5 57         4.12310563
+5 58         5.65685425
+6 2         14.1421356
+6 3         13.3416641
+6 4         12.0415946
+6 5         10.0498756
+6 51         8.48528137
+6 49         10.2956301
+6 48         13.6014705
+6 9         9.05538514
+6 8         9.43398113
+6 7         3.60555128
+6 10         13.0384048
+6 52         13.3416641
+6 53          12.083046
+6 54         13.4164079
+6 55         13.6014705
+6 57          12.083046
+7 4         14.1421356
+7 5         12.1655251
+7 6         3.60555128
+7 51                  5
+7 49         7.28010989
+7 48         10.2956301
+7 9         7.28010989
+7 8         6.32455532
+7 47          13.892444
+7 11                 14
+7 10         11.1803399
+7 50         11.4017543
+7 52         11.1803399
+7 53         10.6301458
+7 54         12.0415946
+7 55         12.8062485
+7 57         13.1529464
+79 19         13.6014705
+79 18          12.083046
+79 81         3.60555128
+79 80         1.41421356
+79 21                 14
+79 22                 13
+79 23                 12
+79 27         13.9283883
+79 28         12.5299641
+79 29         10.2956301
+79 30         7.81024968
+79 31         9.21954446
+79 73         12.0415946
+79 74         10.4403065
+79 75                  8
+79 76         4.47213595
+79 77         3.16227766
+79 78         9.21954446
+8 6         9.43398113
+8 7         6.32455532
+8 49                  1
+8 48         4.24264069
+8 9         4.12310563
+8 47         7.81024968
+8 46         8.06225775
+8 45         8.54400375
+8 12         9.21954446
+8 11         8.24621125
+8 10         6.40312424
+8 50         7.07106781
+8 44         12.2065556
+8 43         12.8062485
+8 42         13.0384048
+8 41         12.5299641
+8 40          13.892444
+8 51         2.23606798
+8 52         13.6014705
+9 6         9.05538514
+9 7         7.28010989
+9 8         4.12310563
+9 49                  4
+9 48         7.28010989
+9 47         10.2956301
+9 46                 10
+9 45         9.89949494
+9 12         8.24621125
+9 11         7.28010989
+9 10                  4
+9 50                 11
+9 41         14.1421356
+9 51         5.83095189
+10 6         13.0384048
+10 7         11.1803399
+10 8         6.40312424
+10 9                  4
+10 47         9.05538514
+10 46         8.24621125
+10 45         7.61577311
+10 12         4.47213595
+10 11         3.60555128
+10 44          12.083046
+10 43                 13
+10 42         12.5299641
+10 41         11.6619038
+10 40         13.0384048
+10 48         7.28010989
+10 49         5.65685425
+10 50         11.7046999
+10 51         8.60232527
+11 7                 14
+11 8         8.24621125
+11 9         7.28010989
+11 10         3.60555128
+11 45                  5
+11 12                  1
+11 37         11.4017543
+11 44         9.21954446
+11 43          10.198039
+11 42         9.48683298
+11 41         8.54400375
+11 40          9.8488578
+11 39         10.8166538
+11 36         14.1421356
+11 46         6.08276253
+11 47         7.28010989
+11 48         7.07106781
+11 49         7.28010989
+11 50         11.4017543
+11 51         10.4403065
+12 8         9.21954446
+12 9         8.24621125
+12 10         4.47213595
+12 11                  1
+12 37         10.6301458
+12 44         9.05538514
+12 43         10.0498756
+12 42         9.21954446
+12 41         8.24621125
+12 40         9.48683298
+12 39         10.2956301
+12 36          13.453624
+12 35          13.453624
+12 34         13.6014705
+12 45         5.09901951
+12 46         6.32455532
+12 47         7.61577311
+12 48         7.81024968
+12 49         8.24621125
+12 50         12.0415946
+12 51         11.4017543
+13 27                  7
+13 26         6.08276253
+13 25         6.08276253
+13 24         6.32455532
+13 14         3.16227766
+13 22         8.60232527
+13 21         7.81024968
+13 20         7.07106781
+13 19         11.4017543
+13 17         11.7046999
+13 16         11.4017543
+13 15         10.4403065
+13 30                 14
+13 29                 11
+13 23         9.43398113
+13 18          13.453624
+13 28         9.05538514
+13 31         13.0384048
+13 32         4.47213595
+13 33         6.32455532
+13 34                 10
+13 35         11.4017543
+13 36         12.8062485
+13 37         11.4017543
+14 13         3.16227766
+14 26                  3
+14 25                  3
+14 24         3.16227766
+14 22         5.65685425
+14 21                  5
+14 20         4.47213595
+14 19         8.94427191
+14 17         10.0498756
+14 16                 10
+14 15                  9
+14 23         6.40312424
+14 18         10.8166538
+14 27         4.12310563
+14 28         6.32455532
+14 29         8.06225775
+14 30          11.045361
+14 31          10.198039
+14 32         3.16227766
+14 33         4.24264069
+14 34         8.60232527
+14 35                 10
+14 36         11.4017543
+14 37         10.7703296
+15 13         10.4403065
+15 14                  9
+15 17         1.41421356
+15 16                  1
+15 18                  6
+15 19         4.12310563
+15 20         5.38516481
+15 21         5.83095189
+15 22         6.40312424
+15 23         7.07106781
+15 24         8.54400375
+15 25         9.48683298
+15 26         9.48683298
+15 27         10.7703296
+15 28         12.5299641
+15 29         12.8062485
+15 32         12.0415946
+15 33         12.3693169
+16 13         11.4017543
+16 14                 10
+16 15                  1
+16 17                  1
+16 18         6.08276253
+16 19         4.47213595
+16 20         6.32455532
+16 21         6.70820393
+16 22         7.21110255
+16 23         7.81024968
+16 24         9.48683298
+16 25         10.4403065
+16 26         10.4403065
+16 27         11.7046999
+16 28         13.4164079
+16 29         13.6014705
+16 32         13.0384048
+16 33         13.3416641
+17 13         11.7046999
+17 14         10.0498756
+17 15         1.41421356
+17 16                  1
+17 18         5.09901951
+17 19         3.60555128
+17 20         6.08276253
+17 21         6.32455532
+17 22         6.70820393
+17 23         7.21110255
+17 24         9.21954446
+17 25          10.198039
+17 26          10.198039
+17 27         11.4017543
+17 28                 13
+17 29         13.0384048
+17 32                 13
+17 33         13.1529464
+18 79          12.083046
+18 13          13.453624
+18 14         10.8166538
+18 15                  6
+18 17         5.09901951
+18 16         6.08276253
+18 19         2.23606798
+18 20         6.40312424
+18 21         5.83095189
+18 22         5.38516481
+18 23         5.09901951
+18 24         8.54400375
+18 25         9.48683298
+18 26         9.48683298
+18 27          10.198039
+18 28                 11
+18 29          10.198039
+18 30         11.1803399
+18 31         11.7046999
+18 32                 13
+18 33         12.3693169
+18 77         12.8062485
+18 80         12.6491106
+18 81         13.1529464
+19 79         13.6014705
+19 13         11.4017543
+19 14         8.94427191
+19 17         3.60555128
+19 16         4.47213595
+19 15         4.12310563
+19 18         2.23606798
+19 20         4.47213595
+19 21         4.12310563
+19 22                  4
+19 23         4.12310563
+19 24         7.07106781
+19 25         8.06225775
+19 26         8.06225775
+19 27                  9
+19 28          10.198039
+19 29          9.8488578
+19 30         11.4017543
+19 31         11.6619038
+19 32         11.4017543
+19 33          11.045361
+19 77          13.892444
+20 13         7.07106781
+20 14         4.47213595
+20 22                  2
+20 21                  1
+20 19         4.47213595
+20 17         6.08276253
+20 16         6.32455532
+20 15         5.38516481
+20 23                  3
+20 18         6.40312424
+20 24         3.16227766
+20 25         4.12310563
+20 26         4.12310563
+20 27         5.38516481
+20 28         7.21110255
+20 29         7.81024968
+20 30         10.2956301
+20 31                 10
+20 32         7.07106781
+20 33         7.07106781
+20 34         11.4017543
+20 35         12.6491106
+20 36         13.9283883
+20 37         14.1421356
+21 13         7.81024968
+21 14                  5
+21 20                  1
+21 22                  1
+21 19         4.12310563
+21 17         6.32455532
+21 16         6.70820393
+21 15         5.83095189
+21 23                  2
+21 18         5.83095189
+21 79                 14
+21 24                  3
+21 25                  4
+21 26                  4
+21 27         5.09901951
+21 28         6.70820393
+21 29         7.07106781
+21 30         9.43398113
+21 31         9.21954446
+21 32         7.28010989
+21 33                  7
+21 34         11.1803399
+21 35         12.3693169
+21 36         13.6014705
+21 37         14.0356688
+21 77         13.3416641
+22 13         8.60232527
+22 14         5.65685425
+22 20                  2
+22 21                  1
+22 19                  4
+22 17         6.70820393
+22 16         7.21110255
+22 15         6.40312424
+22 23                  1
+22 18         5.38516481
+22 79                 13
+22 24         3.16227766
+22 25         4.12310563
+22 26         4.12310563
+22 27                  5
+22 28         6.32455532
+22 29         6.40312424
+22 30         8.60232527
+22 31         8.48528137
+22 32         7.61577311
+22 33         7.07106781
+22 34          11.045361
+22 35         12.1655251
+22 36         13.3416641
+22 37                 14
+22 77         12.3693169
+23 13         9.43398113
+23 14         6.40312424
+23 20                  3
+23 21                  2
+23 22                  1
+23 19         4.12310563
+23 17         7.21110255
+23 16         7.81024968
+23 15         7.07106781
+23 18         5.09901951
+23 79                 12
+23 80         13.0384048
+23 24         3.60555128
+23 25         4.47213595
+23 26         4.47213595
+23 27         5.09901951
+23 28         6.08276253
+23 29         5.83095189
+23 30         7.81024968
+23 31         7.81024968
+23 32         8.06225775
+23 33         7.28010989
+23 34                 11
+23 35         12.0415946
+23 36         13.1529464
+23 37         14.0356688
+23 77         11.4017543
+24 13         6.32455532
+24 14         3.16227766
+24 22         3.16227766
+24 21                  3
+24 20         3.16227766
+24 19         7.07106781
+24 17         9.21954446
+24 16         9.48683298
+24 15         8.54400375
+24 77                 13
+24 23         3.60555128
+24 18         8.54400375
+24 25                  1
+24 26                  1
+24 27         2.23606798
+24 28         4.24264069
+24 29         5.38516481
+24 30         8.24621125
+24 31         7.61577311
+24 32         4.47213595
+24 33                  4
+24 34         8.24621125
+24 35         9.48683298
+24 36         10.7703296
+24 37          11.045361
+25 13         6.08276253
+25 14                  3
+25 24                  1
+25 22         4.12310563
+25 21                  4
+25 20         4.12310563
+25 19         8.06225775
+25 17          10.198039
+25 16         10.4403065
+25 15         9.48683298
+25 77         13.0384048
+25 23         4.47213595
+25 18         9.48683298
+25 26     1.41421456e-05
+25 27         1.41421356
+25 28         3.60555128
+25 29         5.09901951
+25 30         8.06225775
+25 31         7.28010989
+25 32         3.60555128
+25 33                  3
+25 34         7.28010989
+25 35         8.54400375
+25 36          9.8488578
+25 37         10.0498756
+25 39         13.3416641
+26 13         6.08276253
+26 14                  3
+26 25     1.41421456e-05
+26 24                  1
+26 22         4.12310563
+26 21                  4
+26 20         4.12310563
+26 19         8.06225775
+26 17          10.198039
+26 16         10.4403065
+26 15         9.48683298
+26 77         13.0384048
+26 23         4.47213595
+26 18         9.48683298
+26 27         1.41421356
+26 28         3.60555128
+26 29         5.09901951
+26 30         8.06225775
+26 31         7.28010989
+26 32         3.60555128
+26 33                  3
+26 34         7.28010989
+26 35         8.54400375
+26 36          9.8488578
+26 37         10.0498756
+26 39         13.3416641
+27 13                  7
+27 26         1.41421356
+27 25         1.41421356
+27 24         2.23606798
+27 14         4.12310563
+27 22                  5
+27 21         5.09901951
+27 20         5.38516481
+27 19                  9
+27 17         11.4017543
+27 16         11.7046999
+27 15         10.7703296
+27 77         12.1655251
+27 30                  7
+27 29                  4
+27 23         5.09901951
+27 18          10.198039
+27 79         13.9283883
+27 28         2.23606798
+27 31         6.08276253
+27 32         3.60555128
+27 33         2.23606798
+27 34         6.08276253
+27 35         7.28010989
+27 36         8.54400375
+27 37                  9
+27 38         13.6014705
+27 39         12.1655251
+27 40         14.1421356
+27 73          13.892444
+27 75         13.3416641
+28 22         6.32455532
+28 21         6.70820393
+28 20         7.21110255
+28 19          10.198039
+28 17                 13
+28 16         13.4164079
+28 15         12.5299641
+28 27         2.23606798
+28 26         3.60555128
+28 25         3.60555128
+28 24         4.24264069
+28 14         6.32455532
+28 13         9.05538514
+28 77         10.4403065
+28 31                  4
+28 30         5.09901951
+28 29         2.23606798
+28 23         6.08276253
+28 18                 11
+28 79         12.5299641
+28 76         13.1529464
+28 80          13.892444
+28 32         5.09901951
+28 33         3.16227766
+28 34         5.09901951
+28 35                  6
+28 36         7.07106781
+28 37         8.24621125
+28 38         11.6619038
+28 39                 11
+28 40                 13
+28 41         14.0356688
+28 42                 14
+28 73         11.6619038
+28 75         11.1803399
+29 13                 11
+29 27                  4
+29 28         2.23606798
+29 22         6.40312424
+29 21         7.07106781
+29 20         7.81024968
+29 19          9.8488578
+29 17         13.0384048
+29 16         13.6014705
+29 15         12.8062485
+29 26         5.09901951
+29 25         5.09901951
+29 24         5.38516481
+29 14         8.06225775
+29 77         8.24621125
+29 30                  3
+29 23         5.83095189
+29 18          10.198039
+29 79         10.2956301
+29 76          11.045361
+29 81         13.6014705
+29 80         11.6619038
+29 31         2.23606798
+29 32         7.28010989
+29 33         5.38516481
+29 34         6.70820393
+29 35         7.28010989
+29 36         8.06225775
+29 37          9.8488578
+29 38         11.7046999
+29 39         12.1655251
+29 40         14.1421356
+29 73         10.6301458
+29 74                 13
+29 75         9.48683298
+30 13                 14
+30 27                  7
+30 28         5.09901951
+30 29                  3
+30 22         8.60232527
+30 21         9.43398113
+30 20         10.2956301
+30 19         11.4017543
+30 26         8.06225775
+30 25         8.06225775
+30 24         8.24621125
+30 14          11.045361
+30 77         5.38516481
+30 23         7.81024968
+30 18         11.1803399
+30 79         7.81024968
+30 76         8.06225775
+30 81         11.3137085
+30 80         9.21954446
+30 31         1.41421356
+30 32          10.198039
+30 33         8.24621125
+30 34         8.48528137
+30 35         8.60232527
+30 36         8.94427191
+30 37         11.4017543
+30 38          11.045361
+30 39                 13
+30 73         8.60232527
+30 74         10.2956301
+30 75         6.70820393
+31 28                  4
+31 22         8.48528137
+31 21         9.21954446
+31 20                 10
+31 19         11.6619038
+31 27         6.08276253
+31 26         7.28010989
+31 25         7.28010989
+31 24         7.61577311
+31 14          10.198039
+31 13         13.0384048
+31 77         6.70820393
+31 30         1.41421356
+31 29         2.23606798
+31 23         7.81024968
+31 18         11.7046999
+31 79         9.21954446
+31 76         9.21954446
+31 81         12.7279221
+31 80         10.6301458
+31 32         9.05538514
+31 33         7.07106781
+31 34         7.07106781
+31 35         7.21110255
+31 36         7.61577311
+31 37                 10
+31 38          10.198039
+31 39         11.7046999
+31 40         13.6014705
+31 73         8.48528137
+31 74         10.7703296
+31 75         7.28010989
+32 33                  2
+32 27         3.60555128
+32 26         3.60555128
+32 25         3.60555128
+32 24         4.47213595
+32 14         3.16227766
+32 13         4.47213595
+32 22         7.61577311
+32 21         7.28010989
+32 20         7.07106781
+32 19         11.4017543
+32 17                 13
+32 16         13.0384048
+32 15         12.0415946
+32 31         9.05538514
+32 30          10.198039
+32 29         7.28010989
+32 28         5.09901951
+32 23         8.06225775
+32 18                 13
+32 34         5.65685425
+32 35         7.07106781
+32 36         8.48528137
+32 37         7.61577311
+32 39         11.1803399
+32 40                 13
+32 41         13.6014705
+32 42         13.9283883
+33 32                  2
+33 27         2.23606798
+33 26                  3
+33 25                  3
+33 24                  4
+33 14         4.24264069
+33 13         6.32455532
+33 22         7.07106781
+33 21                  7
+33 20         7.07106781
+33 19          11.045361
+33 17         13.1529464
+33 16         13.3416641
+33 15         12.3693169
+33 77         13.6014705
+33 31         7.07106781
+33 30         8.24621125
+33 29         5.38516481
+33 28         3.16227766
+33 23         7.28010989
+33 18         12.3693169
+33 34         4.47213595
+33 35         5.83095189
+33 36         7.21110255
+33 37         7.07106781
+33 38         12.7279221
+33 39         10.4403065
+33 40         12.3693169
+33 41         13.1529464
+33 42         13.3416641
+33 73         13.9283883
+33 75         14.0356688
+34 12         13.6014705
+34 22          11.045361
+34 21         11.1803399
+34 20         11.4017543
+34 33         4.47213595
+34 32         5.65685425
+34 27         6.08276253
+34 26         7.28010989
+34 25         7.28010989
+34 24         8.24621125
+34 14         8.60232527
+34 13                 10
+34 77         13.6014705
+34 75         12.3693169
+34 31         7.07106781
+34 30         8.48528137
+34 29         6.70820393
+34 28         5.09901951
+34 23                 11
+34 35         1.41421356
+34 36         2.82842712
+34 37         3.16227766
+34 38         8.60232527
+34 39         6.08276253
+34 40         8.06225775
+34 41                  9
+34 42         9.05538514
+34 43          10.198039
+34 44         10.0498756
+34 45         12.3693169
+34 46         13.1529464
+34 47         14.0356688
+34 67          13.892444
+34 73          11.045361
+35 12          13.453624
+35 22         12.1655251
+35 21         12.3693169
+35 20         12.6491106
+35 33         5.83095189
+35 32         7.07106781
+35 27         7.28010989
+35 26         8.54400375
+35 25         8.54400375
+35 24         9.48683298
+35 14                 10
+35 13         11.4017543
+35 77          13.453624
+35 75         11.7046999
+35 73                 10
+35 34         1.41421356
+35 31         7.21110255
+35 30         8.60232527
+35 29         7.28010989
+35 28                  6
+35 23         12.0415946
+35 74         14.1421356
+35 36         1.41421356
+35 37         2.82842712
+35 38         7.21110255
+35 39                  5
+35 40                  7
+35 41         8.06225775
+35 42                  8
+35 43         9.05538514
+35 44                  9
+35 45         11.7046999
+35 46         12.3693169
+35 47         13.1529464
+35 67         12.5299641
+35 68         13.0384048
+36 11         14.1421356
+36 12          13.453624
+36 22         13.3416641
+36 21         13.6014705
+36 20         13.9283883
+36 33         7.21110255
+36 32         8.48528137
+36 27         8.54400375
+36 26          9.8488578
+36 25          9.8488578
+36 24         10.7703296
+36 14         11.4017543
+36 13         12.8062485
+36 77          13.453624
+36 75         11.1803399
+36 73         9.05538514
+36 35         1.41421356
+36 34         2.82842712
+36 31         7.61577311
+36 30         8.94427191
+36 29         8.06225775
+36 28         7.07106781
+36 23         13.1529464
+36 74         13.3416641
+36 37         3.16227766
+36 38         5.83095189
+36 39         4.12310563
+36 40         6.08276253
+36 41         7.28010989
+36 42         7.07106781
+36 43                  8
+36 44         8.06225775
+36 45         11.1803399
+36 46         11.7046999
+36 47         12.3693169
+36 67         11.1803399
+36 68         11.6619038
+37 11         11.4017543
+37 12         10.6301458
+37 33         7.07106781
+37 32         7.61577311
+37 27                  9
+37 26         10.0498756
+37 25         10.0498756
+37 24          11.045361
+37 14         10.7703296
+37 13         11.4017543
+37 22                 14
+37 21         14.0356688
+37 20         14.1421356
+37 73         12.1655251
+37 36         3.16227766
+37 35         2.82842712
+37 34         3.16227766
+37 31                 10
+37 30         11.4017543
+37 29          9.8488578
+37 28         8.24621125
+37 23         14.0356688
+37 38         8.24621125
+37 39         3.60555128
+37 40         5.38516481
+37 41         6.08276253
+37 42         6.32455532
+37 43         7.61577311
+37 44         7.28010989
+37 45         9.21954446
+37 46         10.0498756
+37 47                 11
+37 67         12.0415946
+37 68         12.7279221
+38 37         8.24621125
+38 33         12.7279221
+38 27         13.6014705
+38 77         13.6014705
+38 75         9.43398113
+38 73         5.65685425
+38 36         5.83095189
+38 35         7.21110255
+38 34         8.60232527
+38 31          10.198039
+38 30          11.045361
+38 29         11.7046999
+38 28         11.6619038
+38 72         14.0356688
+38 76          13.892444
+38 74                 10
+38 39         6.08276253
+38 40         6.70820393
+38 41         8.06225775
+38 42         7.21110255
+38 43         7.07106781
+38 44         7.81024968
+38 45         12.2065556
+38 46         12.0415946
+38 47         12.0415946
+38 64         12.2065556
+38 67                  7
+38 68         7.07106781
+38 69         14.1421356
+39 11         10.8166538
+39 12         10.2956301
+39 37         3.60555128
+39 33         10.4403065
+39 32         11.1803399
+39 27         12.1655251
+39 26         13.3416641
+39 25         13.3416641
+39 38         6.08276253
+39 73         11.1803399
+39 36         4.12310563
+39 35                  5
+39 34         6.08276253
+39 31         11.7046999
+39 30                 13
+39 29         12.1655251
+39 28                 11
+39 40                  2
+39 41         3.16227766
+39 42                  3
+39 43         4.12310563
+39 44                  4
+39 45         7.21110255
+39 46         7.61577311
+39 47         8.24621125
+39 48         11.7046999
+39 50                 13
+39 67         8.48528137
+39 68         9.21954446
+40 8          13.892444
+40 10         13.0384048
+40 11          9.8488578
+40 12         9.48683298
+40 37         5.38516481
+40 33         12.3693169
+40 32                 13
+40 27         14.1421356
+40 39                  2
+40 38         6.70820393
+40 73         12.2065556
+40 36         6.08276253
+40 35                  7
+40 34         8.06225775
+40 31         13.6014705
+40 29         14.1421356
+40 28                 13
+40 41         1.41421356
+40 42                  1
+40 43         2.23606798
+40 44                  2
+40 45         5.65685425
+40 46         5.83095189
+40 47         6.32455532
+40 48          9.8488578
+40 49         13.0384048
+40 50                 11
+40 67         7.21110255
+40 68         8.06225775
+41 8         12.5299641
+41 9         14.1421356
+41 10         11.6619038
+41 11         8.54400375
+41 12         8.24621125
+41 37         6.08276253
+41 33         13.1529464
+41 32         13.6014705
+41 42                  1
+41 40         1.41421356
+41 39         3.16227766
+41 38         8.06225775
+41 73         13.6014705
+41 36         7.28010989
+41 35         8.06225775
+41 34                  9
+41 28         14.0356688
+41 43         2.23606798
+41 44         1.41421356
+41 45         4.24264069
+41 46         4.47213595
+41 47         5.09901951
+41 48         8.54400375
+41 49         11.6619038
+41 50         10.0498756
+41 51         13.9283883
+41 67         7.61577311
+41 68         8.54400375
+42 8         13.0384048
+42 10         12.5299641
+42 11         9.48683298
+42 12         9.21954446
+42 41                  1
+42 37         6.32455532
+42 33         13.3416641
+42 32         13.9283883
+42 40                  1
+42 39                  3
+42 38         7.21110255
+42 73         12.8062485
+42 36         7.07106781
+42 35                  8
+42 34         9.05538514
+42 28                 14
+42 43         1.41421356
+42 44                  1
+42 45                  5
+42 46                  5
+42 47         5.38516481
+42 48         8.94427191
+42 49         12.2065556
+42 50                 10
+42 67         6.70820393
+42 68         7.61577311
+43 8         12.8062485
+43 10                 13
+43 11          10.198039
+43 12         10.0498756
+43 37         7.61577311
+43 42         1.41421356
+43 41         2.23606798
+43 40         2.23606798
+43 39         4.12310563
+43 38         7.07106781
+43 73         12.7279221
+43 36                  8
+43 35         9.05538514
+43 34          10.198039
+43 44                  1
+43 45         5.38516481
+43 46                  5
+43 47                  5
+43 48         8.60232527
+43 49         12.0415946
+43 50         9.05538514
+43 51          13.892444
+43 64                 13
+43 67         5.38516481
+43 68         6.32455532
+44 8         12.2065556
+44 10          12.083046
+44 11         9.21954446
+44 12         9.05538514
+44 37         7.28010989
+44 43                  1
+44 42                  1
+44 41         1.41421356
+44 40                  2
+44 39                  4
+44 38         7.81024968
+44 73          13.453624
+44 36         8.06225775
+44 35                  9
+44 34         10.0498756
+44 45         4.47213595
+44 46         4.24264069
+44 47         4.47213595
+44 48         8.06225775
+44 49         11.4017543
+44 50                  9
+44 51         13.4164079
+44 64         13.9283883
+44 67         6.32455532
+44 68         7.28010989
+45 8         8.54400375
+45 9         9.89949494
+45 10         7.61577311
+45 11                  5
+45 12         5.09901951
+45 37         9.21954446
+45 68                 11
+45 67                 10
+45 44         4.47213595
+45 43         5.38516481
+45 42                  5
+45 41         4.24264069
+45 40         5.65685425
+45 39         7.21110255
+45 38         12.2065556
+45 36         11.1803399
+45 35         11.7046999
+45 34         12.3693169
+45 46         1.41421356
+45 47         2.82842712
+45 48                  5
+45 49         7.61577311
+45 50         8.06225775
+45 51          10.198039
+46 8         8.06225775
+46 9                 10
+46 10         8.24621125
+46 45         1.41421356
+46 12         6.32455532
+46 11         6.08276253
+46 37         10.0498756
+46 68         10.0498756
+46 67         9.05538514
+46 44         4.24264069
+46 43                  5
+46 42                  5
+46 41         4.47213595
+46 40         5.83095189
+46 39         7.61577311
+46 38         12.0415946
+46 36         11.7046999
+46 35         12.3693169
+46 34         13.1529464
+46 47         1.41421356
+46 48         4.12310563
+46 49         7.21110255
+46 50         6.70820393
+46 51         9.48683298
+47 7          13.892444
+47 8         7.81024968
+47 9         10.2956301
+47 10         9.05538514
+47 46         1.41421356
+47 45         2.82842712
+47 12         7.61577311
+47 11         7.28010989
+47 37                 11
+47 68         9.21954446
+47 67         8.24621125
+47 44         4.47213595
+47 43                  5
+47 42         5.38516481
+47 41         5.09901951
+47 40         6.32455532
+47 39         8.24621125
+47 38         12.0415946
+47 36         12.3693169
+47 35         13.1529464
+47 34         14.0356688
+47 48         3.60555128
+47 49         7.07106781
+47 50         5.38516481
+47 51         8.94427191
+48 6         13.6014705
+48 7         10.2956301
+48 8         4.24264069
+48 9         7.28010989
+48 47         3.60555128
+48 46         4.12310563
+48 45                  5
+48 12         7.81024968
+48 11         7.07106781
+48 10         7.28010989
+48 68          12.083046
+48 67         11.1803399
+48 44         8.06225775
+48 43         8.60232527
+48 42         8.94427191
+48 41         8.54400375
+48 40          9.8488578
+48 39         11.7046999
+48 49         3.60555128
+48 50         4.47213595
+48 51         5.38516481
+49 6         10.2956301
+49 7         7.28010989
+49 8                  1
+49 9                  4
+49 48         3.60555128
+49 47         7.07106781
+49 46         7.21110255
+49 45         7.61577311
+49 12         8.24621125
+49 11         7.28010989
+49 10         5.65685425
+49 50                  7
+49 44         11.4017543
+49 43         12.0415946
+49 42         12.2065556
+49 41         11.6619038
+49 40         13.0384048
+49 51         3.16227766
+50 7         11.4017543
+50 8         7.07106781
+50 9                 11
+50 49                  7
+50 47         5.38516481
+50 46         6.70820393
+50 45         8.06225775
+50 12         12.0415946
+50 11         11.4017543
+50 10         11.7046999
+50 48         4.47213595
+50 68         9.89949494
+50 67         9.21954446
+50 44                  9
+50 43         9.05538514
+50 42                 10
+50 41         10.0498756
+50 40                 11
+50 39                 13
+50 64         13.6014705
+50 51         6.70820393
+50 52         12.0415946
+50 53         14.0356688
+50 61         12.2065556
+51 6         8.48528137
+51 7                  5
+51 49         3.16227766
+51 48         5.38516481
+51 9         5.83095189
+51 8         2.23606798
+51 47         8.94427191
+51 46         9.48683298
+51 45          10.198039
+51 12         11.4017543
+51 11         10.4403065
+51 10         8.60232527
+51 50         6.70820393
+51 44         13.4164079
+51 43          13.892444
+51 41         13.9283883
+51 52         11.4017543
+51 53          12.083046
+51 54         13.4164079
+52 3         14.1421356
+52 5          13.892444
+52 51         11.4017543
+52 8         13.6014705
+52 7         11.1803399
+52 6         13.3416641
+52 61         10.2956301
+52 50         12.0415946
+52 53         2.82842712
+52 54         3.16227766
+52 55         5.38516481
+52 56         6.08276253
+52 57         11.3137085
+52 58         13.6014705
+52 59         13.3416641
+53 3         11.3137085
+53 4         12.2065556
+53 5         11.1803399
+53 51          12.083046
+53 7         10.6301458
+53 6          12.083046
+53 52         2.82842712
+53 61         13.0384048
+53 50         14.0356688
+53 54         1.41421356
+53 55                  3
+53 56         4.12310563
+53 57         8.48528137
+53 58         10.8166538
+53 59          12.083046
+54 3         11.4017543
+54 4         12.5299641
+54 5         11.7046999
+54 51         13.4164079
+54 7         12.0415946
+54 6         13.4164079
+54 53         1.41421356
+54 52         3.16227766
+54 61         12.8062485
+54 55         2.23606798
+54 56                  3
+54 57         8.60232527
+54 58         10.6301458
+54 59         10.7703296
+55 3         9.43398113
+55 4         10.7703296
+55 5          10.198039
+55 7         12.8062485
+55 6         13.6014705
+55 54         2.23606798
+55 53                  3
+55 52         5.38516481
+55 56         1.41421356
+55 57         6.70820393
+55 58         8.48528137
+55 59         9.43398113
+56 3          9.8488578
+56 4         11.4017543
+56 5          11.045361
+56 55         1.41421356
+56 54                  3
+56 53         4.12310563
+56 52         6.08276253
+56 57         7.28010989
+56 58         8.60232527
+56 59         8.06225775
+57 2         7.61577311
+57 3         2.82842712
+57 4         4.12310563
+57 5         4.12310563
+57 7         13.1529464
+57 6          12.083046
+57 56         7.28010989
+57 55         6.70820393
+57 54         8.60232527
+57 53         8.48528137
+57 52         11.3137085
+57 58                  3
+57 59          12.083046
+58 2                  7
+58 57                  3
+58 5         5.65685425
+58 4         4.47213595
+58 3         2.23606798
+58 56         8.60232527
+58 55         8.48528137
+58 54         10.6301458
+58 53         10.8166538
+58 52         13.6014705
+58 59         11.1803399
+59 58         11.1803399
+59 57          12.083046
+59 3         13.3416641
+59 56         8.06225775
+59 55         9.43398113
+59 54         10.7703296
+59 53          12.083046
+59 52         13.3416641
+60 61         9.21954446
+60 96         11.1803399
+60 63         11.1803399
+60 62         7.07106781
+60 97         10.4403065
+60 98         12.3693169
+60 99          12.083046
+60 100          12.083046
+61 52         10.2956301
+61 53         13.0384048
+61 54         12.8062485
+61 60         9.21954446
+61 50         12.2065556
+61 63         11.4017543
+61 62         9.43398113
+61 64         11.4017543
+62 60         7.07106781
+62 61         9.43398113
+62 96         6.70820393
+62 63         4.12310563
+62 93         10.8166538
+62 69         14.1421356
+62 66         8.24621125
+62 65         8.06225775
+62 64         7.81024968
+62 95                 10
+62 94         9.89949494
+63 60         11.1803399
+63 61         11.4017543
+63 62         4.12310563
+63 68         11.1803399
+63 67          12.083046
+63 93         8.60232527
+63 72         13.3416641
+63 71                 13
+63 70         11.7046999
+63 69         10.4403065
+63 66                  5
+63 65         5.83095189
+63 64         4.47213595
+63 95         9.21954446
+63 94         8.54400375
+63 96         7.07106781
+64 50         13.6014705
+64 61         11.4017543
+64 62         7.81024968
+64 63         4.47213595
+64 68         6.70820393
+64 67         7.61577311
+64 44         13.9283883
+64 43                 13
+64 38         12.2065556
+64 93         11.4017543
+64 72         13.0384048
+64 71          13.453624
+64 70         12.0415946
+64 69         10.6301458
+64 66         7.28010989
+64 65         9.05538514
+64 95                 13
+64 94         12.0415946
+64 96         11.4017543
+65 62         8.06225775
+65 63         5.83095189
+65 64         9.05538514
+65 93         2.82842712
+65 72          10.198039
+65 71                  9
+65 70         8.06225775
+65 69         7.28010989
+65 66         2.23606798
+65 94                  3
+65 92         11.1803399
+65 91         13.0384048
+65 95         4.12310563
+65 96         4.47213595
+66 62         8.24621125
+66 63                  5
+66 64         7.28010989
+66 65         2.23606798
+66 68         13.0384048
+66 67         14.0356688
+66 93         4.12310563
+66 72                  9
+66 71         8.24621125
+66 70         7.07106781
+66 69                  6
+66 92         12.6491106
+66 91          13.453624
+66 94         5.09901951
+66 95         6.32455532
+66 96         6.40312424
+67 45                 10
+67 46         9.05538514
+67 47         8.24621125
+67 48         11.1803399
+67 50         9.21954446
+67 63          12.083046
+67 64         7.61577311
+67 66         14.0356688
+67 37         12.0415946
+67 68                  1
+67 44         6.32455532
+67 43         5.38516481
+67 42         6.70820393
+67 41         7.61577311
+67 40         7.21110255
+67 39         8.48528137
+67 38                  7
+67 73         11.7046999
+67 36         11.1803399
+67 35         12.5299641
+67 34          13.892444
+68 45                 11
+68 46         10.0498756
+68 47         9.21954446
+68 48          12.083046
+68 50         9.89949494
+68 63         11.1803399
+68 64         6.70820393
+68 66         13.0384048
+68 67                  1
+68 37         12.7279221
+68 44         7.28010989
+68 43         6.32455532
+68 42         7.61577311
+68 41         8.54400375
+68 40         8.06225775
+68 39         9.21954446
+68 38         7.07106781
+68 73         11.4017543
+68 36         11.6619038
+68 35         13.0384048
+68 69         13.9283883
+69 62         14.1421356
+69 63         10.4403065
+69 64         10.6301458
+69 65         7.28010989
+69 66                  6
+69 68         13.9283883
+69 75          13.453624
+69 73         11.6619038
+69 38         14.1421356
+69 72                  3
+69 71         2.82842712
+69 70         1.41421356
+69 74                 10
+69 91          9.8488578
+69 90         10.8166538
+69 89         13.0384048
+69 88         9.21954446
+69 87         9.43398113
+69 92         12.1655251
+69 93         6.40312424
+69 94         8.60232527
+69 95                 10
+69 96         11.7046999
+70 63         11.7046999
+70 64         12.0415946
+70 65         8.06225775
+70 66         7.07106781
+70 69         1.41421356
+70 75          13.453624
+70 73          12.083046
+70 72         2.23606798
+70 71         1.41421356
+70 74         9.89949494
+70 91         8.54400375
+70 90         9.43398113
+70 89         11.6619038
+70 88         7.81024968
+70 87         8.06225775
+70 84         14.1421356
+70 92         11.4017543
+70 93         6.70820393
+70 94         8.94427191
+70 95         10.2956301
+70 96         12.3693169
+71 63                 13
+71 64          13.453624
+71 65                  9
+71 66         8.24621125
+71 69         2.82842712
+71 70         1.41421356
+71 75         13.6014705
+71 73         12.6491106
+71 72         2.23606798
+71 78         14.1421356
+71 74                 10
+71 91         7.28010989
+71 90         8.06225775
+71 89         10.2956301
+71 88         6.40312424
+71 87         6.70820393
+71 85          13.892444
+71 84         12.7279221
+71 92         10.7703296
+71 93         7.28010989
+71 94         9.48683298
+71 95         10.7703296
+71 96         13.1529464
+72 38         14.0356688
+72 63         13.3416641
+72 64         13.0384048
+72 65          10.198039
+72 66                  9
+72 69                  3
+72 70         2.23606798
+72 71         2.23606798
+72 75         11.4017543
+72 73         10.4403065
+72 78                 13
+72 76         13.0384048
+72 74         7.81024968
+72 91         9.05538514
+72 90         9.48683298
+72 89         11.7046999
+72 88         7.21110255
+72 87         7.07106781
+72 84         13.6014705
+72 92                 13
+72 93         8.94427191
+72 94         11.1803399
+72 95         12.5299641
+73 35                 10
+73 36         9.05538514
+73 37         12.1655251
+73 38         5.65685425
+73 39         11.1803399
+73 40         12.2065556
+73 41         13.6014705
+73 42         12.8062485
+73 43         12.7279221
+73 44          13.453624
+73 67         11.7046999
+73 68         11.4017543
+73 69         11.6619038
+73 70          12.083046
+73 71         12.6491106
+73 72         10.4403065
+73 33         13.9283883
+73 27          13.892444
+73 77                  9
+73 75         4.12310563
+73 34          11.045361
+73 31         8.48528137
+73 30         8.60232527
+73 29         10.6301458
+73 28         11.6619038
+73 79         12.0415946
+73 78         14.1421356
+73 76         8.54400375
+73 74         4.47213595
+73 80         13.1529464
+74 35         14.1421356
+74 36         13.3416641
+74 38                 10
+74 69                 10
+74 70         9.89949494
+74 71                 10
+74 72         7.81024968
+74 73         4.47213595
+74 79         10.4403065
+74 77         8.06225775
+74 75         3.60555128
+74 31         10.7703296
+74 30         10.2956301
+74 29                 13
+74 78                 10
+74 76         6.08276253
+74 81         13.0384048
+74 80         11.1803399
+74 87                 11
+74 88         12.0415946
+75 34         12.3693169
+75 35         11.7046999
+75 36         11.1803399
+75 38         9.43398113
+75 69          13.453624
+75 70          13.453624
+75 71         13.6014705
+75 72         11.4017543
+75 73         4.12310563
+75 74         3.60555128
+75 33         14.0356688
+75 27         13.3416641
+75 77         5.09901951
+75 31         7.28010989
+75 30         6.70820393
+75 29         9.48683298
+75 28         11.1803399
+75 79                  8
+75 78         10.8166538
+75 76         4.47213595
+75 81         11.1803399
+75 80         9.05538514
+76 28         13.1529464
+76 29          11.045361
+76 30         8.06225775
+76 31         9.21954446
+76 38          13.892444
+76 72         13.0384048
+76 73         8.54400375
+76 74         6.08276253
+76 75         4.47213595
+76 79         4.47213595
+76 77         3.16227766
+76 78         7.28010989
+76 81                  7
+76 80         5.09901951
+76 87         13.4164079
+77 24                 13
+77 25         13.0384048
+77 26         13.0384048
+77 27         12.1655251
+77 28         10.4403065
+77 29         8.24621125
+77 30         5.38516481
+77 31         6.70820393
+77 33         13.6014705
+77 34         13.6014705
+77 35          13.453624
+77 36          13.453624
+77 38         13.6014705
+77 73                  9
+77 74         8.06225775
+77 75         5.09901951
+77 76         3.16227766
+77 22         12.3693169
+77 21         13.3416641
+77 19          13.892444
+77 23         11.4017543
+77 18         12.8062485
+77 79         3.16227766
+77 78         10.0498756
+77 81         6.70820393
+77 80         4.47213595
+78 71         14.1421356
+78 72                 13
+78 73         14.1421356
+78 74                 10
+78 75         10.8166538
+78 76         7.28010989
+78 77         10.0498756
+78 79         9.21954446
+78 81         8.60232527
+78 80         8.54400375
+78 84          12.083046
+78 87         9.43398113
+78 88         10.8166538
+78 90          13.453624
+80 79         1.41421356
+80 23         13.0384048
+80 28          13.892444
+80 29         11.6619038
+80 30         9.21954446
+80 31         10.6301458
+80 73         13.1529464
+80 74         11.1803399
+80 75         9.05538514
+80 76         5.09901951
+80 77         4.47213595
+80 78         8.54400375
+80 18         12.6491106
+80 81         2.23606798
+81 79         3.60555128
+81 29         13.6014705
+81 30         11.3137085
+81 31         12.7279221
+81 74         13.0384048
+81 75         11.1803399
+81 76                  7
+81 77         6.70820393
+81 78         8.60232527
+81 80         2.23606798
+81 18         13.1529464
+82 141         13.9283883
+82 83         4.12310563
+82 137         13.0384048
+83 82         4.12310563
+83 137         12.3693169
+84 70         14.1421356
+84 71         12.7279221
+84 72         13.6014705
+84 78          12.083046
+84 85         3.60555128
+84 86         5.83095189
+84 87         6.70820393
+84 88         6.40312424
+84 89                  4
+84 90         5.38516481
+84 91         7.28010989
+84 92         13.0384048
+85 71          13.892444
+85 84         3.60555128
+85 86         2.23606798
+85 87         9.05538514
+85 88         8.24621125
+85 89         3.60555128
+85 90         5.83095189
+85 91         7.07106781
+85 92         11.1803399
+86 85         2.23606798
+86 84         5.83095189
+86 129         13.0384048
+86 87                 11
+86 88         10.0498756
+86 89         5.09901951
+86 90         7.28010989
+86 91         8.06225775
+86 92         10.7703296
+86 126         12.8062485
+86 127         12.7279221
+87 69         9.43398113
+87 70         8.06225775
+87 71         6.70820393
+87 72         7.07106781
+87 74                 11
+87 78         9.43398113
+87 76         13.4164079
+87 86                 11
+87 85         9.05538514
+87 84         6.70820393
+87 88         1.41421356
+87 89         6.08276253
+87 90         4.47213595
+87 91         5.65685425
+87 92         12.2065556
+87 93         13.0384048
+88 69         9.21954446
+88 70         7.81024968
+88 71         6.40312424
+88 72         7.21110255
+88 78         10.8166538
+88 74         12.0415946
+88 89                  5
+88 87         1.41421356
+88 86         10.0498756
+88 85         8.24621125
+88 84         6.40312424
+88 90         3.16227766
+88 91         4.24264069
+88 92         10.8166538
+88 93         12.1655251
+88 94         14.0356688
+89 69         13.0384048
+89 70         11.6619038
+89 71         10.2956301
+89 72         11.7046999
+89 88                  5
+89 87         6.08276253
+89 86         5.09901951
+89 85         3.60555128
+89 84                  4
+89 90         2.23606798
+89 91         3.60555128
+89 92         9.05538514
+89 93          13.892444
+90 69         10.8166538
+90 70         9.43398113
+90 71         8.06225775
+90 72         9.48683298
+90 78          13.453624
+90 89         2.23606798
+90 88         3.16227766
+90 87         4.47213595
+90 86         7.28010989
+90 85         5.83095189
+90 84         5.38516481
+90 91                  2
+90 92         8.54400375
+90 93          12.083046
+90 94         13.6014705
+91 65         13.0384048
+91 66          13.453624
+91 69          9.8488578
+91 70         8.54400375
+91 71         7.28010989
+91 72         9.05538514
+91 90                  2
+91 89         3.60555128
+91 88         4.24264069
+91 87         5.65685425
+91 86         8.06225775
+91 85         7.07106781
+91 84         7.28010989
+91 92         6.70820393
+91 93         10.2956301
+91 94         11.7046999
+91 95         12.3693169
+92 65         11.1803399
+92 66         12.6491106
+92 72                 13
+92 71         10.7703296
+92 70         11.4017543
+92 69         12.1655251
+92 91         6.70820393
+92 90         8.54400375
+92 89         9.05538514
+92 88         10.8166538
+92 87         12.2065556
+92 86         10.7703296
+92 85         11.1803399
+92 84         13.0384048
+92 127         13.0384048
+92 126                 12
+92 93         8.54400375
+92 94         8.60232527
+92 95         8.48528137
+92 96         12.0415946
+92 124          12.083046
+92 125         13.9283883
+93 62         10.8166538
+93 63         8.60232527
+93 64         11.4017543
+93 65         2.82842712
+93 66         4.12310563
+93 72         8.94427191
+93 71         7.28010989
+93 70         6.70820393
+93 69         6.40312424
+93 92         8.54400375
+93 91         10.2956301
+93 90          12.083046
+93 89          13.892444
+93 88         12.1655251
+93 87         13.0384048
+93 94         2.23606798
+93 95         3.60555128
+93 96                  6
+94 62         9.89949494
+94 63         8.54400375
+94 64         12.0415946
+94 65                  3
+94 93         2.23606798
+94 72         11.1803399
+94 71         9.48683298
+94 70         8.94427191
+94 69         8.60232527
+94 66         5.09901951
+94 92         8.60232527
+94 91         11.7046999
+94 90         13.6014705
+94 88         14.0356688
+94 95         1.41421356
+94 96         4.12310563
+95 62                 10
+95 63         9.21954446
+95 64                 13
+95 93         3.60555128
+95 72         12.5299641
+95 71         10.7703296
+95 70         10.2956301
+95 69                 10
+95 66         6.32455532
+95 65         4.12310563
+95 94         1.41421356
+95 92         8.48528137
+95 91         12.3693169
+95 96         3.60555128
+96 60         11.1803399
+96 62         6.70820393
+96 63         7.07106781
+96 93                  6
+96 71         13.1529464
+96 70         12.3693169
+96 69         11.7046999
+96 66         6.40312424
+96 65         4.47213595
+96 64         11.4017543
+96 95         3.60555128
+96 94         4.12310563
+96 92         12.0415946
+96 97         13.9283883
+97 96         13.9283883
+97 60         10.4403065
+97 98                  2
+97 99         2.23606798
+97 100         2.23606798
+97 101         5.65685425
+97 102         6.40312424
+97 103         8.48528137
+97 104         8.48528137
+97 115                 10
+97 116         11.7046999
+97 117         8.24621125
+98 97                  2
+98 60         12.3693169
+98 99         2.23606798
+98 100         2.23606798
+98 101         4.47213595
+98 102         5.38516481
+98 103         7.21110255
+98 104         7.21110255
+98 112         13.0384048
+98 115         8.48528137
+98 116          9.8488578
+98 117         6.32455532
+99 60          12.083046
+99 98         2.23606798
+99 97         2.23606798
+99 117                  7
+99 100     1.41421456e-05
+99 101         3.60555128
+99 102         4.24264069
+99 103         6.40312424
+99 104         6.40312424
+99 112         12.0415946
+99 115         8.06225775
+99 116          10.198039
+100 60          12.083046
+100 99     1.41421456e-05
+100 98         2.23606798
+100 97         2.23606798
+100 117                  7
+100 101         3.60555128
+100 102         4.24264069
+100 103         6.40312424
+100 104         6.40312424
+100 112         12.0415946
+100 115         8.06225775
+100 116          10.198039
+101 100         3.60555128
+101 99         3.60555128
+101 98         4.47213595
+101 97         5.65685425
+101 117         4.47213595
+101 116                  7
+101 102                  1
+101 103         2.82842712
+101 104         2.82842712
+101 105         13.3416641
+101 111         12.0415946
+101 112         8.60232527
+101 113         12.5299641
+101 114         11.1803399
+101 115         4.47213595
+102 101                  1
+102 100         4.24264069
+102 99         4.24264069
+102 98         5.38516481
+102 97         6.40312424
+102 117                  5
+102 116         7.07106781
+102 103         2.23606798
+102 104         2.23606798
+102 105         12.3693169
+102 106         13.3416641
+102 107         13.6014705
+102 111         11.4017543
+102 112         7.81024968
+102 113          12.083046
+102 114         10.7703296
+102 115         4.12310563
+103 102         2.23606798
+103 101         2.82842712
+103 100         6.40312424
+103 99         6.40312424
+103 98         7.21110255
+103 97         8.48528137
+103 117         4.47213595
+103 116         5.38516481
+103 115                  2
+103 104     1.41421456e-05
+103 105          12.083046
+103 106                 13
+103 107         13.4164079
+103 110         12.6491106
+103 111         9.21954446
+103 112         5.83095189
+103 113          9.8488578
+103 114         8.54400375
+104 103     1.41421456e-05
+104 102         2.23606798
+104 101         2.82842712
+104 100         6.40312424
+104 99         6.40312424
+104 98         7.21110255
+104 97         8.48528137
+104 117         4.47213595
+104 116         5.38516481
+104 115                  2
+104 105          12.083046
+104 106                 13
+104 107         13.4164079
+104 110         12.6491106
+104 111         9.21954446
+104 112         5.83095189
+104 113          9.8488578
+104 114         8.54400375
+105 104          12.083046
+105 103          12.083046
+105 102         12.3693169
+105 101         13.3416641
+105 111                 13
+105 115         13.0384048
+105 112                 10
+105 106                  1
+105 107         1.41421356
+105 108         4.12310563
+105 109                  5
+105 110         9.05538514
+106 105                  1
+106 104                 13
+106 103                 13
+106 102         13.3416641
+106 111         13.4164079
+106 110                  9
+106 115          13.892444
+106 112         10.6301458
+106 107                  1
+106 108         3.16227766
+106 109                  4
+107 106                  1
+107 105         1.41421356
+107 104         13.4164079
+107 103         13.4164079
+107 102         13.6014705
+107 110                 10
+107 112         11.4017543
+107 108                  3
+107 109         4.12310563
+108 107                  3
+108 106         3.16227766
+108 105         4.12310563
+108 110         10.4403065
+108 112          13.453624
+108 109         1.41421356
+109 108         1.41421356
+109 107         4.12310563
+109 106                  4
+109 105                  5
+109 110          9.8488578
+109 112         13.6014705
+110 106                  9
+110 107                 10
+110 108         10.4403065
+110 109          9.8488578
+110 104         12.6491106
+110 103         12.6491106
+110 105         9.05538514
+110 111         6.70820393
+110 116         14.0356688
+110 115         12.1655251
+110 114          9.8488578
+110 113         9.43398113
+110 112         7.07106781
+111 105                 13
+111 106         13.4164079
+111 110         6.70820393
+111 104         9.21954446
+111 103         9.21954446
+111 102         11.4017543
+111 101         12.0415946
+111 117         11.1803399
+111 116         8.24621125
+111 115         7.81024968
+111 114         3.16227766
+111 113         2.82842712
+111 112         4.12310563
+112 105                 10
+112 106         10.6301458
+112 107         11.4017543
+112 108          13.453624
+112 109         13.6014705
+112 110         7.07106781
+112 111         4.12310563
+112 104         5.83095189
+112 103         5.83095189
+112 102         7.81024968
+112 101         8.60232527
+112 100         12.0415946
+112 99         12.0415946
+112 98         13.0384048
+112 117         9.05538514
+112 116         7.28010989
+112 115         5.09901951
+112 114         5.38516481
+112 113         6.08276253
+113 110         9.43398113
+113 111         2.82842712
+113 112         6.08276253
+113 104          9.8488578
+113 103          9.8488578
+113 102          12.083046
+113 101         12.5299641
+113 117         10.6301458
+113 116         7.21110255
+113 115         8.06225775
+113 114         1.41421356
+113 118         13.6014705
+114 110          9.8488578
+114 111         3.16227766
+114 112         5.38516481
+114 113         1.41421356
+114 104         8.54400375
+114 103         8.54400375
+114 102         10.7703296
+114 101         11.1803399
+114 117         9.21954446
+114 116         5.83095189
+114 115         6.70820393
+114 118          13.453624
+115 103                  2
+115 104                  2
+115 105         13.0384048
+115 106          13.892444
+115 110         12.1655251
+115 111         7.81024968
+115 112         5.09901951
+115 113         8.06225775
+115 114         6.70820393
+115 102         4.12310563
+115 101         4.47213595
+115 100         8.06225775
+115 99         8.06225775
+115 98         8.48528137
+115 97                 10
+115 117                  4
+115 116         3.60555128
+116 101                  7
+116 102         7.07106781
+116 103         5.38516481
+116 104         5.38516481
+116 110         14.0356688
+116 111         8.24621125
+116 112         7.28010989
+116 113         7.21110255
+116 114         5.83095189
+116 115         3.60555128
+116 100          10.198039
+116 99          10.198039
+116 98          9.8488578
+116 97         11.7046999
+116 117         3.60555128
+116 120         13.4164079
+116 119         13.6014705
+116 118                 13
+117 99                  7
+117 100                  7
+117 101         4.47213595
+117 102                  5
+117 103         4.47213595
+117 104         4.47213595
+117 111         11.1803399
+117 112         9.05538514
+117 113         10.6301458
+117 114         9.21954446
+117 115                  4
+117 116         3.60555128
+117 98         6.32455532
+117 97         8.24621125
+117 120          13.453624
+118 113         13.6014705
+118 114          13.453624
+118 116                 13
+118 122         12.2065556
+118 121         9.43398113
+118 120         9.21954446
+118 119         7.21110255
+118 160         4.47213595
+118 159         7.21110255
+118 158         7.07106781
+118 157         10.6301458
+118 156         11.1803399
+118 161                  5
+119 116         13.6014705
+119 118         7.21110255
+119 122                  5
+119 121         2.23606798
+119 120         2.23606798
+119 125         10.4403065
+119 124         11.1803399
+119 157         11.1803399
+119 156         7.81024968
+119 155         12.2065556
+119 154         13.6014705
+119 123         8.54400375
+119 158         9.05538514
+119 159          10.198039
+119 160         6.32455532
+119 161         12.0415946
+120 116         13.4164079
+120 117          13.453624
+120 118         9.21954446
+120 119         2.23606798
+120 122         3.16227766
+120 121         1.41421356
+120 126         14.1421356
+120 125         9.05538514
+120 124         9.48683298
+120 157         13.0384048
+120 156         8.94427191
+120 155         12.7279221
+120 154         14.1421356
+120 123         8.60232527
+120 158         11.1803399
+120 159         12.3693169
+120 160         8.54400375
+120 161         14.1421356
+121 118         9.43398113
+121 119         2.23606798
+121 120         1.41421356
+121 122         2.82842712
+121 127         14.1421356
+121 126         13.3416641
+121 125         8.24621125
+121 124         8.94427191
+121 157                 12
+121 156         7.61577311
+121 155         11.3137085
+121 154         12.7279221
+121 123         7.21110255
+121 158         10.4403065
+121 159         11.7046999
+121 160         8.06225775
+122 118         12.2065556
+122 119                  5
+122 120         3.16227766
+122 121         2.82842712
+122 128         13.3416641
+122 127                 12
+122 126          11.045361
+122 125                  6
+122 124         6.32455532
+122 156         9.05538514
+122 155         11.6619038
+122 154         13.0384048
+122 123         7.21110255
+122 157         14.1421356
+122 158                 13
+122 160         10.8166538
+123 119         8.54400375
+123 120         8.60232527
+123 121         7.21110255
+123 122         7.21110255
+123 128         9.48683298
+123 127                 10
+123 126         9.89949494
+123 125         6.32455532
+123 124         8.24621125
+123 155         4.47213595
+123 154         5.83095189
+123 151         12.5299641
+123 150                 13
+123 156         4.24264069
+123 157                 10
+123 158         10.8166538
+123 159         12.2065556
+123 160         10.4403065
+124 119         11.1803399
+124 120         9.48683298
+124 121         8.94427191
+124 122         6.32455532
+124 123         8.24621125
+124 92          12.083046
+124 128         8.60232527
+124 127         6.32455532
+124 126         5.09901951
+124 125                  2
+124 155                 12
+124 154         13.0384048
+124 156          12.083046
+125 119         10.4403065
+125 120         9.05538514
+125 121         8.24621125
+125 122                  6
+125 123         6.32455532
+125 124                  2
+125 92         13.9283883
+125 128         7.61577311
+125 127                  6
+125 126         5.09901951
+125 155                 10
+125 154          11.045361
+125 156         10.2956301
+126 92                 12
+126 120         14.1421356
+126 121         13.3416641
+126 122          11.045361
+126 123         9.89949494
+126 124         5.09901951
+126 125         5.09901951
+126 86         12.8062485
+126 128         4.47213595
+126 127         1.41421356
+126 129          12.083046
+126 151         13.6014705
+126 150                 13
+126 149         13.0384048
+126 148         13.0384048
+126 147         12.0415946
+126 154         12.6491106
+126 155          12.083046
+126 156         14.1421356
+127 92         13.0384048
+127 121         14.1421356
+127 122                 12
+127 123                 10
+127 124         6.32455532
+127 125                  6
+127 126         1.41421356
+127 86         12.7279221
+127 128         3.1622776