
    d$                        d Z ddlZdZdZdZdZdZdZd	Zd
Z	dZ
dZdZdZdZdZdZddiZddiZdZdZdZdZdZdZdZdZdZdZd Zd7d Zd! Zi Z  ee           e            z    ed"          z   e d#<    ee           e            z    ed$          z   e d%<    ee           e            z    ed&          z   e d'<    ee          e d(<    ee          e d)<   d*Z!d+Z"d,Z#d-Z$d. Z%d/ Z&e'd0k    rs e(ej)                  d1k    rej)        d2         *                                ndZ+e+d3vr e,d4ej)        d          d5          e+d6k    Z- e%e e-          D ]Z. e/e.           dS dS )8a  Generate module and stub file for arithmetic operators of various xarray classes.

For internal xarray development use only.

Usage:
    python xarray/util/generate_ops.py --module > xarray/core/_typed_ops.py
    python xarray/util/generate_ops.py --stubs > xarray/core/_typed_ops.pyi

    N))__eq__znputils.array_eq)__ne__znputils.array_ne))__lt__zoperator.lt)__le__zoperator.le)__gt__zoperator.gt)__ge__zoperator.ge))__add__operator.add)__sub__operator.sub)__mul__operator.mul)__pow__operator.pow)__truediv__operator.truediv)__floordiv__operator.floordiv)__mod__operator.mod)__and__operator.and_)__xor__operator.xor)__or__operator.or_)
__lshift__zoperator.lshift)
__rshift__zoperator.rshift)
)__radd__r
   )__rsub__r   )__rmul__r   )__rpow__r   )__rtruediv__r   )__rfloordiv__r   )__rmod__r   )__rand__r   )__rxor__r   )__ror__r   ))__iadd__zoperator.iadd)__isub__zoperator.isub)__imul__zoperator.imul)__ipow__zoperator.ipow)__itruediv__zoperator.itruediv)__ifloordiv__zoperator.ifloordiv)__imod__zoperator.imod)__iand__zoperator.iand)__ixor__zoperator.ixor)__ior__zoperator.ior)__ilshift__zoperator.ilshift)__irshift__zoperator.irshift))__neg__zoperator.neg)__pos__zoperator.pos)__abs__zoperator.abs)
