
    'i                     f   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	d dl
Z
d dlZd dlZd dlmZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlmZmZmZ d dlmZ d dlmZ d d	lmZ  ej>                           ej@                  d
      Z! ej@                  d      Z" ej@                  d      Z# ej@                  d      Z$ ej@                  d      Z% ej@                  d      Z& ej@                  d      Z' ej@                  d      Z( ejR                  ejT                  d        ejV                  e,      Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4deeee5         deeee5         fdZ6d Z7d Z8d a9d dl
Z
d dlZd dlZd dl	Z	d d l:m;Z;m<Z< d d!lmZmZ d dlZd dlZd" Z=d d#l>m?Z? d$ Z@d d gZAd% ZBd& ZCd' ZDd( ZEd) ZFd* ZGd+ ZHd, ZId d-lJ d dlKZKd dlLZLd. ZMd dlZd/ ZNd0 ZOd1 ZPd2 ZQd3 ZRd4 ZSd5 ZTd d6lUmVZV d7 ZWd8 ZXd9 ZYd d:lZm[Z[m\Z\ d d;l]m^Z^m_Z_ d< Z`d= Zad d>lbmcZc d? Z@d d@ldmeZe dA ZfdB Zge,dCk(  r	 e=dD      Zhyy)E    N)
parse_path)svg2png)Counter)generatepdf)PointPolygon
LineString)defaultdict)List)lines_to_svg
INPUT_TEMP	S3_DOMAIN
S3_PDF_DIRAWS_ACCESS_KEYAWS_SECRET_KEY
AWS_REGIONAWS_S3_BUCKET
OCR_SERVERz%%(asctime)s %(levelname)s %(message)s)levelformatc                    	 | syg }d }d }| D ]  }|d   }|d   }|d   }|r||k7  r-|j                  d|j                   d|j                          |}||k(  r|j                  d       n|dk(  r,|j                  d	|j                   d|j                          nn|d
k(  ri|d   }|d   }	|j                  d|j                   d|j                   d|	j                   d|	j                   d|j                   d|j                          |} dj                  |      S # t        $ r}
t
        j                  d|
         d }
~
ww xY w)N r      zM  ZlzL c      zC zError in SvgToD: )appendxyjoin	Exceptionloggererror)geometry_datapath_commandssubpath_start_pointprevious_end_pointsegmentseg_typestart_point	end_pointcontrol1control2es              D/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/pydep/main.pySvgToDr4   (   sm   ""!$ 	+GqzH!!*KI%8J)J$$r+--+--%IJ&1#//$$S)s?!((2ikk]!IKK=)IJ_&qzH&qzH!((XZZL(**Qxzzl!HJJ<qQZQ\Q\P]]^_h_j_j^kl "++	+. xx&& (,-s   D DD 	E'E  Ec                    t         j                  d       	 t        j                  |       }|j	                          t        |d      5 }|j                  |j                         d d d        y # t        j
                  j                  $ r1}t         j                  d|  d|        t        d|  d|       d }~ww xY w# 1 sw Y   y xY w)NzCalled DownloadFilezFailed to download file from z: wb)r&   inforequestsgetraise_for_status
exceptionsRequestExceptionr'   RuntimeErroropenwritecontent)urlLocalFileNameresponser2   fs        r3   DownloadFilerE   N   s    
KK%&G<<$!!# 
mT	" "a	  !" " // G4SEA3?@:3%r!EFFG" "s#   %A- B>-B;
,B66B;>Cc                 ^   t         j                  d       	 g }g }g }| D ]  }	 |d   }|j                  dd      dk7  r|d   dk(  s|d   dk(  rC|d	   d
   d	   ||d	   d
   d
   z
  g|d	   d   d	   ||d	   d   d
   z
  gg}|j                  |       |d   dk(  r]|d	   d
   d	   ||d	   d
   d
   z
  g|d	   d   d	   ||d	   d   d
   z
  gg}|d   dk(  r|j                  |       n|j                  |        |||dS #  Y xY w# t        $ r}t         j                  d|         d }~ww xY w)NzCalled ExtractLandLinesitemscolorr   )        rI   rI   widthg      @       @r   r   r         ?dashes[ 30 10 1 3 1 3 1 10 ] 1)line3line1line1_zError in ExtractLandLines: )r&   r7   r9   r!   r%   r'   )	drawingscanvas_heightrO   rP   rQ   drawingtempcrdr2   s	            r3   ExtractLandLinesrW   Y   s   
KK)** 	Gw';;wr*o=7#s*gg.>#.E GAJqM-$q'!*Q-*GH4PQ7ST:VW=YfimnoipqristuivYvJwxCLL%7#s* GAJqM-$q'!*Q-*GH4PQ7ST:VW=YfimnoipqristuivYvJwxCx(,FFc*S)	F eV<<+*  21#67s9   D C>D B8C>6D >D D 	D,D''D,c                 ~    	 | d   d   | d   d   k(  ryy# t         $ r}t        j                  d|         d }~ww xY w)Nr   r   r    r   TFzError in CheckDot: )r%   r&   r'   )countr2   s     r3   CheckDotrZ      sL    8A;%(1+% *1#./s    	<7<c                 ^   	 g }t        t        |             D ]a  }| |   }|d   dk(  st        ||dz         D ]"  }	 | |   }|d   dk(  s|j                  |       $ t        |      dk(  rt        |      r yg }c y#  Y  %xY w# t        $ r}t
        j                  d|         d }~ww xY w)Nr   r      TFzError in PathHasDot: )rangelenr!   rZ   r%   r&   r'   )pathrY   isegjseg_r2   s          r3   
