From 17d933c04a23cc168b181d9332ae7fb08643071e Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 18:39:39 -0500 Subject: [PATCH 01/15] TST: Attempt to import unittest2 if running python 2.6 --- tests/test_geodataframe.py | 2 +- tests/test_geoseries.py | 3 +-- tests/util.py | 10 ++++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/test_geodataframe.py b/tests/test_geodataframe.py index c3ab1c9..e5f8c58 100644 --- a/tests/test_geodataframe.py +++ b/tests/test_geodataframe.py @@ -1,4 +1,3 @@ -import unittest import json import os import tempfile @@ -10,6 +9,7 @@ from shapely.geometry import Point, Polygon from geopandas import GeoDataFrame, read_file, GeoSeries +from tests.util import unittest import tests.util as tu diff --git a/tests/test_geoseries.py b/tests/test_geoseries.py index 2e86dcd..96320e2 100644 --- a/tests/test_geoseries.py +++ b/tests/test_geoseries.py @@ -1,7 +1,6 @@ import os import shutil import tempfile -import unittest import numpy as np from numpy.testing import assert_array_equal from pandas import Series @@ -9,7 +8,7 @@ from shapely.geometry import Polygon, Point, LineString from shapely.geometry.base import BaseGeometry from geopandas import GeoSeries from pandas import Series -from tests.util import geom_equals, geom_almost_equals +from tests.util import unittest, geom_equals, geom_almost_equals class TestSeries(unittest.TestCase): diff --git a/tests/util.py b/tests/util.py index e54fda1..98e732e 100644 --- a/tests/util.py +++ b/tests/util.py @@ -3,6 +3,16 @@ import urllib2 from geopandas import GeoDataFrame, GeoSeries +# Compatibility layer for Python 2.6: try loading unittest2 +import sys +if sys.version_info[:2] == (2, 6): + try: + import unittest2 as unittest + except ImportError: + import unittest + +else: + import unittest try: import psycopg2 From 46b6bb95a742955699d7a100a78e69dbe27df8ab Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 18:47:17 -0500 Subject: [PATCH 02/15] TST: Enable Travis CI for Python 2.6 --- .travis.yml | 3 ++- requirements.test.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cfafb8e..563515f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: python python: - - "2.7" + - 2.6 + - 2.7 env: - PANDAS_VERSION=v0.12.0 diff --git a/requirements.test.txt b/requirements.test.txt index 368aa84..def2d85 100644 --- a/requirements.test.txt +++ b/requirements.test.txt @@ -1,3 +1,4 @@ +unittest2 psycopg2>=2.5.1 geopy>=0.95.1 matplotlib>=1.2.1 From d05dc35077456fc517cb95734cc0bc0d1ccf8bc9 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 21:13:46 -0500 Subject: [PATCH 03/15] BUG: Everybody likes dictionary comprehensions. Except Python 2.6. --- geopandas/geodataframe.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/geopandas/geodataframe.py b/geopandas/geodataframe.py index cd9c475..6f81c4c 100644 --- a/geopandas/geodataframe.py +++ b/geopandas/geodataframe.py @@ -211,8 +211,8 @@ class GeoDataFrame(DataFrame): return { 'id': str(i), 'type': 'Feature', - 'properties': { - k: v for k, v in row.iteritems() if k != 'geometry'}, + 'properties': + dict((k, v) for k, v in row.iteritems() if k != 'geometry'), 'geometry': mapping(row['geometry']) } return json.dumps( @@ -247,8 +247,8 @@ class GeoDataFrame(DataFrame): return { 'id': str(i), 'type': 'Feature', - 'properties': { - k: v for k, v in row.iteritems() if k != 'geometry'}, + 'properties': + dict((k, v) for k, v in row.iteritems() if k != 'geometry'), 'geometry': mapping(row['geometry']) } properties = OrderedDict([(col, convert_type(_type)) for col, _type From 249380ee69d0c1229bea0f768a5898ed9ea64e37 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 21:24:22 -0500 Subject: [PATCH 04/15] TST: Clean up tests with assertRaises context manager. --- tests/test_geocode.py | 3 ++- tests/test_geodataframe.py | 33 +++++++++++++-------------------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/tests/test_geocode.py b/tests/test_geocode.py index a94d6bf..d136ea9 100644 --- a/tests/test_geocode.py +++ b/tests/test_geocode.py @@ -59,4 +59,5 @@ class TestGeocode(unittest.TestCase): self.assert_(pd.np.isnan(row['address'])) def test_bad_provider(self): - self.assertRaises(ValueError, geocode, ['cambridge, ma'], 'badprovider') + with self.assertRaises(ValueError): + geocode(['cambridge, ma'], 'badprovider') diff --git a/tests/test_geodataframe.py b/tests/test_geodataframe.py index e5f8c58..84757b7 100644 --- a/tests/test_geodataframe.py +++ b/tests/test_geodataframe.py @@ -79,39 +79,30 @@ class TestDataFrame(unittest.TestCase): self.assertEqual(df.crs, "epsg:26018") def test_geometry_property_errors(self): - # TODO: Much cleaner if we use pandas test options (since assertRaises - # contextmanager and friends not available in 2.6), but need 0.13 for - # that. - def _should_raise_att_error(): + with self.assertRaises(AttributeError): df = self.df.copy() del df['geometry'] df.geometry - self.assertRaises(AttributeError, _should_raise_att_error) # list-like error - def _should_raise_value_error_on_set_with_col(): + with self.assertRaises(ValueError): df = self.df2.copy() df.geometry = 'value1' - self.assertRaises(ValueError, _should_raise_value_error_on_set_with_col) # list-like error - def _should_raise_value_error_with_string(): + with self.assertRaises(ValueError): df = self.df.copy() df.geometry = 'apple' - self.assertRaises(ValueError, _should_raise_value_error_with_string) - def _should_raise_key_error(): + with self.assertRaises(KeyError): df = self.df.copy() del df['geometry'] df['geometry'] - self.assertRaises(KeyError, _should_raise_key_error) # ndim error - def _setting_with_df_should_raise_value_error(): + with self.assertRaises(ValueError): df = self.df.copy() df.geometry = df - self.assertRaises(ValueError, - _setting_with_df_should_raise_value_error) def test_set_geometry(self): geom = GeoSeries([Point(x,y) for x,y in zip(range(5), range(5))]) @@ -123,11 +114,12 @@ class TestDataFrame(unittest.TestCase): tu.assert_geoseries_equal(self.df.geometry, original_geom) tu.assert_geoseries_equal(self.df['geometry'], self.df.geometry) # unknown column - self.assertRaises(ValueError, self.df.set_geometry, - 'nonexistent-column') + with self.assertRaises(ValueError): + self.df.set_geometry('nonexistent-column') + # ndim error - self.assertRaises(ValueError, self.df.set_geometry, - self.df) + with self.assertRaises(ValueError): + self.df.set_geometry(self.df) # new crs - setting should default to GeoSeries' crs gs = GeoSeries(geom, crs="epsg:26018") @@ -317,5 +309,6 @@ class TestDataFrame(unittest.TestCase): self.assertEqual(gf.ix[0, "A"], 0) self.assertEqual(gf2.ix[0, "A"], 0) - self.assertRaises(ValueError, df.set_geometry, 'location', - inplace=True) + with self.assertRaises(ValueError): + df.set_geometry('location', inplace=True) + From 9ef3d20b113bfe890e1192ee946140e7cd473ff3 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 21:34:58 -0500 Subject: [PATCH 05/15] TST: Separate python 2.6 requirements for Travis CI and add ordereddict --- .requirements-2.6.txt | 2 ++ .travis.yml | 1 + requirements.test.txt | 1 - 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 .requirements-2.6.txt diff --git a/.requirements-2.6.txt b/.requirements-2.6.txt new file mode 100644 index 0000000..062b6c5 --- /dev/null +++ b/.requirements-2.6.txt @@ -0,0 +1,2 @@ +unittest2 +ordereddict diff --git a/.travis.yml b/.travis.yml index 563515f..1c63926 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ before_install: install: - pip install -r requirements.txt --use-mirrors - pip install -r requirements.test.txt --use-mirrors + - if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then source .requirements-2.6.txt; fi - git clone git://github.com/pydata/pandas.git - cd pandas - git checkout $PANDAS_VERSION diff --git a/requirements.test.txt b/requirements.test.txt index def2d85..368aa84 100644 --- a/requirements.test.txt +++ b/requirements.test.txt @@ -1,4 +1,3 @@ -unittest2 psycopg2>=2.5.1 geopy>=0.95.1 matplotlib>=1.2.1 From 8c9e83aa34e047c096b2c3854892917ed4d7e6df Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 21:59:46 -0500 Subject: [PATCH 06/15] TST: pip install, don't source, the 2.6 requirements --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1c63926..0fee17f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ before_install: install: - pip install -r requirements.txt --use-mirrors - pip install -r requirements.test.txt --use-mirrors - - if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then source .requirements-2.6.txt; fi + - if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then pip install -r .requirements-2.6.txt --use-mirrors; fi - git clone git://github.com/pydata/pandas.git - cd pandas - git checkout $PANDAS_VERSION From 6798c65a99c667c393f2fc4faeb34c1a13b3b62f Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 22:12:26 -0500 Subject: [PATCH 07/15] BUG: OrderedDict is not in collections module in python 2.6 --- geopandas/geodataframe.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/geopandas/geodataframe.py b/geopandas/geodataframe.py index 6f81c4c..7380f63 100644 --- a/geopandas/geodataframe.py +++ b/geopandas/geodataframe.py @@ -1,4 +1,8 @@ -from collections import OrderedDict +try: + from collections import OrderedDict +except ImportError: + # Python 2.6 + from ordereddict import OrderedDict import json import os import sys From 30576cf090897a7d1239efcca747a9a37ad62717 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 22:26:44 -0500 Subject: [PATCH 08/15] BUG: format statements need a position in python 2.6 --- geopandas/geoseries.py | 2 +- tests/util.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/geopandas/geoseries.py b/geopandas/geoseries.py index 42b6ecb..92305c8 100644 --- a/geopandas/geoseries.py +++ b/geopandas/geoseries.py @@ -89,7 +89,7 @@ class GeoSeries(Series): """Operation that returns a GeoSeries""" if isinstance(other, GeoSeries): if self.crs != other.crs: - warn('GeoSeries crs mismatch: {} and {}'.format(self.crs, other.crs)) + warn('GeoSeries crs mismatch: {0} and {1}'.format(self.crs, other.crs)) this, other = self.align(other) return GeoSeries([getattr(s[0], op)(s[1]) for s in zip(this, other)], index=this.index, crs=self.crs) diff --git a/tests/util.py b/tests/util.py index 98e732e..8b390f7 100644 --- a/tests/util.py +++ b/tests/util.py @@ -42,7 +42,7 @@ def validate_boro_df(test, df): test.assertEqual(len(df), 5) columns = ('borocode', 'boroname', 'shape_leng', 'shape_area') for col in columns: - test.assertTrue(col in df.columns, 'Column {} missing'.format(col)) + test.assertTrue(col in df.columns, 'Column {0} missing'.format(col)) test.assertTrue(all(df.geometry.type == 'MultiPolygon')) From 266f30f2226868ea4534adc8bd4d82d987279198 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Mon, 11 Nov 2013 22:33:26 -0500 Subject: [PATCH 09/15] TST: unittest2 didn't like skipIf --- tests/test_types.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_types.py b/tests/test_types.py index f92a88e..41f2245 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -50,8 +50,9 @@ class TestSeries(unittest.TestCase): def test_select(self): assert type(self.pts.select(lambda x: x % 2 == 0)) is GeoSeries - @unittest.skipIf(OLD_PANDAS, 'Groupby not supported on pandas <= 0.12') def test_groupby(self): + if OLD_PANDAS: + raise unittest.SkipTest for f, s in self.pts.groupby(lambda x: x % 2): assert type(s) is GeoSeries From eb4e198e810296b3f61088486347fac9056143a3 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Tue, 12 Nov 2013 10:51:25 -0500 Subject: [PATCH 10/15] TST: Use local unittest for python 2.6 compatability in test_geocode --- tests/test_geocode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_geocode.py b/tests/test_geocode.py index d136ea9..650e426 100644 --- a/tests/test_geocode.py +++ b/tests/test_geocode.py @@ -1,5 +1,3 @@ -import unittest - import fiona import pandas as pd from shapely.geometry import Point @@ -7,6 +5,8 @@ import geopandas as gpd import nose from geopandas.geocode import geocode, _prepare_geocode_result +from tests.util import unittest + def _skip_if_no_geopy(): try: From 2008b33074a334d34615afa6c1259505d949f02c Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Tue, 12 Nov 2013 10:53:50 -0500 Subject: [PATCH 11/15] Revert "TST: unittest2 didn't like skipIf" This reverts commit e70ea78321749b8229fdfd1b359b050af1c25a34. --- tests/test_types.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_types.py b/tests/test_types.py index 41f2245..f92a88e 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -50,9 +50,8 @@ class TestSeries(unittest.TestCase): def test_select(self): assert type(self.pts.select(lambda x: x % 2 == 0)) is GeoSeries + @unittest.skipIf(OLD_PANDAS, 'Groupby not supported on pandas <= 0.12') def test_groupby(self): - if OLD_PANDAS: - raise unittest.SkipTest for f, s in self.pts.groupby(lambda x: x % 2): assert type(s) is GeoSeries From 85365657d74bdad36bd96a6a85751506fd80d843 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Tue, 12 Nov 2013 10:57:52 -0500 Subject: [PATCH 12/15] TST: Use local unittest for python 2.6 compatability in test_types --- tests/test_types.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_types.py b/tests/test_types.py index f92a88e..a2a737f 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -1,10 +1,9 @@ -import unittest - import numpy as np from shapely.geometry import Point from pandas import Series, DataFrame from geopandas import GeoSeries, GeoDataFrame +from tests.util import unittest OLD_PANDAS = issubclass(Series, np.ndarray) From 159d69e1e05ce27512dc5a9c271881d458cdf158 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Tue, 12 Nov 2013 21:54:59 -0500 Subject: [PATCH 13/15] TST: Explicitly use relative imports and clean up tests --- tests/test_geocode.py | 2 +- tests/test_geodataframe.py | 60 ++++++++++++++++++-------------------- tests/test_geoseries.py | 3 +- tests/test_types.py | 2 +- 4 files changed, 32 insertions(+), 35 deletions(-) diff --git a/tests/test_geocode.py b/tests/test_geocode.py index 650e426..8b91cb1 100644 --- a/tests/test_geocode.py +++ b/tests/test_geocode.py @@ -5,7 +5,7 @@ import geopandas as gpd import nose from geopandas.geocode import geocode, _prepare_geocode_result -from tests.util import unittest +from .util import unittest def _skip_if_no_geopy(): diff --git a/tests/test_geodataframe.py b/tests/test_geodataframe.py index 84757b7..8c08cec 100644 --- a/tests/test_geodataframe.py +++ b/tests/test_geodataframe.py @@ -7,10 +7,9 @@ import numpy as np import pandas as pd from shapely.geometry import Point, Polygon - from geopandas import GeoDataFrame, read_file, GeoSeries -from tests.util import unittest -import tests.util as tu +from .util import unittest, download_nybb, assert_geoseries_equal, connect, \ + create_db, validate_boro_df class TestDataFrame(unittest.TestCase): @@ -18,7 +17,7 @@ class TestDataFrame(unittest.TestCase): def setUp(self): N = 10 - nybb_filename = tu.download_nybb() + nybb_filename = download_nybb() self.df = read_file('/nybb_13a/nybb.shp', vfs='zip://' + nybb_filename) self.tempdir = tempfile.mkdtemp() @@ -40,8 +39,8 @@ class TestDataFrame(unittest.TestCase): data = {"A": range(5), "B": range(-5, 0), "location": [Point(x, y) for x, y in zip(range(5), range(5))]} df = GeoDataFrame(data, crs=self.crs, geometry='location') - locs = GeoSeries(data['location'], crs=self.crs) - tu.assert_geoseries_equal(df.geometry, locs) + locs = GeoSeries(data['location']) + assert_geoseries_equal(df.geometry, locs) self.assert_('geometry' not in df) self.assertEqual(df.geometry.name, 'location') # internal implementation detail @@ -55,13 +54,13 @@ class TestDataFrame(unittest.TestCase): self.assertEqual(df2.geometry.crs, 'dummy_crs') # reset so it outputs okay df2.crs = df.crs - tu.assert_geoseries_equal(df2.geometry, GeoSeries(geom2, crs=df2.crs)) + assert_geoseries_equal(df2.geometry, GeoSeries(geom2)) # for right now, non-geometry comes back as series - tu.assert_geoseries_equal(df2['location'], df['location'], + assert_geoseries_equal(df2['location'], df['location'], check_series_type=False, check_dtype=False) def test_geometry_property(self): - tu.assert_geoseries_equal(self.df.geometry, self.df['geometry'], + assert_geoseries_equal(self.df.geometry, self.df['geometry'], check_dtype=True, check_index_type=True) df = self.df.copy() @@ -69,9 +68,9 @@ class TestDataFrame(unittest.TestCase): range(len(self.df)))] df.geometry = new_geom - new_geom = GeoSeries(new_geom, index=df.index, crs=df.crs) - tu.assert_geoseries_equal(df.geometry, new_geom) - tu.assert_geoseries_equal(df['geometry'], new_geom) + new_geom = GeoSeries(new_geom, index=df.index) + assert_geoseries_equal(df.geometry, new_geom) + assert_geoseries_equal(df['geometry'], new_geom) # new crs gs = GeoSeries(new_geom, crs="epsg:26018") @@ -110,9 +109,9 @@ class TestDataFrame(unittest.TestCase): df2 = self.df.set_geometry(geom) self.assert_(self.df is not df2) - tu.assert_geoseries_equal(df2.geometry, geom) - tu.assert_geoseries_equal(self.df.geometry, original_geom) - tu.assert_geoseries_equal(self.df['geometry'], self.df.geometry) + assert_geoseries_equal(df2.geometry, geom) + assert_geoseries_equal(self.df.geometry, original_geom) + assert_geoseries_equal(self.df['geometry'], self.df.geometry) # unknown column with self.assertRaises(ValueError): self.df.set_geometry('nonexistent-column') @@ -144,19 +143,19 @@ class TestDataFrame(unittest.TestCase): # Drop is false by default self.assert_('simplified_geometry' in df2) - tu.assert_geoseries_equal(df2.geometry, g_simplified) + assert_geoseries_equal(df2.geometry, g_simplified) # If True, drops column and renames to geometry df3 = self.df.set_geometry('simplified_geometry', drop=True) self.assert_('simplified_geometry' not in df3) - tu.assert_geoseries_equal(df3.geometry, g_simplified) + assert_geoseries_equal(df3.geometry, g_simplified) def test_set_geometry_inplace(self): geom = [Point(x,y) for x,y in zip(range(5), range(5))] ret = self.df.set_geometry(geom, inplace=True) self.assert_(ret is None) - geom = GeoSeries(geom, index=self.df.index, crs=self.df.crs) - tu.assert_geoseries_equal(self.df.geometry, geom) + geom = GeoSeries(geom, index=self.df.index) + assert_geoseries_equal(self.df.geometry, geom) def test_to_json(self): text = self.df.to_json() @@ -258,8 +257,8 @@ class TestDataFrame(unittest.TestCase): self.assertTrue(all(df2['geometry'].almost_equals(utm['geometry'], decimal=2))) def test_from_postgis_default(self): - con = tu.connect('test_geopandas') - if con is None or not tu.create_db(self.df): + con = connect('test_geopandas') + if con is None or not create_db(self.df): raise unittest.case.SkipTest() try: @@ -268,11 +267,11 @@ class TestDataFrame(unittest.TestCase): finally: con.close() - tu.validate_boro_df(self, df) + validate_boro_df(self, df) def test_from_postgis_custom_geom_col(self): - con = tu.connect('test_geopandas') - if con is None or not tu.create_db(self.df): + con = connect('test_geopandas') + if con is None or not create_db(self.df): raise unittest.case.SkipTest() try: @@ -284,21 +283,21 @@ class TestDataFrame(unittest.TestCase): finally: con.close() - tu.validate_boro_df(self, df) + validate_boro_df(self, df) def test_dataframe_to_geodataframe(self): df = pd.DataFrame({"A": range(len(self.df)), "location": list(self.df.geometry)}, index=self.df.index) gf = df.set_geometry('location', crs=self.df.crs) - tu.assert_isinstance(df, pd.DataFrame) - tu.assert_isinstance(gf, GeoDataFrame) - tu.assert_geoseries_equal(gf.geometry, self.df.geometry) + self.assertIsInstance(df, pd.DataFrame) + self.assertIsInstance(gf, GeoDataFrame) + assert_geoseries_equal(gf.geometry, self.df.geometry) self.assertEqual(gf.geometry.name, 'location') self.assert_('geometry' not in gf) gf2 = df.set_geometry('location', crs=self.df.crs, drop=True) - tu.assert_isinstance(df, pd.DataFrame) - tu.assert_isinstance(gf2, GeoDataFrame) + self.assertIsInstance(df, pd.DataFrame) + self.assertIsInstance(gf2, GeoDataFrame) self.assertEqual(gf2.geometry.name, 'geometry') self.assert_('geometry' in gf2) self.assert_('location' not in gf2) @@ -311,4 +310,3 @@ class TestDataFrame(unittest.TestCase): with self.assertRaises(ValueError): df.set_geometry('location', inplace=True) - diff --git a/tests/test_geoseries.py b/tests/test_geoseries.py index 96320e2..3bc5345 100644 --- a/tests/test_geoseries.py +++ b/tests/test_geoseries.py @@ -7,8 +7,7 @@ from pandas import Series from shapely.geometry import Polygon, Point, LineString from shapely.geometry.base import BaseGeometry from geopandas import GeoSeries -from pandas import Series -from tests.util import unittest, geom_equals, geom_almost_equals +from .util import unittest, geom_equals, geom_almost_equals class TestSeries(unittest.TestCase): diff --git a/tests/test_types.py b/tests/test_types.py index a2a737f..9baa8af 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -3,7 +3,7 @@ from shapely.geometry import Point from pandas import Series, DataFrame from geopandas import GeoSeries, GeoDataFrame -from tests.util import unittest +from .util import unittest OLD_PANDAS = issubclass(Series, np.ndarray) From cae824942120a6561cb5603f31e79c06582a4c01 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Tue, 12 Nov 2013 22:13:41 -0500 Subject: [PATCH 14/15] DOC: Update docs to list supported python versions --- doc/source/install.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/source/install.rst b/doc/source/install.rst index 2f02df8..1091d16 100644 --- a/doc/source/install.rst +++ b/doc/source/install.rst @@ -12,6 +12,9 @@ should work as well. Dependencies ------------ +Requires Python version 2.6 or 2.7 (Python 3.x support is planned +soon). + - `numpy`_ - `pandas`_ - `shapely`_ From b1ced78b16383294e54a98ea04b4fe203382c663 Mon Sep 17 00:00:00 2001 From: Kelsey Jordahl Date: Tue, 12 Nov 2013 23:09:58 -0500 Subject: [PATCH 15/15] BUG: Put back crs arguments that my merge had overwritten --- tests/test_geodataframe.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_geodataframe.py b/tests/test_geodataframe.py index 8c08cec..fb833bb 100644 --- a/tests/test_geodataframe.py +++ b/tests/test_geodataframe.py @@ -39,7 +39,7 @@ class TestDataFrame(unittest.TestCase): data = {"A": range(5), "B": range(-5, 0), "location": [Point(x, y) for x, y in zip(range(5), range(5))]} df = GeoDataFrame(data, crs=self.crs, geometry='location') - locs = GeoSeries(data['location']) + locs = GeoSeries(data['location'], crs=self.crs) assert_geoseries_equal(df.geometry, locs) self.assert_('geometry' not in df) self.assertEqual(df.geometry.name, 'location') @@ -54,7 +54,7 @@ class TestDataFrame(unittest.TestCase): self.assertEqual(df2.geometry.crs, 'dummy_crs') # reset so it outputs okay df2.crs = df.crs - assert_geoseries_equal(df2.geometry, GeoSeries(geom2)) + assert_geoseries_equal(df2.geometry, GeoSeries(geom2, crs=df2.crs)) # for right now, non-geometry comes back as series assert_geoseries_equal(df2['location'], df['location'], check_series_type=False, check_dtype=False) @@ -68,7 +68,7 @@ class TestDataFrame(unittest.TestCase): range(len(self.df)))] df.geometry = new_geom - new_geom = GeoSeries(new_geom, index=df.index) + new_geom = GeoSeries(new_geom, index=df.index, crs=df.crs) assert_geoseries_equal(df.geometry, new_geom) assert_geoseries_equal(df['geometry'], new_geom) @@ -154,7 +154,7 @@ class TestDataFrame(unittest.TestCase): geom = [Point(x,y) for x,y in zip(range(5), range(5))] ret = self.df.set_geometry(geom, inplace=True) self.assert_(ret is None) - geom = GeoSeries(geom, index=self.df.index) + geom = GeoSeries(geom, index=self.df.index, crs=self.df.crs) assert_geoseries_equal(self.df.geometry, geom) def test_to_json(self):