# Path: rvic/core/share.py
# FILLVALUE_F = default_fillvals[NC_DOUBLE]
# 
# Path: rvic/core/variables.py
# class Point(object):
#     '''
#     Creates a point class for intellegently storing coordinate information
#     '''
# 
#     def __init__(self, lat=-9999.9, lon=-9999.9, domx=-9999, domy=-9999,
#                  routx=-9999, routy=-9999, name=None, cell_id=-9999):
#         '''Defines x and y variables'''
#         self.lat = lat
#         self.lon = lon
#         self.domx = domx
#         self.domy = domy
#         self.routx = routx
#         self.routy = routy
#         self.cell_id = cell_id
# 
#         if name:
#             self.name = name
#         else:
#             self.name = 'outlet_{0:3.4f}_{1:3.4f}'.format(self.lat, self.lon)
# 
#         return
# 
#     def __str__(self):
#         return ('Point({0}, lat:{1:3.4f}, lon:{2:3.4f}, y:{3:d}, '
#                 'x:{4:d})'.format(self.name, self.lat, self.lon, self.domy,
#                                   self.domx))
# 
#     def __repr__(self):
#         return ('    -- Point --    \n'
#                 'name:\t{0}\n'
#                 'lat:\t{1:3.4f}\n'
#                 'lon:\t{2:3.4f}\n'
#                 'domy:\t{3:d}\n'
#                 'domx:\t{4:d}\n'
#                 'routy:\t{5:d}\n'
#                 'routx:\t{6:d}\n'.format(self.name, self.lat, self.lon,
#                                          self.domy, self.domx,
#                                          self.routy, self.routx))
# 
# Path: rvic/core/log.py
# LOG_NAME = 'rvic'
# 
# Path: rvic/core/pycompat.py
# def iteritems(d):
# def itervalues(d):
# def iteritems(d):
# def itervalues(d):


import numpy as np
from .share import FILLVALUE_F
from .utilities import find_nearest, latlon2yx
from .variables import Point
from logging import getLogger
from .log import LOG_NAME
from .pycompat import OrderedDict, iteritems, pyzip
    '''
    lons = pour_points['lons']
    lats = pour_points['lats']
    dom_lon = dom_data[config_dict['DOMAIN']['LONGITUDE_VAR']]
    dom_lat = dom_data[config_dict['DOMAIN']['LATITUDE_VAR']]
    dom_ids = dom_data['cell_ids']
    fdr_lons = fdr_data[config_dict['ROUTING']['LONGITUDE_VAR']]
    fdr_lats = fdr_data[config_dict['ROUTING']['LATITUDE_VAR']]
    fdr_srcarea = fdr_data[config_dict['ROUTING']['SOURCE_AREA_VAR']]

    # ---------------------------------------------------------------- #
    # Find Destination grid cells
    log.info('Finding addresses now...')
    routys, routxs = latlon2yx(plats=lats,
                               plons=lons,
                               glats=fdr_lats,
                               glons=fdr_lons)

    domys, domxs = latlon2yx(plats=lats,
                             plons=lons,
                             glats=dom_lat,
                             glons=dom_lon)
    # ---------------------------------------------------------------- #

    # ---------------------------------------------------------------- #
    # Do the aggregation
    outlets = OrderedDict()

    for i, (lat, lon) in enumerate(pyzip(lats, lons)):
        # Define pour point object

# Path: rvic/core/share.py
# FILLVALUE_F = default_fillvals[NC_DOUBLE]
# 
# Path: rvic/core/variables.py
# class Point(object):
#     '''
#     Creates a point class for intellegently storing coordinate information
#     '''
# 
#     def __init__(self, lat=-9999.9, lon=-9999.9, domx=-9999, domy=-9999,
#                  routx=-9999, routy=-9999, name=None, cell_id=-9999):
#         '''Defines x and y variables'''
#         self.lat = lat
#         self.lon = lon
#         self.domx = domx
#         self.domy = domy
#         self.routx = routx
#         self.routy = routy
#         self.cell_id = cell_id
# 
#         if name:
#             self.name = name
#         else:
#             self.name = 'outlet_{0:3.4f}_{1:3.4f}'.format(self.lat, self.lon)
# 
#         return
# 
#     def __str__(self):
#         return ('Point({0}, lat:{1:3.4f}, lon:{2:3.4f}, y:{3:d}, '
#                 'x:{4:d})'.format(self.name, self.lat, self.lon, self.domy,
#                                   self.domx))
# 
#     def __repr__(self):
#         return ('    -- Point --    \n'
#                 'name:\t{0}\n'
#                 'lat:\t{1:3.4f}\n'
#                 'lon:\t{2:3.4f}\n'
#                 'domy:\t{3:d}\n'
#                 'domx:\t{4:d}\n'
#                 'routy:\t{5:d}\n'
#                 'routx:\t{6:d}\n'.format(self.name, self.lat, self.lon,
#                                          self.domy, self.domx,
#                                          self.routy, self.routx))
# 
# Path: rvic/core/log.py
# LOG_NAME = 'rvic'
# 
# Path: rvic/core/pycompat.py
# def iteritems(d):
# def itervalues(d):
# def iteritems(d):
# def itervalues(d):


# Path: rvic/core/aggregate.py
import numpy as np
from .share import FILLVALUE_F
from .utilities import find_nearest, latlon2yx
from .variables import Point
from logging import getLogger
from .log import LOG_NAME
from .pycompat import OrderedDict, iteritems, pyzip

    '''
    lons = pour_points['lons']
    lats = pour_points['lats']
    dom_lon = dom_data[config_dict['DOMAIN']['LONGITUDE_VAR']]
    dom_lat = dom_data[config_dict['DOMAIN']['LATITUDE_VAR']]
    dom_ids = dom_data['cell_ids']
    fdr_lons = fdr_data[config_dict['ROUTING']['LONGITUDE_VAR']]
    fdr_lats = fdr_data[config_dict['ROUTING']['LATITUDE_VAR']]
    fdr_srcarea = fdr_data[config_dict['ROUTING']['SOURCE_AREA_VAR']]

    # ---------------------------------------------------------------- #
    # Find Destination grid cells
    log.info('Finding addresses now...')
    routys, routxs = latlon2yx(plats=lats,
                               plons=lons,
                               glats=fdr_lats,
                               glons=fdr_lons)

    domys, domxs = latlon2yx(plats=lats,
                             plons=lons,
                             glats=dom_lat,
                             glons=dom_lon)
    # ---------------------------------------------------------------- #

    # ---------------------------------------------------------------- #
    # Do the aggregation
    outlets = OrderedDict()

    for i, (lat, lon) in enumerate(pyzip(lats, lons)):
        # Define pour point object

        pour_point = Point(lat=lat,