From 0ab968f7153a006ab0066e85473bbdfd0d5cbd2b Mon Sep 17 00:00:00 2001
From: Maximilian Roos <m@maxroos.com>
Date: Sat, 23 Nov 2019 00:52:48 -0500
Subject: [PATCH 1/3] replace duplicate method _from_vars_and_coord_names

---
 xarray/core/computation.py | 2 +-
 xarray/core/coordinates.py | 2 +-
 xarray/core/dataarray.py   | 6 ++----
 xarray/core/dataset.py     | 8 --------
 4 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/xarray/core/computation.py b/xarray/core/computation.py
index f8e4914e57b..643c1137d6c 100644
--- a/xarray/core/computation.py
+++ b/xarray/core/computation.py
@@ -342,7 +342,7 @@ def _fast_dataset(
 
     variables.update(coord_variables)
     coord_names = set(coord_variables)
-    return Dataset._from_vars_and_coord_names(variables, coord_names)
+    return Dataset._construct_direct(variables, coord_names)
 
 
 def apply_dataset_vfunc(
diff --git a/xarray/core/coordinates.py b/xarray/core/coordinates.py
index eb2ceb1be07..3d51c9b4271 100644
--- a/xarray/core/coordinates.py
+++ b/xarray/core/coordinates.py
@@ -309,7 +309,7 @@ def to_dataset(self) -> "Dataset":
         from .dataset import Dataset
 
         coords = {k: v.copy(deep=False) for k, v in self._data._coords.items()}
-        return Dataset._from_vars_and_coord_names(coords, set(coords))
+        return Dataset._construct_direct(coords, set(coords))
 
     def __delitem__(self, key: Hashable) -> None:
         del self._data._coords[key]
diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py
index 36452db8b7b..1b135a350d1 100644
--- a/xarray/core/dataarray.py
+++ b/xarray/core/dataarray.py
@@ -466,7 +466,7 @@ def subset(dim, label):
         variables.update({k: v for k, v in self._coords.items() if k != dim})
         indexes = propagate_indexes(self._indexes, exclude=dim)
         coord_names = set(self._coords) - set([dim])
-        dataset = Dataset._from_vars_and_coord_names(
+        dataset = Dataset._construct_direct(
             variables, coord_names, indexes=indexes, attrs=self.attrs
         )
         return dataset
@@ -496,9 +496,7 @@ def _to_dataset_whole(
         indexes = self._indexes
 
         coord_names = set(self._coords)
-        dataset = Dataset._from_vars_and_coord_names(
-            variables, coord_names, indexes=indexes
-        )
+        dataset = Dataset._construct_direct(variables, coord_names, indexes=indexes)
         return dataset
 
     def to_dataset(self, dim: Hashable = None, *, name: Hashable = None) -> Dataset:
diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py
index 089cda06b0d..fdddde773c1 100644
--- a/xarray/core/dataset.py
+++ b/xarray/core/dataset.py
@@ -877,14 +877,6 @@ def _construct_direct(
         obj._encoding = encoding
         return obj
 
-    @classmethod
-    def _from_vars_and_coord_names(
-        cls, variables, coord_names, indexes=None, attrs=None
-    ):
-        return cls._construct_direct(
-            variables, coord_names, indexes=indexes, attrs=attrs
-        )
-
     def _replace(
         self,
         variables: Dict[Hashable, Variable] = None,

From 2ef6dde297dfb6f85443cb3c7398925d7a9d596b Mon Sep 17 00:00:00 2001
From: Maximilian Roos <m@maxroos.com>
Date: Sat, 23 Nov 2019 02:06:02 -0500
Subject: [PATCH 2/3] drop_vars

---
 xarray/tests/test_dataarray.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xarray/tests/test_dataarray.py b/xarray/tests/test_dataarray.py
index b5397525a22..ad98792372e 100644
--- a/xarray/tests/test_dataarray.py
+++ b/xarray/tests/test_dataarray.py
@@ -1190,7 +1190,7 @@ def test_selection_multiindex_from_level(self):
         data = xr.concat([da, db], dim="x").set_index(xy=["x", "y"])
         assert data.dims == ("xy",)
         actual = data.sel(y="a")
-        expected = data.isel(xy=[0, 1]).unstack("xy").squeeze("y").drop("y")
+        expected = data.isel(xy=[0, 1]).unstack("xy").squeeze("y").drop_vars("y")
         assert_equal(actual, expected)
 
     def test_virtual_default_coords(self):

From 8c5e040bc331ce9ff654e34864d512dc3bc88521 Mon Sep 17 00:00:00 2001
From: Maximilian Roos <m@maxroos.com>
Date: Sat, 23 Nov 2019 15:03:18 -0500
Subject: [PATCH 3/3] whatsnew

---
 doc/whats-new.rst | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/doc/whats-new.rst b/doc/whats-new.rst
index f1c3f59d2e3..1d239e18fcd 100644
--- a/doc/whats-new.rst
+++ b/doc/whats-new.rst
@@ -50,6 +50,10 @@ Internal Changes
 ~~~~~~~~~~~~~~~~
 
 
+- Removed internal method ``Dataset._from_vars_and_coord_names``, 
+  which was dominated by ``Dataset._construct_direct``. (:pull:`3565`)
+  By `Maximilian Roos <https://github.com/max-sixty>`_
+
 
 v0.14.1 (19 Nov 2019)
 ---------------------