PathHasDotrd      s    s4y! 	Aq'C1v}q!a% +A#Aw Aw#~T*+ u:?#	   ,QC01s?   &B B A=B 
-B 8B =B?B 	B,B''B,c                 (   t         j                  d       	 g }g }| D ]E  }|d   dk(  r|j                  |       |d   dk(  s&t        |d         r5|j                  |       G ||dS # t        $ r}t         j                  d|         d }~ww xY w)NzCalled ExtractTextDfill)rL   rI   rI   )rI   rI   rL   rG   )rbzError in ExtractTextD: )r&   r7   r!   rd   r%   r'   )rR   rS   rg   rh   rT   r2   s         r3   ExtractTextDri      s    
KK%& 	&Gv/1!O3!''"23HHW%	& !} .qc23s#   +A* A* A* *	B3BBc                 .   t         j                  d       	 d}d}t        | t        |       dz
     d         }ddj	                  |j                  d      dd        z   }t        |      \  }}t        j                  d|      \  }}|j                         }d	d
|dffg}	t        j                  t        |	      }
t        |
j                                |
j                         d   d   d   d   S # t        $ r}t         j!                  d|         d }~ww xY w)NzCalled ExtractScaler   r   r   rG   M   .pngimagez	image.png	image/pngfilesresultstextzError in ExtractScale: )r&   r7   r4   r^   r$   splitMakeSvgImagecv2imencodetobytesr8   postocr_urlprintjsonr%   r'   )rR   indsvg	path_dataimgheight_img_encoded	img_bytesrq   rC   r2   s               r3   ExtractScaler      s   
KK%&8CM!O4W=>	#((9??3#7#<==	!),
Ffc2;'')	KK@AB==6hmmo}}q!),Q/77 .qc23s   CC- -	D6DDlinesreturnc                     t         j                  d       	  G fdd      t        t              }| D ]F  } |d   d   |d   d         } |d   d   |d   d         }||xx   dz  cc<   ||xx   dz  cc<   H g }| D ]O  } |d   d   |d   d         } |d   d   |d   d         }||   dkD  s6||   dkD  s?|j	                  |       Q |S # t
        $ r}t         j                  d|         d }~ww xY w)NzCalled remove_floating_linesc                   .    e Zd ZdedefdZ fdZd Zy)$remove_floating_lines.<locals>.Pointr"   r#   c                      || _         || _        y Nr"   r#   )selfr"   r#   s      r3   __init__z-remove_floating_lines.<locals>.Point.__init__   s        c                     t        |      xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )
isinstancer"   r#   )r   otherr   s     r3   __eq__z+remove_floating_lines.<locals>.Point.__eq__   s7    !%/[DFFegg4E[$&&TYT[T[J[[r   c                 l    t        t        | j                  d      t        | j                  d      f      S )N   )hashroundr"   r#   )r   s    r3   __hash__z-remove_floating_lines.<locals>.Point.__hash__   s(    U4661-uTVVQ/?@AAr   N)__name__
__module____qualname__floatr   r   r   )r   s   r3   r   r      s"    % E \Br   r   r   r   z Error in remove_floating_lines: )r&   r7   r
   intr!   r%   r'   )r   point_countlinearh   resultr2   r   s          @r3   remove_floating_linesr      s/   
KK./		B 		B "#& 	 Dd1gaj$q'!*-Ad1gaj$q'!*-ANaNNaN		   	$DtAwqzDGAJ/Ad1gaj$q'!*-A1~!k!nq&8d#		$  7s;<s$   BC 8C C 	C=C88C=c                    t         j                  d       	 | sg S t        t              }t	               }| D ]d  \  }}t        |      t        |      }}||f|vs#||f|vs*||   j                  |       ||   j                  |       |j                  ||f       f |sg S t        |j                         d       }|g}|d }	t        |      dz  }
d}||
k  r|dz  }|   }|D cg c]
  }||	k7  s	| }}|snft        |      dkD  r-|	+d   |	d   z
  d   |	d   z
  fd}t        ||      }n|d   }||k(  rn ||v rn|j                  |       }	|||
k  rt        |      dk  r;t         j                  d	t        |       d
       t        |j                               S |S c c}w # t        $ r}t         j                  d|         d }~ww xY w)NzCalled lines_to_ringc                     | d   | d   fS )Nr   r    )ps    r3   <lambda>zlines_to_ring.<locals>.<lambda>  s    qtQqTl r   keyr   r   r   c                     | d   d   z
  }| d   d   z
  }t        j                        }t        j                  ||      }||z
  dt         j                  z  z  }|S )Nr   r   r   )mathatan2pi)	next_ptdx_outdy_outangle_in	angle_outdiffcurrentdx_indy_ins	         r3   
angle_diffz!lines_to_ring.<locals>.angle_diff  sc    $QZ'!*4F$QZ'!*4F#zz%7H $

66 :I%0Q[ADKr   r    z!lines_to_ring produced ring with z points, expected at least 3zError in lines_to_ring: )r&   r7   r
   listsettupler!   addminkeysr^   warningr%   r'   )r   connectionsedge_setp1p2pt1pt2startringpreviousmax_iterations
