
    JȂi'                     2    S r SSKJr  \ " S S5      5       rg)z
This module contains a base type which provides list-style mutations
without specific data storage methods.

See also http://static.aryehleib.com/oldsite/MutableLists.html

Author: Aryeh Leib Taurog.
    )total_orderingc                      ^  \ rS rSrSrSrSrU 4S jrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS#S jrS rS rS$S jrS rS rS rS rS r S r!S  r"S! r#S"r$U =r%$ )%	ListMixin   a  
A base class which provides complete list interface.
Derived classes must call ListMixin's __init__() function
and implement the following:

function _get_single_external(self, i):
    Return single item with index i for general use.
    The index i will always satisfy 0 <= i < len(self).

function _get_single_internal(self, i):
    Same as above, but for use within the class [Optional]
    Note that if _get_single_internal and _get_single_internal return
    different types of objects, _set_list must distinguish
    between the two and handle each appropriately.

function _set_list(self, length, items):
    Recreate the entire object.

    NOTE: items may be a generator which calls _get_single_internal.
    Therefore, it is necessary to cache the values in a temporary:
        temp = list(items)
    before clobbering the original storage.

function _set_single(self, i, value):
    Set the single item at index i to value [Optional]
    If left undefined, all mutations will result in rebuilding
    the object using _set_list.

function __len__(self):
    Return the length

int _minlength:
    The minimum legal length [Optional]

int _maxlength:
    The maximum legal length [Optional]

type or tuple _allowed:
    A type or tuple of allowed item types [Optional]
