§
    è‘jjŠ ã                  ó4  — d dl m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 d dlmZmZmZmZ d dlmc mZ d dlmZ d d	lmZ d d
lm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z-  ej.        e/¦  «        5  d dl0m1Z1m2Z2 ddd¦  «         n# 1 swxY w Y   d dl3m4Z4 er4d dl5Z5d dlm6Z6 d dlm7Z7m8Z8 d dl9m:Z:m;Z;m<Z< e5j=        dk    rd dlm>Z> nd dl?m>Z> g d¢Z@d„d„ZAddœd…d$„ZBd†d)„ZCd*d+œd‡d4„ZDdˆd9„ZE G d:„ d8e-¦  «        ZFdd;œd‰d@„ZGdŠdA„ZHd‹d*dBœdŒdE„ZI	 d‹d*dBœdŒdF„ZJdŠdG„ZKdŠdH„ZLddK„ZMddLœdŽdP„ZNddLœddR„ZOdŠdS„ZP e ¦   «         dŠdT„¦   «         ZQ e ¦   «         dd‘dW„¦   «         ZR e ¦   «         dddXœd’d\„¦   «         ZS e ¦   «         dŠd]„¦   «         ZT e ¦   «         dŠd^„¦   «         ZUdŠd_„ZVd“da„ZWdŠdb„ZX	 	 d”d•dh„ZdŠdi„Z
d‹d–dj„ZY	 dd—dk„ZZd˜dm„Z[d™dr„Z\ddœdšds„Z]dŠdt„Z^dŠdu„Z_dŠdv„Z`dŠdw„Zaddœdšdx„Zbd›dz„ZcdŠd{„ZddŠd|„Zedœd~„Zfd*dœdd„ZgdŠd‚„ZhdŠdƒ„ZidS )žé    )ÚannotationsN)Ú
CollectionÚMappingÚSequence)ÚDecimal)Úreduce)Úor_)ÚTYPE_CHECKINGÚAnyÚNoReturnÚoverload)Ú	functions)Ú_parse_inputs_as_iterable)Úunstable)Ú	is_columnÚ	re_escape)ÚBinaryÚBooleanÚCategoricalÚDateÚStringÚTimeÚis_polars_dtype)ÚExpr)ÚPyExprÚ
PySelector)ÚNoneType)ÚIterable)Ú	DataFrameÚ	LazyFrame)ÚPolarsDataTypeÚPythonDataTypeÚTimeUnit)é   é   )ÚTypeIs)%ÚSelectorÚallÚalphaÚalphanumericÚarrayÚbinaryÚbooleanÚby_dtypeÚby_indexÚby_nameÚcategoricalÚcontainsÚdateÚdatetimeÚdecimalÚdigitÚdurationÚ	ends_withÚenumÚexcludeÚexpand_selectorÚfirstÚfloatÚintegerÚis_selectorÚlastÚlistÚmatchesÚnestedÚnumericÚsigned_integerÚstarts_withÚstringÚstructÚtemporalÚtimeÚunsigned_integerÚobjr   ÚreturnúTypeIs[Selector]c                ó,   — t          | t          ¦  «        S )a  
    Indicate whether the given object/expression is a selector.

    Examples
    --------
    >>> from polars.selectors import is_selector
    >>> import polars.selectors as cs
    >>> is_selector(pl.col("colx"))
    False
    >>> is_selector(cs.first() | cs.last())
    True
    )Ú
isinstancer'   )rL   s    úU/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/polars/selectors.pyr?   r?   ]   s   € õ c8Ñ$Ô$Ð$ó    T©ÚstrictÚtargetú4DataFrame | LazyFrame | Mapping[str, PolarsDataType]ÚselectorúSelector | ExprrT   Úboolútuple[str, ...]c               ó<  — t          | t          ¦  «        rddlm}  || ¬¦  «        } |rt	          |¦  «        s1n|j                             d¬¦  «        sd|›d}t          |¦  «        ‚t          |  	                    |¦  «         
                    ¦   «         ¦  «        S )ax  
    Expand selector to column names, with respect to a specific frame or target schema.

    .. versionadded:: 0.20.30
        The `strict` parameter was added.

    Parameters
    ----------
    target
        A Polars DataFrame, LazyFrame or Schema.
    selector
        An arbitrary polars selector (or compound selector).
    strict
        Setting False additionally allows for a broader range of column selection
        expressions (such as bare columns or use of `.exclude()`) to be expanded,
        not just the dedicated selectors.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "colx": ["a", "b", "c"],
    ...         "coly": [123, 456, 789],
    ...         "colz": [2.0, 5.5, 8.0],
    ...     }
    ... )

    Expand selector with respect to an existing `DataFrame`:

    >>> cs.expand_selector(df, cs.numeric())
    ('coly', 'colz')
    >>> cs.expand_selector(df, cs.first() | cs.last())
    ('colx', 'colz')

    This also works with `LazyFrame`:

    >>> cs.expand_selector(df.lazy(), ~(cs.first() | cs.last()))
    ('coly',)

    Expand selector with respect to a standalone `Schema` dict:

    >>> schema = {
    ...     "id": pl.Int64,
    ...     "desc": pl.String,
    ...     "count": pl.UInt32,
    ...     "value": pl.Float64,
    ... }
    >>> cs.expand_selector(schema, cs.string() | cs.float())
    ('desc', 'value')

    Allow for non-strict selection expressions (such as those
    including use of an `.exclude()` constraint) to be expanded:

    >>> cs.expand_selector(schema, cs.numeric().exclude("id"), strict=False)
    ('count', 'value')
    r   )r   )ÚschemaF)Úallow_aliasingzexpected a selector; found ú	 instead.)rP   r   Úpolars.dataframer   r?   ÚmetaÚis_column_selectionÚ	TypeErrorÚtupleÚselectÚcollect_schema)rU   rW   rT   r   Úmsgs        rQ   r;   r;   o   s¼   € õ~ &'Ñ"Ô"ð *Ø.Ð.Ð.Ð.Ð.Ð.à &Ð)Ñ)Ô)ˆð ðÝHÑÔðð ð Œ]×.Ò.¸eÐ.ÑDÔDðð
 B¨HÐAÐAÐAˆÝ˜‰nŒnÐå—’˜xÑ(Ô(×7Ò7Ñ9Ô9Ñ:Ô:Ð:rR   ÚframeúDataFrame | LazyFrameÚitemsúbuiltins.list[Any]c                óÆ   — t          |¦  «        }g }|D ]L}t          |¦  «        r&t          | |¦  «        }|                     |¦  «         Œ7|                     |¦  «         ŒM|S )as  
    Internal function that expands any selectors to column names in the given input.

    Non-selector values are left as-is.

    Examples
    --------
    >>> from polars.selectors import _expand_selectors
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "colw": ["a", "b"],
    ...         "colx": ["x", "y"],
    ...         "coly": [123, 456],
    ...         "colz": [2.0, 5.5],
    ...     }
    ... )
    >>> _expand_selectors(df, ["colx", cs.numeric()])
    ['colx', 'coly', 'colz']
    >>> _expand_selectors(df, cs.string(), cs.float())
    ['colw', 'colx', 'colz']
    )r   r?   r;   ÚextendÚappend)rg   ri   Ú
items_iterÚexpandedÚitemÚselector_colss         rQ   Ú_expand_selectorsrr   À   ss   € õ. +¨5Ñ1Ô1€Jà#%€HØð "ð "ˆÝtÑÔð 	"Ý+¨E°4Ñ8Ô8ˆMØOŠO˜MÑ*Ô*Ð*Ð*àOŠO˜DÑ!Ô!Ð!Ð!Ø€OrR   F)Ú
tuple_keysÚdfr   ÚdúMapping[Any, Any] | NoneÚexpand_keysÚexpand_valuesrs   údict[str, Any]c               óX  — i }|pi                       ¦   «         D ]\  }}|r+t          |¦  «        rt          | |¬¦  «        ||<   ||         }|rWt          |¦  «        rHt          | |¬¦  «        }|r|||<   Œ\|                     t                               ||¦  «        ¦  «         Œ‹|||<   Œ‘|S )zCExpand dict key/value selectors into their underlying column names.)rW   )ri   r?   r;   ÚupdateÚdictÚfromkeys)	rt   ru   rw   rx   rs   ro   ÚkeyÚvalueÚcolss	            rQ   Ú_expand_selector_dictsr   ã   sÏ   € ð €HØw˜B—o’oÑ'Ô'ð "ð "‰
ˆˆUØð 	"[¨Ñ/Ô/ð 	"Ý+¨B¸Ð?Ñ?Ô?ˆHS‰MØ˜S”MˆEØð 	"; sÑ+Ô+ð 	"Ý" 2°Ð4Ñ4Ô4ˆDØð <Ø!&˜‘à—’¥§¢¨d°EÑ :Ô :Ñ;Ô;Ð;Ð;à!ˆHS‰MˆMØ€OrR   ú[str | Expr | PolarsDataType | Selector | Collection[str | Expr | PolarsDataType | Selector]Ú
more_itemsú&str | Expr | PolarsDataType | Selectorr'   c                ó  — g g g }}}g }g t          | t          ¦  «        rt          | t          ¦  «        s| n| g¢|¢R D ]}t          |¦  «        r|                     |¦  «         Œ(t          |¦  «        r|                     |¦  «         ŒMt          |t          ¦  «        rV|                     d¦  «        r+|                     d¦  «        r|                     |¦  «         Œ¢|                     |¦  «         Œ¸t          |¦  «        r-|                     |j	         
                    ¦   «         ¦  «         Œôd|›d}t          |¦  «        ‚g }|r|                     t          |ddiŽ¦  «         |r|                     t          |Ž ¦  «         |rZ|                     t          t          |¦  «        dk    rd                     d	„ |D ¦   «         ¦  «        n|d
         ¦  «        ¦  «         |r|                     |¦  «         t%          t&          |¦  «        S )zLCreate a combined selector from cols, names, dtypes, and/or other selectors.ú^ú$z:expected one or more `str`, `DataType` or selector; found r^   Úrequire_allFé   Ú|c              3  ó"   K  — | ]
}d |› dV — ŒdS )ú(ú)N© )Ú.0Úrxs     rQ   ú	<genexpr>z'_combine_as_selector.<locals>.<genexpr>(  s*   è è € Ð5Ð5 r˜˜R˜˜˜Ð5Ð5Ð5Ð5Ð5Ð5rR   r   )rP   r   Ústrr?   rm   r   Ú
startswithÚendswithr   r`   Úoutput_namerb   r0   r.   rB   ÚlenÚjoinrl   r   r	   )	ri   rƒ   ÚnamesÚregexesÚdtypesÚ	selectorsrp   rf   Úselecteds	            rQ   Ú_combine_as_selectorr   ü   sE  € ð    RFˆ7€EØ)+€Iðõ ˜%¥Ñ,Ô,ðÝ5?ÀÅsÑ5KÔ5KðˆEˆEàð	ð 
ðð ð !ñ !ˆõ tÑÔð 	!Ø×Ò˜TÑ"Ô"Ð"Ð"Ý˜TÑ"Ô"ð 	!ØMŠM˜$ÑÔÐÐÝ˜cÑ"Ô"ð 		!ØŠ˜sÑ#Ô#ð #¨¯ª°cÑ(:Ô(:ð #Ø—’˜tÑ$Ô$Ð$Ð$à—’˜TÑ"Ô"Ð"Ð"Ýt‰_Œ_ð 	!ØLŠL˜œ×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ð1à`ÈtÐ`Ð`Ð`ˆCÝ˜C‘.”.Ð à€HØð <ØŠ Ð:°EÐ:Ð:Ñ;Ô;Ð;Øð +ØŠ &Ð)Ñ*Ô*Ð*Øð 
ØŠÝåw‘<”< !Ò#Ð#ð —’Ð5Ð5¨WÐ5Ñ5Ô5Ñ5Ô5Ð5à˜Q”Zñô ñ	
ô 	
ð 	
ð ð #ØŠ˜	Ñ"Ô"Ð"å•#xÑ Ô Ð rR   c                  ó²  — e Zd ZU dZdZded<   ed8d„¦   «         Zd9d	„Zd:d„Z	d;d„Z
d<d„Zed=d„¦   «         Zed>d„¦   «         Zd?d„Zd@d„Zd@d„ZedAd „¦   «         Zed@d!„¦   «         ZdBd#„Zd@d$„ZedAd%„¦   «         Zed@d&„¦   «         ZdBd'„Zd@d(„ZedAd)„¦   «         Zed@d*„¦   «         ZdBd+„ZdCd-„ZedAd.„¦   «         Zed@d/„¦   «         ZdBd0„Zd@d1„ZdDd6„ZdEd7„ZdS )Fr'   z&Base column selector expression/proxy.Nr   Ú_pyselectorÚ
pyselectorrM   c                óZ   —  | ¦   «         }||_         t          j        |¦  «        |_        |S ©N)rŸ   r   Únew_selectorÚ_pyexpr)Úclsr    Úslfs      rQ   Ú_from_pyselectorzSelector._from_pyselector9  s+   € àˆc‰eŒeˆØ$ˆŒÝÔ)¨*Ñ5Ô5ˆŒØˆ
rR   Úbytesc                ó4   — | j                              ¦   «         S r¢   )r¤   Ú__getstate__©Úselfs    rQ   rª   zSelector.__getstate__@  s   € ØŒ|×(Ò(Ñ*Ô*Ð*rR   ÚstateÚNonec                ó¼   — t          j        d¦  «        j        | _        | j                             |¦  «         | j                             ¦   «         j        | _        d S )Nr   )ÚFÚlitr¤   Ú__setstate__r`   Úas_selectorrŸ   )r¬   r­   s     rQ   r²   zSelector.__setstate__C  sI   € Ý”u˜Q‘x”xÔ'ˆŒØŒ×!Ò! %Ñ(Ô(Ð(Øœ9×0Ò0Ñ2Ô2Ô>ˆÔÐÐrR   r’   c                óN   — t          t          j        | j        ¦  «        ¦  «        S r¢   )r’   r   Ú_from_pyexprr¤   r«   s    rQ   Ú__repr__zSelector.__repr__H  s   € Ý•4Ô$ T¤\Ñ2Ô2Ñ3Ô3Ð3rR   Úintc                ó4   — | j                              ¦   «         S r¢   )rŸ   Úhashr«   s    rQ   Ú__hash__zSelector.__hash__K  s   € ð Ô×$Ò$Ñ&Ô&Ð&rR   rš   ú.builtins.list[PythonDataType | PolarsDataType]c                óF	  — g }g }|D ]*}t          |¦  «        rS|t          j        u r|t          ¦   «         gz  }Œ4t	          |t          j        ¦  «        r&|j        dk    r|t          |j        d¬¦  «        gz  }Œt|t          j        u r|t          ¦   «         gz  }Œ•|t          j	        u r|t          ¦   «         gz  }Œ¶|t          j        u r|t          ¦   «         gz  }Œ×|t          j        u r|t          ¦   «         gz  }Œø|t          j        u r|t!          ¦   «         gz  }Œ|t          j        u r|t%          ¦   «         gz  }Œ<|t          j        u r|t)          ¦   «         gz  }Œ^||gz  }Œft	          |t*          ¦  «        r2|t,          u r|t/          ¦   «         gz  }Œ™|t0          j        u r|t3          ¦   «         gz  }Œ»|t4          u r|t7          ¦   «         gz  }ŒØ|t8          u r|t          j        ¦   «         gz  }Œú|t<          u r|t          j        ¦   «         gz  }Œ|t@          u r|tA          ¦   «         gz  }Œ9|tB          u r|t          j"        ¦   «         gz  }Œ[|tF          j$        u r|t          j%        ¦   «         gz  }Œ‚|tF          j        u r|t          ¦   «         gz  }Œ¤|tF          j&        u r|t          ¦   «         gz  }ŒÆ|tF          j'        u r|tO          ¦   «         gz  }Œè|tP          u r|t)          ¦   «         gz  }Œ|t0          j        u s	|tR          u r|t          ¦   «         gz  }Œ0t+          tT          ¦  «        t*          u rtT          ndt+          tT          ¦  «        j+        ›}t+          tT          ¦  «        t*          u rdn
dtT          ›d}d|› d|› }tY          |¦  «        d ‚t+          tT          ¦  «        t*          u rtT          ndt+          tT          ¦  «        j+        ›}t+          tT          ¦  «        t*          u rdn
dtT          ›d}d|› d|› }tY          |¦  «        d ‚|  -                    t]          j/        |¦  «        ¦  «        }ta          |¦  «        d	k    r|S |d	         }	|d
d …         D ]}
|	|
z  }	Œta          |¦  «        d	k    r|	S ||	z  S )NÚ*)Ú	time_unitÚ	time_zonezof type Ú z	 (given: r   zcannot parse input z into Polars selectorr   r‰   )1r   ÚpldtÚDatetimer4   rP   r¿   r¾   ÚDurationr7   r   r1   ÚEnumr9   ÚListrA   ÚArrayr+   ÚStructrH   r   r5   Útyper·   r>   Úbuiltinsr=   rY   r-   r’   r   r¨   r   Úobjectr   ÚNullÚ
pydatetimerJ   r   Ú	timedeltar3   Ú	PyDecimalrc   ÚinputÚ__name__rb   r§   r   r.   r–   )r¥   rš   r›   Úconcrete_dtypesÚdtÚ
input_typeÚinput_detailrf   Údtype_selectorrW   Úss              rQ   Ú	_by_dtypezSelector._by_dtypeP  sŠ  € ð ˆ	ØˆØð B	/ñ B	/ˆBÝ˜rÑ"Ô"ñ A/ØœÐ&Ð&Ø¥(¡*¤* Ñ-IIÝ ¥D¤MÑ2Ô2ð ,°r´|ÀsÒ7JÐ7JØ¥(°R´\ÈSÐ"QÑ"QÔ"QÐ!RÑRIIØ4œ=Ð(Ð(Ø¥(¡*¤* Ñ-IIØ4Ô+Ð+Ð+Ø¥+¡-¤- Ñ0IIØ4œ9__Ø¥$¡&¤& Ñ)IIØ4œ9__Ø¥$¡&¤& Ñ)IIØ4œ:Ð%Ð%Ø¥%¡'¤' Ñ*I‘IØ4œ;Ð&Ð&Ø¥&¡(¤( Ñ+I‘IØ4œ<Ð'Ð'Ø¥'¡)¤) Ñ,I‘Ià#¨ tÑ+O‘OÝ˜B¥Ñ%Ô%ñ ,/Ø99Ø¥'¡)¤) Ñ,I‘IØ8œ>Ð)Ð)Ø¥%¡'¤' Ñ*I‘IØ4ZZØ¥'¡)¤) Ñ,I‘IØ3YYØ#­¬©¬ Ñ6O‘OØ5[[Ø#­¬©¬ Ñ6O‘OØ6\\Ø¥&¡(¤( Ñ+I‘IØ8^^Ø#­¬	©¬ }Ñ4O‘OØ:œ?Ð*Ð*Ø#­¬	©¬ }Ñ4O‘OØ:Ô.Ð.Ð.Ø¥(¡*¤* Ñ-I‘IØ:Ô/Ð/Ð/Ø¥(¡*¤* Ñ-I‘IØ:œ?Ð*Ð*Ø¥$¡&¤& Ñ)I‘IØ9__Ø¥'¡)¤) Ñ,I‘IØ8œ=Ð(Ð(¨Bµ%¨K¨KØ¥$¡&¤& Ñ)I‘Iõ  ¥™;œ;­$Ð.Ð.õ ˜à@­­U©¬Ô(<Ð@Ð@ð õ
 *.­e©¬½Ð)<Ð)< 2 2ÐBXÍeÐBXÐBXÐBXLØ_°
Ð_Ð_ÐQ]Ð_Ð_CÝ# C™.œ.¨dÐ2õ E‘{”{¥dÐ*Ð*õ Eà<¥D­¡K¤KÔ$8Ð<Ð<ð õ
 &*­%¡[¤[µDÐ%8Ð%8˜r˜rÐ>TÍ%Ð>TÐ>TÐ>TØ[¨JÐ[Ð[È\Ð[Ð[Ý ‘n”n¨$Ð.à×-Ò-­jÔ.AÀ/Ñ.RÔ.RÑSÔSˆåˆy‰>Œ>˜QÒÐØ!Ð!à˜Q”<ˆØ˜1˜2˜2”ð 	$ð 	$ˆAØ !‘|ˆHˆHÝˆÑÔ 1Ò$Ð$ØˆOà! HÑ,Ð,rR   r˜   úbuiltins.list[str]rT   rY   Úexpand_patternsc               óT   — |                       t          j        |||¦  «        ¦  «        S r¢   )r§   r   r0   )r¥   r˜   rT   rÙ   s       rQ   Ú_by_namezSelector._by_name§  s'   € ð ×#Ò#¥JÔ$6°u¸fÀoÑ$VÔ$VÑWÔWÐWrR   c                ó$   — t          ¦   «         | z
  S )zInvert the selector.)r(   )r¥   s    rQ   Ú
__invert__zSelector.__invert__­  s   € å‰uŒus‰{ÐrR   Úotherr   r   c                óà   — t          |¦  «        r9|                      ¦   «                              |                     ¦   «         ¦  «        S |                      ¦   «                              |¦  «        S r¢   )r?   Úas_exprÚ__add__©r¬   rÞ   s     rQ   rá   zSelector.__add__±  sR   € ÝuÑÔð 	1Ø—<’<‘>”>×)Ò)¨%¯-ª-©/¬/Ñ:Ô:Ð:à—<’<‘>”>×)Ò)¨%Ñ0Ô0Ð0rR   c                ó   — t          |¦  «        rd}t          |¦  «        ‚|                      ¦   «                              |¦  «        S )Nz=unsupported operand type(s) for op: ('Selector' + 'Selector'))r?   rb   rà   Ú__radd__©r¬   rÞ   rf   s      rQ   rä   zSelector.__radd__·  s?   € ÝuÑÔð 	2ØQˆCÝ˜C‘.”.Ð à—<’<‘>”>×*Ò*¨5Ñ1Ô1Ð1rR   c                ó   — d S r¢   rŽ   râ   s     rQ   Ú__and__zSelector.__and__¾  ó   € Ø47°CrR   c                ó   — d S r¢   rŽ   râ   s     rQ   rç   zSelector.__and__Á  ó   € Ø+.¨3rR   rX   c                óJ  — t          |¦  «        r(|j                             ¦   «         }t          |¦  «        }t	          |¦  «        r7t
                               t          j        | j	        |j	        ¦  «        ¦  «        S |  
                    ¦   «                              |¦  «        S r¢   )r   r`   r•   r0   r?   r'   r§   r   Ú	intersectrŸ   rà   rç   )r¬   rÞ   Úcolnames      rQ   rç   zSelector.__and__Ä  sŽ   € ÝUÑÔð 	%Ø”j×,Ò,Ñ.Ô.ˆGÝ˜GÑ$Ô$ˆEÝuÑÔð 	1Ý×,Ò,ÝÔ$ TÔ%5°uÔ7HÑIÔIñô ð ð —<’<‘>”>×)Ò)¨%Ñ0Ô0Ð0rR   c                óP   — |                       ¦   «                              |¦  «        S r¢   )rà   Ú__rand__râ   s     rQ   rï   zSelector.__rand__Ï  s   € Ø|Š|‰~Œ~×&Ò& uÑ-Ô-Ð-rR   c                ó   — d S r¢   rŽ   râ   s     rQ   Ú__or__zSelector.__or__Ò  s   € Ø36°3rR   c                ó   — d S r¢   rŽ   râ   s     rQ   rñ   zSelector.__or__Õ  s   € Ø*-¨#rR   c                óF  — t          |¦  «        r&t          |j                             ¦   «         ¦  «        }t	          |¦  «        r7t
                               t          j        | j	        |j	        ¦  «        ¦  «        S |  
                    ¦   «                              |¦  «        S r¢   )r   r0   r`   r•   r?   r'   r§   r   ÚunionrŸ   rà   rñ   râ   s     rQ   rñ   zSelector.__or__Ø  s‰   € ÝUÑÔð 	6Ý˜EœJ×2Ò2Ñ4Ô4Ñ5Ô5ˆEÝuÑÔð 	0Ý×,Ò,ÝÔ  Ô!1°5Ô3DÑEÔEñô ð ð —<’<‘>”>×(Ò(¨Ñ/Ô/Ð/rR   c                óº   — t          |¦  «        r&t          |j                             ¦   «         ¦  «        }|                      ¦   «                              |¦  «        S r¢   )r   r0   r`   r•   rà   Ú__ror__râ   s     rQ   rö   zSelector.__ror__â  sI   € ÝUÑÔð 	6Ý˜EœJ×2Ò2Ñ4Ô4Ñ5Ô5ˆEØ|Š|‰~Œ~×%Ò% eÑ,Ô,Ð,rR   c                ó   — d S r¢   rŽ   râ   s     rQ   Ú__sub__zSelector.__sub__ç  rè   rR   c                ó   — d S r¢   rŽ   râ   s     rQ   rø   zSelector.__sub__ê  rê   rR   c                óÜ   — t          |¦  «        r7t                               t          j        | j        |j        ¦  «        ¦  «        S |                      ¦   «                              |¦  «        S r¢   )r?   r'   r§   r   Ú