iterations	neighborsn
candidatesr   
next_pointr2   r   r   r   s                     @@@r3   lines_to_ringr      s*   
KK&'TI "$'5 	)FBRy%)CSz)sCj.HC '',C '',c3Z(	) I K$$&,BC w[)A-
>)!OJ#G,I &/@!x-!@J@ :"x';
Xa[0
Xa[0  !<
']
 U" T! KK
#H GU >)Z t9q=NN>s4ykIefg((*++[ A^  /s34sV   F4 =F4 F4 #A F4 $AF4 *
F/5F/9A*F4 $AF4 -F4 /F4 4	G=GGc                    	 t        |       }|j                         \  }}}}||z
  }||z
  }d}d}	d}
|dkD  r|
|z  nd}||z  }||z  }||z
  dz  ||z  z
  }|	|z
  dz  ||z  z
  }d| d|	 d	| d
|	 d| d| d| d|  d}t        |j                  d      d      }t	        j
                  |t        j                        }t        j                  |t        j                        }|j                  d   |k7  s|j                  d   |	k7  r(t        j                  |||	ft        j                        }||fS # t        $ r}t        j                  d|         d }~ww xY w)N   #   rl   r   r   r   z/<svg xmlns="http://www.w3.org/2000/svg" width="z
" height="z" viewBox="0 0 r   zS">
    <rect width="100%" height="100%" fill="white"/>
    <g transform="translate(,z) scale(z)">
        <path d="zu" fill="black" stroke="black" stroke-width="0.5"/>  <!-- Added thin stroke for edge crispness -->
    </g>
    </svg>zutf-8rK   )
bytestringscale)interpolationzError in MakeSvgImage: )r   bboxr   encodenp
frombufferuint8rv   imdecodeIMREAD_COLORshaperesize
INTER_AREAr%   r&   r'   )dr_   xminxmaxyminymaxrJ   r   canvas_widthrS   text_heightr   scaled_widthscaled_heighttxtysvg_datapng_datanparrr   r2   s                        r3   ru   ru   E  s   .!}!%dD$t  )/
f$ u} \)Q.=m+q04%<? G|nT^_l^mm|  ~J  }K  KL  MZ  L[ [D"XeW 5  hoog&>cJh1ll5#"2"23 99Q<<'399Q<=+H**S<"?s~~^C
 F{ .qc23s   D0D3 3	E<EE)ThreadPoolExecutoras_completed)r   r   c           
      2	   t        j                         }|j                  d       	 t        t        dz   t
        z   | z   t        | z          t        j                  t        | z         d   }|j                         }|j                  }t        |j                        }t        |j                        }t        j                  t        | z          t!        ||      }t        t#        |            |d<   t%        ||      }g |d<   t'        d       g }	t)        |d         D ]c  \  }
}	 t+        t-        |d               \  }}t/        j0                  d|      \  }}|j3                         }|	j5                  d	d
|
 d|dff       e t=        j>                  t@        |	      }t)        |d         D ]z  \  }
}|jC                         |
   }|d   stE        |d         dkD  s1|d   d   d   dk(  r@|d   }|d   j5                  |d   d   d   |d   ||d   z
  |d   ||d   z
  gd       | g |d<   tG        |d         }tI        |      }d }|D cg c]  } |||       }}tK        |      }t'        d       g }	g }t)        |d         D ]  \  }
}	 |jM                  tO        |d   d   |d   d               s/|jM                  tO        |d   d   |d   d               sWt+        t-        |d               \  }}|dkD  rwt/        j0                  d|      \  }}|j3                         }|	j5                  d	d
tE        |	       d|dff       |j5                  |
|f        t=        j>                  t@        |	      }t)        |      D ]n  \  }\  }}|jC                         |   }|d   s"tE        |d         dkD  s4|d   }|d   j5                  |d   d   d   |d   ||d   z
  |d   ||d   z
  gd       p tC        jP                  |      S # t6        $ r-}|j9                  d|j;                                 Y d }~ y d }~ww xY wc c}w # t6        $ r}|j9                  d|        Y d }~ y d }~ww xY w# t6        $ r}|j9                  d|         d }~ww xY w)NzCalled ExtractPdfz/fmb_refixing/r   Scalerg   zr itemsrG   rm   rn   image_ro   zError in ExtractPdf OCR r: rp   successrr   rs   r   rectr   r   r    )rs   r   rh   rO   c                     | d   || d   z
  fS )Nr   r   r   )ptrS   s     r3   flip_point_verticallyz)ExtractPdf.<locals>.flip_point_vertically  s    qE=2a5011r   zb itemsF   zError in ExtractPdf OCR b: zError in ExtractPdf: ))logging	getLoggerr7   rE   S3DomainS3PdfDir	inputsDirfitzr>   get_drawingsr   r   rJ   r   osremoverW   r   ri   r{   	enumerateru   r4   rv   rw   rx   r!   r%   r'   with_tracebackr8   ry   rz   r|   r^   r   r   r   containsr   dumps)PdfNamer&   pagerR   	page_rectr   rS   rtntextDrq   r}   itemr   r   r   r   r   r2   rC   r   r   outer_polygonr   r   flipped_outer_polygonpolygonprocessed_items
result_indorig_inds                                r3   
ExtractPdfr    s    F
KK#$\X 008;gEySZGZ[yyW,-a0$$&II	9??+I,,-
		)g%&x7<12GX}5
 Ci"5:. 	IC*6$w-+@AV!$fc!:;'//1	g&T(:I{'STU	 ==6"5:. 		IC]]_S)Fi S	):%;a%?)$Q'/25F|C"9-a08!!Wmd1g&=tAwX\]^X_H_`! 		 C-c'l;%m4	2 Ub bb!6r=!I b b/0i"5:. 	IC''d6l1otF|A(OP''d6l1otF|A(OP +6$w-+@AV B;!$fc!:;'//1	g&UD(A9k'Z[\&&T{3%	. ==6,5o,F 	(J(4]]_Z0Fi S	):%;a%?F|C"9-a08!!Wmd1g&=tAwX\]^X_H_`! 		 zz#  :1;K;K;M:NOP0 !c2  :1#>?  ,QC01s   C:Q3 "AP
?A	Q3 	Q3 A1Q3 Q0Q3 'Q4Q3 5'QQ3 Q<Q3 =AQA	Q3 &Q3 8AQ3 
	Q "P;5Q3 ;Q  Q3 	Q0Q+%Q3 +Q00Q3 3	R<RR)
polygonizec                    t         j                  d       	 t        j                  |       }|d   }|d   |d   z   }|D cg c]  }t	        |       }}t        t        |            }t        |j                               }t        |j                               }t        |      D ]  \  }	}
t        |
d   |
d         ||	<    t        |      }t        ||      }i }t        t        |            D ]  }
||
   |||
   <    t        j                  |d      S c c}w # t         $ r}	t         j#                  d|	         d }	~	ww xY w)	Nz"Called getSubdiv (Shapely version)r   r   r   XY)indentError in getSubdiv: )r&   r7   r|   loadsr	   r   r  r   valuesr  r   CreateSubDivWallsget_subdivision_edgesr]   r^   r  r%   r'   )crd_jsonrV   cordsr   r   
line_geomspolygons
seedLabels
seedValuesr2   r`   wall_segmentssubdivs                r3   	getSubdivr&    s?   
KK45jj"AAQ 4994j&9
9 
:./%**,'
%,,.)
Z( 	2CAa!!C&!C&1JqM	2$U+-h
Cs=)* 	5A$1!$4F:a=!	5 zz&++! :$  +A3/0s*   )D  DCD D 	E$D==Ec                    t         j                  d       	 t        j                  t	        | d   dz         t	        | d   dz         dft        j
                        }d}g }| d   D ]  }t	        | d   |d	      d	         t	        | d   |d	      d         f}t	        | d   |d      d	         t	        | d   |d      d         f}|d
