from urbansim.datasets.gridcell_dataset import GridcellDataset
from numpy import array
from opus_core.misc import unique

consumption_grid_id = consumption.get_attribute("grid_id")
years = consumption.get_attribute("billyear")
distinct_years = unique(years)

import os
from numpy import where, zeros, arange
cache_directory = "D:/urbansim_cache/water_demand"
for year in arange(1991, 2001):
    print year
    flt_storage = StorageCreator().build_storage(type="flt", location=os.path.join(cache_directory, str(year)))
    gridcells = GridcellDataset(in_storage=flt_storage)
    grid_id_idx = array(map(lambda x: gridcells.try_id_mapping(x, -1), consumption_grid_id))
    year_idx = where(years==year)[0]
    grid_id_idx_for_year = grid_id_idx[year_idx]
    for attr in gridcells.get_known_attribute_names():
        if attr not in consumption.get_known_attribute_names():
            ftype = gridcells.get_attribute(attr).type()
            consumption.add_attribute(name=attr, data=zeros(consumption.size(), dtype=ftype))
        consumption.modify_attribute(name=attr,
                                     data=gridcells.get_attribute_by_index(attr, grid_id_idx_for_year),
                                     index=year_idx)

# store consumption dataset
out_storage = StorageCreator().build_storage(type="flt", location=cache_directory)
consumption.write_dataset(attributes = consumption.get_known_attribute_names(),
                          out_storage=out_storage, out_table_name=consumption_type.lower())
import os
from numpy import where, zeros, arange
cache_directory = "D:/urbansim_cache/water_demand"
for year in arange(1991, 2001):
    print year
    flt_storage = StorageCreator().build_storage(type="flt",
                                                 location=os.path.join(
                                                     cache_directory,
                                                     str(year)))
    gridcells = GridcellDataset(in_storage=flt_storage)
    grid_id_idx = array(
        map(lambda x: gridcells.try_id_mapping(x, -1), consumption_grid_id))
    year_idx = where(years == year)[0]
    grid_id_idx_for_year = grid_id_idx[year_idx]
    for attr in gridcells.get_known_attribute_names():
        if attr not in consumption.get_known_attribute_names():
            ftype = gridcells.get_attribute(attr).type()
            consumption.add_attribute(name=attr,
                                      data=zeros(consumption.size(),
                                                 dtype=ftype))
        consumption.modify_attribute(name=attr,
                                     data=gridcells.get_attribute_by_index(
                                         attr, grid_id_idx_for_year),
                                     index=year_idx)

# store consumption dataset
out_storage = StorageCreator().build_storage(type="flt",
                                             location=cache_directory)
consumption.write_dataset(attributes=consumption.get_known_attribute_names(),
                          out_storage=out_storage,