
    Ѯh!                     t   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ  G d de      Zej                  d ej                  dej                  d	ej                  d
ej                  dej                  dej                  dej                   dej"                  dej$                  dej&                  diZ G d de      Zy)    N)Enum)Any)decode_value)GeoPointc                   R    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZedefd       Zy)	TypeOrderzVThe supported Data Type.

    Note: The Enum value does not imply the sort order.
    r                           	   
   returnc                 \   | j                   j                  d      }t        j                  t        j                  t        j
                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  d}||vrt        d|       |dk(  rNd| j                  j                  v r6| j                  j                  d   j                   dk(  rt        j"                  S ||   S )N
value_type)
null_valueboolean_valueinteger_valuedouble_valuetimestamp_valuestring_valuebytes_valuereference_valuegeo_point_valuearray_value	map_valuez Could not detect value type for r    __type__
__vector__)_pb
WhichOneofr   NULLBOOLEANNUMBER	TIMESTAMPSTRINGBLOBREF	GEO_POINTARRAYOBJECT
ValueErrorr    fieldsr   VECTOR)valuevluts      q/home/www/academy-backend.kofcorporation.com/venv/lib/python3.12/site-packages/google/cloud/firestore_v1/order.py
from_valuezTypeOrder.from_value)   s    II  .#..&..&--%,,(22%,,$>>(}}(22$??"))
 C<?sCDDeoo444OO**:6CC|S '''1v    N)__name__
__module____qualname____doc__r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r1   staticmethodr   r6    r7   r5   r   r      sY    
 DGFIFD
CIEFFS  r7   r   r	   r
   r   r   r   r   r   r   r   r   c                      e Zd ZdZedefd       Zedefd       Zede	fd       Z
ede	fd       Zedefd       Zedefd       Zedefd	       Zedefd
       Zedefd       Zedefd       Zedefd       Zy)OrderzA
    Order implements the ordering semantics of the backend.
    r   c                    t         j                  |      }t         j                  |      }||k7  rt        |   t        |   k  ryy|t         j                  k(  ry|t         j                  k(  r&| j                  |j                  |j                        S |t         j                  k(  r| j                  ||      S |t         j                  k(  r| j                  ||      S |t         j                  k(  r&| j                  |j                  |j                        S |t         j                  k(  r| j                  ||      S |t         j                  k(  r| j!                  ||      S |t         j"                  k(  r| j%                  ||      S |t         j&                  k(  r| j)                  ||      S |t         j*                  k(  r| j-                  ||      S |t         j.                  k(  r| j1                  ||      S t3        d|       )z
        Main comparison function for all Firestore types.
        @return -1 is left < right, 0 if left == right, otherwise 1
        r	   r   zUnknown TypeOrder )r   r6   _TYPE_ORDER_MAPr%   r&   _compare_tor   r'   compare_numbersr(   compare_timestampsr)   r   r*   compare_blobsr+   compare_resource_pathsr,   compare_geo_pointsr-   compare_arraysr1   compare_vectorsr.   compare_objectsr/   )clsleftrightleftType	rightTypes        r5   comparezOrder.compare[   s    ''-((/	y x(?9+EEy~~%***??4#5#5u7J7JKK)))&&tU33,,,))$66)))??4#4#4e6H6HII'$$T511&--dE::,,,))$66(%%dE22)))&&tU33)))&&tU331(<==r7   c                 ^    | j                   }|j                   }t        j                  ||      S N)r   r?   rC   )rM   rN   
left_bytesright_bytess       r5   rF   zOrder.compare_blobs   s+    %%
''  [99r7   c                 0   | j                   j                  } |j                   j                  }t        j                  | j                  xs d|j                  xs d      }|dk7  r|S t        j                  | j
                  xs d|j
                  xs d      S Nr   )r#   r   r?   rC   secondsnanos)rM   rN   rX   s      r5   rE   zOrder.compare_timestamps   st    xx''		))##DLL$5Au}}7IJa<N  q%++2BCCr7   c                 b   t        | d       }t        |d       }t        |t              rt        |t              st        d      |j                  |j                  kD  |j                  |j                  k  z
  }|dk7  r|S |j
                  |j
                  kD  |j
                  |j
                  k  z
  S )Nzinvalid geopoint encounteredr   )r   
isinstancer   AttributeErrorlatitude	longitude)rM   rN   
left_valueright_valuecmps        r5   rH   zOrder.compare_geo_points   s    !$-
"5$/*h/z8
 !!?@@""[%9%99+"6"66
 !8J$${'<'<<  ;#8#88
 	
r7   c                 H   | j                   } |j                   }| j                  d      }|j                  d      }t        t        |      t        |            }t	        |      D ]  }||   ||   k  r y||   ||   kD  s y t        |       }t        |      }||kD  ||k  z
  S )N/rA   r	   )r   splitminlenrange)rM   rN   left_segmentsright_segmentsshorterileft_lengthright_lengths           r5   rG   zOrder.compare_resource_paths   s    ##%%

3S)c-(#n*=>w 	AQ."33Q."33		 $i5zl*{\/IJJr7   c                 P   | j                   j                  }|j                   j                  }t        t        |      t        |            }t	        |      D ]'  }t
        j                  ||   ||         }|dk7  s%|c S  t
        j                  t        |      t        |            S rW   )r   valuesre   rf   rg   r?   rQ   rC   )rM   rN   l_valuesr_valueslengthrk   ra   s          r5   rI   zOrder.compare_arrays   s    ##**$$++S]CM2v 	A--Xa[9Cax
	
   XH>>r7   c                 D   | j                   j                  d   }|j                   j                  d   }t        |j                  j                        }t        |j                  j                        }||k7  rt
        j                  ||      S t
        j                  ||      S )Nr2   )r    r0   rf   r   ro   r?   rC   rI   )rM   rN   rp   rq   rl   rm   s         r5   rJ   zOrder.compare_vectors   s     >>((1??))'2(..5568//667,&$$[,?? ##Hh77r7   c                 ~   | j                   j                  }|j                   j                  }t        t        |      t        |            D ]I  \  }}t        j                  ||      }|dk7  r|c S t        j                  ||   ||         }|dk7  sG|c S  t        j                  t        |      t        |            S rW   )r    r0   zipsortedr?   rC   rQ   rf   )rM   rN   left_fieldsright_fieldsleft_key	right_key
keyComparevalue_compares           r5   rK   zOrder.compare_objects   s    nn++--#&vk':F<<P#Q 		%Hi**8Y?JQ!!!MMH%|I'>M !$$		%   [!13|3DEEr7   c                 ^    t        | d       }t        |d       }t        j                  ||      S rS   )r   r?   compare_doubles)rM   rN   r_   r`   s       r5   rD   zOrder.compare_numbers   s-    !$-
"5$/$$Z==r7   c                     t        j                  |       rt        j                  |      ryyt        j                  |      ryt        j                  | |      S )Nr   rA   r	   )mathisnanr?   rC   rM   rN   s     r5   r~   zOrder.compare_doubles   sB    ::dzz% ::e  u--r7   c                     | |kD  | |k  z
  S rS   r=   r   s     r5   rC   zOrder._compare_to   s    
 u..r7   N)r8   r9   r:   r;   classmethodintrQ   r<   rF   r   rE   rH   rG   rI   rJ   rK   rD   r~   rC   r=   r7   r5   r?   r?   V   s:    &>S &> &>P :c : : D3 D D 
3 
 
" Ks K K$ 
?s 
? 
? 8 8 8 F F F" > > >
 . . . /C / /r7   r?   )r   enumr   typingr   "google.cloud.firestore_v1._helpersr   r   r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r1   r.   rB   objectr?   r=   r7   r5   <module>r      s       ; 7, ,b NNAqaaNNAMM1OOQabi/F i/r7   