differencerŸ   rà   rø   râ   s     rQ   rø   zSelector.__sub__í  s^   € ÝuÑÔð 	1Ý×,Ò,ÝÔ% dÔ&6¸Ô8IÑJÔJñô ð ð —<’<‘>”>×)Ò)¨%Ñ0Ô0Ð0rR   r   c                ó$   — d}t          |¦  «        ‚)Nz9unsupported operand type(s) for op: ('Expr' - 'Selector'))rb   rå   s      rQ   Ú__rsub__zSelector.__rsub__õ  s   € ØIˆÝ˜‰nŒnÐrR   c                ó   — d S r¢   rŽ   râ   s     rQ   Ú__xor__zSelector.__xor__ù  rè   rR   c                ó   — d S r¢   rŽ   râ   s     rQ   rÿ   zSelector.__xor__ü  rê   rR   c                óF  — t          |¦  «        r&t          |j                             ¦   «         ¦  «        }t	          |¦  «        r7t
                               t          j        | j	        |j	        ¦  «        ¦  «        S |  
                    ¦   «                              |¦  «        S r¢   )r   r0   r`   r•   r?   r'   r§   r   Úexclusive_orrŸ   rà   rÿ   râ   s     rQ   rÿ   zSelector.__xor__ÿ  s‰   € ÝUÑÔð 	6Ý˜EœJ×2Ò2Ñ4Ô4Ñ5Ô5ˆEÝuÑÔð 	1Ý×,Ò,ÝÔ'¨Ô(8¸%Ô:KÑLÔLñô ð ð —<’<‘>”>×)Ò)¨%Ñ0Ô0Ð0rR   c                óº   — t          |¦  «        r&t          |j                             ¦   «         ¦  «        }|                      ¦   «                              |¦  «        S r¢   )r   r0   r`   r•   rà   Ú__rxor__râ   s     rQ   r  zSelector.__rxor__	  sI   € ÝUÑÔð 	6Ý˜EœJ×2Ò2Ñ4Ô4Ñ5Ô5ˆEØ|Š|‰~Œ~×&Ò& uÑ-Ô-Ð-rR   Úcolumnsú7str | PolarsDataType | Collection[str | PolarsDataType]Úmore_columnsústr | PolarsDataTypec                óÐ  — g }g }g t          |t          ¦  «        rt          |t          ¦  «        s|n|g¢|¢R D ]f}t          |t          ¦  «        r|                     |¦  «         Œ-t	          |¦  «        r|                     |¦  «         ŒRd|›d}t          |¦  «        ‚|r|rd}t          |¦  «        ‚|rt          |¦  «        nt                               |dd¬¦  «        }| |z
  S )aV  
        Exclude columns from a multi-column expression.

        Only works after a wildcard or regex column selection, and you cannot provide
        both string column names *and* dtypes (you may prefer to use selectors instead).

        Parameters
        ----------
        columns
            The name or datatype of the column(s) to exclude. Accepts regular expression
            input. Regular expressions should start with `^` and end with `$`.
        *more_columns
            Additional names or datatypes of columns to exclude, specified as positional
            arguments.
        zMinvalid input for `exclude`

