def test_versioning_with_disaggregate(self): storage = StorageFactory().get_storage('dict_storage') storage.write_table(table_name='zones', table_data={ 'id':array([1,2,3,4]), 'id2':array([1,2,1,2]) } ) storage.write_table(table_name='faz', table_data={ 'my_variable':array([4,8]), 'id2':array([1,2]) } ) ds = Dataset(in_storage=storage, in_table_name='zones', id_name="id", dataset_name="myzone") ds2 = Dataset(in_storage=storage, in_table_name='faz', id_name="id2", dataset_name="myfaz") dataset_pool = DatasetPool() dataset_pool._add_dataset('myzone', ds) dataset_pool._add_dataset('myfaz', ds2) var = "my_var = myzone.disaggregate(10.0*myfaz.my_variable)" ds.modify_attribute("id2", array([2,1,2,1])) # should have version 1 ds.compute_variables([var], dataset_pool=dataset_pool) self.assert_(ds.get_version("my_var")==0) ds.compute_variables([var], dataset_pool=dataset_pool) self.assert_(ds.get_version("my_var")==0) # version should stay the same, i.e. it should not recompute ds.touch_attribute("id2") # has version 2 ds.compute_variables([var], dataset_pool=dataset_pool) self.assert_(ds.get_version("my_var")==1) # version should be 1, i.e. it should recompute when id changes
def test_versioning_with_aggregate(self): storage = StorageFactory().get_storage('dict_storage') storage.write_table(table_name='households', table_data={ 'my_variable': array([4, 8, 2, 1, 40, 23, 78]), 'id0': arange(7) + 1, 'id1': array([1, 3, 1, 2, 3, 2, 1]) }) storage.write_table(table_name='fazes', table_data={ 'id1': array([1, 2, 3]), 'id2': array([1, 2, 1]) }) storage.write_table(table_name='fazdistr', table_data={'id2': array([1, 2])}) ds0 = Dataset(in_storage=storage, in_table_name='households', id_name="id0", dataset_name="myhousehold") ds1 = Dataset(in_storage=storage, in_table_name='fazes', id_name="id1", dataset_name="myfaz") ds2 = Dataset(in_storage=storage, in_table_name='fazdistr', id_name="id2", dataset_name="myfazdistr") dataset_pool = DatasetPool() dataset_pool._add_dataset('myhousehold', ds0) dataset_pool._add_dataset('myfaz', ds1) dataset_pool._add_dataset('myfazdistr', ds2) ds0.modify_attribute("id1", array([1, 3, 1, 2, 3, 2, 1])) # has version 1 variable = 'my_var = myfazdistr.aggregate(10.0*myhousehold.my_variable, intermediates=[myfaz])' ds2.compute_variables([variable], dataset_pool=dataset_pool) self.assert_(ds2.get_version("my_var") == 0) ds2.compute_variables([variable], dataset_pool=dataset_pool) self.assert_( ds2.get_version("my_var") == 0) # version should stay the same, i.e. it should not recompute ds0.touch_attribute("id1") # has version 2 ds2.compute_variables([variable], dataset_pool=dataset_pool) self.assert_( ds2.get_version("my_var") == 1) # version should be 1, i.e. it should recompute when id changes ds1.touch_attribute("id2") # has version 1 ds2.compute_variables([variable], dataset_pool=dataset_pool) self.assert_( ds2.get_version("my_var") == 2) # version should be 2, i.e. it should recompute when id changes
def test_versioning_with_aggregate(self): storage = StorageFactory().get_storage('dict_storage') storage.write_table(table_name='households', table_data={ 'my_variable':array([4,8,2,1,40,23,78]), 'id0':arange(7)+1, 'id1':array([1,3,1,2,3,2,1]) } ) storage.write_table(table_name='fazes', table_data={ 'id1':array([1,2,3]), 'id2':array([1,2,1]) } ) storage.write_table(table_name='fazdistr', table_data={ 'id2':array([1,2]) } ) ds0 = Dataset(in_storage=storage, in_table_name='households', id_name="id0", dataset_name="myhousehold") ds1 = Dataset(in_storage=storage, in_table_name='fazes', id_name="id1", dataset_name="myfaz") ds2 = Dataset(in_storage=storage, in_table_name='fazdistr', id_name="id2", dataset_name="myfazdistr") dataset_pool = DatasetPool() dataset_pool._add_dataset('myhousehold', ds0) dataset_pool._add_dataset('myfaz',ds1) dataset_pool._add_dataset('myfazdistr',ds2) ds0.modify_attribute("id1", array([1,3,1,2,3,2,1])) # has version 1 variable = 'my_var = myfazdistr.aggregate(10.0*myhousehold.my_variable, intermediates=[myfaz])' ds2.compute_variables([variable], dataset_pool=dataset_pool) self.assert_(ds2.get_version("my_var")==0) ds2.compute_variables([variable], dataset_pool=dataset_pool) self.assert_(ds2.get_version("my_var")==0) # version should stay the same, i.e. it should not recompute ds0.touch_attribute("id1") # has version 2 ds2.compute_variables([variable], dataset_pool=dataset_pool) self.assert_(ds2.get_version("my_var")==1) # version should be 1, i.e. it should recompute when id changes ds1.touch_attribute("id2") # has version 1 ds2.compute_variables([variable], dataset_pool=dataset_pool) self.assert_(ds2.get_version("my_var")==2) # version should be 2, i.e. it should recompute when id changes
def test_versioning_with_disaggregate(self): storage = StorageFactory().get_storage('dict_storage') storage.write_table(table_name='zones', table_data={ 'id': array([1, 2, 3, 4]), 'id2': array([1, 2, 1, 2]) }) storage.write_table(table_name='faz', table_data={ 'my_variable': array([4, 8]), 'id2': array([1, 2]) }) ds = Dataset(in_storage=storage, in_table_name='zones', id_name="id", dataset_name="myzone") ds2 = Dataset(in_storage=storage, in_table_name='faz', id_name="id2", dataset_name="myfaz") dataset_pool = DatasetPool() dataset_pool._add_dataset('myzone', ds) dataset_pool._add_dataset('myfaz', ds2) var = "my_var = myzone.disaggregate(10.0*myfaz.my_variable)" ds.modify_attribute("id2", array([2, 1, 2, 1])) # should have version 1 ds.compute_variables([var], dataset_pool=dataset_pool) self.assert_(ds.get_version("my_var") == 0) ds.compute_variables([var], dataset_pool=dataset_pool) self.assert_( ds.get_version("my_var") == 0) # version should stay the same, i.e. it should not recompute ds.touch_attribute("id2") # has version 2 ds.compute_variables([var], dataset_pool=dataset_pool) self.assert_( ds.get_version("my_var") == 1) # version should be 1, i.e. it should recompute when id changes
def test_variable_dependencies_tree_with_versioning(self): storage = StorageFactory().get_storage('dict_storage') storage.write_table( table_name='tests', table_data={ 'id':array([2,4]), 'a_dependent_variable':array([4,7]), 'a_dependent_variable2':array([10,1]) } ) ds = Dataset(in_storage=storage, in_table_name='tests', id_name='id', dataset_name='tests') ds.compute_variables(["opus_core.tests.a_test_variable_with_two_dependencies"]) self.assert_(ds.get_version("a_test_variable_with_two_dependencies")==0) #initially version=0 self.assert_(ds.get_version("a_dependent_variable")==0) self.assert_(ds.get_version("a_dependent_variable2")==0) ds.modify_attribute("a_dependent_variable", array([0,0])) self.assert_(ds.get_version("a_dependent_variable")==1) # version=1 ds.modify_attribute("a_dependent_variable", array([1,1])) self.assert_(ds.get_version("a_dependent_variable")==2) # version=2 ds.compute_variables(["opus_core.tests.a_test_variable_with_two_dependencies"]) self.assert_(ds.get_version("a_test_variable_with_two_dependencies")==1) ds.compute_variables(["opus_core.tests.a_test_variable_with_two_dependencies"]) self.assert_(ds.get_version("a_test_variable_with_two_dependencies")==1) # version does not change autogen_variable = "my_var = 3 * opus_core.tests.a_dependent_variable" ds.compute_variables([autogen_variable]) self.assert_(ds.get_version("my_var")==0) ds.compute_variables([autogen_variable]) self.assert_(ds.get_version("my_var")==0)
interactions.get_dataset_name() from numpy import arange interactions = InteractionDataset(dataset1 = households, dataset2 = locations, index1 = arange(5), index2 = arange(3)) interactions.compute_variables(["urbansim.household_x_gridcell.cost_times_income"]) specification = EquationSpecification( variables=array([ "gridcell.cost", "urbansim.household_x_gridcell.cost_times_income"]), coefficients=array(["costcoef", "cti_coef"])) households.add_primary_attribute(data=[2,8,3,1,5,4,9,7,3,6], name="location") coef, other_results = hlcm.estimate(specification, households) # Versioning households.get_version("income") res = interactions.compute_variables(["urbansim.household_x_gridcell.cost_times_income"]) interactions.get_version("cost_times_income") households.modify_attribute(name="income", data=[14000], index=[9]) households.get_version("income") res = interactions.compute_variables(["urbansim.household_x_gridcell.cost_times_income"]) interactions.get_version("cost_times_income") # Using numbers res = locations.compute_variables( map(lambda threshold: "urbansim.gridcell.is_near_cbd_if_threshold_is_%s" % threshold, [2,4,7])) locations.get_attribute("is_near_cbd_if_threshold_is_2") locations.get_attribute("is_near_cbd_if_threshold_is_4") locations.get_attribute("is_near_cbd_if_threshold_is_7")