Skip to content
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

Python3.6 idioms #3419

Merged
merged 6 commits into from
Oct 21, 2019
Merged
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
1 change: 0 additions & 1 deletion doc/gallery/plot_cartopy_facetgrid.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
"""
==================================
Multiple plots and map projections
Expand Down
1 change: 0 additions & 1 deletion doc/gallery/plot_colorbar_center.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
"""
==================
Centered colormaps
Expand Down
1 change: 0 additions & 1 deletion doc/gallery/plot_control_colorbar.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
"""
===========================
Control the plot's colorbar
Expand Down
1 change: 0 additions & 1 deletion doc/gallery/plot_lines_from_2d.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
"""
==================================
Multiple lines from a 2d DataArray
Expand Down
1 change: 0 additions & 1 deletion doc/gallery/plot_rasterio.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
"""
.. _recipes.rasterio:

Expand Down
1 change: 0 additions & 1 deletion doc/gallery/plot_rasterio_rgb.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
"""
.. _recipes.rasterio_rgb:

Expand Down
7 changes: 3 additions & 4 deletions xarray/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=
return None, None
else:
if verbose:
print("unable to find command, tried %s" % (commands,))
print(f"unable to find command, tried {commands}")
return None, None
stdout = p.communicate()[0].strip()
if sys.version_info[0] >= 3:
Expand Down Expand Up @@ -302,9 +302,8 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
if verbose:
fmt = "tag '%s' doesn't start with prefix '%s'"
print(fmt % (full_tag, tag_prefix))
pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % (
full_tag,
tag_prefix,
pieces["error"] = "tag '{}' doesn't start with prefix '{}'".format(
full_tag, tag_prefix
)
return pieces
pieces["closest-tag"] = full_tag[len(tag_prefix) :]
Expand Down
6 changes: 2 additions & 4 deletions xarray/backends/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,7 @@ def open_mfdataset(
autoclose=None,
parallel=False,
join="outer",
**kwargs
**kwargs,
):
"""Open multiple files as a single dataset.

Expand Down Expand Up @@ -1258,9 +1258,7 @@ def _validate_append_dim_and_encoding(
return
if append_dim:
if append_dim not in ds.dims:
raise ValueError(
"{} not a valid dimension in the Dataset".format(append_dim)
)
raise ValueError(f"{append_dim} not a valid dimension in the Dataset")
for data_var in ds_to_append:
if data_var in ds:
if append_dim is None:
Expand Down
4 changes: 2 additions & 2 deletions xarray/backends/file_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def __init__(
kwargs=None,
lock=None,
cache=None,
ref_counts=None
ref_counts=None,
):
"""Initialize a FileManager.

Expand Down Expand Up @@ -267,7 +267,7 @@ def __setstate__(self, state):
def __repr__(self):
args_string = ", ".join(map(repr, self._args))
if self._mode is not _DEFAULT_MODE:
args_string += ", mode={!r}".format(self._mode)
args_string += f", mode={self._mode!r}"
return "{}({!r}, {}, kwargs={})".format(
type(self).__name__, self._opener, args_string, self._kwargs
)
Expand Down
2 changes: 1 addition & 1 deletion xarray/backends/netCDF4_.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ def _nc4_dtype(var):
elif var.dtype.kind in ["i", "u", "f", "c", "S"]:
dtype = var.dtype
else:
raise ValueError("unsupported dtype for netCDF4 variable: {}".format(var.dtype))
raise ValueError(f"unsupported dtype for netCDF4 variable: {var.dtype}")
return dtype


Expand Down
2 changes: 1 addition & 1 deletion xarray/backends/netcdf3.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def coerce_nc3_dtype(arr):
cast_arr = arr.astype(new_dtype)
if not (cast_arr == arr).all():
raise ValueError(
"could not safely cast array from dtype %s to %s" % (dtype, new_dtype)
f"could not safely cast array from dtype {dtype} to {new_dtype}"
)
arr = cast_arr
return arr
Expand Down
2 changes: 1 addition & 1 deletion xarray/backends/pydap_.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def _fix_attributes(attributes):
# dot-separated key
attributes.update(
{
"{}.{}".format(k, k_child): v_child
f"{k}.{k_child}": v_child
for k_child, v_child in attributes.pop(k).items()
}
)
Expand Down
10 changes: 3 additions & 7 deletions xarray/coding/cftime_offsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,7 @@ def __apply__(self, other):


_FREQUENCY_CONDITION = "|".join(_FREQUENCIES.keys())
_PATTERN = r"^((?P<multiple>\d+)|())(?P<freq>({}))$".format(_FREQUENCY_CONDITION)
_PATTERN = fr"^((?P<multiple>\d+)|())(?P<freq>({_FREQUENCY_CONDITION}))$"


# pandas defines these offsets as "Tick" objects, which for instance have
Expand Down Expand Up @@ -759,19 +759,15 @@ def _generate_range(start, end, periods, offset):

next_date = current + offset
if next_date <= current:
raise ValueError(
"Offset {offset} did not increment date".format(offset=offset)
)
raise ValueError(f"Offset {offset} did not increment date")
current = next_date
else:
while current >= end:
yield current

next_date = current + offset
if next_date >= current:
raise ValueError(
"Offset {offset} did not decrement date".format(offset=offset)
)
raise ValueError(f"Offset {offset} did not decrement date")
current = next_date


Expand Down
2 changes: 1 addition & 1 deletion xarray/coding/cftimeindex.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ def shift(self, n, freq):
from .cftime_offsets import to_offset

if not isinstance(n, int):
raise TypeError("'n' must be an int, got {}.".format(n))
raise TypeError(f"'n' must be an int, got {n}.")
if isinstance(freq, timedelta):
return self + n * freq
elif isinstance(freq, str):
Expand Down
2 changes: 1 addition & 1 deletion xarray/coding/strings.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ def shape(self):
return self.array.shape[:-1]

def __repr__(self):
return "%s(%r)" % (type(self).__name__, self.array)
return "{}({!r})".format(type(self).__name__, self.array)

def __getitem__(self, key):
# require slicing the last dimension completely
Expand Down
4 changes: 2 additions & 2 deletions xarray/coding/times.py
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ def infer_datetime_units(dates):
# NumPy casting bug: https://github.com/numpy/numpy/issues/11096
unique_timedeltas = to_timedelta_unboxed(unique_timedeltas)
units = _infer_time_units_from_diff(unique_timedeltas)
return "%s since %s" % (units, reference_date)
return f"{units} since {reference_date}"


def format_cftime_datetime(date):
Expand Down Expand Up @@ -341,7 +341,7 @@ def cftime_to_nptime(times):
def _cleanup_netcdf_time_units(units):
delta, ref_date = _unpack_netcdf_time_units(units)
try:
units = "%s since %s" % (delta, format_timestamp(ref_date))
units = "{} since {}".format(delta, format_timestamp(ref_date))
except OutOfBoundsDatetime:
# don't worry about reifying the units if they're out of bounds
pass
Expand Down
9 changes: 3 additions & 6 deletions xarray/coding/variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,8 @@ def __array__(self, dtype=None):
return self.func(self.array)

def __repr__(self):
return "%s(%r, func=%r, dtype=%r)" % (
type(self).__name__,
self.array,
self.func,
self.dtype,
return "{}({!r}, func={!r}, dtype={!r})".format(
type(self).__name__, self.array, self.func, self.dtype
)


Expand Down Expand Up @@ -113,7 +110,7 @@ def unpack_for_decoding(var):

def safe_setitem(dest, key, value, name=None):
if key in dest:
var_str = " on variable {!r}".format(name) if name else ""
var_str = f" on variable {name!r}" if name else ""
raise ValueError(
"failed to prevent overwriting existing key {} in attrs{}. "
"This is probably an encoding field used by xarray to describe "
Expand Down
14 changes: 6 additions & 8 deletions xarray/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,16 +229,14 @@ def _iris_cell_methods_to_str(cell_methods_obj):
"""
cell_methods = []
for cell_method in cell_methods_obj:
names = "".join(["{}: ".format(n) for n in cell_method.coord_names])
names = "".join([f"{n}: " for n in cell_method.coord_names])
intervals = " ".join(
["interval: {}".format(interval) for interval in cell_method.intervals]
)
comments = " ".join(
["comment: {}".format(comment) for comment in cell_method.comments]
[f"interval: {interval}" for interval in cell_method.intervals]
)
comments = " ".join([f"comment: {comment}" for comment in cell_method.comments])
extra = " ".join([intervals, comments]).strip()
if extra:
extra = " ({})".format(extra)
extra = f" ({extra})"
cell_methods.append(names + cell_method.method + extra)
return " ".join(cell_methods)

Expand Down Expand Up @@ -267,11 +265,11 @@ def from_iris(cube):
dim_coord = cube.coord(dim_coords=True, dimensions=(i,))
dims.append(_name(dim_coord))
except iris.exceptions.CoordinateNotFoundError:
dims.append("dim_{}".format(i))
dims.append(f"dim_{i}")

if len(set(dims)) != len(dims):
duplicates = [k for k, v in Counter(dims).items() if v > 1]
raise ValueError("Duplicate coordinate name {}.".format(duplicates))
raise ValueError(f"Duplicate coordinate name {duplicates}.")

coords = {}

Expand Down
8 changes: 3 additions & 5 deletions xarray/core/alignment.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def align(
copy=True,
indexes=None,
exclude=frozenset(),
fill_value=dtypes.NA
fill_value=dtypes.NA,
):
"""
Given any number of Dataset and/or DataArray objects, returns new
Expand Down Expand Up @@ -294,9 +294,7 @@ def align(
or dim in unlabeled_dim_sizes
):
if join == "exact":
raise ValueError(
"indexes along dimension {!r} are not equal".format(dim)
)
raise ValueError(f"indexes along dimension {dim!r} are not equal")
index = joiner(matching_indexes)
joined_indexes[dim] = index
else:
Expand Down Expand Up @@ -402,7 +400,7 @@ def is_alignable(obj):
copy=copy,
indexes=indexes,
exclude=exclude,
fill_value=fill_value
fill_value=fill_value,
)

for position, key, aligned_obj in zip(positions, keys, aligned):
Expand Down
20 changes: 11 additions & 9 deletions xarray/core/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def wrapped_func(self, dim=None, skipna=None, **kwargs):
skipna=skipna,
numeric_only=numeric_only,
allow_lazy=True,
**kwargs
**kwargs,
)

else:
Expand Down Expand Up @@ -167,7 +167,7 @@ def _get_axis_num(self: Any, dim: Hashable) -> int:
try:
return self.dims.index(dim)
except ValueError:
raise ValueError("%r not found in array dimensions %r" % (dim, self.dims))
raise ValueError(f"{dim!r} not found in array dimensions {self.dims!r}")

@property
def sizes(self: Any) -> Mapping[Hashable, int]:
Expand Down Expand Up @@ -225,7 +225,7 @@ def __getattr__(self, name: str) -> Any:
with suppress(KeyError):
return source[name]
raise AttributeError(
"%r object has no attribute %r" % (type(self).__name__, name)
"{!r} object has no attribute {!r}".format(type(self).__name__, name)
)

# This complicated two-method design boosts overall performance of simple operations
Expand Down Expand Up @@ -258,7 +258,9 @@ def __setattr__(self, name: str, value: Any) -> None:
except AttributeError as e:
# Don't accidentally shadow custom AttributeErrors, e.g.
# DataArray.dims.setter
if str(e) != "%r object has no attribute %r" % (type(self).__name__, name):
if str(e) != "{!r} object has no attribute {!r}".format(
type(self).__name__, name
):
raise
raise AttributeError(
"cannot set attribute %r on a %r object. Use __setitem__ style"
Expand Down Expand Up @@ -479,7 +481,7 @@ def pipe(
self,
func: Union[Callable[..., T], Tuple[Callable[..., T], str]],
*args,
**kwargs
**kwargs,
) -> T:
"""
Apply func(self, *args, **kwargs)
Expand Down Expand Up @@ -735,7 +737,7 @@ def rolling(
dim: Mapping[Hashable, int] = None,
min_periods: int = None,
center: bool = False,
**window_kwargs: int
**window_kwargs: int,
):
"""
Rolling window object.
Expand Down Expand Up @@ -799,7 +801,7 @@ def rolling_exp(
self,
window: Mapping[Hashable, int] = None,
window_type: str = "span",
**window_kwargs
**window_kwargs,
):
"""
Exponentially-weighted moving window.
Expand Down Expand Up @@ -840,7 +842,7 @@ def coarsen(
boundary: str = "exact",
side: Union[str, Mapping[Hashable, str]] = "left",
coord_func: str = "mean",
**window_kwargs: int
**window_kwargs: int,
):
"""
Coarsen object.
Expand Down Expand Up @@ -910,7 +912,7 @@ def resample(
keep_attrs: bool = None,
loffset=None,
restore_coord_dims: bool = None,
**indexer_kwargs: str
**indexer_kwargs: str,
):
"""Returns a Resample object for performing resampling operations.

Expand Down
Loading