d
f}t        j                  ||||d       |dz  }|j                  |        t        j                  |t	        | d   |   d	         t	        | d   |   d               }	t        t        t        |	            }
|
j                         D cg c]  \  }}|dk\  st	        |       }	}}d	}|	D ]  }||dz
     |	|<   |dz  } |	S c c}}w # t        $ r}t         j!                  d|         d }~ww xY w)NzCalled get_div_cordsy_maxr   x_maxr    )dtyper   r  r      subdivision_list   zError in get_div_cords: )r&   r7   r   zerosr   r   rv   r   r!   customFloodFillprocessr   mapstrrG   r%   r'   )resseedrn   r}   ref_arrr`   speprH   line_indbucr   rY   r2   s                 r3   get_div_cordsr:    s   kk()((CGQ/S\!^1DaHPRPXPXY%#'w<  aGQqT*1-.s3w<!3Ea3H/IJbGQqT*1-.s3w<!3Ea3H/IJb3smehhub"eQ/QhcnnQ  %,,U3s;M7Nt7TUV7W3XY\]`as]tuy]z{|]}Y~(C*+#14K:3
c#hK(K! a%aclQ / L  
,,1!5
6
s0   EF! "F0F=F! F! !	G*GGc                     t         j                  d       	 t        j                  || z
  dz  ||z
  dz  z         }|S # t        $ r}t         j                  d|         d }~ww xY w)NzCalled calculate_distancer   zError in calculate_distance: )r&   r7   r   sqrtr%   r'   )x1y1x2y2distancer2   s         r3   calculate_distancerB  "  sc    
KK+,99b2g!^rBw1n<= 4QC89s   %= 	A$AA$c                     	 t        |       }d}t        |      D ]&  }| |   \  }}| |dz   |z     \  }}|||z  ||z  z
  z  }( t        |      dz  S # t        $ r}t        j                  d|         d }~ww xY w)Nr   r   r   zError in calculate_area: )r^   r]   absr%   r&   r'   )	pointsr   arear`   r=  r>  r?  r@  r2   s	            r3   calculate_arearG  +  s    
Kq 	&AAYFBQUaK(FBBGb2g%%D	& 4y1} 045s   AA 	A8A33A8c                 "   t         j                  d       	 | d   j                         D ]4  \  }}|d   D cg c]  }| d   |   d    }}t        |      | d   |   d<   6 y c c}w # t        $ r}t         j                  d|         d }~ww xY w)NzCalled updateArear,  r   coordinatesr   r   zError in updateArea: )r&   r7   rG   rG  r%   r'   )datar   valuepointcycle_pointsr2   s         r3   
updateArearN  9  s    
KK#$1288: 	LJCGLQxPeD/6q9PLP/=l/KD#$S)!,	LP ,QC01s(    A' A"	A' "A' '	B0B		Bc                 $   	 ||z
  }||z
  }|| z
  }	||z
  }
