
    'j                    N   d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d dlZddlmZ ddlmZmZmZ erd dlmZ  ej        d	          ZddZd eD             Zd eD             Ze                    d           eez  ZeZd dZd!d"dZd e
ed          iZd#dZd#dZ d$dZ!dS )%    )annotations)IterableOptionalTYPE_CHECKINGSequenceAnyIterator)partialN   )DXFTag)POINT_CODESNONE_TAGVALID_XDATA_GROUP_CODES)TagsezdxftaggerIterable[DXFTag]returnIterator[DXFTag]c              #  B  K   d}| D ]}|j         dk    r_|7t          |d         j                  }t          |         |          E d{V  d}t          |j                  t          v r
|g}t          }n||                    |           t          }|t          ur|V  dS )zReorder coordinates of legacy DXF Entities, for now only LINE.

    Input Raw tag filter.

    Args:
        tagger: low level tagger

    Nr   )code_svalueCOORDINATE_FIXING_TOOLBOXr   append)r   	collectortagentitys       L/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/lldxf/repair.pytag_reorder_layerr       s       !%I  8q==$IaL.//4V<YGGGGGGGGG 	#)}} 999 E	$  %%%hIII%     c                    h | ]}|d z   S )
    .0r   s     r   	<setcomp>r'   8       5554"9555r!   c                    h | ]}|d z   S )   r$   r%   s     r   r'   r'   9   r(   r!   &   c           	   #  `  K   dfd}d}d}g }d| D ]+}|d         }|dk    r||rq||k    rkt          |          dk    r	|E d{V  n;t                              d	t          |d                     |            z              |                                 |t
          v r |d
z   }|dz   }|                    |           ||k    r#|                    |           |d
z  }||k    rd}|t          vr|V  |t          v rdnd}t                              d| dt          |            |            z              -t          |          dk    r=t                              d	t          |d                     |            z              dS t          |          dk    r
|E d{V  dS dS )zFilter invalid and misplaced point group codes.

    - removes x-axis without following y-axis
    - removes y- and z-axis without leading x-axis

    Args:
        tagger: low level tagger

    r   strc                 <     rdt           d                    S dS )Nzin entity #r    )r   )
handle_tags   r   r   z*filter_invalid_point_codes.<locals>.entityL   s*     	4JqM!2!24442r!   r   N   r   zremove misplaced x-axis tag: r#   r*   zy-axiszz-axiszremove misplaced z tag: r   r-   )	lenloggerinfor-   clearX_CODESr   INVALID_CODESINVALID_Y_CODES)	r   r   expected_codez_codepointr   r   axisr0   s	           @r   filter_invalid_point_codesr?   A   s/           MFEJ  1v199J 	T]**5zzA~~         CCaMMCCffhhN   KKMMM7?? 2IMBYFLL]""LLRMv%% " =((				#'?#:#:xx>>>CHH>>I    5zzQCCaMMCCffhhNOOOOO	Ua 
r!   r#      tagsr   codesSequence[int]c                f  
 fd}d
fd}t           |                      }i 
g }d }| D ]B}|j        |v r"|
|j        <   ||                     |          }-|                    |           Ct	          
          dk    r| S g }D ] }	|                     ||	                     !||||<   |S )Nc               3  :   K   D ]} | V  | dz   V  | dz   V  d S Nr#   r*   r$   )r   rC   s    r   extend_codesz*fix_coordinate_order.<locals>.extend_codes~   sE       	 	DJJJ)OOO)OOOO	 	r!   r   intc              3     K   	 |          V  n# t           $ r Y nw xY w	 | dz            V  n# t           $ r Y nw xY w	 | dz            V  d S # t           $ r Y d S w xY wrG   )KeyError)r   coordinatess    r   
get_coordsz(fix_coordinate_order.<locals>.get_coords   s      	d##### 	 	 	D		dRi((((( 	 	 	D		dRi(((((( 	 	 	DD	s*   
 
/ 
<< A 
AAr   )r   rI   )	frozensetr   indexr   r4   extend)rB   rC   rH   rM   coordinate_codesremaining_tags
insert_posr   ordered_coordsr   rL   s    `        @r   fix_coordinate_orderrU   }   s              !00KNJ ' '8'''$'K!!!ZZ__
!!#&&&&
;1 N 0 0jj..////,:N:j()r!   LINE)rC   c                    d | D             S )Nc              3  6   K   | ]}|j         t          v |V  d S )N)r   r   )r&   r   s     r   	<genexpr>z3filter_invalid_xdata_group_codes.<locals>.<genexpr>   s/      GGC38/F#F#FC#F#F#F#FGGr!   r$   )rB   s    r    filter_invalid_xdata_group_codesrZ      s     HG4GGGGr!   c           
   #  z  K   d}d}d}| D ]}|dz  }|j         dk    r%|j        }t          |j                  dk    rd}nwd}nt|j         |k    ri	 t          |j        d           nR# t          $ rE t
                              d	t          |j                   d
t          |           d|            Y w xY w|V  d S )Nr1   r2   r/      r   DIMSTYLEi      zskipped invalid handle "z" in DXF entity "z" near line )r   r   r   rI   
ValueErrorr5   warning)rB   linehandle_codestructure_tagr   s        r   filter_invalid_handlesre      s     DKM  	8q==IM#)}}
**!X$$CIr""""   Ir#)}} I I#%m#4#4I IBFI I    				# s   A$$AB32B3r-   c                ^    t          | t                    r|                     dd          S | S )Nasciiignore)encodingerrors)
isinstancebytesdecode)bs    r   r   r      s/    !U ;xxx:::Hr!   )r   r   r   r   )r   r   r   r   )r@   )rB   r   rC   rD   )rB   r   r   r   r3   )"
__future__r   typingr   r   r   r   r   r	   	functoolsr
   loggingrB   r   typesr   r   r   ezdxf.eztypesr   	getLoggerr5   r    r:   INVALID_Z_CODESremover9   r8   r?   rU   r   rZ   re   r   r$   r!   r   <module>rx      s   # " " " " "                             A A A A A A A A A A #""""""		7	#	#   B 6555555555   r   /1
9 9 9 9x. . . . .d GG(999 
H H H H   0     r!   