
    {bg                         d Z ddlmZ ddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ h d
Zh dZd Zd Zd Zd Zd Zd Zd ZddZd Zy)z3Functions for converting to and from xarray objects    )CounterN)CFDatetimeCoderCFTimedeltaCoder)	decode_cf)duck_array_ops)	DataArray)get_fill_value)
array_type>   axisunitsboundscalendarcompress	leap_year	long_name	valid_max	valid_min
_FillValue
add_offset
leap_monthclimatologycoordinatesvalid_rangecell_methodsgrid_mappingscale_factorformula_termsmissing_valuemonth_lengthsstandard_name>
   summeanmodepointmedianmaximumminimumvariance	mid_rangestandard_deviationc                 v    t               j                  t               j                  | j                              S )N)r   encoder   variable)vars    .lib/python3.12/site-packages/xarray/convert.pyr,   r,   4   s(    $$_%6%=%=cll%KLL    c                 `    | j                         D ci c]  \  }}||vs|| c}}S c c}}w )z*Return attrs that are not in ignored_attrsitems)attrsignored_attrskvs       r/   _filter_attrsr8   8   s/    "[[]E]TQa}.DAqD]EEE   **c                 `    | j                         D ci c]  \  }}||v s|| c}}S c c}}w )z#Return attrs with keys in keys listr2   )r4   keysr6   r7   s       r/   _pick_attrsr<   =   s.    "[[]8]TQa4iAqD]888r9   c                     ddl }dt        | t              i}|j                  t	        | d             t	        | d      }d| v r |j
                  | d   fi ||d<   |S )z@Converts the xarray attrs into args that can be passed into Irisr   N
attributesr    r   )r   r   )cf_unitsr8   iris_forbidden_keysupdater<   Unit)r4   r@   args	unit_argss       r/   _get_iris_argsrF   B   sc     -/BCDDKKE#ABCE=1I%%eGnB	BWKr0   c                    ddl }ddlm} g }g }| j                  D ]  }t	        | j                  |         }t        |j                        }||d<   d}|j                  r| j                  |j                        }|| j                  v r<	  |j                  j                  |j                  fi |}	|j                  |	|f        |j                  j                  |j                  fi |}	|j                  |	|f        t        | j                        }
| j                  |
d<   ||
d<   ||
d<   d| j                  v r || j                  d         |
d<   t        j                   | j"                        } |j$                  j&                  |fi |
}|S # t        $ r>  |j                  j                  |j                  fi |}	|j                  |	|f       Y w xY w)z$Convert a DataArray into a Iris Cuber   N)parse_cell_methodsvar_namedim_coords_and_dimsaux_coords_and_dimsr   )irisiris.fileformats.netcdfrH   coordsr,   rF   r4   dimsget_axis_numDimCoordvaluesappend
ValueErrorAuxCoordnamer   masked_invaliddatacubeCube)	dataarrayrL   rH   
dim_coords
aux_coords
coord_namecoord
coord_argsr   
iris_coordrD   masked_datarY   s                r/   to_irisrc   P   s    :JJ&&
y''
34#EKK0
!+
:::))%**5D'61T[[11%,,M*M
!!:t"45
 .--ellIjIJz401! '$ )//*D ~~D",D	",D	(1)//.2QR^ //	?K499>>+..DK#  61T[[11%,,M*M