Expected one or more `str` or `DataType`; found r^   z,cannot exclude by both column name and dtypeFT©rT   rÙ   )	rP   r   r’   rm   r   rb   r.   r'   rÛ   )r¬   r  r  Úexclude_colsÚexclude_dtypesrp   rf   Úexcludeds           rQ   r:   zSelector.exclude  sK  € ð( ,.ˆØ8:ˆð
õ ˜g¥zÑ2Ô2ðÝ;EÀgÍsÑ;SÔ;SðàYð	
ð ð
ð 
ð 	%ð 	%ˆDõ ˜$¥Ñ$Ô$ð 	%Ø×#Ò# DÑ)Ô)Ð)Ð)Ý  Ñ&Ô&ð %Ø×%Ò% dÑ+Ô+Ð+Ð+ð]ØKOð]ð ]ð ]ð õ   ‘n”nÐ$àð 	!˜Nð 	!Ø@ˆCÝ˜C‘.”.Ð ð ðH^Ñ$Ô$Ð$å×"Ò"ØØØ $ð #ñ ô ð 	ð h‰ÐrR   c                ó4   — t          j        | j        ¦  «        S )u‹  
        Materialize the `selector` as a normal expression.

        This ensures that the operators `|`, `&`, `~` and `-`
        are applied on the data and not on the selector sets.

        Examples
        --------
        >>> import polars.selectors as cs
        >>> df = pl.DataFrame(
        ...     {
        ...         "colx": ["aa", "bb", "cc"],
        ...         "coly": [True, False, True],
        ...         "colz": [1, 2, 3],
        ...     }
        ... )

        Inverting the boolean selector will choose the non-boolean columns:

        >>> df.select(~cs.boolean())
        shape: (3, 2)
        â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
        â”‚ colx â”† colz â”‚
        â”‚ ---  â”† ---  â”‚
        â”‚ str  â”† i64  â”‚
        â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
        â”‚ aa   â”† 1    â”‚
        â”‚ bb   â”† 2    â”‚
        â”‚ cc   â”† 3    â”‚
        â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

        To invert the *values* in the selected boolean columns, we need to
        materialize the selector as a standard expression instead:

        >>> df.select(~cs.boolean().as_expr())
        shape: (3, 1)
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”
        â”‚ coly  â”‚
        â”‚ ---   â”‚
        â”‚ bool  â”‚
        â•žâ•â•â•â•â•â•â•â•¡
        â”‚ false â”‚
        â”‚ true  â”‚
        â”‚ false â”‚
        â””â”€â”€â”€â”€â”€â”€â”€â”˜
        )r   rµ   r¤   r«   s    rQ   rà   zSelector.as_exprF  s   € õ^ Ô  ¤Ñ.Ô.Ð.rR   )r    r   rM   r'   )rM   r¨   )r­   r¨   rM   r®   )rM   r’   )rM   r·   )rš   r»   rM   r'   )r˜   rØ   rT   rY   rÙ   rY   rM   r'   ©rM   r'   )rÞ   r   rM   r   )rÞ   r'   rM   r'   )rÞ   r   rM   rX   )rÞ   r   rM   r   )r  r  r  r  rM   r'   )rM   r   )rÐ   Ú
