
    Zfx                         d Z ddlZddlZddlZddlZddlmZ ddZddZ	ddZ
ddZddZd	 Zdd
ZddZddZd Zd Zd Zd Zd Zd Zd Zd Zy)zUtilities to write files.    N)readfilec                 :   |rt         nd }|r$|j                         D 	ci c]  \  }}	||	
 }
}}	n#|rt        j                  |      }
nt	        d      t        | t        j                        r2t        j                  | | j                        }t               } || |
d   <   t        j                  j                  |      \  }}|dv r't        j                  j                  |      \  }}|dv r'|s|}|j                         }t        j                  j                  t        j                  j!                  |            }t        j                  j#                  |      s t        j$                  |        |d|        |dv r@|rt        j                  j                  |      d   dv r|t        j&                  |      }t)        |
d	         t)        |
d
         f}t+        j,                  |d      5 }|j/                         D cg c]Q  }|t1        | j/                               vr4t        ||   t*        j2                        r||   j4                  dd |k7  r|S }}ddd       ng }t1        | j/                               z   }|
d   dv r!d|vrt7        dj9                  |
d               t        j                  j;                  |      r t        j<                  |        |d|        t        d| d       t?        d |D              }t+        j,                  |d      5 }| j/                         D ]^  }| |   } |dj9                  ||tA        |j                        tA        |j4                        |             |jC                  ||d|      }` tE        |      dkD  rt+        j,                  |d      5 }|D ]a  }||   } |dj9                  ||tA        |j                        tA        |j4                        |             |jC                  ||dd d|       c 	 ddd       |
j                         D ]  \  }}		 tA        |	      |jF                  |<     |S|j                         D ]@  \  }}	||j/                         v s|	|	||   jF                  d<    |d|d| dd |	        B ddd        |d!|        |S t1        | j/                               }t1        | jK                               }tE        |      |
d"<   |
jM                  d#d$      jO                         |
d#<   |
jM                  d%d&      j                         |
d%<   d&d'd(d)}|
d%   |j/                         v r||
d%      |
d%<   |d*v r!d&|
d%<   d$|
d#<   |d+d,gk7  r|d   |d   g}d-|
d"<   n|d.v r*d&|
d%<   d$|
d#<   |
jM                  d/d0      d1k(  r|d   |d   g}n|d2k(  rd'|
d%<   n|d3v rd&|
d%<   d$|
d#<   n{|jQ                  d4      rd-|
d"<   d&|
d%<   d5|
d#<   nZ|d6v rd&|
d%<   nP|d7k(  rd|
d"<   nE|d8k(  r6d|
d"<   d9|
d%<   |d+d,gk(  r/|d   t        jR                  d:|d   z        z  |d<   n
|d;k(  rd(|
d%<   g d<}|
d%   |vr(d=j9                  ||
d%         }|d>| z  }t	        |      tU        |||
d%   |
d#   ?        |d@|        tW        |
|dAz   |B       |S c c}	}w c c}w # 1 sw Y   jxY w# 1 sw Y   xY w#  tA        |	jI                  d            |jF                  |<   Y xY w# 1 sw Y   exY w)Ca.   Write one file.
    Parameters: datasetDict  - dict of dataset, with key = datasetName and value = 2D/3D array, e.g.:
                    {'height'        : np.ones((   200,300), dtype=np.int16),
                     'incidenceAngle': np.ones((   200,300), dtype=np.float32),
                     'bperp'         : np.ones((80,200,300), dtype=np.float32),
                     ...}
                out_file     - str, output file name
                metadata     - dict of attributes
                ref_file     - str, reference file to get auxliary info
                compression  - str, compression while writing to HDF5 file, None, "lzf", "gzip"
                ds_unit_dict - dict, top-level dataset unit definition
                    {dname : dunit,
                     dname : dunit,
                     ...
                    }
    Returns:    out_file     - strs
    Examples:   dsDict = dict()
                dsDict['velocity'] = np.ones((200,300), dtype=np.float32)
                write(datasetDict=dsDict, out_file='velocity.h5', metadata=atr)
    c                       y N argskwargss     O/home/exouser/operations/rsmas_insar/tools/MintPy/src/mintpy/utils/writefile.py<lambda>zwrite.<locals>.<lambda>)           z$No metadata or reference file input.	FILE_TYPE)z.geoz.rdrz.fullz.wgs84zcreate directory: z.h5z.he5   NLENGTHWIDTHr)
timeseriesifgramStackdatez-Can not write {} file without 'date' dataset!zdelete exsited file: create HDF5 file:  with w modec              3   2   K   | ]  }t        |        y wr   len.0is     r   	<genexpr>zwrite.<locals>.<genexpr>g   s     /!s1v/   wzKcreate dataset /{d:<{w}} of {t:<10} in size of {s:<20} with compression={c}dr#   tscTdatachunkscompressionr   zKcreate dataset /{d:<{w}} of {t:<10} in size of {s:<10} with compression={c}zutf-8UNITadd /<  attribute: UNIT = finished writing to BANDS
INTERLEAVEBIL	DATA_TYPEfloat32int16int8)floatshortbyte).unw	magnitudephase   ).cor	PROCESSORisceroipacz.dem)z.trans)to_rdc2_rdc2rdcBIP)z.mliz.flt.slc.int	complex64y              ?z.msk)	boolr9   uint8r8   r7   float64	complex32rK   
complex128z0Un-supported file type "{}" with data type "{}"!z
Supported data type list: )	data_type
interleavewrite file: z.rsc	print_msg),printitemsr   read_attribute
ValueError
isinstancenpndarrayarraydtypedictospathsplitextlowerdirnameabspathisdirmakedirsget_hdf5_compressioninth5pyFilekeyslistDatasetshape	Exceptionformatisfileremovemaxstrcreate_datasetr   attrsencodevaluesgetupperendswithexpwrite_binarywrite_roipac_rsc)datasetDictout_filemetadataref_filer,   ds_unit_dictrU   vprintkeyvaluemetar*   fbasefextout_dirshape2dfrr    
auxDsNamesdsNamesmaxDigitfdsNamedskey_list	data_listDATA_TYPE_DICT
data_typesmsgs                                r   writer      s   *  U%AF -5^^-=>zsEU
>>	&&x0?@@ +rzz*xx[%6%67f)-D%& ''""8,KE4
5
5gg&&u-t 5
5::<D ggoobggooh78G77==!
G#G9-. ((215H"&;;HE 4>*CW,>?G8S) DR)+ DA"#40@0@0B+C"C&0A&E&(ekk"#&6'&A   D
 DD D J {'')*Z7 ==W$ O V VW[\gWh ijj 77>>(#IIh*8*56 	"8*L9:/w//YYx% +	T%**, ?"6* /069A9<TZZ9<TZZ9D	 17 1FG %%f+/-12= & ?? :"YYx- B", BZ !78>AIADRXXADRXXAL	 9? 9NO ((.0e045@ ) BBB #jjl >
U>#&u:AGGCL> '"."4"4"6 TJCaffh5+</4#V,s1XJ`,&77J5'RSTQ+	TZ 	%hZ01X OO ((*+++-.	HW!XXlE:@@B\ HH[)<BBD[$-$+$*,  3 3 55 .tK/@ AD 8 )D!&DK11&q\9Q<8	 !WX )D!&DxxV,8&q\9Q<8	V^ 'DZ )D!&D]]67DM )D!&D%% )DV^DMV^DM +DK11(|bffR)A,5F.GG	!V^ &Du
J.DKKDRVWbRcdC1*>>CS/! 	YD4ERVWcRdehZ() 	x)DOi ?LDD DNB B$>#&u||G'<#=AGGCLI+	T +	Tsn   Z<1[A[[!B\7A'[\>[!,\\'\[[[	\!)\
\\c                 	   |rt         nd } |d       |r$|j                         D 	ci c]  \  }}	||	
 }
}}	ne|rXt        j                  |d      5 }|j                  j                         D 	ci c]  \  }}	||	
 }
}}	ddd        |d|        nt        d      ||rt        j                  j                  |      st        d       |d|        i }t        j                  j                  |      d	   }t        
d
         t        |
d         f}|dv rt        j                  |d      5 }t        |j                  d
         t        |j                  d         f}|j                         D ]  }||   }t        |t        j                        s#|j                  dd |k7  r |j                   |j                  |dd g||<   Ut#        |j                        }||dd |j                   t%        |      dg||<    	 ddd       n2t'        j(                  |      }|
d   }|D ]  }|t%        |      dg||<    t        j                  j+                  t        j                  j-                  |             }t        j                  j/                  |      s t        j0                  |        |d|        t        j                  | d      5 } |d|  d       t3        d |j                         D              }|j                         D ]  }||   d   }||   d	   }|}|dv rd}t5        |      dk(  rd|d	   |d   f}n|} |dj7                  ||t9        |      t9        |      |             |j;                  ||||d|      }t5        ||         dkD  s||   d   t=        j>                  ||   d         |dd  
j                         D ]  \  }}	t9        |	      |j                  |<    |S|j                         D ]@  \  }}	||j                         v s|	|	||   j                  d<    |d|d| d d!|	        B ddd        |d"|         | S c c}	}w c c}	}w # 1 sw Y   xY w# 1 sw Y   BxY w# 1 sw Y   <xY w)#aC  Create HDF5 file with defined metadata and (empty) dataset structure

    Parameters: fname        - str, HDF5 file path
                ds_name_dict - dict, dataset structure definition
                               {dname : [dtype, dshape],
                                dname : [dtype, dshape, None],
                                dname : [dtype, dshape, 1/2/3/4D np.ndarray], #for aux data
                                ...
                               }
                metadata     - dict, metadata
                ds_unit_dict - dict, top-level dataset unit definition
                               {dname : dunit,
                                dname : dunit,
                                ...
                               }
                ref_file     - str, reference file for the data structure
                compression  - str, HDF5 compression type
    Returns:    fname        - str, HDF5 file path

    Example:    layout_hdf5('timeseries_ERA5.h5', ref_file='timeseries.h5')
                layout_hdf5('timeseries_ERA5.5h', ds_name_dict, metadata)

    # structure for ifgramStack
    ds_name_dict = {
        "date"             : [np.dtype('S8'), (num_ifgram, 2)],
        "dropIfgram"       : [np.bool_,       (num_ifgram,)],
        "bperp"            : [np.float32,     (num_ifgram,)],
        "unwrapPhase"      : [np.float32,     (num_ifgram, length, width)],
        "coherence"        : [np.float32,     (num_ifgram, length, width)],
        "connectComponent" : [np.int16,       (num_ifgram, length, width)],
    }

    # structure for geometry
    ds_name_dict = {
        "height"             : [np.float32, (length, width), None],
        "incidenceAngle"     : [np.float32, (length, width), None],
        "slantRangeDistance" : [np.float32, (length, width), None],
    }

    # structure for timeseries
    dates = np.array(date_list, np.bytes_)
    ds_name_dict = {
        "date"       : [np.dtype("S8"), (num_date,), dates],
        "bperp"      : [np.float32,     (num_date,), pbase],
        "timeseries" : [np.float32,     (num_date, length, width)],
    }
    c                       y r   r   r   s     r   r   zlayout_hdf5.<locals>.<lambda>  r   r   2--------------------------------------------------r   Nzgrab metadata from ref_file: zNo metadata or ref_file found.z"No ds_name_dict or ref_file found!z&grab dataset structure from ref_file: r   r   r   r   r   r6   zcrerate directory: r#   r   r   c              3   2   K   | ]  }t        |        y wr   r   r   s     r   r!   zlayout_hdf5.<locals>.<genexpr>T  s     <1A<r"   r   )connectComponentlzf   r@   zOcreate dataset  : {d:<{w}} of {t:<25} in size of {s:<20} with compression = {c}r$   T)ro   maxshaper^   r+   r,   r-   r.   r/   r0   r1   zclose  HDF5 file: ) rV   rW   rj   rk   rw   rY   r`   ra   rr   FileNotFoundErrorrb   ri   rl   rZ   rn   ro   r^   rm   tupler   get_slice_listrd   re   rf   rg   rt   r   rq   ru   rv   r[   r]   )fnameds_name_dictr   r   r   r,   rU   r   r   r   r   r   r   r   shape2d_origr   ds_shapeds_namesds_dtypeds_namefdirr   	max_digitrQ   
data_shapeds_comp	max_shapes                              r   layout_hdf5r      s   `  U%AF
6N -5^^-=>zsEU
>>	YYx% 	C131AB:3CJBDB	C.xj9:9:: rww~~h7#$HII;H:FGww)!,tH~&DM(:;?"8S) RR #BHHX$6 7RXXg=N9OP779 RCCB!"dll3 88BC=L813288RU0KL- (,BHH~H,3HRSM135?D0QL-R	R R(  ..x8HK(H# I)15>4(HW%I 77??277??512D77==
D$TF+, 
5#	 /Q!#E7,78 <(9(9(;<<	$$& 	7C%c*1-I%c*1-J "G** :!#!:a=*Q-@	&	  ()/#2;25i.25j/29	 *0 *;< !!#(2+4(1)-.5 " 7B <$%)l3.?.B.Nc!21!561?	7D **, 	&JCu:AGGCL	& #*002 Q
U!&&(?u'8+0AcFLL(U3q0m"44GwOPQY/Qb w'(LQ ? C	C 	C&R R@/Q /Qs]   QQ'0Q!=Q'3A#Q4A)Q4C
RR!A:RR'R!Q''Q14Q>R
c           	         |t        |t              rt        |      f}n|j                  }t        |      dk(  rd|d   g}n_t        |      dk(  rd|d   d|d   g}nDt        |      dk(  rd|d   d|d   d|d   g}n$t        |      dk(  rd|d   d|d   d|d   d|d   g}|r/t	        d       t	        d|  d	| d
       t	        d|dd|        t        j                  | |      5 }t        |      dk(  r-|||   |d   |d   |d   |d   |d   |d   |d   |d   f<   nwt        |      dk(  r$|||   |d   |d   |d   |d   |d   |d   f<   nEt        |      dk(  r|||   |d   |d   |d   |d   f<   nt        |      dk(  r|||   |d   |d    ddd       |rt	        d|  d       | S # 1 sw Y   xY w)a  Write data to existing HDF5 dataset in disk block by block.
    Parameters: data        - np.ndarray 1/2/3/4D matrix
                datasetName - str, dataset name
                block       - list of 2/4/6/8 int, for
                              [d1Start, d1End,
                               d2Start, d2End,
                               yStart, yEnd,
                               xStart, xEnd]
                mode        - str, open mode
    Returns:    fname
    Nr   r   r@   r      r   zopen  HDF5 file z in z modezwriting dataset /z<25z block:             zclose HDF5 file .)rZ   rm   r   ro   rV   rj   rk   )r   r*   datasetNameblockmoderU   ro   r   s           r   write_hdf5_blockr     sg    } dD!t9,EJJE u:>aMEZ1_aa"EZ1_aaa"E Z1_aaaa"E f tD678!+c!2(5'BC	5$	 51u:? 15 kN58E!H, 8E!H, 8E!H, 8E!H,- .
 Z1_ 15 kN58E!H, 8E!H, 8E!H,- . Z1_04 kN58E!H, 8E!H,- . Z1_04AkN58E!H-#5&  q)*L-5 5s   (B3F66F?c           	      j   |rt         nd }t        |t              rt        |      } |d| d|         t        j
                  j                  t        j
                  j                  |       dt        j
                  j                  |              }t        j                  | |        |d|  d|         |d| d        |d	|  d
       t        j                  |d      5 }t        j                  | d      5 }d}t        d t        |j                               D              }|j                         D 	cg c]	  }	|	|vs|	 c}	D ]g  }
||
   }d|
d| ddt        |j                        d}|dt        |j                         dd| z  } ||       |j#                  |
|dd d|       i |j$                  j'                         D ]  \  }}t        |      |j$                  |<    	 ddd       ddd        |d|          |d| d       | S c c}	w # 1 sw Y   /xY w# 1 sw Y   3xY w)a  Remove an existing dataset from an HDF5 file.
    Parameters: fname : str, HDF5 file name/path
                datasetName : (list of) str, dataset name(s)
    Returns:    fname : str,
    Example:    remove_hdf5_dataset('./inputs/ifgramStack.h5', 'unwrapPhase_phaseClosure')
                remove_hdf5_dataset('./inputs/ifgramStack.h5', ['unwrapPhase_phaseClosure',
                                                                'unwrapPhase_bridging'])
    c                       y r   r   r   s     r   r   z%remove_hdf5_dataset.<locals>.<lambda>  r   r   zdelete z from file tmp_zmove z to zread   HDF5 file: z with r moder   r   r   r#   Nc              3   2   K   | ]  }t        |        y wr   r   r   s     r   r!   z&remove_hdf5_dataset.<locals>.<genexpr>  s     ;a3q6;r"   zcreate dataset /r/   r0   z of z<10z in size of z<20z with compression=Tr)   r2   zold file is now saved as: z. Use rm command to delete it.)rV   rZ   ru   rm   r`   ra   joinrd   basenameshutilmoverj   rk   rt   rl   r^   ro   rv   rw   rW   )r   datasetNamesrU   r   	temp_filefifor,   r   r    r   r   r   r   r   s                  r   remove_hdf5_datasetr     s%     U%AF,$L)