!!:t"456s   :FAGGc                    | j                   | j                  d}| j                  j                  r| j                  j                  |d<   | j                  j                  dk7  r3| j                  j                         s| j                  j                  |d<   |j                  | j                         |j                         D ci c]  \  }}|	|| c}}S c c}}w )z5Return a dictionary of attrs when given a Iris objectr?   r   1r   )	r    r   r   r   origin
is_unknownrB   r>   r3   )objr4   r6   r7   s       r/   _iris_obj_to_attrsri   x   s    !//cmmLE
yyII..j
yy3syy';';'=))g	LL "[[]<]TQamAqD]<<<s   
CCc                    g }| D ]  }dj                  d |j                  D              }dj                  d |j                  D              }dj                  d |j                  D              }dj                  ||g      j	                         }|rd| d}|j                  ||j                  z   |z           dj                  |      S )z*Converts a Iris cell methods into a string c              3   &   K   | ]	  }| d   yw)z: N ).0ns     r/   	<genexpr>z,_iris_cell_methods_to_str.<locals>.<genexpr>   s     B*AQ1#R*A    c              3   &   K   | ]	  }d |   yw)z
interval: Nrm   )rn   intervals     r/   rp   z,_iris_cell_methods_to_str.<locals>.<genexpr>   s      
4Ij
#4Irq   c              3   &   K   | ]	  }d |   yw)z	comment: Nrm   )rn   comments     r/   rp   z,_iris_cell_methods_to_str.<locals>.<genexpr>   s     VAUgiy1AUrq   z ())joincoord_names	intervalscommentsstriprS   method)cell_methods_objr   cell_methodnamesrz   r{   extras          r/   _iris_cell_methods_to_strr      s    L'B+*A*ABBHH 
4?4I4I
 
	 88VAUAUVV)X./557qMEEK$6$66>? ( 88L!!r0   c                 Z    | j                   xs | j                  xs | j                  xs |S )zMimics `iris_obj.name()` but with different name resolution order.

    Similar to iris_obj.name() method, but using iris_obj.var_name first to
    enable roundtripping.
    )rI   r    r   )iris_objdefaults     r/   _namer      s,     W 6 6W(:L:LWPWWr0   c                 b   ddl }t        |       }|dk(  rd}g }t        | j                        D ]1  }	 | j	                  d|f      }|j                  t        |             3 t        t        |            t        |      k7  r@t        |      j                         D cg c]  \  }}|dkD  s| }}}t        d| d	      i }	| j                         D ]u  }
t        |
      }| j                  |
      D cg c]  }||   	 }}|r||
j                   |f|	t        |
      <   Md
|
j                   j#                         |f|	t        |
      <   w t        |       }t%        | j&                        }|r||d<   t)        | d      r| j+                         n| j,                  }t/        d      }t1        ||      r,ddlm} |j7                  |t9        | j:                              }nZt1        |t<        j4                  j>                        r4t<        j4                  j7                  |t9        | j:                              }n|}tA        ||	|||      }tC        |jE                               }|jG                  |      S # |j                  j                  $ r |j                  d|        Y tw xY wc c}}w c c}w )z%Convert a Iris cube into an DataArrayr   NunknownT)r\   
dimensionsdim_   zDuplicate coordinate name .rm   r   	core_datadask)ma)rN   rV   r4   rO   )$iris.exceptionsr   rangendimr_   rS   
exceptionsCoordinateNotFoundErrorlensetr   r3   rT   rN   ri   
coord_dimspointsitemr   r   hasattrr   rX   r
   
isinstance
dask.arrayr   filledr	   dtypenpMaskedArrayr   r   _to_temp_dataset_from_temp_dataset)rY   rL   rV   rO   i	dim_coordr6   r7   
duplicatesrN   r_   coord_attrsr   array_attrsr   	cube_datadask_array_typedask_mafilled_datar[   
decoded_dss                        r/   	from_irisr      sV   ;DyD499	$

dt
DIKKi()  3t9~T"$+DM$7$7$9C$9DAqQUa$9
C5j\CDDF(/'+u'=>'=!d1g'=
>$.k#JF5< $&(9(9(;[#IF5<   %T*K,T->->?L&2N# %,D+$> DIII !(O)_-,nnYtzz0JK	Iruu00	1eell9nTZZ.HIF[tI 95578J''
33Q 66 	$KK$qc
#	$ D ?s#   .I2J&,J&5J,2-J#"J#)r   )__doc__collectionsr   numpyr   xarray.coding.timesr   r   xarray.conventionsr   xarray.corer   xarray.core.dataarrayr   xarray.core.dtypesr	   xarray.namedarray.pycompatr
   rA   cell_methods_stringsr,   r8   r<   rF   rc   ri   r   r   r   rm   r0   r/   <module>r      sa    9   A ( & + - 1 0 MF
9

%P=" X44r0   