Skip to content

Commit 1d7c0f6

Browse files
authored
Remove unvetted DataTree methods (#9585)
* Remove unvetted DataTree methods As [discussed](https://docs.google.com/presentation/d/1zBjEsihBhK_U972jxHwaAZBbzS1-hd3aDLnO9uu2Ob4/edit#slide=id.g3087b787633_13_0) in the last DataTree meeting, this PR deletes the many Dataset methods that were copied onto DataTree without unit tests, along with a few that are not implemented properly yet, e.g., 1. Arithmetic methods were removed, because `DataTree + Dataset` should probably raise an error. 2. Indexing and aggregation methods were removed, because these should allow for dimensions that are missing only on some nodes. 3. The untested `map_over_subtree_inplace` and `render` methods were removed. 3. A few other methods (e.g., `merge` and `plot`) that were only implemented by raising `NotImplementedError`` are entirely removed instead. * groups docstring * comment out removed DataTree methods * update quick overview on DataTree * doc fixes suggested by Tom
1 parent 64e60cf commit 1d7c0f6

File tree

4 files changed

+190
-228
lines changed

4 files changed

+190
-228
lines changed

doc/api.rst

+149-148
Original file line numberDiff line numberDiff line change
@@ -705,16 +705,16 @@ Pathlib-like Interface
705705
DataTree.parents
706706
DataTree.relative_to
707707

708-
Missing:
708+
.. Missing:
709709
710-
..
710+
.. ..
711711
712-
``DataTree.glob``
713-
``DataTree.joinpath``
714-
``DataTree.with_name``
715-
``DataTree.walk``
716-
``DataTree.rename``
717-
``DataTree.replace``
712+
.. ``DataTree.glob``
713+
.. ``DataTree.joinpath``
714+
.. ``DataTree.with_name``
715+
.. ``DataTree.walk``
716+
.. ``DataTree.rename``
717+
.. ``DataTree.replace``
718718
719719
DataTree Contents
720720
-----------------
@@ -725,17 +725,18 @@ Manipulate the contents of all nodes in a ``DataTree`` simultaneously.
725725
:toctree: generated/
726726

727727
DataTree.copy
728-
DataTree.assign_coords
729-
DataTree.merge
730-
DataTree.rename
731-
DataTree.rename_vars
732-
DataTree.rename_dims
733-
DataTree.swap_dims
734-
DataTree.expand_dims
735-
DataTree.drop_vars
736-
DataTree.drop_dims
737-
DataTree.set_coords
738-
DataTree.reset_coords
728+
729+
.. DataTree.assign_coords
730+
.. DataTree.merge
731+
.. DataTree.rename
732+
.. DataTree.rename_vars
733+
.. DataTree.rename_dims
734+
.. DataTree.swap_dims
735+
.. DataTree.expand_dims
736+
.. DataTree.drop_vars
737+
.. DataTree.drop_dims
738+
.. DataTree.set_coords
739+
.. DataTree.reset_coords
739740
740741
DataTree Node Contents
741742
----------------------
@@ -760,129 +761,129 @@ Compare one ``DataTree`` object to another.
760761
DataTree.equals
761762
DataTree.identical
762763

763-
Indexing
764-
--------
765-
766-
Index into all nodes in the subtree simultaneously.
767-
768-
.. autosummary::
769-
:toctree: generated/
770-
771-
DataTree.isel
772-
DataTree.sel
773-
DataTree.drop_sel
774-
DataTree.drop_isel
775-
DataTree.head
776-
DataTree.tail
777-
DataTree.thin
778-
DataTree.squeeze
779-
DataTree.interp
780-
DataTree.interp_like
781-
DataTree.reindex
782-
DataTree.reindex_like
783-
DataTree.set_index
784-
DataTree.reset_index
785-
DataTree.reorder_levels
786-
DataTree.query
787-
788-
..
789-
790-
Missing:
791-
``DataTree.loc``
792-
793-
794-
Missing Value Handling
795-
----------------------
796-
797-
.. autosummary::
798-
:toctree: generated/
799-
800-
DataTree.isnull
801-
DataTree.notnull
802-
DataTree.combine_first
803-
DataTree.dropna
804-
DataTree.fillna
805-
DataTree.ffill
806-
DataTree.bfill
807-
DataTree.interpolate_na
808-
DataTree.where
809-
DataTree.isin
810-
811-
Computation
812-
-----------
813-
814-
Apply a computation to the data in all nodes in the subtree simultaneously.
815-
816-
.. autosummary::
817-
:toctree: generated/
818-
819-
DataTree.map
820-
DataTree.reduce
821-
DataTree.diff
822-
DataTree.quantile
823-
DataTree.differentiate
824-
DataTree.integrate
825-
DataTree.map_blocks
826-
DataTree.polyfit
827-
DataTree.curvefit
828-
829-
Aggregation
830-
-----------
831-
832-
Aggregate data in all nodes in the subtree simultaneously.
833-
834-
.. autosummary::
835-
:toctree: generated/
836-
837-
DataTree.all
838-
DataTree.any
839-
DataTree.argmax
840-
DataTree.argmin
841-
DataTree.idxmax
842-
DataTree.idxmin
843-
DataTree.max
844-
DataTree.min
845-
DataTree.mean
846-
DataTree.median
847-
DataTree.prod
848-
DataTree.sum
849-
DataTree.std
850-
DataTree.var
851-
DataTree.cumsum
852-
DataTree.cumprod
853-
854-
ndarray methods
855-
---------------
856-
857-
Methods copied from :py:class:`numpy.ndarray` objects, here applying to the data in all nodes in the subtree.
858-
859-
.. autosummary::
860-
:toctree: generated/
861-
862-
DataTree.argsort
863-
DataTree.astype
864-
DataTree.clip
865-
DataTree.conj
866-
DataTree.conjugate
867-
DataTree.round
868-
DataTree.rank
869-
870-
Reshaping and reorganising
871-
--------------------------
872-
873-
Reshape or reorganise the data in all nodes in the subtree.
874-
875-
.. autosummary::
876-
:toctree: generated/
877-
878-
DataTree.transpose
879-
DataTree.stack
880-
DataTree.unstack
881-
DataTree.shift
882-
DataTree.roll
883-
DataTree.pad
884-
DataTree.sortby
885-
DataTree.broadcast_like
764+
.. Indexing
765+
.. --------
766+
767+
.. Index into all nodes in the subtree simultaneously.
768+
769+
.. .. autosummary::
770+
.. :toctree: generated/
771+
772+
.. DataTree.isel
773+
.. DataTree.sel
774+
.. DataTree.drop_sel
775+
.. DataTree.drop_isel
776+
.. DataTree.head
777+
.. DataTree.tail
778+
.. DataTree.thin
779+
.. DataTree.squeeze
780+
.. DataTree.interp
781+
.. DataTree.interp_like
782+
.. DataTree.reindex
783+
.. DataTree.reindex_like
784+
.. DataTree.set_index
785+
.. DataTree.reset_index
786+
.. DataTree.reorder_levels
787+
.. DataTree.query
788+
789+
.. ..
790+
791+
.. Missing:
792+
.. ``DataTree.loc``
793+
794+
795+
.. Missing Value Handling
796+
.. ----------------------
797+
798+
.. .. autosummary::
799+
.. :toctree: generated/
800+
801+
.. DataTree.isnull
802+
.. DataTree.notnull
803+
.. DataTree.combine_first
804+
.. DataTree.dropna
805+
.. DataTree.fillna
806+
.. DataTree.ffill
807+
.. DataTree.bfill
808+
.. DataTree.interpolate_na
809+
.. DataTree.where
810+
.. DataTree.isin
811+
812+
.. Computation
813+
.. -----------
814+
815+
.. Apply a computation to the data in all nodes in the subtree simultaneously.
816+
817+
.. .. autosummary::
818+
.. :toctree: generated/
819+
820+
.. DataTree.map
821+
.. DataTree.reduce
822+
.. DataTree.diff
823+
.. DataTree.quantile
824+
.. DataTree.differentiate
825+
.. DataTree.integrate
826+
.. DataTree.map_blocks
827+
.. DataTree.polyfit
828+
.. DataTree.curvefit
829+
830+
.. Aggregation
831+
.. -----------
832+
833+
.. Aggregate data in all nodes in the subtree simultaneously.
834+
835+
.. .. autosummary::
836+
.. :toctree: generated/
837+
838+
.. DataTree.all
839+
.. DataTree.any
840+
.. DataTree.argmax
841+
.. DataTree.argmin
842+
.. DataTree.idxmax
843+
.. DataTree.idxmin
844+
.. DataTree.max
845+
.. DataTree.min
846+
.. DataTree.mean
847+
.. DataTree.median
848+
.. DataTree.prod
849+
.. DataTree.sum
850+
.. DataTree.std
851+
.. DataTree.var
852+
.. DataTree.cumsum
853+
.. DataTree.cumprod
854+
855+
.. ndarray methods
856+
.. ---------------
857+
858+
.. Methods copied from :py:class:`numpy.ndarray` objects, here applying to the data in all nodes in the subtree.
859+
860+
.. .. autosummary::
861+
.. :toctree: generated/
862+
863+
.. DataTree.argsort
864+
.. DataTree.astype
865+
.. DataTree.clip
866+
.. DataTree.conj
867+
.. DataTree.conjugate
868+
.. DataTree.round
869+
.. DataTree.rank
870+
871+
.. Reshaping and reorganising
872+
.. --------------------------
873+
874+
.. Reshape or reorganise the data in all nodes in the subtree.
875+
876+
.. .. autosummary::
877+
.. :toctree: generated/
878+
879+
.. DataTree.transpose
880+
.. DataTree.stack
881+
.. DataTree.unstack
882+
.. DataTree.shift
883+
.. DataTree.roll
884+
.. DataTree.pad
885+
.. DataTree.sortby
886+
.. DataTree.broadcast_like
886887
887888
IO / Conversion
888889
===============
@@ -961,10 +962,10 @@ DataTree methods
961962
DataTree.to_netcdf
962963
DataTree.to_zarr
963964

964-
..
965+
.. ..
965966
966-
Missing:
967-
``open_mfdatatree``
967+
.. Missing:
968+
.. ``open_mfdatatree``
968969
969970
Coordinates objects
970971
===================
@@ -1476,10 +1477,10 @@ Advanced API
14761477
backends.list_engines
14771478
backends.refresh_engines
14781479

1479-
..
1480+
.. ..
14801481
1481-
Missing:
1482-
``DataTree.set_close``
1482+
.. Missing:
1483+
.. ``DataTree.set_close``
14831484
14841485
Default, pandas-backed indexes built-in Xarray:
14851486

doc/getting-started-guide/quick-overview.rst

+16-10
Original file line numberDiff line numberDiff line change
@@ -314,23 +314,29 @@ And you can get a copy of just the node local values of :py:class:`~xarray.Datas
314314
ds_node_local = dt["simulation/coarse"].to_dataset(inherited=False)
315315
ds_node_local
316316
317-
Operations map over subtrees, so we can take a mean over the ``x`` dimension of both the ``fine`` and ``coarse`` groups just by:
317+
.. note::
318318

319-
.. ipython:: python
319+
We intend to eventually implement most :py:class:`~xarray.Dataset` methods
320+
(indexing, aggregation, arithmetic, etc) on :py:class:`~xarray.DataTree`
321+
objects, but many methods have not been implemented yet.
320322

321-
avg = dt["simulation"].mean(dim="x")
322-
avg
323+
.. Operations map over subtrees, so we can take a mean over the ``x`` dimension of both the ``fine`` and ``coarse`` groups just by:
323324
324-
Here the ``"x"`` dimension used is always the one local to that subgroup.
325+
.. .. ipython:: python
325326
327+
.. avg = dt["simulation"].mean(dim="x")
328+
.. avg
326329
327-
You can do almost everything you can do with :py:class:`~xarray.Dataset` objects with :py:class:`~xarray.DataTree` objects
328-
(including indexing and arithmetic), as operations will be mapped over every subgroup in the tree.
329-
This allows you to work with multiple groups of non-alignable variables at once.
330+
.. Here the ``"x"`` dimension used is always the one local to that subgroup.
330331
331-
.. note::
332332
333-
If all of your variables are mutually alignable (i.e. they live on the same
333+
.. You can do almost everything you can do with :py:class:`~xarray.Dataset` objects with :py:class:`~xarray.DataTree` objects
334+
.. (including indexing and arithmetic), as operations will be mapped over every subgroup in the tree.
335+
.. This allows you to work with multiple groups of non-alignable variables at once.
336+
337+
.. tip::
338+
339+
If all of your variables are mutually alignable (i.e., they live on the same
334340
grid, such that every common dimension name maps to the same length), then
335341
you probably don't need :py:class:`xarray.DataTree`, and should consider
336342
just sticking with :py:class:`xarray.Dataset`.

0 commit comments

Comments
 (0)