r   Nc                    > [        U S5      (       d  U R                  U l        [        U S5      (       d"  U R                  U l        U R
                  U l        [        TU ]   " U0 UD6  g )N_get_single_internal_set_single)	hasattr_get_single_externalr   _set_single_rebuildr	   _assign_extended_slice_rebuild_assign_extended_slicesuper__init__)selfargskwargs	__class__s      UD:\sksbv-state-backend\venv\Lib\site-packages\django/contrib/gis/geos/mutable_list.pyr   ListMixin.__init__>   sZ    t344(,(A(AD%t]++#77D*.*M*MD'$)&)    c                     [        U[        5      (       a>  [        UR                  [	        U 5      5      6  Vs/ sH  o R                  U5      PM     sn$ U R                  U5      nU R                  U5      $ s  snf )z-Get the item(s) at the specified index/slice.)
isinstanceslicerangeindiceslenr   _checkindex)r   indexis      r   __getitem__ListMixin.__getitem__H   so    eU##6;U]]3t9=U6V6V))!,6V  $$U+E,,U33s   A6c                 \  ^ ^ [        U[        [        45      (       d  [        SU-  5      e[	        T 5      n[        U[        5      (       a  T R                  U5      nU/mO[        UR                  U5      6 mU[	        T5      -
  nUU 4S j[        U5       5       nT R                  X45        g)z0Delete the item(s) at the specified index/slice.%s is not a legal indexc              3   R   >#    U H  oT;  d  M
  TR                  U5      v   M     g 7fN)r   ).0r    
indexRanger   s     r   	<genexpr>(ListMixin.__delitem__.<locals>.<genexpr>`   s*      
2@QZDW(D%%a((.s   ''N)	r   intr   	TypeErrorr   r   r   r   _rebuild)r   r   origLennewLennewItemsr(   s   `    @r   __delitem__ListMixin.__delitem__R   s    %#u..5=>> d)eS!!$$U+EJg 67J3z?*
27.
 	f'r   c                     [        U[        5      (       a  U R                  X5        gU R                  U5      nU R	                  U45        U R                  X5        g)z-Set the item(s) at the specified index/slice.N)r   r   
_set_slicer   _check_allowedr	   r   r   vals      r   __setitem__ListMixin.__setitem__f   sI    eU##OOE'$$U+E'U(r   c                 ,    U R                  / U QUQ5      $ )zadd another list-like objectr   r   others     r   __add__ListMixin.__add__p   s    ~~oouo..r   c                 ,    UR                  / UQU Q5      $ )zadd to another list-like objectr;   r<   s     r   __radd__ListMixin.__radd__t   s    //r   c                 (    U R                  U5        U $ )z$add another list-like object to self)extendr<   s     r   __iadd__ListMixin.__iadd__x   s    Er   c                 <    U R                  [        U 5      U-  5      $ multiplyr   listr   ns     r   __mul__ListMixin.__mul__}       ~~d4j1n--r   c                 <    U R                  [        U 5      U-  5      $ rH   rJ   rL   s     r   __rmul__ListMixin.__rmul__   rP   r   c                     US::  a  U SS2	 U $ [        U 5      n[        US-
  5       H  nU R                  U5        M     U $ )rI   r   N   )rK   r   rD   )r   rM   cacher    s       r   __imul__ListMixin.__imul__   sE    6Q
  JE1q5\E" "r   c                     [        U5      n[        U5       H  n X   X   :H  nU(       a  M    g   [        U 5      U:H  $ ! [         a       gf = fNFr   r   
IndexErrorr   r=   olenr    cs        r   __eq__ListMixin.__eq__   s[    5ztAGux' 1  4yD    s   	?
AAc                     [        U5      n[        U5       H$  n X   X   :  nU(       a  Us  $ X   X   :  d  M$    g   [        U 5      U:  $ ! [         a       gf = f)NTFr[   r]   s        r   __lt__ListMixin.__lt__   sj    5ztAGeh& DG#  4y4  s   	A
AAc                 4    SnU  H  nX:X  d  M
  US-  nM     U$ )zStandard list count methodr   rU    )r   r7   countr    s       r   rg   ListMixin.count   s&    Ax
  r   c                 n    [        S[        U 5      5       H  nX   U:X  d  M  Us  $    [        SU-  5      e)zStandard list index methodr   z%s not found in object)r   r   
ValueError)r   r7   r    s      r   r   ListMixin.index   s8    q#d)$Aw#~ % 1C788r   c                 "    U/U [        U 5      S& g)zStandard list append methodNr   r   r7   s     r   appendListMixin.append   s     ESY[r   c                     X[        U 5      S& g)zStandard list extend methodNrm   )r   valss     r   rD   ListMixin.extend   s     SY[r   c                 T    [        U[        5      (       d  [        SU-  5      eU/XU& g)zStandard list insert methodr$   N)r   r+   r,   r6   s      r   insertListMixin.insert   s,    %%%5=>> E5r   c                     X   nX	 U$ )zStandard list pop methodrf   )r   r   results      r   popListMixin.pop   s    Kr   c                 &    X R                  U5      	 g)zStandard list remove methodN)r   rn   s     r   removeListMixin.remove   s    C!r   c                     U SSS2   U SS& g)zStandard list reverse methodNrf   )r   s    r   reverseListMixin.reverse   s    rv2v,Qr   c                     [        XUS9U SS& g)zStandard list sort method)keyr   N)sorted)r   r   r   s      r   sortListMixin.sort   s    8Qr   c                     U(       a'  XR                   :  a  [        SU R                   -  5      eU R                  b'  XR                  :  a  [        SU R                  -  5      eU R                  X5        g )NzMust have at least %d itemszCannot have more than %d items)
_minlengthrj   
_maxlength	_set_list)r   r/   r0   s      r   r-   ListMixin._rebuild   sW    f.:T__LMM??&6OO+C=OPPv(r   c                 D    U R                  [        XS-   S5      U/5        g NrU   )r4   r   )r   r   values      r   r   ListMixin._set_single_rebuild   s    eQY2UG<r   c                 ~    [        U 5      nSUs=::  a  U:  a   U$   U* Us=::  a
  S:  a   X-   $   [        SU-  5      e)Nr   zinvalid index: %s)r   r\   )r   r   lengths      r   r   ListMixin._checkindex   sO    TL 7ea>!  ,u455r   c                     [        U S5      (       a5  SU Vs/ sH  n[        X R                  5      PM     sn;   a  [        S5      eg g s  snf )N_allowedFz*Invalid type encountered in the arguments.)r
   r   r   r,   )r   itemsr7   s      r   r5   ListMixin._check_allowed   sI    4$$5I5CC75II LMM J %Is   Ac                     [        U5      nU R                  U5        [        U 5      nUR	                  U5      u  pVnUR
                  c  U R                  XVU5        gU R                  XVXs5        g! [         a    [        S5      ef = f)z&Assign values to a slice of the objectz&can only assign an iterable to a sliceN)rK   r,   r5   r   r   step_assign_simple_slicer   )r   r   values	valueListr.   startstopr   s           r   r4   ListMixin._set_slice   s    	FVI 	I&d)!MM'2T ::%%e9=''TE  	FDEE	Fs   A0 0Bc                   ^ ^^ [        XU5      n[        U5      [        U5      :w  a"  [        S[        U5      [        U5      4-  5      e[        T 5      m[        [	        XT5      5      mUUU 4S jnT R                  TU" 5       5        g)z2Assign an extended slice by rebuilding entire listBattempt to assign sequence of size %d to extended slice of size %dc               3   v   >#    [        T5       H%  n U T;   a	  TU    v   M  TR                  U 5      v   M'     g 7fr&   r   r   )r    r/   newValsr   s    r   r0   :ListMixin._assign_extended_slice_rebuild.<locals>.newItems  s6     6]<!!*$33A66	 #s   69N)r   r   rj   dictzipr-   )	r   r   r   r   r   	indexListr0   r/   r   s	   `      @@r   r   (ListMixin._assign_extended_slice_rebuild  sx    %t,	y>S^+/25i.#i.1QR  Ts901	7 	fhj)r   c                     [        XU5      n[        U5      [        U5      :w  a"  [        S[        U5      [        U5      4-  5      e[        XT5       H  u  pgU R	                  Xg5        M     g)z9Assign an extended slice by re-assigning individual itemsr   N)r   r   rj   r   r	   )r   r   r   r   r   r   r    r7   s           r   r    ListMixin._assign_extended_slice  sg    %t,	y>S^+/25i.#i.1QR 
 )/FAQ$ 0r   c                    ^ ^^^^ [        T 5      m[        TT5      mTT-
  T-   [        T5      -   nUU UUU4S jnT R                  XE" 5       5        g)z5Assign a simple slice; Can assign slice of any lengthc               3      >#    [        TS-   5       H<  n U T:X  a
  T S h  vN   U T:  d  M  U T:  d  U T:  d  M)  TR                  U 5      v   M>     g  N27fr   r   )r    r.   r   r   r   r   s    r   r0   0ListMixin._assign_simple_slice.<locals>.newItems1  sQ     7Q;':(((w;5yAI"77:: ((s   AAA
AAN)r   maxr-   )r   r   r   r   r/   r0   r.   s   ````  @r   r   ListMixin._assign_simple_slice+  sK    d)5$4%'#i.8	; 	; 	fhj)r   )r   r   r	   )r   rZ   )&__name__
__module____qualname____firstlineno____doc__r   r   r   r!   r1   r8   r>   rA   rE   rN   rR   rW   r`   rc   rg   r   ro   rD   ru   ry   r|   r   r   r-   r   r   r5   r4   r   r   r   __static_attributes____classcell__r;   s   @r   r   r      s    'R JJ*4(()/0
..
!  9"!""9
)=6N
F&*.%* *r   r   N)r   	functoolsr   r   rf   r   r   <module>r      s+    % k* k* k*r   