id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 242495015,MDU6SXNzdWUyNDI0OTUwMTU=,1477,Dataset.rename shouldn't complain when the name-dict re-uses column names.,24376349,closed,0,,,3,2017-07-12T19:51:06Z,2017-07-16T04:12:47Z,2017-07-16T04:12:47Z,CONTRIBUTOR,,,,"Consider what happens when somebody does ds.rename({'a': 'b', 'b': 'a'}). The current rename code will throw an error even though this operation is completely well defined and the current rename implementation actually handles this case correctly (except for the bad sanity check). What this function should really check for is the there are no name collisions in the resulting dataset. Currently we have the following code (in: [dataset.py:1527](https://github.com/pydata/xarray/blob/master/xarray/core/dataset.py#L1527)): `if v in self and k != v` I propose that we replace it with `if name in variables` just before line 1541 with an appropriate throw. There is one problem that this can cause: right now, it is possible to overwrite variables silently. For example ds.rename({'a': 'd', 'b': 'd'}) will work and silently drop one of the columns (assuming 'd' doesn't exist in ds). My proposed changes will make the rename function throw in this case. I think the new behavior is ""more correct"" especially since the column dropped is pretty much random if the name_dict is a normal dictionary and the person can always use a del or something. However it is not backwards compatible which might be a concern. Thoughts? Thanks. -- PG PS. xarray is great. Thanks for writing it.","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/1477/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue