
    njN                        S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKJ	r	  \
rSS jrSS jrSS jrS rSS jrSS	 jr  SS
\	S\	S\4S jjrSS jr\R*                  4S jr\S:X  a#  \R0                  " \" \R*                  5      5        gg)    N)gdalosr)PathLikeOrStrc                 z   U c  Uc  gSn[        U R                  5       5      n[        UR                  5       5      n/ SQnU H1  nX;   a  UR                  U5        X;   d  M   UR                  U5        M3     [        U5      [        U5      :w  aA  [	        SU-  5        [	        S[        U5      -   5        [	        S[        U5      -   5        US-  nU H  nX;  a  [	        SU< SU< S	35        US-  nM#  US
:X  ad  X   R                  5       X   R                  5       :w  a>  [	        SU-   S	-   5        [	        SX   -   S	-   5        [	        SX   -   S	-   5        US-  nM  US
:w  d  M  X   X   :w  d  M  US:X  a  M  [	        SU-   S	-   5        [	        SX   -   S	-   5        [	        SX   -   S	-   5        US-  nM     U$ )Nr   )backendERR_BIASERR_RANDz#Difference in %s metadata key countz  Golden Keys: z  New Keys:    zNew z metadata lacks key ""RPCz'RPC Metadata value difference for key "z  Golden: "z  New:    "NITF_FDTz#Metadata value difference for key ")listkeysremovelenmy_printstrstrip)		golden_mdnew_mdmd_idoptions
found_diffgolden_keysnew_keysdont_care_keyskeys	            S/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/osgeo_utils/gdalcompare.pycompare_metadatar   .   s   V^Jy~~'(KFKKM"H8Ns#?OOC 	  ;3x=(6>?"S%556#h-/0a
DE!OJe^ 1 1 3y~7K7K7M M >DsJK]Y^3c9:]V[0367!OJe^y~ =j :S@3FG]Y^3c9:]V[0367!OJ% (     c                    SnSnS nSU;   a  SnU H)  nUR                  S5      (       d  M  U[        S5      S  n  O   XrR                  SS5      -   S-   n	[        R                  " S5      R                  XR                  U R                  S	[        R                  5      nU R                  n
[        U R                  5       GHI  n[        R                  " S
U R                  SXS	[        R                  S95      n[        R                  " S
UR                  SXS	[        R                  S95      n[        U
5       Vs/ s H  oU   X   -
  PM     nn[        U Vs/ s H  n[        U5      PM     sn5      n[        UU5      nU(       a(  U[        U Vs/ s H  nU(       a  S	OSPM     sn5      -  nUc  M  UR!                  S	5      R#                  SUU
S	[        R                  " S
U5      R%                  5       [        R                  S9  GML     ['        S[)        U5      -   5        ['        S[)        U5      -   5        Ub  ['        SW	-  5        g g s  snf s  snf s  snf )Nr   
DUMP_DIFFS zDUMP_DIFFS_PREFIX= _z.tifGTiffr
   d)buf_typez  Pixels Differing: z  Maximum Pixel Difference: z  Wrote Diffs to: %s)
startswithr   replacer   GetDriverByNameCreateXSizeYSizeGDT_Float32rangearray
ReadRasterGDT_Float64maxabssumGetRasterBandWriteRastertobytesr   r   )golden_bandnew_bandidr   
diff_countmax_diffout_dbprefixoptdiff_fnxsizelinegolden_linenew_linei	diff_linexmax_diff_this_lines                     r   compare_image_pixelsrK   ^   s0   JHFwC~~233S!5689  ::c3//&8%%g.55&&(9(91d>N>N
 Ek''(kk''4DDTDT'U
 ;;$$QQAQAQ$R
 <A<H<a^hk1<	H )!<)Q#a&)!<=x!34#	B	1QA	BCCJ  #//C+335)) 0  ), #c*o56+c(m;<''12 # I!< Cs   ;II
Ic           
      4   SnUc  / OUnU R                   UR                   :w  d  U R                  UR                  :w  a?  [        SX R                   U R                  UR                   UR                  4-  5        US-  nU R                  UR                  :w  ak  [        SU-  5        [        S[        R
                  " U R                  5      -   5        [        S[        R
                  " UR                  5      -   5        US-  nU R                  5       nUR                  5       nS XV4;  a7  [        R                  " U5      (       a  [        R                  " U5      (       a  OS XV4;  a7  [        R                  " U5      (       a  [        R                  " U5      (       a  OFXV:w  aA  [        SU-  5        [        S[        U5      -   5        [        S[        U5      -   5        US-  nU R                  5       UR                  5       :w  as  [        SU-  5        [        S[        R                  " U R                  5       5      -   5        [        S[        R                  " UR                  5       5      -   5        US-  nU R                  5       nUR                  5       nXx:w  aT  [        S	U-  5        [        S[        U5      -   5        [        S[        U5      -   5        US:X  a  [        XX#5        US-  nOU R                  [        R                  [        R                   4;   a  U R#                  5       UR#                  5       :w  ae  [        S
S-  5        [        S[        U R%                  5       5      -   5        [        S[        UR%                  5       5      -   5        [        XU0 5        SU;  a  U R'                  5       UR'                  5       :w  a^  [        SU-  5        [        S[        U R'                  5       5      -   5        [        S[        UR'                  5       5      -   5        US-  nO^[)        U R'                  5       5       HA  n	U[+        U R-                  U	5      UR-                  U	5      US-   [        U	5      -   U5      -  nMC     U R/                  5       UR/                  5       :w  a^  [        SU-  5        [        S[        U R/                  5       5      -   5        [        S[        UR/                  5       5      -   5        US-  nORU R/                  5       [        R0                  :X  a0  U[+        U R3                  5       UR3                  5       US-   U5      -  nSU;  a0  U[5        U R7                  5       UR7                  5       SU-   U5      -  nSU;   a  U R9                  5       UR9                  5       :w  a]  [        SU-  5        [        S[        U R9                  5       5      -   5        [        S[        UR9                  5       5      -   5        US-  nU$ )Nr   z8Band size mismatch (band=%s golden=[%d,%d], new=[%d,%d])r
   zBand %s pixel types differ.
  Golden: 
  New:    zBand %s nodata values differ.z+Band %s color interpretation values differ.zBand %s checksum difference:zBand %s statistics difference:SKIP_OVERVIEWSz"Band %s overview count difference:z
 overview zBand %s mask flags difference:z
 mask bandSKIP_METADATAzBand CHECK_BAND_DESCz Band %s descriptions difference:)r-   r.   r   DataTyper   GetDataTypeNameGetNoDataValuemathisnanisinfr   GetColorInterpretationGetColorInterpretationNameChecksumrK   r/   r3   ComputeRasterMinMaxComputeBandStatsGetOverviewCountr0   compare_bandGetOverviewGetMaskFlagsGMF_PER_DATASETGetMaskBandr   GetMetadataGetDescription)
r:   r;   r<   r   r   golden_nodata
new_nodatagolden_band_checksumnew_band_checksumrG   s
             r   r^   r^      s@   JObGHNN*k.?.?8>>.QF$$k&7&7XY	
 	a
x000.34 4 4[5I5I JJK 4 4X5F5F GGHa
..0M((*J M..

=!!djj&<&<	m0	0

=!!djj&<&<		$0256M 223J/0a
))+x/N/N/PP>CD--k.P.P.RST	
 	--h.M.M.OPQ	
 	a
&//1 ))+0/"45$8 99:$5 667? Da
 D$4$4d6F6F#GG..0H4P4P4RR9A=>K,H,H,J(KKLH,E,E,G(HHI$[BC w&'')X-F-F-HH9B>?\C(D(D(F$GGH\C(A(A(C$DDE!OJ;779:l++A.((+%A.	 
 ; !X%:%:%<<1B67K$<$<$> ??@H$9$9$; <<=a
		!	!	#t';';	;l##%  "	
 	

 g%&##%x';';'=w|W
 	

 G#%%'8+B+B+DD7"<=\C(B(B(D$EEF\C(?(?(A$BBC!OJ r    c                    X:X  a  g[        S5        [        R                  " U 5      n[        R                  " U5      nUR                  U5      (       a  [        S5        O[        S5        [        S5        [        SU (       a  UR	                  5       OS-   5        [        S5        [        SU(       a  UR	                  5       OS-   5        g	)
Nr   zDifference in SRS!z(  * IsSame() reports them as equivalent.z'  * IsSame() reports them as different.z	  Golden:z  Nonez  New:r
   )r   r   SpatialReferenceIsSameExportToPrettyWkt)
golden_wktnew_wkt
golden_srsnew_srss       r   compare_srsrr     s    !"%%j1J""7+G!!;<:;[TzZ113vNOXTGW..0HIr    c           
          SnUc  / OUnSU;  ai  SnU R                  S5      R                  SS5      nU R                  U:  a6  UR                  5       S:X  a"  [	        SU S	U S
U R                  5        35      eSU;  a+  U[        U R                  5       UR                  5       5      -  nSU;  ac  U R                  5       nUR                  5       nXg:w  a>  [        S5        [        S[        U5      -   5        [        S[        U5      -   5        US-  nSU;  a-  U[        U R                  5       UR                  5       SU5      -  nSU;  a/  U[        U R                  S5      UR                  S5      SU5      -  nSU;  a/  U[        U R                  S5      UR                  S5      SU5      -  nU R                  UR                  :w  a+  [        SU R                  UR                  4-  5        US-  nU$ [        U R                  5       H  nU R                  US-   5      R                  n	UR                  US-   5      R                  n
U R                  US-   5      R                  nUR                  US-   5      R                  nX:w  d  X:w  d  M  [        SXXU4-  5        US-  nM     US:X  a]  [        U R                  5       HD  nU[!        U R                  US-   5      UR                  US-   5      [        US-   5      U5      -  nMF     U$ )Nr   SKIP_INTERLEAVE_CHECK
   IMAGE_STRUCTURE
INTERLEAVEr#   pixelzGolden file has more than z and INTERLEAVE=z - this check will eventually succeed but will take hours due to the amount of I/O required for per-band comparisons. Recommend testing image encoding directly in your test, and then translating to a band interleaved format before calling this method: SKIP_SRSSKIP_GEOTRANSFORMzGeoTransforms Differ:rM   rN   r
   rP   DatasetSKIP_RPCr   SKIP_GEOLOCATIONGEOLOCATIONz'Band count mismatch (golden=%d, new=%d)z8Band size mismatch (band=%d golden=[%d,%d], new=[%d,%d]))rc   getRasterCountlower
ValueErrorrd   rr   GetProjectionGetGeoTransformr   r   r   r0   r7   r-   r.   r^   )	golden_dbnew_dbr   r   maxbands
interleave	golden_gtnew_gtrG   gSzXnSzXgSzYnSzYs                r   
compare_dbr   &  s3   JObG g-**+<=AA,PRS
  8+
0@0@0Bg0M,XJ6Fzl S
 &44679   k)"9"9";V=Q=Q=STT
 ')--/	''),-\C	N23\CK/0!OJ g%&!!#V%7%7%99g
 	

  &!!%(&*<*<U*CUG
 	

 (&!!-0}-	
 	

  2 225$$f&8&89:	
 	a
 9(()&&q1u-33##AE*00&&q1u-33##AE*00<4<JD-. !OJ * Qy,,-A,''A.$$QU+AE
	 J . r    c                    SnUc  / OUnU R                  S5      nUR                  S5      n[        [        UR                  5       5      5      S-  n[	        U5       Hh  nSUS-   -  n[
        R                  " XH   5      n	[
        R                  " XX   5      n
[        XU5      nX;-  nUS:  d  MS  [        SXU   XX   4-  5        Mj     U$ )Nr   SUBDATASETS   zSUBDATASET_%d_NAMEr
   z'%d differences found between:
  %s
  %s)	rc   r   r   r   r0   r   Openr   r   )r   r   r   r   
golden_sdsnew_sdscountrG   r   sub_golden_db
sub_new_dbsds_diffs               r   compare_sdsr     s    JObG&&}5J  /GZ__&'(A-E5\"a!e,		*/2YYw|,
mA
a<;_gl;<  r    golden_filenew_file	check_sdsc                 .   SnUc  / OUnSU;  aX   [         R                  " U 5        [         R                  " U5        [        R                  " X5      (       d  [	        S5        US-  n[        R                  " U 5      n[        R                  " U5      nU[!        XU5      -  nU(       a  U[#        XU5      -  nU$ ! [
         Ga    [        R                  " [        U 5      5      n[        R                  " [        U5      5      nU(       Ga]  U(       GaU  UR                  UR                  :w  a  [	        S5        US-  n N[        R                  " [        U 5      S5      n[        R                  " [        U5      S5      nU(       a  U(       a  Sn	XR                  :  a  [        UR                  U	-
  S5      n
[        R                  " SX5      n[        U5      U
:  a  [	        S5        OB[        R                  " SX5      nX:w  a  [	        S5        US-  nOX-  n	XR                  :  a  M  U(       a  [        R                  " U5        U(       a  [        R                  " U5         GNU(       d  [	        S5         GNU(       d  [	        S	5         GN+f = f)
Nr   SKIP_BINARYz!Files differ at the binary level.r
   rbi   zCBinary file comparison failed: not enough bytes read in golden filez>Skipped binary file comparison, golden file not in filesystem.z;Skipped binary file comparison, new file not in filesystem.)osstatfilecmpcmpr   OSErrorr   VSIStatLr   size	VSIFOpenLmin	VSIFReadLr   
VSIFCloseLr   r   r   )r   r   r   r   r   stat_goldenstat_newf_goldenf_newoffto_readgolden_chunk	new_chunkr   r   s                  r   	find_diffr     s    JObGG#-	GGK GGH;;{55<=a
T 		+&IYYx F*Y88Jk)W==
a  &	--K(89K}}S]3Hx##x}}4@A!OJ#~~c+.>EH NN3x=$?EE!$4$44&)+*:*:S*@+&NG+/>>!W+OL"<07: ($i!" !&(,q'(II+8 ()L M *a
 %NC "$4$44  1."X "UI&	s,   AB; ;BJ C*J,:J)J>JJc                     U (       a  [         R                  O[         R                  n[        SUS9  [        SUS9  [        SUS9  [        SUS9  [        SUS9  U (       a  S$ S$ )	Nz/Usage: gdalcompare.py [--help] [--help-general])filezC                      [-dumpdiffs] [-skip_binary] [-skip_overviews]z>                      [-skip_geolocation] [-skip_geotransform]z>                      [-skip_metadata] [-skip_rpc] [-skip_srs]z5                      [-sds] <golden_file> <new_file>r   r   )sysstderrstdoutprint)isErrorfs     r   Usager     sZ    

3::A	
;!D	
OVWX	
JQRS	
JQRS	
AJ1Qr    c                 j   [         R                  " U 5      n U c  gS nS nSn/ nSnU[        U 5      :  Ga-  X   S:X  a	  [        SS9$ X   S:X  a  SnOX   S:X  a  UR	                  S5        OX   S	:X  a  UR	                  S
5        OX   S:X  a  UR	                  S5        OX   S:X  a  UR	                  S5        OX   S:X  a  UR	                  S5        OxX   S:X  a  UR	                  S5        O^X   S:X  a  UR	                  S5        ODX   S:X  a  UR	                  S5        O*Uc  X   nO"Uc  X   nO[        SX   -   5        [        5       $ US-   nU[        U 5      :  a  GM-  [        U 5      S:X  a
  [        5       $ [        XX45      n[        S[        U5      -   5        [        R                  " U5        g )Nr   r
   z--helpF)r   z-sdsz
-dumpdiffsr"   z-skip_binaryr   z-skip_overviewsrO   z-skip_geolocationr}   z-skip_geotransformrz   z-skip_metadatarP   z	-skip_rpcr|   z	-skip_srsry   zUnrecognised argument: zDifferences Found: )r   GeneralCmdLineProcessorr   r   appendr   r   r   r   r   exit)argvr   r   r   r   rG   r   s          r   mainr     s   ''-D| KHIG	A
c$i-7h''WIW$NN<(W&NN=)W))NN+,W++NN-.W,,NN./W((NN?+W#NN:&W#NN:& 'KwH .897NEU c$i-Z 4yA~w;)EJ	
#j/
12HHZr    __main__)N)FN)T)r1   r   rU   r   r   osgeor   r   osgeo_utils.auxiliary.baser   r   r   r   rK   r^   rr   r   r   boolr   r   r   r   __name__r    r    r   <module>r      s   @    	 
  5+`+3bx|2Vx@ 	DDD DT  hh ?D zHHT#((^ r    