Skip to content

Convert to Python3 #108

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
language: python
cache: pip
sudo: required
python:
- "2.7"
- "3.6"
- "3.7-dev" # 3.7 development branch
before_install:
- sudo apt-get -qq update
- sudo apt-get install -y gfortran
Expand Down
8 changes: 4 additions & 4 deletions carousel/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ def get_current_version(*args, **kwargs):
GIT_TAG = VERSION # if Git tag is none use version file
VERSION = GIT_TAG # version

__author__ = u'Mark Mikofski'
__email__ = u'mark.mikofski@sunpowercorp.com'
__url__ = u'https://github.com/SunPower/Carousel'
__author__ = 'Mark Mikofski'
__email__ = 'mark.mikofski@sunpowercorp.com'
__url__ = 'https://github.com/SunPower/Carousel'
__version__ = VERSION
__release__ = u'Caramel Corn'
__release__ = 'Caramel Corn'
6 changes: 3 additions & 3 deletions carousel/contrib/readers.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def load_data(self, *args, **kwargs):
# get positional argument names from parameters and apply them to args
# update data with additional kwargs
argpos = {
v['extras']['argpos']: k for k, v in self.parameters.iteritems()
v['extras']['argpos']: k for k, v in self.parameters.items()
if 'argpos' in v['extras']
}
data = dict(
Expand All @@ -85,7 +85,7 @@ def apply_units_to_cache(self, data):
:return: data with units applied
"""
# if units key exists then apply
for k, v in self.parameters.iteritems():
for k, v in self.parameters.items():
if v and v.get('units'):
data[k] = Q_(data[k], v.get('units'))
return data
Expand Down Expand Up @@ -145,7 +145,7 @@ class HDF5Reader(ArgumentReader):
def load_data(self, h5file, *args, **kwargs):
with h5py.File(h5file) as h5f:
h5data = dict.fromkeys(self.parameters)
for param, attrs in self.parameters.iteritems():
for param, attrs in self.parameters.items():
LOGGER.debug('parameter:\n%r', param)
node = attrs['extras']['node'] # full name of node
# composite datatype member
Expand Down
24 changes: 12 additions & 12 deletions carousel/contrib/tests/test_data_readers.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,18 @@
('DirectNormalRadiation', '<i8'),
('DryBulbTemperature', '<f8')]
H5TABLE = np.array(
[(0L, 0L, 15.200897216796875), (0L, 0L, 14.545711517333984),
(0L, 0L, 13.890524864196777), (0L, 0L, 13.540611267089844),
(0L, 0L, 13.190696716308594), (0L, 0L, 12.942743301391602),
(0L, 0L, 12.904003143310547), (115L, 566L, 14.073929786682129),
(329L, 809L, 15.947802543640137), (558L, 936L, 18.07691764831543),
(750L, 780L, 20.15163803100586), (500L, 197L, 20.636459350585938),
(510L, 147L, 21.00153350830078), (531L, 139L, 21.318157196044922),
(486L, 120L, 21.44940757751465), (437L, 130L, 21.36214256286621),
(311L, 80L, 21.034954071044922), (259L, 131L, 20.530967712402344),
(124L, 106L, 19.722484588623047), (4L, 0L, 18.716384887695312),
(0L, 0L, 17.36248207092285), (0L, 0L, 16.008577346801758),
(0L, 0L, 14.654674530029297), (0L, 0L, 13.30077075958252)],
[(0, 0, 15.200897216796875), (0, 0, 14.545711517333984),
(0, 0, 13.890524864196777), (0, 0, 13.540611267089844),
(0, 0, 13.190696716308594), (0, 0, 12.942743301391602),
(0, 0, 12.904003143310547), (115, 566, 14.073929786682129),
(329, 809, 15.947802543640137), (558, 936, 18.07691764831543),
(750, 780, 20.15163803100586), (500, 197, 20.636459350585938),
(510, 147, 21.00153350830078), (531, 139, 21.318157196044922),
(486, 120, 21.44940757751465), (437, 130, 21.36214256286621),
(311, 80, 21.034954071044922), (259, 131, 20.530967712402344),
(124, 106, 19.722484588623047), (4, 0, 18.716384887695312),
(0, 0, 17.36248207092285), (0, 0, 16.008577346801758),
(0, 0, 14.654674530029297), (0, 0, 13.30077075958252)],
dtype=H5DTYPE
)

Expand Down
30 changes: 15 additions & 15 deletions carousel/core/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,17 +116,17 @@ def register(self, newitems, *args, **kwargs):
:exc:`~carousel.core.exceptions.DuplicateRegItemError`,
:exc:`~carousel.core.exceptions.MismatchRegMetaKeysError`
"""
newkeys = newitems.viewkeys() # set of the new item keys
if any(self.viewkeys() & newkeys): # duplicates
raise DuplicateRegItemError(self.viewkeys() & newkeys)
newkeys = newitems.keys() # set of the new item keys
if any(self.keys() & newkeys): # duplicates
raise DuplicateRegItemError(self.keys() & newkeys)
self.update(newitems) # register new item
# update meta fields
kwargs.update(zip(self.meta_names, args))
for k, v in kwargs.iteritems():
kwargs.update(list(zip(self.meta_names, args)))
for k, v in kwargs.items():
meta = getattr(self, k) # get the meta attribute
if v:
if not v.viewkeys() <= newkeys:
raise MismatchRegMetaKeysError(newkeys - v.viewkeys())
if not v.keys() <= newkeys:
raise MismatchRegMetaKeysError(newkeys - v.keys())
meta.update(v) # register meta

def unregister(self, items):
Expand All @@ -137,7 +137,7 @@ def unregister(self, items):
"""
items = _listify(items)
# get all members of Registry except private, special or class
meta_names = (m for m in vars(self).iterkeys()
meta_names = (m for m in vars(self).keys()
if (not m.startswith('_') and m not in dir(Registry)))
# check that meta names matches
# FIXME: this is so lame. replace this with something more robust
Expand Down Expand Up @@ -178,7 +178,7 @@ def wrapper(origfcn):
@functools.wraps(origfcn)
def newfcn(*args, **kwargs):
argspec = getargspec(origfcn) # use ``inspect`` to get arg names
kwargs.update(zip(argspec.args, args)) # convert args to kw
kwargs.update(list(zip(argspec.args, args))) # convert args to kw
# loop over test args
for a in test_args:
# convert a if it's in args
Expand Down Expand Up @@ -323,15 +323,15 @@ def set_param_file_or_parameters(mcs, attr):
with open(param_file, 'r') as param_file:
file_params = json.load(param_file)
# update meta from file
for k, v in file_params.pop(mcs._meta_cls, {}).iteritems():
for k, v in file_params.pop(mcs._meta_cls, {}).items():
setattr(meta, k, v)
# dictionary of parameters for reading source file
attr[mcs._param_attr] = {
k: mcs._param_cls(**v) for k, v in file_params.iteritems()
k: mcs._param_cls(**v) for k, v in file_params.items()
}
# get parameters from class
parameters = dict.fromkeys(
k for k, v in attr.iteritems() if isinstance(v, Parameter)
k for k, v in attr.items() if isinstance(v, Parameter)
)
# update parameters
for k in parameters:
Expand All @@ -357,9 +357,9 @@ class Parameter(dict):
_attrs = []

def __init__(self, *args, **kwargs):
items = dict(zip(self._attrs, args))
items = dict(list(zip(self._attrs, args)))
extras = {}
for key, val in kwargs.iteritems():
for key, val in kwargs.items():
if key in self._attrs:
items[key] = val
else:
Expand All @@ -369,6 +369,6 @@ def __init__(self, *args, **kwargs):

def __repr__(self):
fmt = ('<%s(' % self.__class__.__name__)
fmt += ', '.join('%s=%r' % (k, v) for k, v in self.iteritems())
fmt += ', '.join('%s=%r' % (k, v) for k, v in self.items())
fmt += ')>'
return fmt
9 changes: 4 additions & 5 deletions carousel/core/calculations.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ def register(self, new_calc, *args, **kwargs):

:param new_calc: register new calculation
"""
kwargs.update(zip(self.meta_names, args))
kwargs.update(list(zip(self.meta_names, args)))
# dependencies should be a list of other calculations
if isinstance(kwargs['dependencies'], basestring):
if isinstance(kwargs['dependencies'], str):
kwargs['dependencies'] = [kwargs['dependencies']]
# call super method, now meta can be passed as args or kwargs.
super(CalcRegistry, self).register(new_calc, **kwargs)
Expand All @@ -76,11 +76,10 @@ def __new__(mcs, name, bases, attr):
return super(CalcBase, mcs).__new__(mcs, name, bases, attr)


class Calc(object):
class Calc(object, metaclass=CalcBase):
"""
A class for all calculations.
"""
__metaclass__ = CalcBase

def __init__(self):
meta = getattr(self, CalcBase._meta_attr)
Expand Down Expand Up @@ -108,7 +107,7 @@ def __init__(self):
)
#: calculations
self.calcs = {}
for k, v in parameters.iteritems():
for k, v in parameters.items():
self.calcs[k] = {
key: v[key] for key in ('formula', 'args', 'returns')
}
Expand Down
20 changes: 10 additions & 10 deletions carousel/core/calculators.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@ def index_registry(args, reg, ts=None, idx=None):
# into data, not necessary for outputs since that will conform to idx
rargs = dict.fromkeys(args) # make dictionary from arguments
# iterate over arguments
for k, v in args.iteritems():
for k, v in args.items():
# var ------------------ states ------------------
# idx ===== not None ===== ======= None =======
# isconstant True False None True False None
# is_dynamic no yes yes no no no
is_dynamic = idx and not reg.isconstant.get(v)
# switch based on string type instead of sequence
if isinstance(v, basestring):
if isinstance(v, str):
# the default assumes the current index
rargs[k] = reg[v][idx] if is_dynamic else reg[v]
elif len(v) < 3:
Expand Down Expand Up @@ -118,7 +118,7 @@ def get_covariance(datargs, outargs, vargs, datvar, outvar):
argn = len(vargs)
# number of observations must be the same for all vargs
nobs = 1
for m in xrange(argn):
for m in range(argn):
a = vargs[m]
try:
a = datargs[a]
Expand All @@ -127,7 +127,7 @@ def get_covariance(datargs, outargs, vargs, datvar, outvar):
avar = outvar[a]
else:
avar = datvar[a]
for n in xrange(argn):
for n in range(argn):
b = vargs[n]
try:
b = datargs[b]
Expand All @@ -141,7 +141,7 @@ def get_covariance(datargs, outargs, vargs, datvar, outvar):
# covariance matrix is initially zeros
cov = np.zeros((nobs, argn, argn))
# loop over arguments in both directions, fill in covariance
for m in xrange(argn):
for m in range(argn):
a = vargs[m]
try:
a = datargs[a]
Expand All @@ -150,7 +150,7 @@ def get_covariance(datargs, outargs, vargs, datvar, outvar):
avar = outvar[a]
else:
avar = datvar[a]
for n in xrange(argn):
for n in range(argn):
b = vargs[n]
try:
b = datargs[b]
Expand Down Expand Up @@ -218,18 +218,18 @@ def calculate(cls, calc, formula_reg, data_reg, out_reg,
) # use magnitudes if quantities
cov = (np.swapaxes((cov.T * scale), 0, 1) * scale).T
nret = len(retval) # number of return output
for m in xrange(nret):
for m in range(nret):
a = returns[m] # name in output registry
out_reg.variance[a] = {}
out_reg.uncertainty[a] = {}
out_reg.jacobian[a] = {}
for n in xrange(nret):
for n in range(nret):
b = returns[n]
out_reg.variance[a][b] = cov[:, m, n]
if a == b:
unc = np.sqrt(cov[:, m, n]) * 100 * UREG.percent
out_reg.uncertainty[a][b] = unc
for n in xrange(len(vargs)):
for n in range(len(vargs)):
b = vargs[n]
try:
b = datargs[b]
Expand All @@ -246,7 +246,7 @@ def calculate(cls, calc, formula_reg, data_reg, out_reg,
if len(returns) > 1:
# more than one return, zip them up
if idx is None:
out_reg.update(zip(returns, retval))
out_reg.update(list(zip(returns, retval)))
else:
for k, v in zip(returns, retval):
out_reg[k][idx] = v
Expand Down
Loading