__module__Ú__qualname__Ú__doc__rŸ   Ú__annotations__Úclassmethodr§   rª   r²   r¶   rº   r×   rÛ   rÝ   rá   rä   r   rç   rï   rñ   rö   rø   rý   rÿ   r  r:   rà   rŽ   rR   rQ   r'   r'   3  s£  € € € € € € Ø0Ð0ð #€KÐ"Ð"Ð"Ñ"àðð ð ñ „[ðð+ð +ð +ð +ð?ð ?ð ?ð ?ð
4ð 4ð 4ð 4ð'ð 'ð 'ð 'ð
 ðT-ð T-ð T-ñ „[ðT-ðl ðXð Xð Xñ „[ðXð
ð ð ð ð1ð 1ð 1ð 1ð2ð 2ð 2ð 2ð Ø7Ð7Ð7ñ „XØ7àØ.Ð.Ð.ñ „XØ.ð	1ð 	1ð 	1ð 	1ð.ð .ð .ð .ð Ø6Ð6Ð6ñ „XØ6àØ-Ð-Ð-ñ „XØ-ð0ð 0ð 0ð 0ð-ð -ð -ð -ð
 Ø7Ð7Ð7ñ „XØ7àØ.Ð.Ð.ñ „XØ.ð1ð 1ð 1ð 1ðð ð ð ð Ø7Ð7Ð7ñ „XØ7àØ.Ð.Ð.ñ „XØ.ð1ð 1ð 1ð 1ð.ð .ð .ð .ð
6ð 6ð 6ð 6ðp//ð //ð //ð //ð //ð //rR   )ÚescaperG   ústr | Collection[str]r  r’   c               ó\  ‡— t          | t          ¦  «        r‰rt          | ¦  «        n| }n}g }| D ]W}t          |t          ¦  «        r+t          |t          ¦  «        s|                     |¦  «         ŒB|                     |¦  «         ŒXd                     ˆfd„|D ¦   «         ¦  «        }d|› dS )zIReturn escaped regex, potentially representing multiple string fragments.rŠ   c              3  ó>   •K  — | ]}‰rt          |¦  «        n|V — Œd S r¢   )r   )r   Úxr  s     €rQ   r‘   z_re_string.<locals>.<genexpr>ƒ  s2   øè è € ÐGÐG¸! vÐ4•y ‘|”||°1ÐGÐGÐGÐGÐGÐGrR   rŒ   r   )rP   r’   r   r   rl   rm   r—   )rG   r  r   ÚstringsÚsts    `   rQ   Ú
_re_stringr  x  sÄ   ø€ å&#ÑÔð 	HØ"(Ð4YvÑÔÐ¨fˆˆà&(ˆØð 	#ð 	#ˆBÝ˜"jÑ)Ô)ð #µ*¸RÅÑ2EÔ2Eð #Ø—’˜rÑ"Ô"Ð"Ð"à—’˜rÑ"Ô"Ð"Ð"ØXŠXÐGÐGÐGÐG¸wÐGÑGÔGÑGÔGˆØˆrˆ9ˆ9ˆ9ÐrR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )uz  
    Select all columns.

    See Also
    --------
    first : Select the first column in the current scope.
    last : Select the last column in the current scope.

    Examples
    --------
    >>> from datetime import date
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "dt": [date(1999, 12, 31), date(2024, 1, 1)],
    ...         "value": [1_234_500, 5_000_555],
    ...     },
    ...     schema_overrides={"value": pl.Int32},
    ... )

    Select all columns, casting them to string:

    >>> df.select(cs.all().cast(pl.String))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dt         â”† value   â”‚
    â”‚ ---        â”† ---     â”‚
    â”‚ str        â”† str     â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1999-12-31 â”† 1234500 â”‚
    â”‚ 2024-01-01 â”† 5000555 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those matching the given dtypes:

    >>> df.select(cs.all() - cs.numeric())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dt         â”‚
    â”‚ ---        â”‚
    â”‚ date       â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1999-12-31 â”‚
    â”‚ 2024-01-01 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   r(   rŽ   rR   rQ   r(   r(   ‡  s!   € õ^ ×$Ò$¥Z¤^Ñ%5Ô%5Ñ6Ô6Ð6rR   )Úignore_spacesÚ
ascii_onlyr  c               ó~   — | rdnd}|rdnd}t                                t          j        d|› |› d¦  «        ¦  «        S )uW  
    Select all columns with alphabetic names (eg: only letters).

    Parameters
    ----------
    ascii_only
        Indicate whether to consider only ASCII alphabetic characters, or the full
        Unicode range of valid letters (accented, idiographic, etc).
    ignore_spaces
        Indicate whether to ignore the presence of spaces in column names; if so,
        only the other (non-space) characters are considered.

    Notes
    -----
    Matching column names cannot contain *any* non-alphabetic characters. Note
    that the definition of "alphabetic" consists of all valid Unicode alphabetic
    characters (`\p{Alphabetic}`) by default; this can be changed by setting
    `ascii_only=True`.

    Examples
    --------
    >>> import polars as pl
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "no1": [100, 200, 300],
    ...         "cafÃ©": ["espresso", "latte", "mocha"],
    ...         "t or f": [True, False, None],
    ...         "hmm": ["aaa", "bbb", "ccc"],
    ...         "éƒ½å¸‚": ["æ±äº¬", "å¤§é˜ª", "äº¬éƒ½"],
    ...     }
    ... )

    Select columns with alphabetic names; note that accented
    characters and kanji are recognised as alphabetic here:

    >>> df.select(cs.alpha())
    shape: (3, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ cafÃ©     â”† hmm â”† éƒ½å¸‚ â”‚
    â”‚ ---      â”† --- â”† ---  â”‚
    â”‚ str      â”† str â”† str  â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ espresso â”† aaa â”† æ±äº¬ â”‚
    â”‚ latte    â”† bbb â”† å¤§é˜ª â”‚
    â”‚ mocha    â”† ccc â”† äº¬éƒ½ â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    Constrain the definition of "alphabetic" to ASCII characters only:

    >>> df.select(cs.alpha(ascii_only=True))
    shape: (3, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ hmm â”‚
    â”‚ --- â”‚
    â”‚ str â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ aaa â”‚
    â”‚ bbb â”‚
    â”‚ ccc â”‚
    â””â”€â”€â”€â”€â”€â”˜

    >>> df.select(cs.alpha(ascii_only=True, ignore_spaces=True))
    shape: (3, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ t or f â”† hmm â”‚
    â”‚ ---    â”† --- â”‚
    â”‚ bool   â”† str â”‚
    â•žâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ true   â”† aaa â”‚
    â”‚ false  â”† bbb â”‚
    â”‚ null   â”† ccc â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those with alphabetic names:

    >>> df.select(~cs.alpha())
    shape: (3, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ no1 â”† t or f â”‚
    â”‚ --- â”† ---    â”‚
    â”‚ i64 â”† bool   â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•¡
    â”‚ 100 â”† true   â”‚
    â”‚ 200 â”† false  â”‚
    â”‚ 300 â”† null   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    >>> df.select(~cs.alpha(ignore_spaces=True))
    shape: (3, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ no1 â”‚
    â”‚ --- â”‚
    â”‚ i64 â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ 100 â”‚
    â”‚ 200 â”‚
    â”‚ 300 â”‚
    â””â”€â”€â”€â”€â”€â”˜
    úa-zA-Zú\p{Alphabetic}Ú rÀ   ú^[ú]+$©r'   r§   r   rB   )r  r  Úre_alphaÚre_spaces       rQ   r)   r)   ¹  sR   € ðL 'Ð=ˆyˆyÐ,=€HØ#Ð+ˆsˆs¨€HÝ×$Ò$¥ZÔ%7Ð8T¸XÐ8TÀxÐ8TÐ8TÐ8TÑ%UÔ%UÑVÔVÐVrR   c          	     óŽ   — | rdnd}| rdnd}|rdnd}t                                t          j        d|› |› |› d¦  «        ¦  «        S )	uF  
    Select all columns with alphanumeric names (eg: only letters and the digits 0-9).

    Parameters
    ----------
    ascii_only
        Indicate whether to consider only ASCII alphabetic characters, or the full
        Unicode range of valid letters (accented, idiographic, etc).
    ignore_spaces
        Indicate whether to ignore the presence of spaces in column names; if so,
        only the other (non-space) characters are considered.

    Notes
    -----
    Matching column names cannot contain *any* non-alphabetic or integer characters.
    Note that the definition of "alphabetic" consists of all valid Unicode alphabetic
    characters (`\p{Alphabetic}`) and digit characters (`\d`) by default; this
    can be changed by setting `ascii_only=True`.

    Examples
    --------
    >>> import polars as pl
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "1st_col": [100, 200, 300],
    ...         "flagged": [True, False, True],
    ...         "00prefix": ["01:aa", "02:bb", "03:cc"],
    ...         "last col": ["x", "y", "z"],
    ...     }
    ... )

    Select columns with alphanumeric names:

    >>> df.select(cs.alphanumeric())
    shape: (3, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ flagged â”† 00prefix â”‚
    â”‚ ---     â”† ---      â”‚
    â”‚ bool    â”† str      â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ true    â”† 01:aa    â”‚
    â”‚ false   â”† 02:bb    â”‚
    â”‚ true    â”† 03:cc    â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    >>> df.select(cs.alphanumeric(ignore_spaces=True))
    shape: (3, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ flagged â”† 00prefix â”† last col â”‚
    â”‚ ---     â”† ---      â”† ---      â”‚
    â”‚ bool    â”† str      â”† str      â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ true    â”† 01:aa    â”† x        â”‚
    â”‚ false   â”† 02:bb    â”† y        â”‚
    â”‚ true    â”† 03:cc    â”† z        â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those with alphanumeric names:

    >>> df.select(~cs.alphanumeric())
    shape: (3, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ 1st_col â”† last col â”‚
    â”‚ ---     â”† ---      â”‚
    â”‚ i64     â”† str      â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 100     â”† x        â”‚
    â”‚ 200     â”† y        â”‚
    â”‚ 300     â”† z        â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    >>> df.select(~cs.alphanumeric(ignore_spaces=True))
    shape: (3, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ 1st_col â”‚
    â”‚ ---     â”‚
    â”‚ i64     â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•¡
    â”‚ 100     â”‚
    â”‚ 200     â”‚
    â”‚ 300     â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    r!  r"  z0-9ú\dr#  rÀ   r$  r%  r&  )r  r  r'  Úre_digitr(  s        rQ   r*   r*   $  sl   € ðt 'Ð=ˆyˆyÐ,=€HØ"Ð-ˆuˆu¨€HØ#Ð+ˆsˆs¨€HÝ×$Ò$ÝÔÐA ÐA¨(ÐA°HÐAÐAÐAÑBÔBñô ð rR   c                 ó,   — t          t          g¦  «        S )u¶  
    Select all binary columns.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).
    string : Select all string columns (optionally including categoricals).

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame({"a": [b"hello"], "b": ["world"], "c": [b"!"], "d": [":)"]})
    >>> df
    shape: (1, 4)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a        â”† b     â”† c      â”† d   â”‚
    â”‚ ---      â”† ---   â”† ---    â”† --- â”‚
    â”‚ binary   â”† str   â”† binary â”† str â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ b"hello" â”† world â”† b"!"   â”† :)  â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select binary columns and export as a dict:

    >>> df.select(cs.binary()).to_dict(as_series=False)
    {'a': [b'hello'], 'c': [b'!']}

    Select all columns *except* for those that are binary:

    >>> df.select(~cs.binary()).to_dict(as_series=False)
    {'b': ['world'], 'd': [':)']}
    )r.   r   rŽ   rR   rQ   r,   r,   †  s   € õB •VHÑÔÐrR   c                 ó,   — t          t          g¦  «        S )u)  
    Select all boolean columns.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame({"n": range(1, 5)}).with_columns(n_even=pl.col("n") % 2 == 0)
    >>> df
    shape: (4, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ n   â”† n_even â”‚
    â”‚ --- â”† ---    â”‚
    â”‚ i64 â”† bool   â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•¡
    â”‚ 1   â”† false  â”‚
    â”‚ 2   â”† true   â”‚
    â”‚ 3   â”† false  â”‚
    â”‚ 4   â”† true   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select and invert boolean columns:

    >>> df.with_columns(is_odd=cs.boolean().not_())
    shape: (4, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ n   â”† n_even â”† is_odd â”‚
    â”‚ --- â”† ---    â”† ---    â”‚
    â”‚ i64 â”† bool   â”† bool   â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•¡
    â”‚ 1   â”† false  â”† true   â”‚
    â”‚ 2   â”† true   â”† false  â”‚
    â”‚ 3   â”† false  â”† true   â”‚
    â”‚ 4   â”† true   â”† false  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are boolean:

    >>> df.select(~cs.boolean())
    shape: (4, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ n   â”‚
    â”‚ --- â”‚
    â”‚ i64 â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ 1   â”‚
    â”‚ 2   â”‚
    â”‚ 3   â”‚
    â”‚ 4   â”‚
    â””â”€â”€â”€â”€â”€â”˜
    )r.   r   rŽ   rR   rQ   r-   r-   ª  s   € õn •WIÑÔÐrR   rš   úUPolarsDataType | PythonDataType | Iterable[PolarsDataType] | Iterable[PythonDataType]c                 ó®  — g }| D ]·}t          |¦  «        st          |t          ¦  «        r|                     |¦  «         Œ<t          |t          ¦  «        rS|D ]O}t          |¦  «        s)t          |t          ¦  «        sd|›}t          |¦  «        ‚|                     |¦  «         ŒPŒ¤d|›}t          |¦  «        ‚t                               |¦  «        S )u´  
    Select all columns matching the given dtypes.

    See Also
    --------
    by_name : Select all columns matching the given names.
    by_index : Select all columns matching the given indices.

    Examples
    --------
    >>> from datetime import date
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "dt": [date(1999, 12, 31), date(2024, 1, 1), date(2010, 7, 5)],
    ...         "value": [1_234_500, 5_000_555, -4_500_000],
    ...         "other": ["foo", "bar", "foo"],
    ...     }
    ... )

    Select all columns with date or string dtypes:

    >>> df.select(cs.by_dtype(pl.Date, pl.String))
    shape: (3, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dt         â”† other â”‚
    â”‚ ---        â”† ---   â”‚
    â”‚ date       â”† str   â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•¡
    â”‚ 1999-12-31 â”† foo   â”‚
    â”‚ 2024-01-01 â”† bar   â”‚
    â”‚ 2010-07-05 â”† foo   â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns that are not of date or string dtype:

    >>> df.select(~cs.by_dtype(pl.Date, pl.String))
    shape: (3, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ value    â”‚
    â”‚ ---      â”‚
    â”‚ i64      â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1234500  â”‚
    â”‚ 5000555  â”‚
    â”‚ -4500000 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Group by string columns and sum the numeric columns:

    >>> df.group_by(cs.string()).agg(cs.numeric().sum()).sort(by="other")
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ other â”† value    â”‚
    â”‚ ---   â”† ---      â”‚
    â”‚ str   â”† i64      â”‚
    â•žâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ bar   â”† 5000555  â”‚
    â”‚ foo   â”† -3265500 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    zinvalid dtype: )r   rP   rÈ   rm   r   rb   r'   r×   )rš   Ú
all_dtypesÚtpÚtrf   s        rQ   r.   r.   ä  sù   € ðJ BD€JØð !ð !ˆÝ˜2ÑÔð 
	!¥*¨RµÑ"6Ô"6ð 
	!Ø×Ò˜bÑ!Ô!Ð!Ð!Ý˜JÑ'Ô'ð 	!Øð %ð %Ý'¨Ñ*Ô*ð )­j¸½DÑ.AÔ.Að )Ø1¨AÐ1Ð1CÝ# C™.œ.Ð(Ø×!Ò! !Ñ$Ô$Ð$Ð$ð	%ð + BÐ*Ð*ˆCÝ˜C‘.”.Ð å×Ò˜jÑ)Ô)Ð)rR   )rˆ   Úindicesú#int | range | Sequence[int | range]rˆ   c                óJ  — g }|D ]r}t          |t          t          f¦  «        r|                     |¦  «         Œ4t          |t          ¦  «        r|                     |¦  «         Œ_d|›}t          |¦  «        ‚t                               t          j
        || ¦  «        ¦  «        S )uM  
    Select all columns matching the given indices (or range objects).

    Parameters
    ----------
    *indices
        One or more column indices (or range objects).
        Negative indexing is supported.
    require_all
        By default, all specified indices must be valid; if any index is out of bounds,
        an error is raised. If set to `False`, out-of-bounds indices are ignored

    Notes
    -----
    Matching columns are returned in the order in which their indexes
    appear in the selector, not the underlying schema order.

    See Also
    --------
    by_dtype : Select all columns matching the given dtypes.
    by_name : Select all columns matching the given names.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "key": ["abc"],
    ...         **{f"c{i:02}": [0.5 * i] for i in range(100)},
    ...     },
    ... )
    >>> print(df)
    shape: (1, 101)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ key â”† c00 â”† c01 â”† c02 â”† â€¦ â”† c96  â”† c97  â”† c98  â”† c99  â”‚
    â”‚ --- â”† --- â”† --- â”† --- â”†   â”† ---  â”† ---  â”† ---  â”† ---  â”‚
    â”‚ str â”† f64 â”† f64 â”† f64 â”†   â”† f64  â”† f64  â”† f64  â”† f64  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ abc â”† 0.0 â”† 0.5 â”† 1.0 â”† â€¦ â”† 48.0 â”† 48.5 â”† 49.0 â”† 49.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    Select columns by index ("key" column and the two first/last columns):

    >>> df.select(cs.by_index(0, 1, 2, -2, -1))
    shape: (1, 5)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ key â”† c00 â”† c01 â”† c98  â”† c99  â”‚
    â”‚ --- â”† --- â”† --- â”† ---  â”† ---  â”‚
    â”‚ str â”† f64 â”† f64 â”† f64  â”† f64  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ abc â”† 0.0 â”† 0.5 â”† 49.0 â”† 49.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    Select the "key" column and use a `range` object to select various columns.
    Note that you can freely mix and match integer indices and `range` objects:

    >>> df.select(cs.by_index(0, range(1, 101, 20)))
    shape: (1, 6)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ key â”† c00 â”† c20  â”† c40  â”† c60  â”† c80  â”‚
    â”‚ --- â”† --- â”† ---  â”† ---  â”† ---  â”† ---  â”‚
    â”‚ str â”† f64 â”† f64  â”† f64  â”† f64  â”† f64  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ abc â”† 0.0 â”† 10.0 â”† 20.0 â”† 30.0 â”† 40.0 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    >>> df.select(cs.by_index(0, range(101, 0, -25), require_all=False))
    shape: (1, 5)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ key â”† c75  â”† c50  â”† c25  â”† c00 â”‚
    â”‚ --- â”† ---  â”† ---  â”† ---  â”† --- â”‚
    â”‚ str â”† f64  â”† f64  â”† f64  â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ abc â”† 37.5 â”† 25.0 â”† 12.5 â”† 0.0 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for the even-indexed ones:

    >>> df.select(~cs.by_index(range(1, 100, 2)))
    shape: (1, 51)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ key â”† c01 â”† c03 â”† c05 â”† â€¦ â”† c93  â”† c95  â”† c97  â”† c99  â”‚
    â”‚ --- â”† --- â”† --- â”† --- â”†   â”† ---  â”† ---  â”† ---  â”† ---  â”‚
    â”‚ str â”† f64 â”† f64 â”† f64 â”†   â”† f64  â”† f64  â”† f64  â”† f64  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ abc â”† 0.5 â”† 1.5 â”† 2.5 â”† â€¦ â”† 46.5 â”† 47.5 â”† 48.5 â”† 49.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜
    zinvalid index value: )rP   Úranger   rl   r·   rm   rb   r'   r§   r   r/   )rˆ   r3  Úall_indicesÚidxrf   s        rQ   r/   r/   :  sª   € ðv ')€KØð !ð !ˆÝcE¥8Ð,Ñ-Ô-ð 	!Ø×Ò˜sÑ#Ô#Ð#Ð#Ý˜SÑ!Ô!ð 	!Ø×Ò˜sÑ#Ô#Ð#Ð#à1¨#Ð1Ð1ˆCÝ˜C‘.”.Ð å×$Ò$¥ZÔ%8¸ÀkÑ%RÔ%RÑSÔSÐSrR   r˜   c                óx  — g }|D ]™}t          |t          ¦  «        r|                     |¦  «         Œ-t          |t          ¦  «        rD|D ]@}t          |t          ¦  «        sd|›}t	          |¦  «        ‚|                     |¦  «         ŒAŒ†d|›}t	          |¦  «        ‚t
                               || d¬¦  «        S )u  
    Select all columns matching the given names.

    .. versionadded:: 0.20.27
      The `require_all` parameter was added.

    Parameters
    ----------
    *names
        One or more names of columns to select.
    require_all
        Whether to match *all* names (the default) or *any* of the names.

    Notes
    -----
    Matching columns are returned in the order in which they are declared in
    the selector, not the underlying schema order.

    See Also
    --------
    by_dtype : Select all columns matching the given dtypes.
    by_index : Select all columns matching the given indices.
    matches: Select columns matching the given regex pattern.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [False, True],
    ...     }
    ... )

    Select columns by name:

    >>> df.select(cs.by_name("foo", "bar"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ foo â”† bar â”‚
    â”‚ --- â”† --- â”‚
    â”‚ str â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ x   â”† 123 â”‚
    â”‚ y   â”† 456 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Match *any* of the given columns by name:

    >>> df.select(cs.by_name("baz", "moose", "foo", "bear", require_all=False))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ baz â”† foo â”‚
    â”‚ --- â”† --- â”‚
    â”‚ f64 â”† str â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 2.0 â”† x   â”‚
    â”‚ 5.5 â”† y   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Match all columns *except* for those given:

    >>> df.select(~cs.by_name("foo", "bar"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ baz â”† zap   â”‚
    â”‚ --- â”† ---   â”‚
    â”‚ f64 â”† bool  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•¡
    â”‚ 2.0 â”† false â”‚
    â”‚ 5.5 â”† true  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜
    zinvalid name: Fr
  )rP   r’   rm   r   rb   r'   rÛ   )rˆ   r˜   Ú	all_namesÚnmÚnrf   s         rQ   r0   r0   ¢  sà   € ðX €IØð !ð !ˆÝb#ÑÔð 
	!Ø×Ò˜RÑ Ô Ð Ð Ý˜JÑ'Ô'ð 	!Øð $ð $Ý! !¥SÑ)Ô)ð )Ø0¨1Ð0Ð0CÝ# C™.œ.Ð(Ø× Ò  Ñ#Ô#Ð#Ð#ð	$ð * 2Ð)Ð)ˆCÝ˜C‘.”.Ð å×Ò˜Y¨{ÈEÐÑRÔRÐRrR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )uR  
    Select no columns.

    This is useful for composition with other selectors.

    See Also
    --------
    all : Select all columns in the current scope.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> pl.DataFrame({"a": 1, "b": 2}).select(cs.empty())
    shape: (0, 0)
    â”Œâ”
    â•žâ•¡
    â””â”˜
    )r'   r§   r   ÚemptyrŽ   rR   rQ   r>  r>  ÿ  s!   € õ& ×$Ò$¥ZÔ%5Ñ%7Ô%7Ñ8Ô8Ð8rR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )u%  
    Select all enum columns.

    .. warning::
        This functionality is considered **unstable**. It may be changed
        at any point without it being considered a breaking change.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).
    categorical : Select all categorical columns.
    string : Select all string columns (optionally including categoricals).

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["xx", "yy"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...     },
    ...     schema_overrides={"foo": pl.Enum(["xx", "yy"])},
    ... )

    Select all enum columns:

    >>> df.select(cs.enum())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”
    â”‚ foo  â”‚
    â”‚ ---  â”‚
    â”‚ enum â”‚
    â•žâ•â•â•â•â•â•â•¡
    â”‚ xx   â”‚
    â”‚ yy   â”‚
    â””â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are enum:

    >>> df.select(~cs.enum())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   Úenum_rŽ   rR   rQ   r9   r9     s"   € õj ×$Ò$¥ZÔ%5Ñ%7Ô%7Ñ8Ô8Ð8rR   ÚinnerúNone | Selectorc                óp   — | | j         nd}t                               t          j        |¦  «        ¦  «        S )u%  
    Select all list columns.

    .. warning::
        This functionality is considered **unstable**. It may be changed
        at any point without it being considered a breaking change.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).
    array : Select all array columns.
    nested : Select all nested columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": [["xx", "yy"], ["x"]],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...     },
    ... )

    Select all list columns:

    >>> df.select(cs.list())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo          â”‚
    â”‚ ---          â”‚
    â”‚ list[str]    â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ ["xx", "yy"] â”‚
    â”‚ ["x"]        â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are list:

    >>> df.select(~cs.list())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all list columns with a certain matching inner type:

    >>> df.select(cs.list(cs.string()))
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo          â”‚
    â”‚ ---          â”‚
    â”‚ list[str]    â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ ["xx", "yy"] â”‚
    â”‚ ["x"]        â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    >>> df.select(cs.list(cs.integer()))
    shape: (0, 0)
    â”Œâ”
    â•žâ•¡
    â””â”˜
    N)rŸ   r'   r§   r   rA   )rA  Úinner_ss     rQ   rA   rA   M  s5   € ðL $)Ð#4ˆeÔÐ¸$€GÝ×$Ò$¥Z¤_°WÑ%=Ô%=Ñ>Ô>Ð>rR   )ÚwidthúSelector | NonerE  ú