|dz  |dz  z   }d|	|z  |
|z  z   z  }|	dz  |
dz  z   |dz  z
  }|dz  d|z  |z  z
  }|dk  rdgS | t        j                  |      z
  d|z  z  }| t        j                  |      z   d|z  z  }d|cxk  rdk  sn d|cxk  rdk  r8n n5|||z  z   }|||z  z   }|||z  z   }|||z  z   }||z   dz  }||z   dz  }d||gS ddgS # t        $ r}t        j	                  d|         d }~ww xY w)	Nr   r\   r   Fr   Tnotreqz#Error in circle_line_intersection: )r   r<  r%   r&   r'   )r=  r>  rg   r?  r@  x3y3dxdyfxfyr   rh   r   discriminantt1t2intersection_x1intersection_y1intersection_x2intersection_y2final_xfinal_yr2   s                           r3   circle_line_intersectionr`  C  s~   &"W"W "W"W EBEMb27"#EBEMAqD  !ta!eai'!7N b499\**q1u5b499\**q1u5 <a<1<a< 27lO 27lO 27lO 27lO&8A=G&8A=G))h :1#>?s%   AC( BC( $C( (	D1D

Dc           
      r   t         j                  d       	 | d   }g }d}|D ]  }|d   }|d   dk7  r||d   k7  r||d   k7  r|d   |d   }	}| d   |d      d   d   | d   |d      d   d   }}
| d   |d      d   d   | d   |d      d   d   }}t        ||	d|
|||      }|d   d	k(  rG|d   }|d
   }||g| d   |   d<   |d   |g||   d<   |j                  |d   |g|d   |d   dd        n|dz  } |j	                  |       || d<   | S # t
        $ r}t         j                  d|         d }~ww xY w)NzCalled updatelinesr   r   rI  rM   rN   r   r    Tr   strokewidth)rI  rM   rb  lengthzError in updatelines: )r&   r7   r`  r!   extendr%   r'   )rJ  id
coordinater   	new_linesrb   r`   lcoordsr=  r>  r?  r@  rQ  rR  r   r"   r#   r2   s                     r3   updatelinesri  m  s   
KK$%W	 	A&G{88R71:=MRTX_`aXbRb"1z!}2]+GAJ7:1=tM?RSZ[\S]?^_`?abc?d2]+GAJ7:1=tM?RSZ[\S]?^_`?abc?d21"b!RRL !9$q	Aq	A23AD'+A./6qz"oE!H]+$$WQZOQx[ghivgw  BC  &D  EFA!	" 	YW -aS12s   C7D 	D6D11D6c                    t         j                  d       	 i }| D ]?  \  }}||vrg ||<   ||vrg ||<   ||   j                  |       ||   j                  |       A |S # t        $ r}t         j	                  d|         d }~ww xY w)NzCalled build_adjacency_listzError in build_adjacency_list: )r&   r7   r!   r%   r'   )edgesgraphuvr2   s        r3   build_adjacency_listro    s    
KK-. 	DAq~a~a!HOOA!HOOA	  6qc:;s   AA 	B(BBc                    t         j                  d       	 t        |       fdg }D ]/  }t               } ||      }t	        |      t	        |      kD  s.|}1 |S # t
        $ r}t         j                  d|         d }~ww xY w)NzCalled find_longest_pathc                     |j                  |        g }j                  | g       D ]*  }||vs ||      }t        |      t        |      kD  s)|}, |j                  |        | g|z   S r   )r   r9   r^   r  )nodevisitedmax_pathneighborr_   dfsrl  s        r3   rv  zfind_longest_path.<locals>.dfs  sr    KKH!IIdB/ (7*x1D4y3x=0#'	(
 NN4 6H$$r   zError in find_longest_path: )r&   r7   ro  r   r^   r%   r'   )rk  longest_path
start_noders  r_   r2   rv  rl  s         @@r3   find_longest_pathry    s    
KK*+$U+		%  	$JeGz7+D4y3|,,#		$  3A378s   AA" A" "	B	+BB	)*c                 ^   t         j                  d       	 |d   }t        |       \  }}}|j                  dd      }t	        j
                  |      }|d   d   }t	        j
                  |      }t        j                  |      \  \  }}\  }	}
}t        |	|
      }t        |	|
      }t	        j                  |||      }t        j                  t        j                  |      t        j                  |            }t	        j                  |      }t!        t#        |            D ]  }|||   k(  }|d   s|d   s||   } t	        j$                  |      }t!        t#        |            D ]  }|||   k(  }|d   s|d   s||   } t	        j$                  |      }t	        j                  |      }t	        j&                  ||d   d	   |      }t	        j&                  ||d   d	   |      }||d   |d   d
g||d   |d   d
ggS # t(        $ r}t         j+                  d|         d }~ww xY w)NzCalled get_relative_points
bound_rectr   r   r  pixr   r   geor   zError in get_relative_points: )r&   r7   get_pdf_boxreshapeutiloffset_points_toprv   minAreaRectmaxr   scale_polygonv2testr   arrayfind_bottom_right_point_pixr]   r^   find_top_left_point_pixpixel_to_geor%   r'   )objr}  r|  boxrE  	point_ind
pix_pointscenter_xcenter_yrJ   r   anglelongest_side
short_sidebottom_right_pdfr`   valdtop_left_pdffmb_top_leftfmb_bottom_righttop_left_wldbottom_right_wldr2   s                          r3   get_relative_pointsr    s\   
KK,-W&
*3/F9 1% ''/ ^E*
++J7

 :=9T6	(Hv 5(v&
 ##F:lC *-bhhv.>?  ;;FCs9~& 	0A$q	1DAw47#,Q< 	0
 33F;s9~& 	,A F1I-DAw47(|	, 33F;;;FC((C	N54I,W,,ZIu8MN^_<?|AGHJZ`pqr`s  yI  JK  yL  \M  JN  O  	O 5aS9:s2   DH 3H 9A H :H  BH 	H,H''H,c                     	 t        j                  | |      \  }}}}||dS # t        $ r}t        j	                  d|         d }~ww xY w)Nr   zError in latlog_to_utm: )utmfrom_latlonr%   r&   r'   )latlongeastingnorthingzone_numberzone_letterr2   s          r3   latlog_to_utmr    sR    69ooc46P3;)) /s34s   " 	A	AA	c           
         t         j                  d       	 t        | |      }t        |d   d   d   |d   d   d         }t        |d   d   d   |d   d   d         }|d   d   }|d   d   }||   d   d   ||   d   d   d}	||   d   d   ||   d   d   d}
