@@ -663,8 +663,7 @@ def to_pandas(self) -> pd.DataFrame:
663663 def to_dataset (
664664 self ,
665665 dims : list [str ] | None = None ,
666- template : xr .Dataset | None = None ,
667- template_table : str | None = None ,
666+ template : xr .Dataset | str | None = None ,
668667 sparsity : Sparsity = "result" ,
669668 fill_value : Any = np .nan ,
670669 chunks : Mapping [str , int ] | str | None = "inherit" ,
@@ -677,10 +676,11 @@ def to_dataset(
677676 referenced by the SQL ``FROM`` clause (if exactly one
678677 matches), or any single registered Dataset whose dims are
679678 all present in the result columns.
680- template: Source ``xr.Dataset`` to recover metadata from.
681- Overrides any auto-resolved template.
682- template_table: Name of a registered table to use as the
683- template. Mutually exclusive with ``template``.
679+ template: Source to recover metadata (attrs, encoding, non-dim
680+ coordinates, dim-coord dtype) from. Either an ``xr.Dataset``
681+ used directly, or the name of a registered table (e.g.
682+ ``"era5.surface"``) whose Dataset is looked up. When ``None``
683+ and exactly one Dataset is registered, that one is used.
684684 sparsity: ``"result"`` (default) keeps only dim values
685685 present in the result. ``"template"`` reindexes to the
686686 template's full coord ranges, filling absent cells with
@@ -715,15 +715,13 @@ def to_dataset(
715715 Raises:
716716 ValueError: ``dims`` cannot be inferred, names a missing
717717 column, or the result has duplicate dim tuples;
718- ``template_table`` is unknown; both ``template`` and
719- ``template_table`` are passed; or
718+ ``template`` names an unknown registered table; or
720719 ``sparsity="template"`` is requested without a
721720 resolvable template.
722721 """
723- if template is not None and template_table is not None :
724- raise ValueError ("Pass at most one of template= or template_table=" )
725- if template is None :
726- template = self ._resolve_template (template_table )
722+ if not isinstance (template , xr .Dataset ):
723+ # ``template`` is a registered-table name or None; look it up.
724+ template = self ._resolve_template (template )
727725 if dims is None :
728726 dims = self ._infer_dimension_columns (preferred_template = template )
729727 resolved_chunks = self ._resolve_chunks (chunks , template , dims )
@@ -770,25 +768,22 @@ def _resolve_chunks(
770768 return inherited or None
771769 return chunks
772770
773- def _resolve_template (
774- self , template_table : str | None
775- ) -> xr .Dataset | None :
776- """Pick a template Dataset for metadata recovery.
771+ def _resolve_template (self , name : str | None ) -> xr .Dataset | None :
772+ """Pick a template Dataset for metadata recovery by registered name.
777773
778774 Priority:
779- 1. Explicit ``template_table`` argument .
775+ 1. The named registered table (``name``) .
780776 2. If exactly one Dataset is registered on the context, use it.
781777 3. None.
782778 """
783779 templates = self ._templates
784- if template_table is not None :
785- if template_table not in templates :
780+ if name is not None :
781+ if name not in templates :
786782 raise ValueError (
787- f"template_table={ template_table !r} is not a "
788- "registered table on this context. Registered: "
789- f"{ list (templates )} "
783+ f"template={ name !r} is not a registered table on this "
784+ f"context. Registered: { list (templates )} "
790785 )
791- return templates [template_table ]
786+ return templates [name ]
792787 if len (templates ) == 1 :
793788 return next (iter (templates .values ()))
794789 return None
0 commit comments