int | Nonec               ór   — | | j         nd}t                               t          j        ||¦  «        ¦  «        S )uC	  
    Select all array columns.

    .. warning::
        This functionality is considered **unstable**. It may be changed
        at any point without it being considered a breaking change.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).
    list : Select all list columns.
    nested : Select all nested columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": [["xx", "yy"], ["x", "y"]],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...     },
    ...     schema_overrides={"foo": pl.Array(pl.String, 2)},
    ... )

    Select all array columns:

    >>> df.select(cs.array())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo           â”‚
    â”‚ ---           â”‚
    â”‚ array[str, 2] â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ ["xx", "yy"]  â”‚
    â”‚ ["x", "y"]    â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are array:

    >>> df.select(~cs.array())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all array columns with a certain matching inner type:

    >>> df.select(cs.array(cs.string()))
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo           â”‚
    â”‚ ---           â”‚
    â”‚ array[str, 2] â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ ["xx", "yy"]  â”‚
    â”‚ ["x", "y"]    â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    >>> df.select(cs.array(cs.integer()))
    shape: (0, 0)
    â”Œâ”
    â•žâ•¡
    â””â”˜
    >>> df.select(cs.array(width=2))
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo           â”‚
    â”‚ ---           â”‚
    â”‚ array[str, 2] â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ ["xx", "yy"]  â”‚
    â”‚ ["x", "y"]    â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    >>> df.select(cs.array(width=3))
    shape: (0, 0)
    â”Œâ”
    â•žâ•¡
    â””â”˜
    N)rŸ   r'   r§   r   r+   )rA  rE  rD  s      rQ   r+   r+   —  s8   € ðl $)Ð#4ˆeÔÐ¸$€GÝ×$Ò$¥ZÔ%5°g¸uÑ%EÔ%EÑFÔFÐFrR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )u[  
    Select all struct columns.

    .. warning::
        This functionality is considered **unstable**. It may be changed
        at any point without it being considered a breaking change.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).
    list : Select all list columns.
    array : Select all array columns.
    nested : Select all nested columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": [{"a": "xx", "b": "z"}, {"a": "x", "b": "y"}],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...     },
    ... )

    Select all struct columns:

    >>> df.select(cs.struct())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo        â”‚
    â”‚ ---        â”‚
    â”‚ struct[2]  â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ {"xx","z"} â”‚
    â”‚ {"x","y"}  â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are struct:

    >>> df.select(~cs.struct())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   Ústruct_rŽ   rR   rQ   rH   rH   ñ  s"   € õj ×$Ò$¥ZÔ%7Ñ%9Ô%9Ñ:Ô:Ð:rR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )ud  
    Select all nested columns.

    A nested column is a list, array or struct.

    .. warning::
        This functionality is considered **unstable**. It may be changed
        at any point without it being considered a breaking change.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).
    list : Select all list columns.
    array : Select all array columns.
    struct : Select all struct columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": [{"a": "xx", "b": "z"}, {"a": "x", "b": "y"}],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "wow": [[1, 2], [3]],
    ...     },
    ... )

    Select all nested columns:

    >>> df.select(cs.nested())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo        â”† wow       â”‚
    â”‚ ---        â”† ---       â”‚
    â”‚ struct[2]  â”† list[i64] â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ {"xx","z"} â”† [1, 2]    â”‚
    â”‚ {"x","y"}  â”† [3]       â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are nested:

    >>> df.select(~cs.nested())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   rC   rŽ   rR   rQ   rC   rC   )  s"   € õp ×$Ò$¥ZÔ%6Ñ%8Ô%8Ñ9Ô9Ð9rR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )ub  
    Select all categorical columns.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).
    string : Select all string columns (optionally including categoricals).

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["xx", "yy"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...     },
    ...     schema_overrides={"foo": pl.Categorical},
    ... )

    Select all categorical columns:

    >>> df.select(cs.categorical())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ foo â”‚
    â”‚ --- â”‚
    â”‚ cat â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ xx  â”‚
    â”‚ yy  â”‚
    â””â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are categorical:

    >>> df.select(~cs.categorical())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   r1   rŽ   rR   rQ   r1   r1   d  s"   € õ^ ×$Ò$¥ZÔ%;Ñ%=Ô%=Ñ>Ô>Ð>rR   Ú	substringc                 óx   — t          | ¦  «        }t                               t          j        |¦  «        ¦  «        S )u¸  
    Select columns whose names contain the given literal substring(s).

    Parameters
    ----------
    substring
        Substring(s) that matching column names should contain.

    See Also
    --------
    matches : Select all columns that match the given regex pattern.
    ends_with : Select columns that end with the given substring(s).
    starts_with : Select columns that start with the given substring(s).

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [False, True],
    ...     }
    ... )

    Select columns that contain the substring 'ba':

    >>> df.select(cs.contains("ba"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select columns that contain the substring 'ba' or the letter 'z':

    >>> df.select(cs.contains("ba", "z"))
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”† zap   â”‚
    â”‚ --- â”† --- â”† ---   â”‚
    â”‚ i64 â”† f64 â”† bool  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”† false â”‚
    â”‚ 456 â”† 5.5 â”† true  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that contain the substring 'ba':

    >>> df.select(~cs.contains("ba"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo â”† zap   â”‚
    â”‚ --- â”† ---   â”‚
    â”‚ str â”† bool  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•¡
    â”‚ x   â”† false â”‚
    â”‚ y   â”† true  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜
    ©r  r'   r§   r   rB   )rM  Úpatterns     rQ   r2   r2   –  s1   € õD ˜Ñ#Ô#€GÝ×$Ò$¥ZÔ%7¸Ñ%@Ô%@ÑAÔAÐArR   c                 ó,   — t          t          g¦  «        S )u  
    Select all date columns.

    See Also
    --------
    datetime : Select all datetime columns, optionally filtering by time unit/zone.
    duration : Select all duration columns, optionally filtering by time unit.
    temporal : Select all temporal columns.
    time : Select all time columns.

    Examples
    --------
    >>> from datetime import date, datetime, time
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "dtm": [datetime(2001, 5, 7, 10, 25), datetime(2031, 12, 31, 0, 30)],
    ...         "dt": [date(1999, 12, 31), date(2024, 8, 9)],
    ...         "tm": [time(0, 0, 0), time(23, 59, 59)],
    ...     },
    ... )

    Select all date columns:

    >>> df.select(cs.date())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dt         â”‚
    â”‚ ---        â”‚
    â”‚ date       â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1999-12-31 â”‚
    â”‚ 2024-08-09 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are dates:

    >>> df.select(~cs.date())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dtm                 â”† tm       â”‚
    â”‚ ---                 â”† ---      â”‚
    â”‚ datetime[Î¼s]        â”† time     â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 2001-05-07 10:25:00 â”† 00:00:00 â”‚
    â”‚ 2031-12-31 00:30:00 â”† 23:59:59 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )r.   r   rŽ   rR   rQ   r3   r3   Ü  ó   € õb •TFÑÔÐrR   ©r½   Nr¾   ú&TimeUnit | Collection[TimeUnit] | Noner¿   úOstr | pydatetime.timezone | Collection[str | pydatetime.timezone | None] | Nonec                ó>  — | €g d¢}n,t          | t          ¦  «        r| gnt          j        | ¦  «        }|€dg}n8t          |t          t          j        f¦  «        r|gnt          j        |¦  «        }t                               t          j	        ||¦  «        ¦  «        S )uO  
    Select all datetime columns, optionally filtering by time unit/zone.

    Parameters
    ----------
    time_unit
        One (or more) of the allowed timeunit precision strings, "ms", "us", and "ns".
        Omit to select columns with any valid timeunit.
    time_zone
        * One or more timezone strings, as defined in zoneinfo (to see valid options
          run `import zoneinfo; zoneinfo.available_timezones()` for a full list).
        * Set `None` to select Datetime columns that do not have a timezone.
        * Set "*" to select Datetime columns that have *any* timezone.

    See Also
    --------
    date : Select all date columns.
    duration : Select all duration columns, optionally filtering by time unit.
    temporal : Select all temporal columns.
    time : Select all time columns.

    Examples
    --------
    >>> from datetime import datetime, date, timezone
    >>> import polars.selectors as cs
    >>> from zoneinfo import ZoneInfo
    >>> tokyo_tz = ZoneInfo("Asia/Tokyo")
    >>> utc_tz = timezone.utc
    >>> df = pl.DataFrame(
    ...     {
    ...         "tstamp_tokyo": [
    ...             datetime(1999, 7, 21, 5, 20, 16, 987654, tzinfo=tokyo_tz),
    ...             datetime(2000, 5, 16, 6, 21, 21, 123465, tzinfo=tokyo_tz),
    ...         ],
    ...         "tstamp_utc": [
    ...             datetime(2023, 4, 10, 12, 14, 16, 999000, tzinfo=utc_tz),
    ...             datetime(2025, 8, 25, 14, 18, 22, 666000, tzinfo=utc_tz),
    ...         ],
    ...         "tstamp": [
    ...             datetime(2000, 11, 20, 18, 12, 16, 600000),
    ...             datetime(2020, 10, 30, 10, 20, 25, 123000),
    ...         ],
    ...         "dt": [date(1999, 12, 31), date(2010, 7, 5)],
    ...     },
    ...     schema_overrides={
    ...         "tstamp_tokyo": pl.Datetime("ns", "Asia/Tokyo"),
    ...         "tstamp_utc": pl.Datetime("us", "UTC"),
    ...     },
    ... )

    Select all datetime columns:

    >>> df.select(cs.datetime())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ tstamp_tokyo                   â”† tstamp_utc                  â”† tstamp                  â”‚
    â”‚ ---                            â”† ---                         â”† ---                     â”‚
    â”‚ datetime[ns, Asia/Tokyo]       â”† datetime[Î¼s, UTC]           â”† datetime[Î¼s]            â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1999-07-21 05:20:16.987654 JST â”† 2023-04-10 12:14:16.999 UTC â”† 2000-11-20 18:12:16.600 â”‚
    â”‚ 2000-05-16 06:21:21.123465 JST â”† 2025-08-25 14:18:22.666 UTC â”† 2020-10-30 10:20:25.123 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all datetime columns that have 'us' precision:

    >>> df.select(cs.datetime("us"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ tstamp_utc                  â”† tstamp                  â”‚
    â”‚ ---                         â”† ---                     â”‚
    â”‚ datetime[Î¼s, UTC]           â”† datetime[Î¼s]            â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 2023-04-10 12:14:16.999 UTC â”† 2000-11-20 18:12:16.600 â”‚
    â”‚ 2025-08-25 14:18:22.666 UTC â”† 2020-10-30 10:20:25.123 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all datetime columns that have *any* timezone:

    >>> df.select(cs.datetime(time_zone="*"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ tstamp_tokyo                   â”† tstamp_utc                  â”‚
    â”‚ ---                            â”† ---                         â”‚
    â”‚ datetime[ns, Asia/Tokyo]       â”† datetime[Î¼s, UTC]           â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1999-07-21 05:20:16.987654 JST â”† 2023-04-10 12:14:16.999 UTC â”‚
    â”‚ 2000-05-16 06:21:21.123465 JST â”† 2025-08-25 14:18:22.666 UTC â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all datetime columns that have a *specific* timezone:

    >>> df.select(cs.datetime(time_zone="UTC"))
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ tstamp_utc                  â”‚
    â”‚ ---                         â”‚
    â”‚ datetime[Î¼s, UTC]           â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 2023-04-10 12:14:16.999 UTC â”‚
    â”‚ 2025-08-25 14:18:22.666 UTC â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all datetime columns that have NO timezone:

    >>> df.select(cs.datetime(time_zone=None))
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ tstamp                  â”‚
    â”‚ ---                     â”‚
    â”‚ datetime[Î¼s]            â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 2000-11-20 18:12:16.600 â”‚
    â”‚ 2020-10-30 10:20:25.123 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for datetime columns:

    >>> df.select(~cs.datetime())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dt         â”‚
    â”‚ ---        â”‚
    â”‚ date       â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1999-12-31 â”‚
    â”‚ 2010-07-05 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    N©ÚmsÚusÚns)
rP   r’   rÉ   rA   rÌ   Útimezoner'   r§   r   r4   )r¾   r¿   Útime_unit_lstÚtime_zone_lsts       rQ   r4   r4     s©   € ðR ÐØ*Ð*Ð*ˆˆõ & iµÑ5Ô5ÐSˆYˆKˆK½8¼=ÈÑ;SÔ;Sð 	ð
 ÐØ˜ˆˆõ ˜)¥c­:Ô+>Ð%?Ñ@Ô@ð*ˆYˆKˆKå”˜yÑ)Ô)ð 	õ ×$Ò$¥ZÔ%8¸ÈÑ%VÔ%VÑWÔWÐWrR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )u  
    Select all decimal columns.

    See Also
    --------
    float : Select all float columns.
    integer : Select all integer columns.
    numeric : Select all numeric columns.

    Examples
    --------
    >>> from decimal import Decimal as D
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [D(123), D(456)],
    ...         "baz": [D("2.0005"), D("-50.5555")],
    ...     },
    ...     schema_overrides={"baz": pl.Decimal(scale=5, precision=10)},
    ... )

    Select all decimal columns:

    >>> df.select(cs.decimal())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ bar           â”† baz           â”‚
    â”‚ ---           â”† ---           â”‚
    â”‚ decimal[38,0] â”† decimal[10,5] â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 123           â”† 2.00050       â”‚
    â”‚ 456           â”† -50.55550     â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* the decimal ones:

    >>> df.select(~cs.decimal())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ foo â”‚
    â”‚ --- â”‚
    â”‚ str â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ x   â”‚
    â”‚ y   â”‚
    â””â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   r5   rŽ   rR   rQ   r5   r5   ­  ó"   € õd ×$Ò$¥ZÔ%7Ñ%9Ô%9Ñ:Ô:Ð:rR   c                ón   — | rdnd}t                                t          j        d|› d¦  «        ¦  «        S )u‚
  
    Select all columns having names consisting only of digits.

    Notes
    -----
    Matching column names cannot contain *any* non-digit characters. Note that the
    definition of "digit" consists of all valid Unicode digit characters (`\d`)
    by default; this can be changed by setting `ascii_only=True`.

    Examples
    --------
    >>> import polars as pl
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "key": ["aaa", "bbb", "aaa", "bbb", "bbb"],
    ...         "year": [2001, 2001, 2025, 2025, 2001],
    ...         "value": [-25, 100, 75, -15, -5],
    ...     }
    ... ).pivot(
    ...     values="value",
    ...     index="key",
    ...     on="year",
    ...     aggregate_function="sum",
    ... )
    >>> print(df)
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ key â”† 2001 â”† 2025 â”‚
    â”‚ --- â”† ---  â”† ---  â”‚
    â”‚ str â”† i64  â”† i64  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ aaa â”† -25  â”† 75   â”‚
    â”‚ bbb â”† 95   â”† -15  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    Select columns with digit names:

    >>> df.select(cs.digit())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ 2001 â”† 2025 â”‚
    â”‚ ---  â”† ---  â”‚
    â”‚ i64  â”† i64  â”‚
    â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ -25  â”† 75   â”‚
    â”‚ 95   â”† -15  â”‚
    â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those with digit names:

    >>> df.select(~cs.digit())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ key â”‚
    â”‚ --- â”‚
    â”‚ str â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ aaa â”‚
    â”‚ bbb â”‚
    â””â”€â”€â”€â”€â”€â”˜

    Demonstrate use of `ascii_only` flag (by default all valid unicode digits
    are considered, but this can be constrained to ascii 0-9):

    >>> df = pl.DataFrame({"à¥§à¥¯à¥¯à¥¯": [1999], "à¥¨à¥¦à¥­à¥­": [2077], "3000": [3000]})
    >>> df.select(cs.digit())
    shape: (1, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ à¥§à¥¯à¥¯à¥¯ â”† à¥¨à¥¦à¥­à¥­ â”† 3000 â”‚
    â”‚ ---  â”† ---  â”† ---  â”‚
    â”‚ i64  â”† i64  â”† i64  â”‚
    â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ 1999 â”† 2077 â”† 3000 â”‚
    â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    >>> df.select(cs.digit(ascii_only=True))
    shape: (1, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”
    â”‚ 3000 â”‚
    â”‚ ---  â”‚
    â”‚ i64  â”‚
    â•žâ•â•â•â•â•â•â•¡
    â”‚ 3000 â”‚
    â””â”€â”€â”€â”€â”€â”€â”˜
    z[0-9]r*  r†   z+$r&  )r  r+  s     rQ   r6   r6   â  s>   € ðn &Ð0ˆxˆx¨5€HÝ×$Ò$¥ZÔ%7Ð8I¸XÐ8IÐ8IÐ8IÑ%JÔ%JÑKÔKÐKrR   c                óÀ   — | €g d¢} n,t          | t          ¦  «        r| gnt          j        | ¦  «        } t                               t          j        | ¦  «        ¦  «        S )ud  
    Select all duration columns, optionally filtering by time unit.

    Parameters
    ----------
    time_unit
        One (or more) of the allowed timeunit precision strings, "ms", "us", and "ns".
        Omit to select columns with any valid timeunit.

    See Also
    --------
    date : Select all date columns.
    datetime : Select all datetime columns, optionally filtering by time unit/zone.
    temporal : Select all temporal columns.
    time : Select all time columns.

    Examples
    --------
    >>> from datetime import date, timedelta
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "dt": [date(2022, 1, 31), date(2025, 7, 5)],
    ...         "td1": [
    ...             timedelta(days=1, milliseconds=123456),
    ...             timedelta(days=1, hours=23, microseconds=987000),
    ...         ],
    ...         "td2": [
    ...             timedelta(days=7, microseconds=456789),
    ...             timedelta(days=14, minutes=999, seconds=59),
    ...         ],
    ...         "td3": [
    ...             timedelta(weeks=4, days=-10, microseconds=999999),
    ...             timedelta(weeks=3, milliseconds=123456, microseconds=1),
    ...         ],
    ...     },
    ...     schema_overrides={
    ...         "td1": pl.Duration("ms"),
    ...         "td2": pl.Duration("us"),
    ...         "td3": pl.Duration("ns"),
    ...     },
    ... )

    Select all duration columns:

    >>> df.select(cs.duration())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ td1            â”† td2             â”† td3                â”‚
    â”‚ ---            â”† ---             â”† ---                â”‚
    â”‚ duration[ms]   â”† duration[Î¼s]    â”† duration[ns]       â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1d 2m 3s 456ms â”† 7d 456789Âµs     â”† 18d 999999Âµs       â”‚
    â”‚ 1d 23h 987ms   â”† 14d 16h 39m 59s â”† 21d 2m 3s 456001Âµs â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all duration columns that have 'ms' precision:

    >>> df.select(cs.duration("ms"))
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ td1            â”‚
    â”‚ ---            â”‚
    â”‚ duration[ms]   â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1d 2m 3s 456ms â”‚
    â”‚ 1d 23h 987ms   â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all duration columns that have 'ms' OR 'ns' precision:

    >>> df.select(cs.duration(["ms", "ns"]))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ td1            â”† td3                â”‚
    â”‚ ---            â”† ---                â”‚
    â”‚ duration[ms]   â”† duration[ns]       â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1d 2m 3s 456ms â”† 18d 999999Âµs       â”‚
    â”‚ 1d 23h 987ms   â”† 21d 2m 3s 456001Âµs â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for duration columns:

    >>> df.select(~cs.duration())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dt         â”‚
    â”‚ ---        â”‚
    â”‚ date       â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 2022-01-31 â”‚
    â”‚ 2025-07-05 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    NrW  )rP   r’   rÉ   rA   r'   r§   r   r7   )r¾   s    rQ   r7   r7   =  sb   € ðD ÐØ&Ð&Ð&ˆ	ˆ	õ & iµÑ5Ô5ÐSˆYˆKˆK½8¼=ÈÑ;SÔ;Sð 	õ ×$Ò$¥ZÔ%8¸Ñ%CÔ%CÑDÔDÐDrR   Úsuffixc                 ó~   — t          | ¦  «        › d}t                               t          j        |¦  «        ¦  «        S )u/  
    Select columns that end with the given substring(s).

    See Also
    --------
    contains : Select columns that contain the given literal substring(s).
    matches : Select all columns that match the given regex pattern.
    starts_with : Select columns that start with the given substring(s).

    Parameters
    ----------
    suffix
        Substring(s) that matching column names should end with.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [False, True],
    ...     }
    ... )

    Select columns that end with the substring 'z':

    >>> df.select(cs.ends_with("z"))
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ baz â”‚
    â”‚ --- â”‚
    â”‚ f64 â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ 2.0 â”‚
    â”‚ 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”˜

    Select columns that end with *either* the letter 'z' or 'r':

    >>> df.select(cs.ends_with("z", "r"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that end with the substring 'z':

    >>> df.select(~cs.ends_with("z"))
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ foo â”† bar â”† zap   â”‚
    â”‚ --- â”† --- â”† ---   â”‚
    â”‚ str â”† i64 â”† bool  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•¡
    â”‚ x   â”† 123 â”† false â”‚
    â”‚ y   â”† 456 â”† true  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜
    r‡   rO  )rb  rP  s     rQ   r8   r8   ©  s:   € õD ˜FÑ#Ô#Ð&Ð&Ð&€GÝ×$Ò$¥ZÔ%7¸Ñ%@Ô%@ÑAÔAÐArR   r  ú[str | PolarsDataType | Selector | Expr | Collection[str | PolarsDataType | Selector | Expr]r  ú&str | PolarsDataType | Selector | Exprc                ó   — t          | g|¢R Ž  S )uŸ  
    Select all columns except those matching the given columns, datatypes, or selectors.

    Parameters
    ----------
    columns
        One or more columns (col or name), datatypes, columns, or selectors representing
        the columns to exclude.
    *more_columns
        Additional columns, datatypes, or selectors to exclude, specified as positional
        arguments.

    Notes
    -----
    If excluding a single selector it is simpler to write as `~selector` instead.

    Examples
    --------
    Exclude by column name(s):

    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "aa": [1, 2, 3],
    ...         "ba": ["a", "b", None],
    ...         "cc": [None, 2.5, 1.5],
    ...     }
    ... )
    >>> df.select(cs.exclude("ba", "xx"))
    shape: (3, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ aa  â”† cc   â”‚
    â”‚ --- â”† ---  â”‚
    â”‚ i64 â”† f64  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ 1   â”† null â”‚
    â”‚ 2   â”† 2.5  â”‚
    â”‚ 3   â”† 1.5  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    Exclude using a column name, a selector, and a dtype:

    >>> df.select(cs.exclude("aa", cs.string(), pl.UInt32))
    shape: (3, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”
    â”‚ cc   â”‚
    â”‚ ---  â”‚
    â”‚ f64  â”‚
    â•žâ•â•â•â•â•â•â•¡
    â”‚ null â”‚
    â”‚ 2.5  â”‚
    â”‚ 1.5  â”‚
    â””â”€â”€â”€â”€â”€â”€â”˜
    )r   )r  r  s     rQ   r:   r:   ï  s   € õ@ ! Ð8¨<Ð8Ð8Ð8Ð8Ð8rR   c                óZ   — t                                t          j        | ¦  «        ¦  «        S )ub  
    Select the first column in the current scope.

    See Also
    --------
    all : Select all columns.
    last : Select the last column in the current scope.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [0, 1],
    ...     }
    ... )

    Select the first column:

    >>> df.select(cs.first())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ foo â”‚
    â”‚ --- â”‚
    â”‚ str â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ x   â”‚
    â”‚ y   â”‚
    â””â”€â”€â”€â”€â”€â”˜

    Select everything  *except* for the first column:

    >>> df.select(~cs.first())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”† zap â”‚
    â”‚ --- â”† --- â”† --- â”‚
    â”‚ i64 â”† f64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”† 0   â”‚
    â”‚ 456 â”† 5.5 â”† 1   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   r<   rS   s    rQ   r<   r<   2	  s$   € õ^ ×$Ò$¥ZÔ%5°fÑ%=Ô%=Ñ>Ô>Ð>rR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )u  
    Select all float columns.

    See Also
    --------
    integer : Select all integer columns.
    numeric : Select all numeric columns.
    signed_integer : Select all signed integer columns.
    unsigned_integer : Select all unsigned integer columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [0.0, 1.0],
    ...     },
    ...     schema_overrides={"baz": pl.Float32, "zap": pl.Float64},
    ... )

    Select all float columns:

    >>> df.select(cs.float())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ baz â”† zap â”‚
    â”‚ --- â”† --- â”‚
    â”‚ f32 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 2.0 â”† 0.0 â”‚
    â”‚ 5.5 â”† 1.0 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are float:

    >>> df.select(~cs.float())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ foo â”† bar â”‚
    â”‚ --- â”† --- â”‚
    â”‚ str â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ x   â”† 123 â”‚
    â”‚ y   â”† 456 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   r=   rŽ   rR   rQ   r=   r=   d	  s"   € õd ×$Ò$¥ZÔ%5Ñ%7Ô%7Ñ8Ô8Ð8rR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )uô  
    Select all integer columns.

    See Also
    --------
    by_dtype : Select columns by dtype.
    float : Select all float columns.
    numeric : Select all numeric columns.
    signed_integer : Select all signed integer columns.
    unsigned_integer : Select all unsigned integer columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [0, 1],
    ...     }
    ... )

    Select all integer columns:

    >>> df.select(cs.integer())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† zap â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 0   â”‚
    â”‚ 456 â”† 1   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are integer :

    >>> df.select(~cs.integer())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ foo â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ str â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ x   â”† 2.0 â”‚
    â”‚ y   â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   r>   rŽ   rR   rQ   r>   r>   ™	  r_  rR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )u1  
    Select all signed integer columns.

    See Also
    --------
    by_dtype : Select columns by dtype.
    float : Select all float columns.
    integer : Select all integer columns.
    numeric : Select all numeric columns.
    unsigned_integer : Select all unsigned integer columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": [-123, -456],
    ...         "bar": [3456, 6789],
    ...         "baz": [7654, 4321],
    ...         "zap": ["ab", "cd"],
    ...     },
    ...     schema_overrides={"bar": pl.UInt32, "baz": pl.UInt64},
    ... )

    Select all signed integer columns:

    >>> df.select(cs.signed_integer())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”
    â”‚ foo  â”‚
    â”‚ ---  â”‚
    â”‚ i64  â”‚
    â•žâ•â•â•â•â•â•â•¡
    â”‚ -123 â”‚
    â”‚ -456 â”‚
    â””â”€â”€â”€â”€â”€â”€â”˜

    >>> df.select(~cs.signed_integer())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar  â”† baz  â”† zap â”‚
    â”‚ ---  â”† ---  â”† --- â”‚
    â”‚ u32  â”† u64  â”† str â”‚
    â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 3456 â”† 7654 â”† ab  â”‚
    â”‚ 6789 â”† 4321 â”† cd  â”‚
    â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all integer columns (both signed and unsigned):

    >>> df.select(cs.integer())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ foo  â”† bar  â”† baz  â”‚
    â”‚ ---  â”† ---  â”† ---  â”‚
    â”‚ i64  â”† u32  â”† u64  â”‚
    â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ -123 â”† 3456 â”† 7654 â”‚
    â”‚ -456 â”† 6789 â”† 4321 â”‚
    â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   rE   rŽ   rR   rQ   rE   rE   Î	  s"   € õ| ×$Ò$¥ZÔ%>Ñ%@Ô%@ÑAÔAÐArR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )u|  
    Select all unsigned integer columns.

    See Also
    --------
    by_dtype : Select columns by dtype.
    float : Select all float columns.
    integer : Select all integer columns.
    numeric : Select all numeric columns.
    signed_integer : Select all signed integer columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": [-123, -456],
    ...         "bar": [3456, 6789],
    ...         "baz": [7654, 4321],
    ...         "zap": ["ab", "cd"],
    ...     },
    ...     schema_overrides={"bar": pl.UInt32, "baz": pl.UInt64},
    ... )

    Select all unsigned integer columns:

    >>> df.select(cs.unsigned_integer())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ bar  â”† baz  â”‚
    â”‚ ---  â”† ---  â”‚
    â”‚ u32  â”† u64  â”‚
    â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ 3456 â”† 7654 â”‚
    â”‚ 6789 â”† 4321 â”‚
    â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are unsigned integers:

    >>> df.select(~cs.unsigned_integer())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ foo  â”† zap â”‚
    â”‚ ---  â”† --- â”‚
    â”‚ i64  â”† str â”‚
    â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ -123 â”† ab  â”‚
    â”‚ -456 â”† cd  â”‚
    â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Select all integer columns (both signed and unsigned):

    >>> df.select(cs.integer())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ foo  â”† bar  â”† baz  â”‚
    â”‚ ---  â”† ---  â”† ---  â”‚
    â”‚ i64  â”† u32  â”† u64  â”‚
    â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ -123 â”† 3456 â”† 7654 â”‚
    â”‚ -456 â”† 6789 â”† 4321 â”‚
    â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   rK   rŽ   rR   rQ   rK   rK   
  s"   € õ@ ×$Ò$¥ZÔ%@Ñ%BÔ%BÑCÔCÐCrR   c                óZ   — t                                t          j        | ¦  «        ¦  «        S )u_  
    Select the last column in the current scope.

    See Also
    --------
    all : Select all columns.
    first : Select the first column in the current scope.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [0, 1],
    ...     }
    ... )

    Select the last column:

    >>> df.select(cs.last())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ zap â”‚
    â”‚ --- â”‚
    â”‚ i64 â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ 0   â”‚
    â”‚ 1   â”‚
    â””â”€â”€â”€â”€â”€â”˜

    Select everything  *except* for the last column:

    >>> df.select(~cs.last())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ foo â”† bar â”† baz â”‚
    â”‚ --- â”† --- â”† --- â”‚
    â”‚ str â”† i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ x   â”† 123 â”† 2.0 â”‚
    â”‚ y   â”† 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   r@   rS   s    rQ   r@   r@   R
  s#   € õ^ ×$Ò$¥Z¤_°VÑ%<Ô%<Ñ=Ô=Ð=rR   rP  c                ó   — | dk    rt          ¦   «         S |                      d¦  «        r| dd…         } n|                      d¦  «        r