t	        |||	|
||||      }|d   | d<   |d	   | d	<   | S # t
        $ r}t         j                  d
|         d }~ww xY w)NzCalled select_and_rotate_coordsr   r   r"   r#   r   
new_coordsrI  r,  z#Error in select_and_rotate_coords: )r&   r7   r  r  &update_lines_with_new_slope_and_lengthr%   r'   )rJ  rI  r,  rajaresponseret
new_coord1
new_coord2selected_point1selected_point2
old_coord1
old_coord2outr2   s                r3   select_and_rotate_coordsr    sL   
KK12!$|4"3q6!9S>3q6!9S>B
"3q6!9S>3q6!9S>B
a&)a&)%o6q9!<_A]^_A`abAcd
%o6q9!<_A]^_A`abAcd
 5Z
:V`alm|  ~M  N^  _!,/]#&'9#:  :1#>?s   B)C 	C(
C##C(c           	         t         j                  d       	 g i ddd}| d   D ]"  }|d   dk(  s|d   j                  |d          $ |d   D ]  }|D ]  }| d   |   d   }||d   |<     | d	   D ]  }| d	   |   }|d   |d   d
|z   <    t        j                  t        |d   j                                     }t        j                  |d      \  }}|d   j                         D 	
ci c]  \  }	\  }
}|	|
|z
  ||z
  g }}
}	}||d<   |d   D ]1  }|d   |   }|d   |d   k  r|d   |d<   |d   |d   k  s*|d   |d<   3 i |d	<   |d   j                         }|D ]5  }|j                  d      }|d   dk(  s|d   |   }||d	   |d   <   |d   |= 7 |S c c}}
}	w # t        $ r}t         j                  d|         d }~ww xY w)NzCalled get_pdf_box_updater   )r   r  r)  r(  r   rM   	[ 9 0 ] 1rI  r  r,  sub_)axisr)  r(  r   r   subzError in get_pdf_box_update: )r&   r7   r!   r   r  r   r  r   rG   copyrt   r%   r'   )r  line_ordr`   r2   rg   valrE  min_xmin_yr   r"   r#   offset_coordsrU   ks                  r3   get_pdf_box_updater  5  sw   
KK+,-	
 W 	CA{k) )00=1AB	C '" 	-A -!M*1-a0A+,HW%a(-	-
 '( 	3A*+A.c,/Fhwq)	3
 $x0779:;vvf1-uHPQXHYH_H_Habbfq!q5y!e)44bb)'" 	1Aw'*G$s1v-*-a&hw'G$s1v-*-a&hw'	1 (*#$ %%' 	)A''#,a1w'*58+,QqT2W%a(	) ) c*  4QC89s<   F! B=F! ,F7F! <A F! =F! F! !	G*GGc                    t         j                  d       	 t        j                  |       } | d   }| d   }| d   }t	        |j                               }t	        |j                               }||d      d   d   }||d      d   d   }||d      d   d   }||d      d   d   }	t        ||||	      }
|
dz  |z  dz  }||
z
  |
z  dz  }t        |      }t        |      }d}d}|D ]  }|||   d   d   z  }|||   d   d   z  }  |D ]  }|||   d   d   z  }|||   d   d   z  }  |||z   z  }|||z   z  }i }i }|j                         D ]G  \  }}|d   d   |z
  }|d   d   |z
  }||d|dz  z   z  z   }||d|dz  z   z  z   }||g|d   |d	   g||<   I |j                         D ]G  \  }}|d   d   |z
  }|d   d   |z
  }||d|dz  z   z  z   }||d|dz  z   z  z   }||g|d   |d	   g||<   I || d<   || d<   t        |        t        j                  |       S # t        $ r}t         j                  d