__invert__zoperator.invert))roundz
ops.round_)argsortzops.argsort)conjzops.conj)	conjugatezops.conjugatezM
    def {method}(self, other):
        return self._binary_op(other, {func})z]
    def {method}(self, other):
        return self._binary_op(other, {func}, reflexive=True)zU
    def {method}(self, other):
        return self._inplace_binary_op(other, {func})z>
    def {method}(self):
        return self._unary_op({func})z`
    def {method}(self, *args, **kwargs):
        return self._unary_op({func}, *args, **kwargs)zO
    def _unary_op(self, f, *args, **kwargs):
        raise NotImplementedErrorzW
    def _binary_op(self, other, f, reflexive=False):
        raise NotImplementedErrorzN
    def _inplace_binary_op(self, other, f):
        raise NotImplementedErroroverridez  # type: ignore[override] zR    def {method}(self: T_Dataset, other: DsCompatible) -> T_Dataset: ...{override}z    @overload{override}
    def {method}(self, other: T_Dataset) -> T_Dataset: ...
    @overload
    def {method}(self, other: "DatasetGroupBy") -> "Dataset": ...
    @overload
    def {method}(self: T_DataArray, other: DaCompatible) -> T_DataArray: ...z    @overload{override}
    def {method}(self, other: T_Dataset) -> T_Dataset: ...
    @overload
    def {method}(self, other: T_DataArray) -> T_DataArray: ...
    @overload
    def {method}(self: T_Variable, other: VarCompatible) -> T_Variable: ...z    @overload{override}
    def {method}(self, other: T_Dataset) -> T_Dataset: ...
    @overload
    def {method}(self, other: "DataArray") -> "Dataset": ...
    @overload
    def {method}(self, other: GroupByIncompatible) -> NoReturn: ...z    @overload{override}
    def {method}(self, other: T_Dataset) -> T_Dataset: ...
    @overload
    def {method}(self, other: T_DataArray) -> T_DataArray: ...
    @overload
    def {method}(self, other: GroupByIncompatible) -> NoReturn: ...z7    def {method}(self: {self_type}) -> {self_type}: ...zH    def {method}(self: {self_type}, *args, **kwargs) -> {self_type}: ...z0    def _unary_op(self, f, *args, **kwargs): ...z6    def _binary_op(self, other, f, reflexive=...): ...z/    def _inplace_binary_op(self, other, f): ...c                 ~    d| i}dgt           t          i ft          t          t          |ft
          t          t          |fgS )N	self_typeNN)required_method_unarystub_required_unary	UNARY_OPStemplate_unary
stub_unaryOTHER_UNARY_METHODStemplate_other_unarystub_other_unary)r@   extra_contexts     8lib/python3.11/site-packages/xarray/util/generate_ops.pyunopsrL      s@     ),M
.0CRH	NJ>	24DmT     c                     dgt           t          i ft          t          z   t          | t
          ft          t          | t          ft          t          | t
          fgS )NrA   )
required_method_binarystub_required_binary
BINOPS_NUM
BINOPS_CMPtemplate_binopNO_OVERRIDEBINOPS_EQNEOVERRIDE_TYPESHEDBINOPS_REFLEXIVEtemplate_reflexive)stubs    rK   binopsrZ      sG    
/1ErJ	j	 .$D	nd,=>	-t[A	 rM   c                  D    dgt           t          i ft          t          di fgS )NrA   r>   )required_method_inplacestub_required_inplaceBINOPS_INPLACEtemplate_inplace rM   rK   inplacera      s)    
02GL	)2r2 rM   	T_DatasetDatasetOpsMixinT_DataArrayDataArrayOpsMixin
T_VariableVariableOpsMixinDatasetGroupByOpsMixinDataArrayGroupByOpsMixinz"""Mixin classes with arithmetic operators."""
# This file was generated using xarray.util.generate_ops. Do not edit manually.

import operator

from . import nputils, opsaK  """Stub file for mixin classes with arithmetic operators."""
# This file was generated using xarray.util.generate_ops. Do not edit manually.

from typing import NoReturn, TypeVar, overload

import numpy as np
from numpy.typing import ArrayLike

from .dataarray import DataArray
from .dataset import Dataset
from .groupby import DataArrayGroupBy, DatasetGroupBy, GroupBy
from .types import (
    DaCompatible,
    DsCompatible,
    GroupByIncompatible,
    ScalarOrArray,
    VarCompatible,
)
from .variable import Variable

try:
    from dask.array import Array as DaskArray
except ImportError:
    DaskArray = np.ndarray  # type: ignore

# DatasetOpsMixin etc. are parent classes of Dataset etc.
# Because of https://github.com/pydata/xarray/issues/5755, we redefine these. Generally
# we use the ones in `types`. (We're open to refining this, and potentially integrating
# the `py` & `pyi` files to simplify them.)
T_Dataset = TypeVar("T_Dataset", bound="DatasetOpsMixin")
T_DataArray = TypeVar("T_DataArray", bound="DataArrayOpsMixin")
T_Variable = TypeVar("T_Variable", bound="VariableOpsMixin")z.{newline}
class {cls_name}:
    __slots__ = ()z%    {method}.__doc__ = {func}.__doc__c              #      K   |rt           nt          V  |                                 D ]<\  }}t                              |d|z            V  t          ||          E d{V  =dS )zRender the module or stub file.
)cls_namenewlineN)MODULE_PREAMBLESTUBFILE_PREAMBLEitemsCLASS_PREAMBLEformat_render_classbody)ops_info	is_modulerl   method_blockss       rK   renderrw      s      &
=//,====#+>>#3#3 ? ?-##Xti?O#PPPPP$]I>>>>>>>>>>? ?rM   c              #      K   | D ])\  }}}}|r|n|}|r|D ]\  }} |j         d||d|V  *|r5dV  | D ]0^}}	|D ]'\  }}|r |rt                               ||          V  (/d S d S )N)methodfuncr>   r`   )rr   COPY_DOCSTRING)
rv   ru   method_func_pairsmethod_templatestub_templateextratemplatery   rz   _s
             rK   rs   rs      s     DQ I I@?M5&/B??] 	I 1 I I%hoHV$HH%HHHHHH J%2 	J 	J! 1 J J Jd J(//vD/IIIIIJJ J	J 	JrM   __main__      >   --stubs--modulezUsage: z --module | --stubsr   )r>   )0__doc__sysrU   rR   rQ   rW   r^   rD   rG   rS   rX   r_   rE   rH   rB   rO   r\   rV   rT   stub_dsstub_dastub_var	stub_dsgb	stub_dagbrF   rI   rC   rP   r]   rL   rZ   ra   rt   rn   ro   rq   r{   rw   rs   __name__lenargvloweroption
SystemExitru   lineprintr`   rM   rK   <module>r      s    


N

 	 1A 9 ): % % % 
  !=> 2VPOG	G	;
L 4 : 3         $fWoo		9EE+<N<NN	  &w'')) ;eeM>R>R R	 %vh//''));eeL>Q>QQ	 %+VI%6%6	! "'-vi'8'8	# $ @ F)? ? ?J J J z$'CMMQ$6$6SXa[   DF,,,jC38A;CCCDDD*$Ix++  d  rM   