| dd…         } t                               t          j        | ¦  «        ¦  «        S )u÷  
    Select all columns that match the given regex pattern.

    See Also
    --------
    contains : Select all columns that contain the given substring.
    ends_with : Select all columns that end with the given substring(s).
    starts_with : Select all columns that start with the given substring(s).

    Parameters
    ----------
    pattern
        A valid regular expression pattern, compatible with the `regex crate
        <https://docs.rs/regex/latest/regex/>`_.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [0, 1],
    ...     }
    ... )

    Match column names containing an 'a', preceded by a character that is not 'z':

    >>> df.select(cs.matches("[^z]a"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”‚
    â”‚ 456 â”† 5.5 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Do not match column names ending in 'R' or 'z' (case-insensitively):

    >>> df.select(~cs.matches(r"(?i)R|z$"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ foo â”† zap â”‚
    â”‚ --- â”† --- â”‚
    â”‚ str â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ x   â”† 0   â”‚
    â”‚ y   â”† 1   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    z.*é   Néþÿÿÿ)r(   r“   r”   r'   r§   r   rB   )rP  s    rQ   rB   rB   „
  s~   € ðl $‚€Ý‰uŒuˆà×Ò˜dÑ#Ô#ð 	#Ø˜a˜b˜b”kˆGˆGØ×Ò˜dÑ#Ô#ð 	#Ø˜c˜r˜c”lˆGå×(Ò(­Ô);¸GÑ)DÔ)DÑEÔEÐErR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )uF  
    Select all numeric columns.

    See Also
    --------
    by_dtype : Select columns by dtype.
    float : Select all float columns.
    integer : Select all integer columns.
    signed_integer : Select all signed integer columns.
    unsigned_integer : Select all unsigned integer columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": ["x", "y"],
    ...         "bar": [123, 456],
    ...         "baz": [2.0, 5.5],
    ...         "zap": [0, 0],
    ...     },
    ...     schema_overrides={"bar": pl.Int16, "baz": pl.Float32, "zap": pl.UInt8},
    ... )

    Match all numeric columns:

    >>> df.select(cs.numeric())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”† zap â”‚
    â”‚ --- â”† --- â”† --- â”‚
    â”‚ i16 â”† f32 â”† u8  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 123 â”† 2.0 â”† 0   â”‚
    â”‚ 456 â”† 5.5 â”† 0   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Match all columns *except* for those that are numeric:

    >>> df.select(~cs.numeric())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ foo â”‚
    â”‚ --- â”‚
    â”‚ str â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ x   â”‚
    â”‚ y   â”‚
    â””â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   rD   rŽ   rR   rQ   rD   rD   Å
  s"   € õf ×$Ò$¥ZÔ%7Ñ%9Ô%9Ñ:Ô:Ð:rR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )u£	  
    Select all object columns.

    See Also
    --------
    by_dtype : Select columns by dtype.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> from uuid import uuid4
    >>> with pl.Config(fmt_str_lengths=36):
    ...     df = pl.DataFrame(
    ...         {
    ...             "idx": [0, 1],
    ...             "uuid_obj": [uuid4(), uuid4()],
    ...             "uuid_str": [str(uuid4()), str(uuid4())],
    ...         },
    ...         schema_overrides={"idx": pl.Int32},
    ...     )
    ...     print(df)  # doctest: +IGNORE_RESULT
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ idx â”† uuid_obj                             â”† uuid_str                             â”‚
    â”‚ --- â”† ---                                  â”† ---                                  â”‚
    â”‚ i32 â”† object                               â”† str                                  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 0   â”† 6be063cf-c9c6-43be-878e-e446cfd42981 â”† acab9fea-c05d-4b91-b639-418004a63f33 â”‚
    â”‚ 1   â”† 7849d8f9-2cac-48e7-96d3-63cf81c14869 â”† 28c65415-8b7d-4857-a4ce-300dca14b12b â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select object columns and export as a dict:

    >>> df.select(cs.object()).to_dict(as_series=False)  # doctest: +IGNORE_RESULT
    {
        "uuid_obj": [
            UUID("6be063cf-c9c6-43be-878e-e446cfd42981"),
            UUID("7849d8f9-2cac-48e7-96d3-63cf81c14869"),
        ]
    }

    Select all columns *except* for those that are object and export as dict:

    >>> df.select(~cs.object())  # doctest: +IGNORE_RESULT
    {
        "idx": [0, 1],
        "uuid_str": [
            "acab9fea-c05d-4b91-b639-418004a63f33",
            "28c65415-8b7d-4857-a4ce-300dca14b12b",
        ],
    }
    )r'   r§   r   rÊ   rŽ   rR   rQ   rÊ   rÊ   û
  s"   € õj ×$Ò$¥ZÔ%6Ñ%8Ô%8Ñ9Ô9Ð9rR   Úprefixc                 ó~   — dt          | ¦  «        › }t                               t          j        |¦  «        ¦  «        S )uL  
    Select columns that start with the given substring(s).

    Parameters
    ----------
    prefix
        Substring(s) that matching column names should start with.

    See Also
    --------
    contains : Select all columns that contain the given substring.
    ends_with : Select all columns that end with the given substring(s).
    matches : Select all columns that match the given regex pattern.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "foo": [1.0, 2.0],
    ...         "bar": [3.0, 4.0],
    ...         "baz": [5, 6],
    ...         "zap": [7, 8],
    ...     }
    ... )

    Match columns starting with a 'b':

    >>> df.select(cs.starts_with("b"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”‚
    â”‚ --- â”† --- â”‚
    â”‚ f64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 3.0 â”† 5   â”‚
    â”‚ 4.0 â”† 6   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Match columns starting with *either* the letter 'b' or 'z':

    >>> df.select(cs.starts_with("b", "z"))
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ bar â”† baz â”† zap â”‚
    â”‚ --- â”† --- â”† --- â”‚
    â”‚ f64 â”† i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 3.0 â”† 5   â”† 7   â”‚
    â”‚ 4.0 â”† 6   â”† 8   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Match all columns *except* for those starting with 'b':

    >>> df.select(~cs.starts_with("b"))
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ foo â”† zap â”‚
    â”‚ --- â”† --- â”‚
    â”‚ f64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 1.0 â”† 7   â”‚
    â”‚ 2.0 â”† 8   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    r†   rO  )rr  Ústarts_with_patterns     rQ   rF   rF   3  s;   € ðD 3j¨Ñ0Ô0Ð2Ð2ÐÝ×$Ò$¥ZÔ%7Ð8KÑ%LÔ%LÑMÔMÐMrR   )Úinclude_categoricalru  c                óh   — t           g}| r|                     t          ¦  «         t          |¦  «        S )ue  
    Select all String (and, optionally, Categorical) string columns.

    See Also
    --------
    binary : Select all binary columns.
    by_dtype : Select all columns matching the given dtype(s).
    categorical: Select all categorical columns.

    Examples
    --------
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "w": ["xx", "yy", "xx", "yy", "xx"],
    ...         "x": [1, 2, 1, 4, -2],
    ...         "y": [3.0, 4.5, 1.0, 2.5, -2.0],
    ...         "z": ["a", "b", "a", "b", "b"],
    ...     },
    ... ).with_columns(
    ...     z=pl.col("z").cast(pl.Categorical()),
    ... )

    Group by all string columns, sum the numeric columns, then sort by the string cols:

    >>> df.group_by(cs.string()).agg(cs.numeric().sum()).sort(by=cs.string())
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ w   â”† x   â”† y   â”‚
    â”‚ --- â”† --- â”† --- â”‚
    â”‚ str â”† i64 â”† f64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ xx  â”† 0   â”† 2.0 â”‚
    â”‚ yy  â”† 6   â”† 7.0 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    Group by all string *and* categorical columns:

    >>> df.group_by(cs.string(include_categorical=True)).agg(cs.numeric().sum()).sort(
    ...     by=cs.string(include_categorical=True)
    ... )
    shape: (3, 4)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”
    â”‚ w   â”† z   â”† x   â”† y    â”‚
    â”‚ --- â”† --- â”† --- â”† ---  â”‚
    â”‚ str â”† cat â”† i64 â”† f64  â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡
    â”‚ xx  â”† a   â”† 2   â”† 4.0  â”‚
    â”‚ xx  â”† b   â”† -2  â”† -2.0 â”‚
    â”‚ yy  â”† b   â”† 6   â”† 7.0  â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜
    )r   rm   r   r.   )ru  Ústring_dtypess     rQ   rG   rG   y  s6   € õj 5;°8€MØð *Ø×Ò[Ñ)Ô)Ð)åMÑ"Ô"Ð"rR   c                 óX   — t                                t          j        ¦   «         ¦  «        S )u]  
    Select all temporal columns.

    See Also
    --------
    by_dtype : Select all columns matching the given dtype(s).
    date : Select all date columns.
    datetime : Select all datetime columns, optionally filtering by time unit/zone.
    duration : Select all duration columns, optionally filtering by time unit.
    time : Select all time columns.

    Examples
    --------
    >>> from datetime import date, time
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "dt": [date(2021, 1, 1), date(2021, 1, 2)],
    ...         "tm": [time(12, 0, 0), time(20, 30, 45)],
    ...         "value": [1.2345, 2.3456],
    ...     }
    ... )

    Match all temporal columns:

    >>> df.select(cs.temporal())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dt         â”† tm       â”‚
    â”‚ ---        â”† ---      â”‚
    â”‚ date       â”† time     â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 2021-01-01 â”† 12:00:00 â”‚
    â”‚ 2021-01-02 â”† 20:30:45 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Match all temporal columns *except* for time columns:

    >>> df.select(cs.temporal() - cs.time())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dt         â”‚
    â”‚ ---        â”‚
    â”‚ date       â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 2021-01-01 â”‚
    â”‚ 2021-01-02 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Match all columns *except* for temporal columns:

    >>> df.select(~cs.temporal())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ value  â”‚
    â”‚ ---    â”‚
    â”‚ f64    â”‚
    â•žâ•â•â•â•â•â•â•â•â•¡
    â”‚ 1.2345 â”‚
    â”‚ 2.3456 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )r'   r§   r   rI   rŽ   rR   rQ   rI   rI   µ  s"   € õ~ ×$Ò$¥ZÔ%8Ñ%:Ô%:Ñ;Ô;Ð;rR   c                 ó,   — t          t          g¦  «        S )u  
    Select all time columns.

    See Also
    --------
    date : Select all date columns.
    datetime : Select all datetime columns, optionally filtering by time unit/zone.
    duration : Select all duration columns, optionally filtering by time unit.
    temporal : Select all temporal columns.

    Examples
    --------
    >>> from datetime import date, datetime, time
    >>> import polars.selectors as cs
    >>> df = pl.DataFrame(
    ...     {
    ...         "dtm": [datetime(2001, 5, 7, 10, 25), datetime(2031, 12, 31, 0, 30)],
    ...         "dt": [date(1999, 12, 31), date(2024, 8, 9)],
    ...         "tm": [time(0, 0, 0), time(23, 59, 59)],
    ...     },
    ... )

    Select all time columns:

    >>> df.select(cs.time())
    shape: (2, 1)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ tm       â”‚
    â”‚ ---      â”‚
    â”‚ time     â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 00:00:00 â”‚
    â”‚ 23:59:59 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Select all columns *except* for those that are times:

    >>> df.select(~cs.time())
    shape: (2, 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ dtm                 â”† dt         â”‚
    â”‚ ---                 â”† ---        â”‚
    â”‚ datetime[Î¼s]        â”† date       â”‚
    â•žâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 2001-05-07 10:25:00 â”† 1999-12-31 â”‚
    â”‚ 2031-12-31 00:30:00 â”† 2024-08-09 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )r.   r   rŽ   rR   rQ   rJ   rJ   ÷  rR  rR   )rL   r   rM   rN   )rU   rV   rW   rX   rT   rY   rM   rZ   )rg   rh   ri   r   rM   rj   )rt   r   ru   rv   rw   rY   rx   rY   rs   rY   rM   ry   )ri   r‚   rƒ   r„   rM   r'   )rG   r  r  rY   rM   r’   r  )F)r  rY   r  rY   rM   r'   )rš   r.  rM   r'   )r3  r4  rˆ   rY   rM   r'   )r˜   r  rˆ   rY   rM   r'   r¢   )rA  rB  rM   r'   )rA  rF  rE  rG  rM   r'   )rM  r’   rM   r'   )NrS  )r¾   rT  r¿   rU  rM   r'   )r  rY   rM   r'   )r¾   rT  rM   r'   )rb  r’   rM   r'   )r  rd  r  re  rM   r'   )rT   rY   rM   r'   )rP  r’   rM   r'   )rr  r’   rM   r'   )ru  rY   rM   r'   )jÚ
__future__r   rÉ   Ú
contextlibr4   rÌ   Úcollections.abcr   r   r   r5   r   rÎ   Ú	functoolsr   Úoperatorr	   Útypingr
   r   r   r   Úpolars.datatypes.classesÚ	datatypesÚclassesrÁ   Úpolarsr   r°   Úpolars._utils.parse.exprr   Úpolars._utils.unstabler   Úpolars._utils.variousr   r   Úpolars.datatypesr   r   r   r   r   r   r   Úpolars.exprr   ÚsuppressÚImportErrorÚpolars._plrr   r   Útypesr   Úsysr   r   r    Úpolars._typingr!   r"   r#   Úversion_infor&   Útyping_extensionsÚ__all__r?   r;   rr   r   r   r'   r  r(   r)   r*   r,   r-   r.   r/   r0   r>  r9   rA   r+   rH   rC   r1   r2   r3   r6   r7   r8   r:   r<   r=   r>   rE   rK   r@   rB   rD   rÊ   rF   rG   rI   rJ   rŽ   rR   rQ   ú<module>r’     sI  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð (Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø !Ð !Ð !Ð !Ð !Ð !Ø >Ð >Ð >Ð >Ð >Ð >Ø +Ð +Ð +Ð +Ð +Ð +Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð à€ZÔ˜Ñ%Ô%ð /ð /Ø.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð Ð Ð Ð Ð Ð àð 
-Ø€J€J€JØ(Ð(Ð(Ð(Ð(Ð(à+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØGÐGÐGÐGÐGÐGÐGÐGÐGÐGà
Ô˜7Ò"Ð"Ø!Ð!Ð!Ð!Ð!Ð!Ð!à,Ð,Ð,Ð,Ð,Ð,ð(ð (ð (€ðV%ð %ð %ð %ð, ð	L;ð L;ð L;ð L;ð L;ð L;ðb ð  ð  ð  ðR ðð ð ð ð ð ð24!ð 4!ð 4!ð 4!ðnB/ð B/ð B/ð B/ð B/ˆtñ B/ô B/ð B/ðJ
 AEð ð ð ð ð ð ð/7ð /7ð /7ð /7ðdhW¸Uð hWð hWð hWð hWð hWð hWðX ð_ð  ð_ð _ð _ð _ð _ð _ðD!ð !ð !ð !ðH7ð 7ð 7ð 7ðtS*ð S*ð S*ð S*ðn HLðeTð eTð eTð eTð eTð eTðP @Dð ZSð ZSð ZSð ZSð ZSð ZSðz9ð 9ð 9ð 9ð, 
€„ð49ð 49ð 49ñ „ð49ðn 
€„ðF?ð F?ð F?ð F?ñ „ðF?ðR 
€„ðVGÀð VGð VGð VGð VGð VGñ „ðVGðr 
€„ð4;ð 4;ð 4;ñ „ð4;ðn 
€„ð7:ð 7:ð 7:ñ „ð7:ðt/?ð /?ð /?ð /?ðdCBð CBð CBð CBðL1ð 1ð 1ð 1ðj 9=ð	ð	ZXð ZXð ZXð ZXð ZXðz2;ð 2;ð 2;ð 2;ðjXLð XLð XLð XLð XLðx 9=ðiEð iEð iEð iEð iEðXCBð CBð CBð CBðL@9ð @9ð @9ð @9ðF !ð /?ð /?ð /?ð /?ð /?ð /?ðd29ð 29ð 29ð 29ðj2;ð 2;ð 2;ð 2;ðj>Bð >Bð >Bð >BðB@Dð @Dð @Dð @DðF  ð />ð />ð />ð />ð />ð />ðd>Fð >Fð >Fð >FðB3;ð 3;ð 3;ð 3;ðl5:ð 5:ð 5:ð 5:ðpCNð CNð CNð CNðL +0ð 9#ð 9#ð 9#ð 9#ð 9#ð 9#ðx?<ð ?<ð ?<ð ?<ðD1ð 1ð 1ð 1ð 1ð 1s   Â	BÂBÂ"B