
    'hU`                       % S SK Jr  S SKrS SKrS SKJrJrJrJrJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJrJr  S SKJr  S SKJrJr  S SKJr   S SKJ!r"  S SK#J$r$  S SK%J&r&  \RN                  " \(5         S SK)J*r*  SSS5        \(       a  S SK+r+S SK,J-r-J.r.  S SK/J0r0  S SKJ1r1J2r2J3r3  \+Rh                  S:  a  S SKJ5r5  OS SK6J5r5  \+Rh                  S:  a  S SKJ7r7  OS SK6J7r7  \\\$\&\ R6                  \ RL                  \1   \"Rp                  \"Rr                  4   r:S\;S'   S/r<S!S jr=S"S jr>SSS.       S#S jjr? " S  S\\   5      r@g! , (       d  f       N= f)$    )annotationsN)TYPE_CHECKINGCallableGenericUnionoverload)	FrameType)deprecate_renamed_parameter)is_pycapsule)issue_unstable_warning)_get_stack_localsqualified_type_name)wrap_ldf)
from_arrowfrom_pandas)	DataFrame)_check_for_pandas_check_for_pyarrow)pandas)pyarrow)	LazyFrame)Series)PySQLContext)
CollectionMapping)TracebackType)AnyFinalLiteral)   
   )	TypeAlias)r       )Selfr"   CompatibleFrameType