W\N+eW56 RWW__U3tBGG<L<LU<S;T5UVI
KKy!
U5'i[)* 	{,78
wl34	9c	" +bYYuc" 	+b K;4	?;;H&(ggiI1L3H1I \Z((0|(<DRXXs@STc"((mC%88J;-XXs!!&r!uT{![\ !hhnn. +
U #E
+	++" !%)*
'	{2PQRL J	+ 	++ +s=   $H);>H9	HHB'H/H)HH&	"H))H2c                    d}|rt               }t        j                  j                  |      rt	        j
                  |      }t        | j                               j                  t        |j                                     rd}|rFd| j                         v r| d   | d<   d| j                         v rht        t        | d               | d<   t        t        | d               | d<   t        t        | d               | d<   t        t        | d               | d<   |rt        d	|        t        | j                         D cg c]  }t        |       c}d
gz         }t        |d      5 }t!        | j                               D ]:  }|j#                  dj%                  t        |      |t        | |                      < 	 ddd       |S |S c c}w # 1 sw Y   |S xY w)a  Write attribute dict into ROI_PAC .rsc file
    Inputs:
        metadata : dict, attributes dictionary
        out_file : rsc file name, to which attribute is written
        update_mode : bool, skip writing if
                      1) output file existed AND
                      2) no new metadata key/value
        print_msg   : bool, print message
    Output:
        out_file
    TFr   FILE_LENGTHX_STEPY_STEPX_FIRSTY_FIRSTrS   r@   r#   z{k:<{d}}    {v}
)kr%   vN)r_   r`   ra   rr   r   read_roipac_rscsetrW   issubsetrl   ru   r:   rV   rt   r   opensortedr   rq   )	r   r   update_moderU   runrsc_dictr   r   r   s	            r   r   r     s    C677>>(#//9Hx~~ ))#hnn.>*?@C
x}}&&.x&8H]# x}}&!$U8H+=%>!?HX!$U8H+=%>!?HX"%eHY,?&@"AHY"%eHY,?&@"AHY L
+,HMMO<SC<aS@A(C  	JAhmmo. J+22SX5=58#5G 3 I JJ	J
 O8O =	J
 Os   G+AGGc           
         ddddddd}dd	d
dddd}t        || d            }t        | d         t        | d         }}t        | d         }| d   }|dk(  r||z  |z  }	|}
n4|dk(  r||z  |z  }	||z  }
n!|dk(  r||z  }	||z  |z  }
nt        d|       dj                  | d   | d         }t        |      D ]J  }dj                  || d      |dz   t        j
                  j                  |dd       |
|z  ||	      }||z  }L |dz  }t        |d      5 }|j                  |       ddd       |S # 1 sw Y   |S xY w)a  Write GDAL VRT file.

    !!! This function is NOT RIGHT. DO NOT USE IT. Keep here as a placeholder ONLY. !!!
    It needs more work.

    Parameters: meta     - dict, dictionary of metadata
                out_file - str, VRT file name to which attributes are written
    ByteInt16Float32Float64CFloat32CFloat64)r9   r8   r7   rN   rK   rP   2481632r6   r   r   r3   r4   rH   r5   BSQz$un-recognized band interleave type: z1<VRTDataset rasterXSize="{w}" rasterYSize="{l}">
)r#   la;  <VRTRasterBand dataType="{d}" band="{b}" subClass="VRTRawRasterBand">
        <SourceFilename relativeToVRT="1">{f}</SourceFilename>
        <ByteOrder>LSB</ByteOrder>
        <ImageOffset>{io}</ImageOffset>
        <PixelOffset>{po}</PixelOffset>
        <LineOffset>{lo}</LineOffset>
    </VRTRasterBand>
        r   N)r%   br   iopoloz</VRTDataset>
r#   )	ri   rY   rq   ranger`   ra   r   r   r   )r   r   
dtype_dictpixel_offset_dictpixel_offsetlengthwidthnum_bandrR   line_offsetimage_offsetds_strbandband_strr   s                  r   write_gdal_vrtr   (  s      J  (k):;<LX'T']);EF4=!Hl#JU#h.6#	u	#e+h6#e+	u	#e+#e+f4?
|LMM BHH4PW=\`ai\jHkFh  Fk*+1fggx}-d"  
 	 	(!" F 
h	 	 O Os   D55D?c                 ,   ddl }ddl}t        j                  | d      }| d   }|s|j                  j                         }nz|dk(  r|j                  j                         }nZ|dk(  r|j                  j                         }n:|dk(  r|j                  j                         }n|j                  j                         }|j                  |       |j                  t        | d                |j                  t        | d	                |j                  d
       t        | j                  dd            |_        ||_        | j                  dd      |_        |j%                          |j'                          |rt)        d| d       t)        d| d       y)a  Write XML metadata file in ISCE-2 format

    Parameters: meta      - dict, attributes dictionary
                fname     - str, path of data file, not the metadata file
                print_msg - bool, print out message
    Examples:   write_isce_xml(atr, fname='filt_fine.cor')
    r   Nr6   r   rI   r=   rJ   r   r   READr3   1r4   r5   rS   z.xmlz.vrt)rC   isceobjr   DATA_TYPE_NUMPY2ISCEImagecreateImagecreateSlcImagecreateUnwImagecreateIntImagesetFilenamesetWidthri   	setLengthsetAccessModerz   bandsdataTypescheme	renderHdr	renderVRTrV   )r   r   rU   rC   r   r^   
image_typeimgs           r   write_isce_xmlr  q  sL     ))${*;<E k"Jgmm&?&?&A	v	gmm&B&B&D	v	gmm&B&B&D	v	gmm&B&B&D&-mm&?&?&AOOELLT']#$MM#d8n%&fDHHWc*+CICL,.CJMMOMMOUG4()UG4()
r   c                    |j                  dd      }| j                  |       |rt        d|        | j                  \  }}||d}|dk(  r&d|d<   d|d	<   d
|d<   d|d<   t	        |dz        |d<   n\|dk(  rd|d<   d|d	<   d|d<   d|d<   nB|dk(  rd|d<   d|d	<   d
|d<   d|d<   n(|dk(  rd|d<   d|d	<   d|d<   d|d<   nt        d|       t        |||       |S )a  write data to file in ISCE format

    Parameters: data      - 2D np.ndarray, binary data matrix
                out_file  - str, path of output binary data file
                file_type - str, file type
    Returns:    out_file  - str, path of output binary data file
    -_rS   )r   r   isce_unwr=   r   r@   r3   r7   r6   r5   r4   r   isce_intrJ   r   rK   isce_corrA   isce_slcrI   rH   zun-recognized ISCE file type: rT   )replacetofilerV   ro   ri   rY   r  )r*   r   	file_typerU   r   r   r   s          r   write_isce_filer    sG    !!#s+I 	KKXJ'( JJMFED
 J"[W%["\EAIW	j	 "[W'["\	j	 "[W%["\	j	 "[W'["\ 9)EFF4Y7Or   c                    |rF|j                         }|| d   j                  k7  r$| D cg c]  }t        j                  ||       } }|j	                         }|dk(  r | D cg c]  }|j                  dd       } }n$|dk(  r| D cg c]  }|j                  dd       } }| d   }| dd D ]  }t        j                  ||f      } |j                  |       |S c c}w c c}w c c}w )a]  Write binary file.
    Parameters: data_list  - list of 2D np.ndarray matrices
                out_file   - str, path of the output binary file
                data_type  - str/np.dtype, numpy data type object
                interleave - str, band interleave type, BSQ, BIL, BIP
    Returns:    out_file   - str, path of the output binary file
    r   r^   rH   r   r   N)rc   r^   r[   r]   r{   reshapehstackr  )r   r   rQ   rR   xr*   datais          r   r~   r~     s     OO%		!***?HI!!95III !!#JU.78QYYr!_8	8	u	.78QYYq_8	8 Q<D12 (yy$'( 	KKO# J
 98s   C"C C%c                  L   t        |       dk(  r| d   }| d   }| d   }n*t        |       dk(  r| d   }| d   }| d   }nt        d       yt        j                  ||f      j	                         }t        j
                  |t        j                        }|j                  |       |S )a  Write ROI_PAC rmg format with float32 precision (BIL)
    Format of the binary file is same as roi_pac unw, cor, or hgt data.
          should rename to write_rmg_float32()

    Example:
            write_float32(phase, out_file)
            write_float32(amp, phase, out_file)
    r@   r   r   r   z0Error while getting args: support 2/3 args only.Nr  )r   rV   r[   r  flattenr]   r7   r  )r	   ampphar   r*   s        r   write_float32r&    s     4yA~1g1g7	Ta1g1g7@A99c3Z ((*D88D

+DKKOr   c                 r    t        j                  | t         j                        } | j                  |       |S )z$write complex float32 data into filer  )r[   r]   rK   r  r*   r   s     r   write_complex_float32r)    s'    88D-DKKOr   c                    | j                   }t        t        dd|z  d            }t        t        dd|z  d            }t        j                  d|z  dgt        j
                        }t        j                  t        j                  | j                  t        j
                        |df      ||<   t        j                  t        j                  | j                  t        j
                        |df      ||<   |j                  |       |S )zWrite gamma scomplex data, i.e. .slc file.
        data is complex 2-D matrix
        real, imagery, real, ...
    Write in this way, because numpy does not have complex int16 directly.
    r   r@   r   )sizerm   r   r[   zerosr8   r  r]   realimagr  )r*   r   	num_pixelid1id2Fs         r   write_complex_int16r3  $  s     		I
uQIq)
*C
uQIq)
*C
!i-#RXX.AZZBHH5	1~FAcFZZBHH5	1~FAcFHHXOr   c                 r    t        j                  | t         j                        } | j                  |       |S )z)write isce float data, i.e. hgt.rdr file.r  )r[   r]   rN   r  r(  s     r   write_real_float64r5  5  '    88D

+DKKOr   c                 r    t        j                  | t         j                        } | j                  |       |S )z'write gamma float data, i.e. .mli file.r  )r[   r]   r7   r  r(  s     r   write_real_float32r8  <  r6  r   c                 r    t        j                  | t         j                        } | j                  |       |S Nr  )r[   r]   r8   r  r(  s     r   write_real_int16r;  C  '    88D)DKKOr   c                 r    t        j                  | t         j                        } | j                  |       |S r:  )r[   r]   r<   r  r(  s     r   
write_byter>  I  s'    88D(DKKOr   c                 r    t        j                  | t         j                        } | j                  |       |S r:  )r[   r]   bool_r  r(  s     r   
write_boolrA  O  r<  r   )NNNNT)NNNNNT)NaT)T)FF)r  T)Nr5   )__doc__r`   r   rj   numpyr[   mintpy.utilsr   r   r   r   r   r   r   r  r  r~   r&  r)  r3  r5  r8  r;  r>  rA  r   r   r   <module>rF     s{     
    !Md]@AH+b*ZFR$N5vF6&"r   