From a451fb5b6ac94b2849cabd6a039d73a96786d7a6 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Mon, 29 Aug 2016 15:50:19 -0400 Subject: [PATCH 01/10] minor ordering changes --- src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py b/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py index 4622925..a588795 100644 --- a/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py +++ b/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py @@ -58,9 +58,9 @@ def query_attr_select(params): else: ## if moran's analysis attrs = [k for k in params - if k not in ('id_col', 'geom_col', 'subquery', 'num_ngbrs', 'subquery')] + if k not in ('id_col', 'geom_col', 'subquery', 'num_ngbrs')] - for idx, val in enumerate(sorted(attrs)): + for idx, val in enumerate(attrs): attr_string += template % {"col": params[val], "alias_num": idx + 1} return attr_string From 623613aa5cd08cb9ddefbcadfb5adf6cd49389d7 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Mon, 29 Aug 2016 16:46:49 -0400 Subject: [PATCH 02/10] adding ordered dict to tests --- src/py/crankshaft/test/test_pysal_utils.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/py/crankshaft/test/test_pysal_utils.py b/src/py/crankshaft/test/test_pysal_utils.py index 171fdbc..393adf6 100644 --- a/src/py/crankshaft/test/test_pysal_utils.py +++ b/src/py/crankshaft/test/test_pysal_utils.py @@ -2,18 +2,19 @@ import unittest import crankshaft.pysal_utils as pu from crankshaft import random_seeds +from collections import OrderedDict class PysalUtilsTest(unittest.TestCase): """Testing class for utility functions related to PySAL integrations""" def setUp(self): - self.params = {"id_col": "cartodb_id", - "attr1": "andy", - "attr2": "jay_z", - "subquery": "SELECT * FROM a_list", - "geom_col": "the_geom", - "num_ngbrs": 321} + self.params = OrderedDict([("id_col", "cartodb_id"), + ("attr1": "andy"), + ("attr2": "jay_z"), + ("subquery": "SELECT * FROM a_list"), + ("geom_col": "the_geom"), + ("num_ngbrs": 321)]) self.params_array = {"id_col": "cartodb_id", "time_cols": ["_2013_dec", "_2014_jan", "_2014_feb"], @@ -69,7 +70,7 @@ class PysalUtilsTest(unittest.TestCase): "i.\"jay_z\" IS NOT NULL AND " \ "i.\"jay_z\" <> 0 " \ "ORDER BY i.\"cartodb_id\" ASC;" - + ans_array = "SELECT i.\"cartodb_id\" As id, " \ "i.\"_2013_dec\"::numeric As attr1, " \ "i.\"_2014_jan\"::numeric As attr2, " \ From 622235d787faa179d57dc241602f28cc48386f0a Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Mon, 29 Aug 2016 16:52:40 -0400 Subject: [PATCH 03/10] :P adding commas --- src/py/crankshaft/test/test_pysal_utils.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/py/crankshaft/test/test_pysal_utils.py b/src/py/crankshaft/test/test_pysal_utils.py index 393adf6..82c38f1 100644 --- a/src/py/crankshaft/test/test_pysal_utils.py +++ b/src/py/crankshaft/test/test_pysal_utils.py @@ -10,11 +10,11 @@ class PysalUtilsTest(unittest.TestCase): def setUp(self): self.params = OrderedDict([("id_col", "cartodb_id"), - ("attr1": "andy"), - ("attr2": "jay_z"), - ("subquery": "SELECT * FROM a_list"), - ("geom_col": "the_geom"), - ("num_ngbrs": 321)]) + ("attr1", "andy"), + ("attr2", "jay_z"), + ("subquery", "SELECT * FROM a_list"), + ("geom_col", "the_geom"), + ("num_ngbrs", 321)]) self.params_array = {"id_col": "cartodb_id", "time_cols": ["_2013_dec", "_2014_jan", "_2014_feb"], From 40481f128610bb2acf9ed0c3cd49d5792ae06b41 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Mon, 29 Aug 2016 17:10:58 -0400 Subject: [PATCH 04/10] adding more tests --- src/py/crankshaft/test/test_pysal_utils.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/py/crankshaft/test/test_pysal_utils.py b/src/py/crankshaft/test/test_pysal_utils.py index 82c38f1..9af8522 100644 --- a/src/py/crankshaft/test/test_pysal_utils.py +++ b/src/py/crankshaft/test/test_pysal_utils.py @@ -16,6 +16,13 @@ class PysalUtilsTest(unittest.TestCase): ("geom_col", "the_geom"), ("num_ngbrs", 321)]) + self.params2 = OrderedDict([("id_col", "cartodb_id"), + ("attr1", "price"), + ("attr2", "sq_meters"), + ("subquery", "SELECT * FROM a_list"), + ("geom_col", "the_geom"), + ("num_ngbrs", 321)]) + self.params_array = {"id_col": "cartodb_id", "time_cols": ["_2013_dec", "_2014_jan", "_2014_feb"], "subquery": "SELECT * FROM a_list", @@ -28,11 +35,15 @@ class PysalUtilsTest(unittest.TestCase): ans = "i.\"andy\"::numeric As attr1, " \ "i.\"jay_z\"::numeric As attr2, " + ans2 = "i.\"price\"::numeric As attr1, " \ + "i.\"sq_meters\"::numeric As attr2, " + ans_array = "i.\"_2013_dec\"::numeric As attr1, " \ "i.\"_2014_jan\"::numeric As attr2, " \ "i.\"_2014_feb\"::numeric As attr3, " self.assertEqual(pu.query_attr_select(self.params), ans) + self.assertEqual(pu.query_attr_select(self.params2), ans2) self.assertEqual(pu.query_attr_select(self.params_array), ans_array) def test_query_attr_where(self): From 44dc5811b58dba58e5674ddb24d8a1eae524655a Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Thu, 1 Sep 2016 16:47:57 -0400 Subject: [PATCH 05/10] updating tests for query ordering error --- src/pg/test/expected/02_moran_test.out | 215 ++++++++++++------------- 1 file changed, 106 insertions(+), 109 deletions(-) diff --git a/src/pg/test/expected/02_moran_test.out b/src/pg/test/expected/02_moran_test.out index 3ba5bfd..03e842a 100644 --- a/src/pg/test/expected/02_moran_test.out +++ b/src/pg/test/expected/02_moran_test.out @@ -143,135 +143,132 @@ _cdb_random_seeds (1 row) code|quads -01|LL -02|LH -03|HH -04|HH -05|LL -06|HH -07|LL -08|LL -09|LL -10|HH -11|HH -12|HL -13|LL -14|HH +01|HH +02|HL +03|LL +04|LL +05|LH +06|LL +07|HH +08|HH +09|HH +10|LL +11|LL +12|LL +13|HL +14|LL 15|LL -16|LL -17|LL -18|LH -19|LL -20|LL -21|HH -22|LL -23|HL +16|HH +17|HH +18|LL +19|HH +20|HH +21|LL +22|HH +23|LL 24|LL -25|LL -26|LL +25|HH +26|HH 27|LL -28|LL -29|LH -30|HH -31|LL +28|HH +29|LL +30|LL +31|HH 32|LL -33|LL -34|LL -35|LH -36|HL -37|LH -38|LH -39|LL -40|LL -41|LH -42|HL -43|LL -44|HL -45|LL -46|HL +33|HL +34|LH +35|LL +36|LL +37|HL +38|HL +39|HH +40|HH +41|HL +42|LH +43|LH +44|LL +45|LH +46|LL 47|LL -48|LL -49|HL -50|LL -51|HH +48|HH +49|LL +50|HH +51|LL (51 rows) _cdb_random_seeds (1 row) code|quads -03|HH -04|HH -06|HH -10|HH -11|HH -12|HL -14|HH -21|HH -23|HL -30|HH -36|HL -42|HL -44|HL -46|HL -49|HL -51|HH -(16 rows) +01|HH +02|HL +07|HH +08|HH +09|HH +13|HL +16|HH +17|HH +19|HH +20|HH +22|HH +25|HH +26|HH +28|HH +31|HH +33|HL +37|HL +38|HL +39|HH +40|HH +41|HL +48|HH +50|HH +(23 rows) _cdb_random_seeds (1 row) code|quads -01|LL -02|LH -05|LL -07|LL -08|LL -09|LL -13|LL +03|LL +04|LL +05|LH +06|LL +10|LL +11|LL +12|LL +14|LL 15|LL -16|LL -17|LL -18|LH -19|LL -20|LL -22|LL +18|LL +21|LL +23|LL 24|LL -25|LL -26|LL 27|LL -28|LL -29|LH -31|LL +29|LL +30|LL 32|LL -33|LL -34|LL -35|LH -37|LH -38|LH -39|LL -40|LL -41|LH -43|LL -45|LL +34|LH +35|LL +36|LL +42|LH +43|LH +44|LL +45|LH +46|LL 47|LL -48|LL -50|LL -(35 rows) +49|LL +51|LL +(28 rows) _cdb_random_seeds (1 row) code|quads -02|LH -12|HL -18|LH -23|HL -29|LH -35|LH -36|HL -37|LH -38|LH -41|LH -42|HL -44|HL -46|HL -49|HL -(14 rows) +02|HL +05|LH +13|HL +33|HL +34|LH +37|HL +38|HL +41|HL +42|LH +43|LH +45|LH +(11 rows) From e29f6f2861b271bd04192d064ddc9411e553164d Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Tue, 6 Sep 2016 09:23:39 -0400 Subject: [PATCH 06/10] add more comments --- src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py b/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py index a588795..f0c73ba 100644 --- a/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py +++ b/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py @@ -44,6 +44,13 @@ def query_attr_select(params): Create portion of SELECT statement for attributes inolved in query. @param params: dict of information used in query (column names, table name, etc.) + Example: + OrderedDict([('attr1', 'numerator'), + ('attr2', 'denominator'), + ('subquery', 'SELECT * FROM interesting_data')]) + Output: + "i.\"numerator\"::numeric As attr1, " \ + "i.\"denominator\"::numeric As attr2, " """ attr_string = "" From 1148aa417ae5da2d7beaa5d8e0d120e3410095f3 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Tue, 6 Sep 2016 09:23:59 -0400 Subject: [PATCH 07/10] additional test on alphabetical ordering --- src/py/crankshaft/test/test_pysal_utils.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/py/crankshaft/test/test_pysal_utils.py b/src/py/crankshaft/test/test_pysal_utils.py index 9af8522..aad9b20 100644 --- a/src/py/crankshaft/test/test_pysal_utils.py +++ b/src/py/crankshaft/test/test_pysal_utils.py @@ -23,6 +23,13 @@ class PysalUtilsTest(unittest.TestCase): ("geom_col", "the_geom"), ("num_ngbrs", 321)]) + self.params3 = OrderedDict([("id_col", "cartodb_id"), + ("attr1", "numerator"), + ("attr2", "denominator"), + ("subquery", "SELECT * FROM pecan"), + ("geom_col", "the_geom"), + ("num_ngbrs", 321)]) + self.params_array = {"id_col": "cartodb_id", "time_cols": ["_2013_dec", "_2014_jan", "_2014_feb"], "subquery": "SELECT * FROM a_list", @@ -38,12 +45,16 @@ class PysalUtilsTest(unittest.TestCase): ans2 = "i.\"price\"::numeric As attr1, " \ "i.\"sq_meters\"::numeric As attr2, " + ans3 = "i.\"numerator\"::numeric As attr1, " \ + "i.\"denominator\"::numeric As attr2, " + ans_array = "i.\"_2013_dec\"::numeric As attr1, " \ "i.\"_2014_jan\"::numeric As attr2, " \ "i.\"_2014_feb\"::numeric As attr3, " self.assertEqual(pu.query_attr_select(self.params), ans) self.assertEqual(pu.query_attr_select(self.params2), ans2) + self.assertEqual(pu.query_attr_select(self.params3), ans3) self.assertEqual(pu.query_attr_select(self.params_array), ans_array) def test_query_attr_where(self): From 06452562b905f21dc0adb6a0fa403cda333bb737 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Mon, 26 Sep 2016 10:10:52 -0400 Subject: [PATCH 08/10] fix ordering problems in input columns --- src/py/crankshaft/test/test_pysal_utils.py | 81 ++++++++++------------ 1 file changed, 38 insertions(+), 43 deletions(-) diff --git a/src/py/crankshaft/test/test_pysal_utils.py b/src/py/crankshaft/test/test_pysal_utils.py index aad9b20..92b528b 100644 --- a/src/py/crankshaft/test/test_pysal_utils.py +++ b/src/py/crankshaft/test/test_pysal_utils.py @@ -9,23 +9,23 @@ class PysalUtilsTest(unittest.TestCase): """Testing class for utility functions related to PySAL integrations""" def setUp(self): - self.params = OrderedDict([("id_col", "cartodb_id"), - ("attr1", "andy"), - ("attr2", "jay_z"), - ("subquery", "SELECT * FROM a_list"), - ("geom_col", "the_geom"), - ("num_ngbrs", 321)]) - - self.params2 = OrderedDict([("id_col", "cartodb_id"), - ("attr1", "price"), - ("attr2", "sq_meters"), + self.params1 = OrderedDict([("id_col", "cartodb_id"), + ("attr1", "andy"), + ("attr2", "jay_z"), ("subquery", "SELECT * FROM a_list"), ("geom_col", "the_geom"), ("num_ngbrs", 321)]) + self.params2 = OrderedDict([("id_col", "cartodb_id"), + ("numerator", "price"), + ("denominator", "sq_meters"), + ("subquery", "SELECT * FROM pecan"), + ("geom_col", "the_geom"), + ("num_ngbrs", 321)]) + self.params3 = OrderedDict([("id_col", "cartodb_id"), - ("attr1", "numerator"), - ("attr2", "denominator"), + ("numerator", "sq_meters"), + ("denominator", "price"), ("subquery", "SELECT * FROM pecan"), ("geom_col", "the_geom"), ("num_ngbrs", 321)]) @@ -39,20 +39,20 @@ class PysalUtilsTest(unittest.TestCase): def test_query_attr_select(self): """Test query_attr_select""" - ans = "i.\"andy\"::numeric As attr1, " \ - "i.\"jay_z\"::numeric As attr2, " + ans1 = ("i.\"andy\"::numeric As attr1, " + "i.\"jay_z\"::numeric As attr2, ") - ans2 = "i.\"price\"::numeric As attr1, " \ - "i.\"sq_meters\"::numeric As attr2, " + ans2 = ("i.\"price\"::numeric As attr1, " + "i.\"sq_meters\"::numeric As attr2, ") - ans3 = "i.\"numerator\"::numeric As attr1, " \ - "i.\"denominator\"::numeric As attr2, " + ans3 = ("i.\"sq_meters\"::numeric As attr1, " + "i.\"price\"::numeric As attr2, ") - ans_array = "i.\"_2013_dec\"::numeric As attr1, " \ - "i.\"_2014_jan\"::numeric As attr2, " \ - "i.\"_2014_feb\"::numeric As attr3, " + ans_array = ("i.\"_2013_dec\"::numeric As attr1, " + "i.\"_2014_jan\"::numeric As attr2, " + "i.\"_2014_feb\"::numeric As attr3, ") - self.assertEqual(pu.query_attr_select(self.params), ans) + self.assertEqual(pu.query_attr_select(self.params1), ans1) self.assertEqual(pu.query_attr_select(self.params2), ans2) self.assertEqual(pu.query_attr_select(self.params3), ans3) self.assertEqual(pu.query_attr_select(self.params_array), ans_array) @@ -60,21 +60,20 @@ class PysalUtilsTest(unittest.TestCase): def test_query_attr_where(self): """Test pu.query_attr_where""" - ans = "idx_replace.\"andy\" IS NOT NULL AND " \ - "idx_replace.\"jay_z\" IS NOT NULL AND " \ - "idx_replace.\"jay_z\" <> 0" + ans1 = ("idx_replace.\"andy\" IS NOT NULL AND " + "idx_replace.\"jay_z\" IS NOT NULL") - ans_array = "idx_replace.\"_2013_dec\" IS NOT NULL AND " \ - "idx_replace.\"_2014_jan\" IS NOT NULL AND " \ - "idx_replace.\"_2014_feb\" IS NOT NULL" + ans_array = ("idx_replace.\"_2013_dec\" IS NOT NULL AND " + "idx_replace.\"_2014_jan\" IS NOT NULL AND " + "idx_replace.\"_2014_feb\" IS NOT NULL") - self.assertEqual(pu.query_attr_where(self.params), ans) + self.assertEqual(pu.query_attr_where(self.params1), ans1) self.assertEqual(pu.query_attr_where(self.params_array), ans_array) def test_knn(self): """Test knn neighbors constructor""" - ans = "SELECT i.\"cartodb_id\" As id, " \ + ans1 = "SELECT i.\"cartodb_id\" As id, " \ "i.\"andy\"::numeric As attr1, " \ "i.\"jay_z\"::numeric As attr2, " \ "(SELECT ARRAY(SELECT j.\"cartodb_id\" " \ @@ -82,15 +81,13 @@ class PysalUtilsTest(unittest.TestCase): "WHERE " \ "i.\"cartodb_id\" <> j.\"cartodb_id\" AND " \ "j.\"andy\" IS NOT NULL AND " \ - "j.\"jay_z\" IS NOT NULL AND " \ - "j.\"jay_z\" <> 0 " \ + "j.\"jay_z\" IS NOT NULL " \ "ORDER BY " \ "j.\"the_geom\" <-> i.\"the_geom\" ASC " \ "LIMIT 321)) As neighbors " \ "FROM (SELECT * FROM a_list) As i " \ "WHERE i.\"andy\" IS NOT NULL AND " \ - "i.\"jay_z\" IS NOT NULL AND " \ - "i.\"jay_z\" <> 0 " \ + "i.\"jay_z\" IS NOT NULL " \ "ORDER BY i.\"cartodb_id\" ASC;" ans_array = "SELECT i.\"cartodb_id\" As id, " \ @@ -111,13 +108,13 @@ class PysalUtilsTest(unittest.TestCase): "i.\"_2014_feb\" IS NOT NULL "\ "ORDER BY i.\"cartodb_id\" ASC;" - self.assertEqual(pu.knn(self.params), ans) + self.assertEqual(pu.knn(self.params1), ans1) self.assertEqual(pu.knn(self.params_array), ans_array) def test_queen(self): """Test queen neighbors constructor""" - ans = "SELECT i.\"cartodb_id\" As id, " \ + ans1 = "SELECT i.\"cartodb_id\" As id, " \ "i.\"andy\"::numeric As attr1, " \ "i.\"jay_z\"::numeric As attr2, " \ "(SELECT ARRAY(SELECT j.\"cartodb_id\" " \ @@ -127,23 +124,21 @@ class PysalUtilsTest(unittest.TestCase): "ST_Touches(i.\"the_geom\", " \ "j.\"the_geom\") AND " \ "j.\"andy\" IS NOT NULL AND " \ - "j.\"jay_z\" IS NOT NULL AND " \ - "j.\"jay_z\" <> 0)" \ + "j.\"jay_z\" IS NOT NULL)" \ ") As neighbors " \ "FROM (SELECT * FROM a_list) As i " \ "WHERE i.\"andy\" IS NOT NULL AND " \ - "i.\"jay_z\" IS NOT NULL AND " \ - "i.\"jay_z\" <> 0 " \ + "i.\"jay_z\" IS NOT NULL " \ "ORDER BY i.\"cartodb_id\" ASC;" - self.assertEqual(pu.queen(self.params), ans) + self.assertEqual(pu.queen(self.params1), ans1) def test_construct_neighbor_query(self): """Test construct_neighbor_query""" # Compare to raw knn query - self.assertEqual(pu.construct_neighbor_query('knn', self.params), - pu.knn(self.params)) + self.assertEqual(pu.construct_neighbor_query('knn', self.params1), + pu.knn(self.params1)) def test_get_attributes(self): """Test get_attributes""" From f1d420a6f7fc83cfc58862065c3a845bf31a5ba6 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Mon, 26 Sep 2016 10:11:16 -0400 Subject: [PATCH 09/10] ordering fixes --- .../crankshaft/pysal_utils/pysal_utils.py | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py b/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py index f0c73ba..c0ec19d 100644 --- a/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py +++ b/src/py/crankshaft/crankshaft/pysal_utils/pysal_utils.py @@ -42,15 +42,16 @@ def get_weight(query_res, w_type='knn', num_ngbrs=5): def query_attr_select(params): """ Create portion of SELECT statement for attributes inolved in query. + Defaults to order in the params @param params: dict of information used in query (column names, table name, etc.) Example: - OrderedDict([('attr1', 'numerator'), - ('attr2', 'denominator'), + OrderedDict([('numerator', 'price'), + ('denominator', 'sq_meters'), ('subquery', 'SELECT * FROM interesting_data')]) Output: - "i.\"numerator\"::numeric As attr1, " \ - "i.\"denominator\"::numeric As attr2, " + "i.\"price\"::numeric As attr1, " \ + "i.\"sq_meters\"::numeric As attr2, " """ attr_string = "" @@ -81,7 +82,8 @@ def query_attr_where(params): 'numerator': 'data1', 'denominator': 'data2', '': ...} - Output: 'idx_replace."data1" IS NOT NULL AND idx_replace."data2" IS NOT NULL' + Output: + 'idx_replace."data1" IS NOT NULL AND idx_replace."data2" IS NOT NULL' Input: {'subquery': ..., 'time_cols': ['time1', 'time2', 'time3'], @@ -102,14 +104,16 @@ def query_attr_where(params): ## moran where clauses # get keys - attrs = sorted([k for k in params - if k not in ('id_col', 'geom_col', 'subquery', 'num_ngbrs', 'subquery')]) + attrs = [k for k in params + if k not in ('id_col', 'geom_col', 'subquery', + 'num_ngbrs', 'subquery')] # add values to template for attr in attrs: attr_string.append(template % params[attr]) - if len(attrs) == 2: - attr_string.append("idx_replace.\"%s\" <> 0" % params[attrs[1]]) + if 'denominator' in attrs: + attr_string.append( + "idx_replace.\"%s\" <> 0" % params['denominator']) out = " AND ".join(attr_string) From 1ef3f864749a8b6f89a0c3a9e35e6ab9ed00f659 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Mon, 26 Sep 2016 10:13:27 -0400 Subject: [PATCH 10/10] small updates after ordering fix --- src/pg/test/expected/02_moran_test.out | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/pg/test/expected/02_moran_test.out b/src/pg/test/expected/02_moran_test.out index e7aef8b..95ce189 100644 --- a/src/pg/test/expected/02_moran_test.out +++ b/src/pg/test/expected/02_moran_test.out @@ -197,10 +197,11 @@ code|quads 46|LL 47|LL 48|HH -49|LL +49|LH 50|HH 51|LL -(51 rows) +52|LL +(52 rows) _cdb_random_seeds (1 row) @@ -259,9 +260,10 @@ code|quads 45|LH 46|LL 47|LL -49|LL +49|LH 51|LL -(28 rows) +52|LL +(29 rows) _cdb_random_seeds (1 row) @@ -277,4 +279,5 @@ code|quads 42|LH 43|LH 45|LH -(11 rows) +49|LH +(12 rows)