SQLContextc                R   [        U 5      =(       d    [        U [        5      =(       d    [        U 5      =(       a*    [        U [        R
                  [        R                  45      =(       d<    [        U 5      =(       a*    [        U [        R                  [        R                  45      $ )z2Check if the object can be converted to DataFrame.)r   
isinstancer   r   pdr   r   r   paTableRecordBatch)objs    eC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\polars/sql/context.py_compatible_framer/   ;   sq     	S 	Uc9%	Uc"Qz#bii7P'Q	U s#S
32>>8R(S	    c                   [        U [        [        45      (       a  U R                  5       $ [        U [        5      (       a  U R                  5       R                  5       $ [        U 5      (       ao  [        U [        R                  [        R                  45      (       a@  [        [        U 5      =n[        5      (       a  UR                  5       nUR                  5       $ [        U 5      (       d?  [        U 5      (       aH  [        U [        R                  [        R                  45      (       a  [        U 5      R                  5       $ S[        U 5       3n[!        U5      e)z'Return LazyFrame from compatible input.zunrecognised frame type: )r(   r   r   lazyr   to_framer   r)   r   r   r   r*   r+   r,   r   r   
ValueError)r-   framemsgs      r.   _ensure_lazyframer7   E   s    #	9-..xxz	C	 	 ||~""$$	3		JsR\\2994M$N$N{3//e88NN$Ezz|	c		3JsRXXr~~4N$O$O###%%)*=c*B)CDor0   )	n_objectsnamedc                R    U (       a  [         O[        [        [        4n[	        X1US9$ )z5Return compatible frame objects from the local stack.)of_typer8   r9   )r/   r   r   r   r   )all_compatibler8   r9   r;   s       r.   _get_frame_localsr=   X   s"     $2	9f7UGWOOr0   c                  v   \ rS rSr% SrS\S'   S\S'   S\S'   \ S/S	S	S
S.             S0S jjj5       r\ S/S	S	S.             S1S jjj5       r\ S/S	S	S.             S2S jjj5       r\" SSSS9 S3S
S
S.         S4S jjj5       r\\	S
S.     S5S jj5       5       r
\\	S6S j5       5       r
\\	S7S j5       5       r
\	S
S.     S7S jj5       r
S8S jr        S9S jrS:S jr\S	S.       S;S jj5       r\        S<S  j5       r\        S=S! j5       r\S	S.       S>S" jj5       r\        S?S# j5       r\        S@S$ j5       r\S	S.     SAS% jj5       rSS.     SAS& jjrSBS' jr S3S(S).     SCS* jjjr S3     SDS+ jjrSES, jrSFS- jrS.rg)Gr&   c   a  
Run SQL queries against DataFrame, LazyFrame, and Series data.

.. warning::
    This functionality is considered **unstable**, although it is close to being
    considered stable. It may be changed at any point without it being considered
    a breaking change.
r   _ctxtzFinal[bool]_eager_executionzlist[set[str]]_tables_scope_stack.F)register_globalsr<   eagerrD   c                   g N selfframesrC   r<   rD   named_framess         r.   __init__SQLContext.__init__w        r0   )rC   r<   c                   g rF   rG   rH   s         r.   rL   rM      rN   r0   c                   g rF   rG   rH   s         r.   rL   rM      rN   r0   eager_executionz0.20.31)versionN)rC   rD   c               V   [        S5        [        R                  " 5       U l        X0l        [        U=(       d    0 5      nU(       a2  [        SS9R                  5        H  u  pVXQ;  d  M  XT;  d  M  XdU'   M     U(       d  U(       a#  UR                  U5        U R                  U5        gg)u  
Initialize a new `SQLContext`.

.. versionchanged:: 0.20.31
    The `eager_execution` parameter was renamed `eager`.

Parameters
----------
frames
    A `{name:frame, ...}` mapping which can include Polars frames *and*
    pandas DataFrames, Series and pyarrow Table and RecordBatch objects.
register_globals
    Register compatible objects (polars DataFrame, LazyFrame, and Series) found
    in the globals, automatically mapping their variable name to a table name.
    To register other objects (pandas/pyarrow data) pass them explicitly, or
    call the `execute_global` classmethod. If given an integer then only the
    most recent "n" objects found will be registered.
eager
    If True, returns execution results as `DataFrame` instead of `LazyFrame`.
    (Note that the query itself is always executed in lazy-mode; this parameter
    impacts whether :meth:`execute` returns an eager or lazy result frame).
**named_frames
    Named eager/lazy frames, provided as kwargs.

Examples
--------
>>> lf = pl.LazyFrame({"a": [1, 2, 3], "b": ["x", None, "z"]})
>>> res = pl.SQLContext(frame=lf).execute(
...     "SELECT b, a*2 AS two_a FROM frame WHERE b IS NOT NULL"
... )
>>> res.collect()
shape: (2, 2)
┌─────┬───────┐
│ b   ┆ two_a │
│ --- ┆ ---   │
│ str ┆ i64   │
╞═════╪═══════╡
│ x   ┆ 2     │
│ z   ┆ 6     │
└─────┴───────┘
zY`SQLContext` is considered **unstable**, although it is close to being considered stable.Fr<   N)
r   r   newr@   rA   dictr=   itemsupdateregister_many)rI   rJ   rC   rD   rK   namer-   s          r.   rL   rM      s    d 	g	
 "%%'
 %fl#.$eg	 %$*B),&	 \MM,'v& "r0   )rD   c                   g rF   rG   clsqueryrD   s      r.   execute_globalSQLContext.execute_global   s     r0   c                   g rF   rG   r\   s      r.   r_   r`      s    ORr0   c                   g rF   rG   r\   s      r.   r_   r`      s    RUr0   c                  [         R                  " SUS[         R                  S9n[        U5      S:  am  [         R                  " SUS   5       Vs1 s HG  n[         R                  " SU5      (       d  UR                  5       (       d  M6  UR                  S5      iMI     snO	[        5       n[        SUS9nU " US	S
9 nUR                  XS9sSSS5        $ s  snf ! , (       d  f       g= f)u  
Immediately execute a SQL query, automatically registering frame globals.

Notes
-----
* This convenience method automatically registers all compatible objects in
  the local stack that are referenced in the query, mapping their variable name
  to a table name. Note that in addition to polars DataFrame, LazyFrame, and
  Series this method *also* registers pandas DataFrame, Series, and pyarrow
  Table and RecordBatch objects.
* Instead of calling this classmethod you should consider using `pl.sql`,
  which will use this code internally.

Parameters
----------
query
    A valid SQL query string.
eager
    If True, returns execution results as `DataFrame` instead of `LazyFrame`.
    (Note that the query itself is always executed in lazy-mode).

Examples
--------
>>> import pandas as pd
>>> df = pl.LazyFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
>>> df_pandas = pd.DataFrame({"a": [2, 3, 4], "c": [7, 8, 9]})

Join a polars LazyFrame with a pandas DataFrame (note use of the preferred
`pl.sql` method, which is equivalent to `SQLContext.execute_global`):

>>> pl.sql("SELECT df.*, c FROM df JOIN df_pandas USING(a)").collect()
shape: (2, 3)
┌─────┬─────┬─────┐
│ a   ┆ b   ┆ c   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 2   ┆ 5   ┆ 7   │
│ 3   ┆ 6   ┆ 8   │
└─────┴─────┴─────┘
z\bFROM\b   )maxsplitflagsz\bz^("[^"]+")$"T)r<   r9   F)rJ   rC   )r^   rD   N)
resplitIlenmatchisidentifierstripsetr=   execute)r]   r^   rD   qnmpossible_namesrK   ctxs           r.   r_   r`      s    ` HH[%!244@ 1vz ((5!A$//B88NB//2??3D /  	 )NSu=;;U;8 >= >=s   5C
C=C
C)c                    [        U S/ 5      U l        U R                  R                  [        U R	                  5       5      5        U $ )zITrack currently registered tables on scope entry; supports nested scopes.rB   )getattrrB   appendro   tablesrI   s    r.   	__enter__SQLContext.__enter__)  s8    #*41F#K   ''DKKM(:;r0   c                    U R                  [        U R                  5       5      U R                  R	                  5       -
  S9  g)ze
Unregister any tables created within the given scope on context exit.

See Also
--------
unregister
)namesN)
unregisterro   rx   rB   pop)rI   exc_typeexc_valexc_tbs       r.   __exit__SQLContext.__exit__/  s7     	t{{}%(@(@(D(D(FF 	 	
r0   c                Z    [        U R                  5       5      nSU S[        U 5      S S3$ )Nz<SQLContext [tables:z] at 0xx>)rk   rx   id)rI   n_tabless     r.   __repr__SQLContext.__repr__@  s-    t{{}%%hZwr$xl!DDr0   c                   g rF   rG   rI   r^   rD   s      r.   rp   SQLContext.executeG       r0   c                   g rF   rG   r   s      r.   rp   r   L  r   r0   c                   g rF   rG   r   s      r.   rp   r   Q  r   r0   c                   g rF   rG   r   s      r.   rp   r   V  r   r0   c                   g rF   rG   r   s      r.   rp   r   [  r   r0   c                   g rF   rG   r   s      r.   rp   r   `  r   r0   c                   g rF   rG   r   s      r.   rp   r   e  s     !$r0   c                   [        U R                  R                  U5      5      nU(       d  U R                  (       a  UR	                  5       $ U$ )ug  
Parse the given SQL query and execute it against the registered frame data.

Parameters
----------
query
    A valid string SQL query.
eager
    Apply the query eagerly, returning `DataFrame` instead of `LazyFrame`.
    If unset, the value of the init-time "eager" parameter will be used.
    Note that the query itself is always executed in lazy-mode; this
    parameter only impacts the type of the returned frame.

Examples
--------
Declare frame data and register with a SQLContext:

>>> df = pl.DataFrame(
...     data=[
...         ("The Godfather", 1972, 6_000_000, 134_821_952, 9.2),
...         ("The Dark Knight", 2008, 185_000_000, 533_316_061, 9.0),
...         ("Schindler's List", 1993, 22_000_000, 96_067_179, 8.9),
...         ("Pulp Fiction", 1994, 8_000_000, 107_930_000, 8.9),
...         ("The Shawshank Redemption", 1994, 25_000_000, 28_341_469, 9.3),
...     ],
...     schema=["title", "release_year", "budget", "gross", "imdb_score"],
...     orient="row",
... )
>>> ctx = pl.SQLContext(films=df)

Execute a SQL query against the registered frame data:

>>> ctx.execute(
...     '''
...     SELECT title, release_year, imdb_score
...     FROM films
...     WHERE release_year > 1990
...     ORDER BY imdb_score DESC
...     ''',
...     eager=True,
... )
shape: (4, 3)
┌──────────────────────────┬──────────────┬────────────┐
│ title                    ┆ release_year ┆ imdb_score │
│ ---                      ┆ ---          ┆ ---        │
│ str                      ┆ i64          ┆ f64        │
╞══════════════════════════╪══════════════╪════════════╡
│ The Shawshank Redemption ┆ 1994         ┆ 9.3        │
│ The Dark Knight          ┆ 2008         ┆ 9.0        │
│ Schindler's List         ┆ 1993         ┆ 8.9        │
│ Pulp Fiction             ┆ 1994         ┆ 8.9        │
└──────────────────────────┴──────────────┴────────────┘

Execute a GROUP BY query:

>>> ctx.execute(
...     '''
...     SELECT
...         MAX(release_year / 10) * 10 AS decade,
...         SUM(gross) AS total_gross,
...         COUNT(title) AS n_films,
...     FROM films
...     GROUP BY (release_year / 10) -- decade
...     ORDER BY total_gross DESC
...     ''',
...     eager=True,
... )
shape: (3, 3)
┌────────┬─────────────┬─────────┐
│ decade ┆ total_gross ┆ n_films │
│ ---    ┆ ---         ┆ ---     │
│ i64    ┆ i64         ┆ u32     │
╞════════╪═════════════╪═════════╡
│ 2000   ┆ 533316061   ┆ 1       │
│ 1990   ┆ 232338648   ┆ 3       │
│ 1970   ┆ 134821952   ┆ 1       │
└────────┴─────────────┴─────────┘
)r   r@   rp   rA   collect)rI   r^   rD   ress       r.   rp   r   j  s9    b tzz))%01!&$*?*?s{{}IcIr0   c                    Uc
  [        5       O
[        U5      nU R                  R                  XR                  5        U $ )u-  
Register a single frame as a table, using the given name.

Parameters
----------
name
    Name of the table.
frame
    eager/lazy frame to associate with this table name.

See Also
--------
register_globals
register_many
unregister

Examples
--------
>>> df = pl.DataFrame({"hello": ["world"]})
>>> ctx = pl.SQLContext()
>>> ctx.register("frame_data", df).execute("SELECT * FROM frame_data").collect()
shape: (1, 1)
┌───────┐
│ hello │
│ ---   │
│ str   │
╞═══════╡
│ world │
└───────┘
)r   r7   r@   register_ldf)rI   rZ   r5   s      r.   r   SQLContext.register  s2    >  %}	2CE2J

D**-r0   TrT   c               2    [        X!S9nU R                  US9$ )u	  
Register all frames (lazy or eager) found in the current globals scope.

Automatically maps variable names to table names.

See Also
--------
register
register_many
unregister

Parameters
----------
n
    Register only the most recent "n" frames.
all_compatible
    Control whether we *also* register pandas DataFrame, Series, and
    pyarrow Table and RecordBatch objects. If False, only Polars
    classes are registered with the SQL engine.

Examples
--------
>>> df1 = pl.DataFrame({"a": [1, 2, 3], "b": ["x", None, "z"]})
>>> df2 = pl.DataFrame({"a": [2, 3, 4], "c": ["t", "w", "v"]})

Register frames directly from variables found in the current globals scope:

>>> ctx = pl.SQLContext(register_globals=True)
>>> ctx.tables()
['df1', 'df2']

Query using the register variable/frame names

>>> ctx.execute(
...     "SELECT a, b, c FROM df1 LEFT JOIN df2 USING (a) ORDER BY a DESC"
... ).collect()
shape: (3, 3)
┌─────┬──────┬──────┐
│ a   ┆ b    ┆ c    │
│ --- ┆ ---  ┆ ---  │
│ i64 ┆ str  ┆ str  │
╞═════╪══════╪══════╡
│ 3   ┆ z    ┆ w    │
│ 2   ┆ null ┆ t    │
│ 1   ┆ x    ┆ null │
└─────┴──────┴──────┘
)r<   r8   )rJ   )r=   rY   )rI   nr<   rJ   s       r.   rC   SQLContext.register_globals  s#    d #.N!!!00r0   c                    [        U=(       d    0 5      nUR                  U5        UR                  5        H  u  p4U R                  X45        M     U $ )a0  
Register multiple eager/lazy frames as tables, using the associated names.

Parameters
----------
frames
    A `{name:frame, ...}` mapping.
**named_frames
    Named eager/lazy frames, provided as kwargs.

See Also
--------
register
register_globals
unregister

Examples
--------
>>> lf1 = pl.LazyFrame({"a": [1, 2, 3], "b": ["m", "n", "o"]})
>>> lf2 = pl.LazyFrame({"a": [2, 3, 4], "c": ["p", "q", "r"]})
>>> lf3 = pl.LazyFrame({"a": [3, 4, 5], "b": ["s", "t", "u"]})
>>> lf4 = pl.LazyFrame({"a": [4, 5, 6], "c": ["v", "w", "x"]})

Register multiple frames at once, either by passing in as a dict...

>>> ctx = pl.SQLContext().register_many({"tbl1": lf1, "tbl2": lf2})
>>> ctx.tables()
['tbl1', 'tbl2']

...or using keyword args:

>>> ctx.register_many(tbl3=lf3, tbl4=lf4).tables()
['tbl1', 'tbl2', 'tbl3', 'tbl4']
)rV   rX   rW   r   )rI   rJ   rK   rZ   r5   s        r.   rY   SQLContext.register_many  sB    N fl#l#!<<>KDMM$& *r0   c                ~    [        U[        5      (       a  U/nU H  nU R                  R                  U5        M      U $ )aY  
Unregister one or more eager/lazy frames by name.

Parameters
----------
names
    Names of the tables to unregister.

Notes
-----
You can also control table registration lifetime by using `SQLContext` as a
context manager; this can often be more useful when such control is wanted:

>>> df0 = pl.DataFrame({"colx": [0, 1, 2]})
>>> df1 = pl.DataFrame({"colx": [1, 2, 3]})
>>> df2 = pl.DataFrame({"colx": [2, 3, 4]})

Frames registered in-scope are automatically unregistered on scope-exit. Note
that frames registered on construction will persist through subsequent scopes.

>>> # register one frame at construction time, and the other two in-scope
>>> with pl.SQLContext(tbl0=df0) as ctx:
...     ctx.register_many(tbl1=df1, tbl2=df2).tables()
['tbl0', 'tbl1', 'tbl2']

After scope exit, none of the tables registered in-scope remain:

>>> ctx.tables()
['tbl0']

See Also
--------
register
register_globals
register_many

Examples
--------
>>> df0 = pl.DataFrame({"ints": [9, 8, 7, 6, 5]})
>>> lf1 = pl.LazyFrame({"text": ["a", "b", "c"]})
>>> lf2 = pl.LazyFrame({"misc": ["testing1234"]})

Register with a SQLContext object:

>>> ctx = pl.SQLContext(test1=df0, test2=lf1, test3=lf2)
>>> ctx.tables()
['test1', 'test2', 'test3']

Unregister one or more of the tables:

>>> ctx.unregister(["test1", "test3"]).tables()
['test2']
>>> ctx.unregister("test2").tables()
[]
)r(   strr@   r~   )rI   r}   rr   s      r.   r~   SQLContext.unregisterC  s:    p eS!!GEBJJ!!"% r0   c                H    [        U R                  R                  5       5      $ )uI  
Return a list of the registered table names.

Notes
-----
The :meth:`tables` method will return the same values as the
"SHOW TABLES" SQL statement, but as a list instead of a frame.

Executing as SQL:

>>> frame_data = pl.DataFrame({"hello": ["world"]})
>>> ctx = pl.SQLContext(hello_world=frame_data)
>>> ctx.execute("SHOW TABLES", eager=True)
shape: (1, 1)
┌─────────────┐
│ name        │
│ ---         │
│ str         │
╞═════════════╡
│ hello_world │
└─────────────┘

Calling the method:

>>> ctx.tables()
['hello_world']

Examples
--------
>>> df1 = pl.DataFrame({"hello": ["world"]})
>>> df2 = pl.DataFrame({"foo": ["bar", "baz"]})
>>> ctx = pl.SQLContext(hello_data=df1, foo_bar=df2)
>>> ctx.tables()
['foo_bar', 'hello_data']
)sortedr@   
get_tablesry   s    r.   rx   SQLContext.tables  s    H djj++-..r0   )r@   rA   rB   ).)rI   SQLContext[LazyFrame]rJ   /Mapping[str, CompatibleFrameType | None] | NonerC   
bool | intr<   boolrD   Literal[False]rK   CompatibleFrameType | NonereturnNone)rI   SQLContext[DataFrame]rJ   r   rC   r   r<   r   rD   Literal[True]rK   r   r   r   )rI   r   rJ   r   rC   r   r<   r   rD   r   rK   r   r   r   rF   )
rJ   r   rC   r   rD   r   rK   r   r   r   )r^   r   rD   r   r   r   )r^   r   rD   r   r   r   )r^   r   rD   r   r   zDataFrame | LazyFrame)r   zSQLContext[FrameType])r   ztype[BaseException] | Noner   zBaseException | Noner   zTracebackType | Noner   r   )r   r   )rI   r   r^   r   rD   r   r   r   )rI   r   r^   r   rD   r   r   r   )rI   r   r^   r   rD   r   r   r   )rI   r   r^   r   rD   r   r   r   )rI   r   r^   r   rD   r   r   r   )rI   r   r^   r   rD   r   r   r   )r^   r   rD   zbool | Noner   zLazyFrame | DataFrame)rZ   r   r5   r   r   r$   )r   
int | Noner<   r   r   r$   )rJ   r   rK   r   r   r$   )r}   zstr | Collection[str]r   r$   )r   z	list[str])__name__
__module____qualname____firstlineno____doc____annotations__r   rL   r
   classmethodr_   rz   r   r   rp   r   rC   rY   r~   rx   __static_attributes__rG   r0   r.   r&   r&   c   s    !!''  CF (+" %#? %	
   3 
   CF (+"#? %	
   3 
   CF (+"#? %	
   3 
  !!2GYO CGA' (-A'?A' %	A'
 A' 3A' 
A' PA'F 49#1	   R  RU  U*/<9<9#'<9	<9 <9|
,
 &
 %	

 

"E BE#,/;?	  #,/;I	  #,/;H	  BE#,/;?	  #,/;I	  #,/;H	  25$$$/$	$ $
 37RJRJ$/RJ	RJh!H #31>B31317;31	31n CG+?+ 3+ 
	+Z<|$/r0   )r-   r   r   r   )r-   r   r   r   )r<   r   r8   r   r9   z4str | Collection[str] | Callable[[str], bool] | Noner   zdict[str, Any])A
__future__r   
contextlibrh   typingr   r   r   r   r   polars._typingr	   polars._utils.deprecationr
   polars._utils.pycapsuler   polars._utils.unstabler   polars._utils.variousr   r   polars._utils.wrapr   polars.convertr   r   polars.dataframer   polars.dependenciesr   r   r   r)   r   r*   polars.lazyframer   polars.seriesr   suppressImportErrorpolars._plrr   syscollections.abcr   r   typesr   r   r   r   version_infor"   typing_extensionsr$   r+   r,   r%   r   __all__r/   r7   r=   r&   rG   r0   r.   <module>r      s<   "  	  % A 0 9 H ' 2 & E , - &  %( & 3#**
7"$/
7"*%*

		#

	&  ., !BF	PP P @	P
 PB	/# B	/Q &%s   E
E'