|         d }~ww xY w)NzCalled shrink_or_expand_pointsrI  r,  r   r   r   ga+e?d   r   z"Error in shrink_or_expand_points: )r&   r7   r|   r  r   r   rB  r^   rG   rN  r  r%   r'   )argsrE  subdivisionr   
point_keyssubdivision_keysr=  r>  r?  r@  initialdistnewdist
percentager   n1
centroid_x
centroid_yr   scaled_pointssubdiv_pointsrK  vector_xvector_ynew_xnew_yr2   s                             r3   shrink_or_expand_pointsr  f  sA   
KK01Hzz$m$-.W &++-(
 0 0 23JqM"1%a(JqM"1%a(JqM"1%a(JqM"1%a((RR8'%/#5+{:S@
 
O!"

 	,C&+a.++J&+a.++J	, $ 	1C+c*1-a00J+c*1-a00J	1  1r6*
1r6*
  ,,. 	FJCQx{Z/HQx{Z/HQc1A-A!BBEQc1A-A!BBE#(%.%(E!H!EM#	F &++- 	FJCQx{Z/HQx{Z/HQc1A-A!BBEQc1A-A!BBE#(%.%(E!H!EM#	F ,]#0 4 zz$ 9!=>s   HH 	I$H==Ic                     	 | }|j                         rdt        |      fS d|fS # t        $ r}t        j	                  d|         d }~ww xY w)Nr   r   zError in custom_sort_key: )isdigitr   r%   r&   r'   )r  r   r2   s      r3   custom_sort_keyr    sS    ;;=s3x= s8O 1!56s   % % 	AAAc                    t         j                  d       	 t        j                  |       } | d   }| d   }t        j                  |      }t	        | | d   | d   |      } g | d<   dt        |      z   | d<   t        t        |j                               t              | d<   t        j                  |       S # t        $ r}t         j                  d	|         d }~ww xY w)
NzCalled rotaterI  r   r,  Areassz1:r   srt_coordineteszError in rotate: )r&   r7   r|   r  r  r2  sortedr   r   r  r  r%   r'   )r  rajalatitude	longituderI  r   r2   s          r3   rotater    s    
KK zz$=)Wzz$'T--@FXAYZ^_XSZW"(k.>.>.@)A"W zz$ (,-s   BB5 5	C>CCc                     t         j                  d       	 t        j                  |       } | d   }| d   }| d   }t	        ||dz   |z         }|S # t
        $ r}t         j                  d|         d }~ww xY w)NzCalled getPDFre  memberIdrJ  -zError in getPDF: )r&   r7   r|   r  r   r%   r'   )reqre  r  rJ  r3  r2   s         r3   getPDFr    s{    
KK jjoYz?6{$x|B/
 (,-s   7A 	A6A11A6)r  c           
      J   t         j                  d       	 t        j                  |       } | d   }| d   }| d   }| d   }| d   }| d   }| d   }| d	   }t	        ||||||||      }	t        j
                  |	      S # t        $ r}
t         j                  d
|
         d }
~
ww xY w)NzCalled getRotatedCoordsr  r  r  r  rI  r  r  r,  zError in getRotatedCoords: )r&   r7   r|   r  r  r  r%   r'   )r@   r  r  r  r  rI  r  r  r,  r  r2   s              r3   getRotatedCoordsr    s    
KK)***W%\*
\*
\*
\*
m,!"34!"34"#564Z
:V`alm|  ~M  N^  _zz# 21#67s   A#A; ;	B"BB"c                 <   t         j                  d       	 t        j                  |       } | d   }| d   }|dk(  r| d   }|d   |   d   }t	        |||      }i }t        |      }|d   j                         D ]Z  \  }}|d   }	|d	   }
t        t        ||            }|D cg c]  }|d   |   d    }}t        |      }
t        |
       |	||
g||<   \ ||d<   t        j                  |      S c c}w # t        $ r}t         j                  d
|         d }~ww xY w)NzCalled updateDatarJ  eventcoordinatedragre  rI  r   r,  r   zError in updateData: )r&   r7   r|   r  ri  r  rG   ry  r:  rG  r{   r  r%   r'   )r@   rJ  r  re  rf  subdivisionsr3  r   rK  rI  rF  r_   rL  rM  r2   s                  r3   
updateDatar    sN   
KK#$**W% v $$$-R}-b1!4Zb*5T &1288: 	8JC(K8D$]3s%;<DGKLeD/6q9LLL!,/D$K!,T$ 7L	8 $0 zz$ M  ,QC01s*   B
C4 !C/3;C4 /C4 4	D=DDc                    t         j                  d       	 t        j                  |       } | d   }| d   }| d   }| d   }t        j                  t        ||||            S # t        $ r}t         j                  d|         d }~ww xY w)NzCalled SelectAndRotateCoordsrI  r,  rJ  r  z Error in SelectAndRotateCoords: )r&   r7   r|   r  r  r  r%   r'   )r@   rI  r,  rJ  r  r2   s         r3   SelectAndRotateCoordsr    s    
KK./	**W%m,"#56v~.zz24FVXdeff 7s;<s   A	A! !	B*BB)r  r  )ProjTransformerc                     t         j                  d       	 t        j                  dd|z   d      }|j	                  | d   | d         S # t
        $ r}t         j                  d|         d }~ww xY w)	NzCalled get_utm_coordinatesz	EPSG:4326zEPSG:326T)	always_xyr   r   zError in get_utm_coordinates: )r&   r7   r  from_crs	transformr%   r'   )rV   zonetransformerr2   s       r3   get_utm_coordinatesr  #  so    
KK,-!**;
4SWX$$SVSV44 5aS9:s   2A
 
	A1A,,A1c                 (	   t         j                  d       	 t        j                  |       } | d   }g i i g | j	                  dd      | j	                  dd      | j	                  dd      | j	                  dd      dd	d

}| j	                  dg       D cg c]  }|d   	 }}|| j	                  dg       D cg c]  }|d   	 c}z  }| j	                  d      rt        d | j	                  dg       D         ng g f\  }}| j	                  dg       D ci c]  }|d   }t        |      |d    }}}t        |      }	t        |	|      }
t        t        |
            D ci c]5  }||   |
|   D cg c]   }|j	                  t        |d         d      " c}7 }}}t        t        |            D ])  }||   }|
|   }t        ||   |      }|||   dg|d   |<   + |j                         D ]  \  }}t        ||      dddgg|d   |<    | j	                  dg       D ]  }t        |       |j	                  t        |d   d         d      }|j	                  t        |d   d         d      }|d   |   d   }|d   |   d   }t        |d   |d   |d   |d         }|d   j                  ||gd|dd        | j	                  dg       D ]  }|j	                  t        |d   d         d      }|j	                  t        |d   d         d      }|d   |   d   }|d   |   d   }t        |d   |d   |d   |d         }|d   j                  ||gd|dd        | j	                  dg       D ]  }|j	                  t        |d   d         d      }|j	                  t        |d   d         d      }|d   |   d   }|d   |   d   }t        |d   |d   |d   |d         }|d   j                  ||gd|dd        t!        t#        |d   j%                               t&              |d<   t)        |       t        j*                  |      S c c}w c c}w c c}}w c c}w c c}}w # t,        $ r}t         j/                  d|         d }~ww xY w) NzCalled updateFromKmlr  districtr   talukvillage	survey_noz1:1zManualy uploaded)
r   r,  rI  r  r  r  r  r  r   NoteLine1rI  Line2Text3c              3   >   K   | ]  }d |d   vr|d   |d   f  yw).labelrI  Nr   ).0r`   s     r3   	<genexpr>z updateFromKml.<locals>.<genexpr>B  s2      "
!G*$ }qz*"
s   Text2r  r   r,  mainnotmodifiedLine3r   r   rN   )rI  rM   rc  rb  r  r    r   r  zError in updateFromKml: )r&   r7   r|   r  r9   zipr   r  r  r]   r^   r  rG   r{   rB  r!   r  r   r   r  rN  r  r%   r'   )r@   r  rJ  r`   wallsseedsr"  rV   
stoneIndexr!  r$  rb   subDivseedTwallTseedCrdr   rK  r   rh   a_b_rA  r2   s                           r3   updateFromKmlr  ,  s@   
KK&'Z**W%v  "!J3[["-{{9b1 ["5&
 ,3;;w+CDa=!DDGKK,DEq!M"EE kk'"	   "
[["-"
  *,R	 	z [["-
-( #J'
"J

 
 %U+-h> 3}-.

 	 qM&q) uQqT{B/ 
 
 s:' 	HAqME!!$E)%(48G/6ve}Q.GD#$U+		H %**, 	nJC*=c$*GP]^kOl)mD&	n Wb) 		A!HuQ}%5a%892>AuQ}%5a%892>Am$Q'*Bm$Q'*B)"Q%1beBqEBHM  1@Zdl{|!}~		 Wb) 	pAuQ}%5a%892>AuQ}%5a%892>Am$Q'*Bm$Q'*B)"Q%1beBqEBHM  1U]lm!no	p Wb) 	pAuQ}%5a%892>AuQ}%5a%892>Am$Q'*Bm$Q'*B)"Q%1beBqEBHM  1U]lm!no	p #)d=.A.F.F.H)I"_4 zz$M EE

j  /s34sh   A;Q* QQ* 5QAQ* Q-1Q* Q$.%QQ$J6Q* Q* Q$$Q* *	R3RR)extract_polygon_and_holesc                    t         j                  d       	 t        j                  |       } | d   }| d   }t	        ||      \  }}t        j
                  ||d      S # t        $ r}t         j                  d|         d }~ww xY w)NzCalled getSubdivr   rE  )r%  innerSubdivr  )r&   r7   r|   r  r  r  r%   r'   )r@   r   rE  polygon_lines
