Skip to content

Commit 0593fd9

Browse files
committed
implemented AxisCollection.rename
1 parent 57fef5a commit 0593fd9

File tree

4 files changed

+64
-13
lines changed

4 files changed

+64
-13
lines changed

doc/source/api.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ Modifying/Selecting
200200
AxisCollection.append
201201
AxisCollection.extend
202202
AxisCollection.insert
203+
AxisCollection.rename
203204
AxisCollection.replace
204205
AxisCollection.without
205206
AxisCollection.combine_axes

doc/source/changes/version_0_30.rst.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ New features
129129
* implemented :py:obj:`wrap_elementwise_array_func()` function to make a function defined in another library work with
130130
LArray arguments instead of with numpy arrays.
131131

132+
* implemented :py:obj:`AxisCollection.rename()` to rename axes of an AxisCollection, independently of any array.
132133

133134
Miscellaneous improvements
134135
^^^^^^^^^^^^^^^^^^^^^^^^^^

larray/core/array.py

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,7 +1291,6 @@ def __bool__(self):
12911291
# Python 2
12921292
__nonzero__ = __bool__
12931293

1294-
# TODO: this should be a thin wrapper around a method in AxisCollection
12951294
# TODO: either support a list (of axes names) as first argument here (and set_labels)
12961295
# or don't support that in set_axes
12971296
def rename(self, renames=None, to=None, inplace=False, **kwargs):
@@ -1341,18 +1340,7 @@ def rename(self, renames=None, to=None, inplace=False, **kwargs):
13411340
BE 0 1
13421341
FO 2 3
13431342
"""
1344-
if isinstance(renames, dict):
1345-
items = list(renames.items())
1346-
elif isinstance(renames, list):
1347-
items = renames[:]
1348-
elif isinstance(renames, (str, Axis, int)):
1349-
items = [(renames, to)]
1350-
else:
1351-
items = []
1352-
items += kwargs.items()
1353-
renames = {self.axes[k]: v for k, v in items}
1354-
axes = AxisCollection([a.rename(renames[a]) if a in renames else a
1355-
for a in self.axes])
1343+
axes = self.axes.rename(renames, to, **kwargs)
13561344
if inplace:
13571345
self.axes = axes
13581346
return self

larray/core/axis.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2078,6 +2078,67 @@ def copy(self):
20782078
"""
20792079
return self[:]
20802080

2081+
def rename(self, renames=None, to=None, **kwargs):
2082+
r"""Renames axes of the collection.
2083+
2084+
Parameters
2085+
----------
2086+
renames : axis ref or dict {axis ref: str} or list of tuple (axis ref, str), optional
2087+
Renames to apply. If a single axis reference is given, the `to` argument must be used.
2088+
to : str or Axis, optional
2089+
New name if `renames` contains a single axis reference.
2090+
**kwargs : str or Axis
2091+
New name for each axis given as a keyword argument.
2092+
2093+
Returns
2094+
-------
2095+
AxisCollection
2096+
collection with axes renamed.
2097+
2098+
Examples
2099+
--------
2100+
>>> nat = Axis('nat=BE,FO')
2101+
>>> sex = Axis('sex=M,F')
2102+
>>> axes = AxisCollection([nat, sex])
2103+
>>> axes
2104+
AxisCollection([
2105+
Axis(['BE', 'FO'], 'nat'),
2106+
Axis(['M', 'F'], 'sex')
2107+
])
2108+
>>> axes.rename(nat, 'nat2')
2109+
AxisCollection([
2110+
Axis(['BE', 'FO'], 'nat2'),
2111+
Axis(['M', 'F'], 'sex')
2112+
])
2113+
>>> axes.rename(nat='nat2', sex='sex2')
2114+
AxisCollection([
2115+
Axis(['BE', 'FO'], 'nat2'),
2116+
Axis(['M', 'F'], 'sex2')
2117+
])
2118+
>>> axes.rename([('nat', 'nat2'), ('sex', 'sex2')])
2119+
AxisCollection([
2120+
Axis(['BE', 'FO'], 'nat2'),
2121+
Axis(['M', 'F'], 'sex2')
2122+
])
2123+
>>> axes.rename({'nat': 'nat2', 'sex': 'sex2'})
2124+
AxisCollection([
2125+
Axis(['BE', 'FO'], 'nat2'),
2126+
Axis(['M', 'F'], 'sex2')
2127+
])
2128+
"""
2129+
if isinstance(renames, dict):
2130+
items = list(renames.items())
2131+
elif isinstance(renames, list):
2132+
items = renames[:]
2133+
elif isinstance(renames, (str, Axis, int)):
2134+
items = [(renames, to)]
2135+
else:
2136+
items = []
2137+
items += kwargs.items()
2138+
renames = {self[k]: v for k, v in items}
2139+
return AxisCollection([a.rename(renames[a]) if a in renames else a
2140+
for a in self])
2141+
20812142
# XXX: what's the point in supporting a list of Axis or AxisCollection in axes_to_replace?
20822143
# it is used in LArray.set_axes but if it is only there, shouldn't the support for that be
20832144
# moved there?

0 commit comments

Comments
 (0)