hole_linesr2   s         r3   r&  r&    s    
KK"#**W% "$=eV$L!zzz]:NOO +A3/0s   AA 	B&A??B)get_broken_linesc                    t         j                  d       	 t        j                  |       } | d   }t	        |      \  }}t        j
                  ||d      S # t        $ r}t         j                  d|         d }~ww xY w)NzCalled getBrokenLinesr   )outer_linesinner_lineszError in getBrokenLines: )r&   r7   r|   r  r  r  r%   r'   )r@   r   r  r  r2   s        r3   getBrokenLinesr    sv    
KK'(**W% #3E#: [zz+kRSS 045s   ?A 	A> A99A>c                     t         j                  d       	 t        j                  |       } | d   }t	        |       | S # t
        $ r}t         j                  d|         d }~ww xY w)NzCalled lines_to_svgr   zError in lines_to_svg: )r&   r7   r|   r  r   r%   r'   )r@   r   r2   s      r3   
draw_linesr    s`    
KK%&**W% U .qc23s   &> 	A%A  A%__main__z</home/anand/MPQR/mypropertyqr-fmb-refixing-v2/TestPdfs/1.pdf)itimer   rv   numpyr   svgpathtoolsr   cairosvgr   r8   r|   r   r/  collectionsr   pdfGeneratorr   dotenvr  r   r  r  shapely.geometryr   r   r	   r
   typingr   mr   load_dotenvgetenvr   r   r   r   r   	S3_REGIONBUCKET_NAMErz   basicConfigINFOr   r   r&   r4   rE   rW   rZ   rd   ri   r   r   r   r   ru   klconcurrent.futuresr   r   r  shapely.opsr  r&  seed_point_offsetr:  rB  rG  rN  r`  ri  ro  ry  funcr  	flipMatchr  r  r  r  r  r  r  r  rotateCordsr  r  r  r  findSubDivWallsr  r  pyprojr  r  r  r  
get_subdivr  
line_worksr  r  r  rD   r   r   r3   <module>r;     sc     
  #       $  	  
 	 7 7 #      BIIl#	299[!299\"+,+,<(	?+ "))L
!   ',,/V W			8	$$L	",\. & d4;&7!8  T$tE{BS=T  DVp1f   	 
  ? +  `D #> qE :(T< 6   Yv ./bJX
* ?$@ E $\| 1
 (		 zQRA r   