Ë
    ìmxiß}  ã            
       óZ  — d dl Z d dlZd dlZd dlZd dlmZ d dlm	Z	 d dlm
Z
mZ 	 d dlmZ ej                  j                  Zd)d„Zd„ Zej                  j'                  dddg«      d	„ «       Zej                  j'                  d
 ej*                  d«      ddf«      d„ «       Zd„ Zej                  j'                  dddg«      d„ «       Zd„ Zd„ Zej                  j'                  dddg«      d„ «       Zd„ Zd„ Zej                  j'                  dddg«      d„ «       Zd„ Zej                  j'                  dddg«      d„ «       Z ej                  jB                  d„ «       Z"ej                  jB                  d„ «       Z#ej                  j'                  d ejH                   ejJ                  d«      d«       ejH                   ejJ                  d«       ejJ                  d«      «       ejJ                  d«      dkD  g«      d „ «       Z&d!„ Z'd"„ Z(d#„ Z)d$„ Z*d%„ Z+d&„ Z,d'„ Z-d(„ Z.y# e$ r dZY �Œýw xY w)*é    N)Útobytes)ÚArrowInvalidÚArrowNotImplementedErrorc                 óD   — ddl m}  |t        j                  «       | «      S )Nr   )Ú_get_udf_context)Úpyarrow._computer   ÚpaÚdefault_memory_pool)Úbatch_lengthr   s     úS/home/htdocs/ttos/venv/lib/python3.12/site-packages/pyarrow/tests/test_substrait.pyÚmock_udf_contextr   &   s   € Ý1ÙœB×2Ñ2Ó4°lÓCÐCó    c                 óü   — t         j                  j                  t        | «      |«      }t        j
                  j                  ||j                  ¬«      5 }|j                  |«       d d d «       |S # 1 sw Y   |S xY w)N)Úschema)	ÚosÚpathÚjoinÚstrr	   ÚipcÚRecordBatchFileWriterr   Úwrite_table)ÚtmpdirÚ	file_nameÚtabler   Úwriters        r   Ú_write_dummy_data_to_diskr   +   s_   € Ü�7‰7�<‰<œ˜F› YÓ/€DÜ	�‰×	%Ñ	% d°5·<±<Ð	%Ó	@ð "ÀFØ×Ñ˜5Ô!÷"à€K÷"à€Kús   ÁA1Á1A;Úuse_threadsTFc                 ó®  — d}d}t        j                  g d¢gdg¬«      }t        | ||«      }t        |j	                  dt        j                  |«      j                  «       «      «      }t         j                  j                  |«      }t        j                  ||¬«      }|j                  «       }	|j                  dg«      |	j                  dg«      k(  sJ ‚y )Nax  
    {
        "version": { "major": 9999 },
        "relations": [
        {"rel": {
            "read": {
            "base_schema": {
                "struct": {
                "types": [
                            {"i64": {}}
                        ]
                },
                "names": [
                        "foo"
                        ]
            },
            "local_files": {
                "items": [
                {
                    "uri_file": "FILENAME_PLACEHOLDER",
                    "arrow": {}
                }
                ]
            }
            }
        }}
        ]
    }
    zread_data.arrow©é   é   é   é   é   Úfoo©ÚnamesÚFILENAME_PLACEHOLDER©r   ©r	   r   r   r   ÚreplaceÚpathlibÚPathÚas_uriÚ
_substraitÚ_parse_json_planÚ	substraitÚ	run_queryÚread_allÚselect©
r   r   Úsubstrait_queryr   r   r   ÚqueryÚbufÚreaderÚres_tbs
             r   Útest_run_serialized_queryr;   2   s¹   € ð€Oð< "€IÜ�H‰H’oÐ&¨u¨gÔ6€EÜ$ V¨Y¸Ó>€DÜ�O×+Ñ+Ø¤§¡¨TÓ 2× 9Ñ 9Ó ;ó=ó >€Eô �-‰-×
(Ñ
(¨Ó
/€Cä× Ñ  °+Ô>€FØ�_‰_Ó€Fà�<‰<˜˜Ó  F§M¡M°5°'Ó$:Ò:Ð:Ñ:r   r7   s   buffers   bytesr    c                 ó|  — t        |t        j                  t        f«      sIdt	        |«      › d�}t        j                  t        |¬«      5  t        j                  |«       d d d «       y d}t        j                  t        |¬«      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w# 1 sw Y   y xY w)Nz)Expected 'pyarrow.Buffer' or bytes, got 'ú'©Úmatchz1ParseFromZeroCopyStream failed for substrait.Plan)Ú
isinstancer	   ÚBufferÚbytesÚtypeÚpytestÚraisesÚ	TypeErrorr1   r2   r   )r   r7   Úmsgs      r   Útest_run_query_input_typesrH   `   s˜   € ô �eœbŸi™i¬Ð/Ô0Ø9¼$¸u»+¸ÀaÐHˆÜ�]‰]œ9¨CÔ0ñ 	'Ü×Ñ Ô&÷	'àð >€CÜ	�‰”|¨3Ô	/ñ #Ü×Ñ˜EÔ"÷#ð #÷	'àú÷#ð #ús   ÁB&ÂB2Â&B/Â2B;c                  óæ   — d} t         j                  j                  t        | «      «      }d}t	        j
                  t        |¬«      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nz2
    {
        "relations": [
        ]
    }
    zPlan has no relationsr>   )	r	   r/   r0   r   rD   rE   r   r1   r2   )r7   r8   Úexec_messages      r   Útest_invalid_planrK   p   sY   € ð€Eô �-‰-×
(Ñ
(¬°«Ó
8€CØ*€LÜ	�‰”|¨<Ô	8ñ !Ü×Ñ˜CÔ ÷!÷ !ñ !ús   ÁA'Á'A0c                 óÀ  — d}d}t        j                  g d¢gdg¬«      }t        | ||«      }t        |j	                  dt        j                  |«      j                  «       «      «      }t         j                  j                  t        |«      «      }t        j                  ||¬«      }|j                  «       }	|j                  dg«      |	j                  dg«      k(  sJ ‚y )NaÛ  
    {
        "version": { "major": 9999 },
        "relations": [
        {"rel": {
            "read": {
            "base_schema": {
                "struct": {
                "types": [
                            {"i64": {}}
                        ]
                },
                "names": [
                        "bar"
                        ]
            },
            "local_files": {
                "items": [
                {
                    "uri_file": "FILENAME_PLACEHOLDER",
                    "arrow": {},
                    "metadata" : {
                      "created_by" : {},
                    }
                }
                ]
            }
            }
        }}
        ]
    }
    zbinary_json_data.arrowr   Úbarr&   r(   r)   r*   r5   s
             r   Ú(test_binary_conversion_with_json_optionsrN   }   s¼   € ð€OðB )€IÜ�H‰H’oÐ&¨u¨gÔ6€EÜ$ V¨Y¸Ó>€DÜ�O×+Ñ+Ø¤§¡¨TÓ 2× 9Ñ 9Ó ;ó=ó >€Eä
�-‰-×
(Ñ
(¬°«Ó
8€Cä× Ñ  °+Ô>€FØ�_‰_Ó€Fà�<‰<˜˜Ó  F§M¡M°5°'Ó$:Ò:Ð:Ñ:r   c                 óF   — |› d|› �}| D ]  }|j                  |«      sŒ y y)Nú#TF)Úendswith)ÚfnsÚext_fileÚfn_nameÚsuffixÚfns        r   Úhas_functionrW   ¯   s5   € Øˆz˜˜7˜)Ð$€FØò ˆØ�;‰;�vÕÙðð r   c                  ó|   — t         j                  j                  «       } t        | dd«      sJ ‚t        | dd«      sJ ‚y )Nzfunctions_arithmetic.yamlÚaddÚsum)r	   r/   Úget_supported_functionsrW   )Úsupported_functionss    r   Útest_get_supported_functionsr]   ·   sK   € ÜŸ-™-×?Ñ?ÓAÐô Ð+Ø3°Uô<ð <ð <äÐ+Ø3°Uô<ð <ñ <r   c                 óâ  ‡‡‡— t         j                  j                  dg d¢i«      Št         j                  j                  dg d¢i«      Št        j                  t        j                  dt        j
                  «       «      g«      Šˆˆˆfd„}d}t         j                  j                  t        |«      «      }t         j                  j                  ||| ¬«      }|j                  «       }|‰k(  sJ ‚y )NÚx©r    r!   r"   )r#   r$   é   c                 ój   •— | st        d«      ‚| d   dk(  r	|‰k(  sJ ‚‰S | d   dk(  r‰S t        d«      ‚)NúNo names providedr   Út1r    Út2úUnrecognized table name©Ú	Exception)r'   r   Úschema_1Útest_table_1Útest_table_2s     €€€r   Útable_providerz(test_named_table.<locals>.table_providerÇ   sP   ø€ ÙÜÐ/Ó0Ð0Ø�1‰X˜ÒØ˜XÒ%Ð%Ð%ØÐØ�1‰X˜ÒØÐäÐ5Ó6Ð6r   að  
    {
        "version": { "major": 9999 },
        "relations": [
        {"rel": {
            "read": {
            "base_schema": {
                "struct": {
                "types": [
                            {"i64": {}}
                        ]
                },
                "names": [
                        "x"
                        ]
            },
            "namedTable": {
                    "names": ["t1"]
            }
            }
        }}
        ]
    }
    ©rl   r   )r	   ÚTableÚfrom_pydictr   ÚfieldÚint64r/   r0   r   r1   r2   r3   )	r   rl   r6   r8   r9   r:   ri   rj   rk   s	         @@@r   Útest_named_tablerr   Á   s¹   ú€ ä—8‘8×'Ñ'¨ªiÐ(8Ó9€LÜ—8‘8×'Ñ'¨ªiÐ(8Ó9€LÜ�y‰yœ"Ÿ(™( 3¬¯©«
Ó3Ð4Ó5€Hö	7ð€Oô2 �-‰-×
(Ñ
(¬°Ó)AÓ
B€CÜ�\‰\×#Ñ#Ø˜N¸ð $ó E€Fà�_‰_Ó€FØ�\Ò!Ð!Ñ!r   c                  ó<  ‡— t         j                  j                  dg d¢i«      Šˆfd„} d}t         j                  j	                  t        |«      «      }d}t        j                  t        |¬«      5  t        j                  || ¬«       d d d «       y # 1 sw Y   y xY w)Nr_   r`   c                 óH   •— | st        d«      ‚| d   dk(  r‰S t        d«      ‚©Nrc   r   rd   rf   rg   ©r'   Ú_rj   s     €r   rl   z;test_named_table_invalid_table_name.<locals>.table_providerõ   ó0   ø€ ÙÜÐ/Ó0Ð0Ø�1‰X˜ÒØÐäÐ5Ó6Ð6r   að  
    {
        "version": { "major": 9999 },
        "relations": [
        {"rel": {
            "read": {
            "base_schema": {
                "struct": {
                "types": [
                            {"i64": {}}
                        ]
                },
                "names": [
                        "x"
                        ]
            },
            "namedTable": {
                    "names": ["t3"]
            }
            }
        }}
        ]
    }
    zInvalid NamedTable Sourcer>   ©rl   )r	   rn   ro   r/   r0   r   rD   rE   r   r1   r2   )rl   r6   r8   rJ   rj   s       @r   Ú#test_named_table_invalid_table_namerz   ò   s   ø€ Ü—8‘8×'Ñ'¨ªiÐ(8Ó9€Lô7ð€Oô2 �-‰-×
(Ñ
(¬°Ó)AÓ
B€CØ.€LÜ	�‰”|¨<Ô	8ñ @Ü×Ñ˜C°Õ?÷@÷ @ñ @ús   Á1BÂBc                  óR  ‡— t         j                  j                  dg d¢i«      Šˆfd„} d}t        |«      }t         j                  j                  t        |«      «      }d}t        j                  t        |¬«      5  t        j                  || ¬«       d d d «       y # 1 sw Y   y xY w)Nr_   r`   c                 óH   •— | st        d«      ‚| d   dk(  r‰S t        d«      ‚ru   rg   rv   s     €r   rl   z4test_named_table_empty_names.<locals>.table_provider  rx   r   aì  
    {
        "version": { "major": 9999 },
        "relations": [
        {"rel": {
            "read": {
            "base_schema": {
                "struct": {
                "types": [
                            {"i64": {}}
                        ]
                },
                "names": [
                        "x"
                        ]
            },
            "namedTable": {
                    "names": []
            }
            }
        }}
        ]
    }
    z!names for NamedTable not providedr>   ry   )r	   rn   ro   r   r/   r0   rD   rE   r   r1   r2   )rl   r6   r7   r8   rJ   rj   s        @r   Útest_named_table_empty_namesr}     sˆ   ø€ Ü—8‘8×'Ñ'¨ªiÐ(8Ó9€Lô7ð€Oô0 �OÓ$€EÜ
�-‰-×
(Ñ
(¬°«Ó
8€CØ6€LÜ	�‰”|¨<Ô	8ñ @Ü×Ñ˜C°Õ?÷@÷ @ñ @ús   Á<BÂB&c           	      ó`  ‡
— t         j                  j                  dg d¢i«      Š
ˆ
fd„}d}t         j                  j	                  |«      }t         j
                  j                  |||¬«      }|j                  «       }| \  }}‰
j                  dd |t        d«      ‰
d   «      «      }	||	k(  sJ ‚y )	Nr_   r`   c                 óH   •— | st        d«      ‚| d   dk(  r‰S t        d«      ‚ru   rg   ©r'   rw   Ú
test_tables     €r   rl   z.test_udf_via_substrait.<locals>.table_providerJ  ó0   ø€ ÙÜÐ/Ó0Ð0Ø�1‰X˜ÒØÐäÐ5Ó6Ð6r   s	  
    {
  "extensionUris": [
    {
      "extensionUriAnchor": 1
    },
    {
      "extensionUriAnchor": 2,
      "uri": "urn:arrow:substrait_simple_extension_function"
    }
  ],
  "extensions": [
    {
      "extensionFunction": {
        "extensionUriReference": 2,
        "functionAnchor": 1,
        "name": "y=x+1"
      }
    }
  ],
  "relations": [
    {
      "root": {
        "input": {
          "project": {
            "common": {
              "emit": {
                "outputMapping": [
                  1,
                  2,
                ]
              }
            },
            "input": {
              "read": {
                "baseSchema": {
                  "names": [
                    "t",
                  ],
                  "struct": {
                    "types": [
                      {
                        "i64": {
                          "nullability": "NULLABILITY_REQUIRED"
                        }
                      },
                    ],
                    "nullability": "NULLABILITY_REQUIRED"
                  }
                },
                "namedTable": {
                  "names": [
                    "t1"
                  ]
                }
              }
            },
            "expressions": [
              {
                "selection": {
                  "directReference": {
                    "structField": {}
                  },
                  "rootReference": {}
                }
              },
              {
                "scalarFunction": {
                  "functionReference": 1,
                  "outputType": {
                    "i64": {
                      "nullability": "NULLABILITY_NULLABLE"
                    }
                  },
                  "arguments": [
                    {
                      "value": {
                        "selection": {
                          "directReference": {
                            "structField": {}
                          },
                          "rootReference": {}
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        },
        "names": [
          "x",
          "y",
        ]
      }
    }
  ]
}
    rm   r    Úyé
   )
r	   rn   ro   r/   r0   r1   r2   r3   Ú
add_columnr   )Úunary_func_fixturer   rl   r6   r8   r9   r:   ÚfunctionÚnameÚexpected_tbr�   s             @r   Útest_udf_via_substraitrŠ   F  s­   ø€ ä—‘×%Ñ% sªIÐ&6Ó7€Jô7ðc€OôJ �-‰-×
(Ñ
(¨Ó
9€CÜ�\‰\×#Ñ#Ø˜N¸ð $ó E€Fà�_‰_Ó€Fà'�N€HˆdØ×'Ñ'¨¨3±Ü˜Ó˜j¨™oó1/ó 0€Kà�[Ò Ð Ñ r   c                  ó|  ‡— t         j                  j                  dg d¢i«      Šˆfd„} d}t         j                  j	                  |«      }t        j                  t         j                  «      5 }t         j                  j                  || ¬«       d d d «       dt        j                  «      v sJ ‚y # 1 sw Y   Œ#xY w)Nr_   r`   c                 óH   •— | st        d«      ‚| d   dk(  r‰S t        d«      ‚ru   rg   r€   s     €r   rl   z=test_udf_via_substrait_wrong_udf_name.<locals>.table_providerÅ  r‚   r   s	  
    {
  "extensionUris": [
    {
      "extensionUriAnchor": 1
    },
    {
      "extensionUriAnchor": 2,
      "uri": "urn:arrow:substrait_simple_extension_function"
    }
  ],
  "extensions": [
    {
      "extensionFunction": {
        "extensionUriReference": 2,
        "functionAnchor": 1,
        "name": "wrong_udf_name"
      }
    }
  ],
  "relations": [
    {
      "root": {
        "input": {
          "project": {
            "common": {
              "emit": {
                "outputMapping": [
                  1,
                  2,
                ]
              }
            },
            "input": {
              "read": {
                "baseSchema": {
                  "names": [
                    "t",
                  ],
                  "struct": {
                    "types": [
                      {
                        "i64": {
                          "nullability": "NULLABILITY_REQUIRED"
                        }
                      },
                    ],
                    "nullability": "NULLABILITY_REQUIRED"
                  }
                },
                "namedTable": {
                  "names": [
                    "t1"
                  ]
                }
              }
            },
            "expressions": [
              {
                "selection": {
                  "directReference": {
                    "structField": {}
                  },
                  "rootReference": {}
                }
              },
              {
                "scalarFunction": {
                  "functionReference": 1,
                  "outputType": {
                    "i64": {
                      "nullability": "NULLABILITY_NULLABLE"
                    }
                  },
                  "arguments": [
                    {
                      "value": {
                        "selection": {
                          "directReference": {
                            "structField": {}
                          },
                          "rootReference": {}
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        },
        "names": [
          "x",
          "y",
        ]
      }
    }
  ]
}
    ry   zNo function registered)r	   rn   ro   r/   r0   rD   rE   ÚArrowKeyErrorr1   r2   r   Úvalue)rl   r6   r8   Úexcinfor�   s       @r   Ú%test_udf_via_substrait_wrong_udf_namer�   Â  s›   ø€ Ü—‘×%Ñ% sªIÐ&6Ó7€Jô7ðc€OôJ �-‰-×
(Ñ
(¨Ó
9€CÜ	�‰”r×'Ñ'Ó	(ð C¨GÜ
�‰×Ñ˜s°>ÐÔB÷Cà#¤s¨7¯=©=Ó'9Ñ9Ð9Ñ9÷Cð Cús   Á."B2Â2B;c                 ób  ‡— t         j                  j                  dg d¢i«      Šˆfd„}d}t         j                  j	                  t        |«      «      }t         j                  j                  ||| ¬«      }|j                  «       }t         j                  j                  dg d¢i«      }||k(  sJ ‚y )Nr_   r`   c                 ó   •— ‰S ©N© )r'   r   Úin_tables     €r   rl   z/test_output_field_names.<locals>.table_provider<  s   ø€ Øˆr   aø  
    {
      "version": { "major": 9999 },
      "relations": [
        {
          "root": {
            "input": {
              "read": {
                "base_schema": {
                  "struct": {
                    "types": [{"i64": {}}]
                  },
                  "names": ["x"]
                },
                "namedTable": {
                  "names": ["t1"]
                }
              }
            },
            "names": ["out"]
          }
        }
      ]
    }
    rm   Úout)	r	   rn   ro   r/   r0   r   r1   r2   r3   )r   rl   r6   r8   r9   r:   Úexpectedr•   s          @r   Útest_output_field_namesr˜   8  s—   ø€ ä�x‰x×#Ñ# Sª)Ð$4Ó5€Hôð€Oô4 �-‰-×
(Ñ
(¬°Ó)AÓ
B€CÜ�\‰\×#Ñ#Ø˜N¸ð $ó E€Fà�_‰_Ó€Fä�x‰x×#Ñ# UªIÐ$6Ó7€Hà�XÒÐÑr   c                 ób  ‡— t         j                  j                  g d¢g d¢g d¢dœ«      Šˆfd„}d}t         j                  j	                  |«      }t         j
                  j                  ||d¬«      }|j                  «       }t         j                  j                  d	d
gddgdœ«      }||k(  sJ ‚y )N©r    r    r!   r!   )r    r!   r"   r#   )ç      ð?r›   r›   r›   )ÚkÚv1Úv2c                 ó   •— ‰S r“   r”   r€   s     €r   rl   z7test_scalar_aggregate_udf_basic.<locals>.table_providerk  ó	   ø€ ØÐr   s  
{
  "extensionUris": [
    {
      "extensionUriAnchor": 1,
      "uri": "urn:arrow:substrait_simple_extension_function"
    },
  ],
  "extensions": [
    {
      "extensionFunction": {
        "extensionUriReference": 1,
        "functionAnchor": 1,
        "name": "sum_mean"
      }
    }
  ],
  "relations": [
    {
      "root": {
        "input": {
          "extensionSingle": {
            "common": {
              "emit": {
                "outputMapping": [
                  0,
                  1
                ]
              }
            },
            "input": {
              "read": {
                "baseSchema": {
                  "names": [
                    "k",
                    "v1",
                    "v2",
                  ],
                  "struct": {
                    "types": [
                      {
                        "i64": {
                          "nullability": "NULLABILITY_REQUIRED"
                        }
                      },
                      {
                        "i64": {
                          "nullability": "NULLABILITY_NULLABLE"
                        }
                      },
                      {
                        "fp64": {
                          "nullability": "NULLABILITY_NULLABLE"
                        }
                      }
                    ],
                    "nullability": "NULLABILITY_REQUIRED"
                  }
                },
                "namedTable": {
                  "names": ["t1"]
                }
              }
            },
            "detail": {
              "@type": "/arrow.substrait_ext.SegmentedAggregateRel",
              "segmentKeys": [
                {
                  "directReference": {
                    "structField": {}
                  },
                  "rootReference": {}
                }
              ],
              "measures": [
                {
                  "measure": {
                    "functionReference": 1,
                    "phase": "AGGREGATION_PHASE_INITIAL_TO_RESULT",
                    "outputType": {
                      "fp64": {
                        "nullability": "NULLABILITY_NULLABLE"
                      }
                    },
                    "arguments": [
                      {
                        "value": {
                          "selection": {
                            "directReference": {
                              "structField": {
                                "field": 1
                              }
                            },
                            "rootReference": {}
                          }
                        }
                      },
                      {
                        "value": {
                          "selection": {
                            "directReference": {
                              "structField": {
                                "field": 2
                              }
                            },
                            "rootReference": {}
                          }
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        },
        "names": [
          "k",
          "v_avg"
        ]
      }
    }
  ],
}
Frm   r    r!   g      @g      @)rœ   Úv_avg©r	   rn   ro   r/   r0   r1   r2   r3   ©Úvarargs_agg_func_fixturerl   r6   r8   r9   r:   r‰   r�   s          @r   Útest_scalar_aggregate_udf_basicr¥   c  s­   ø€ ô —‘×%Ñ%Ú¢,Ú#ñ	%ó€Jô
ð|€Oôz �-‰-×
(Ñ
(¨Ó
9€CÜ�\‰\×#Ñ#Ø˜N¸ð $ó ?€Fà�_‰_Ó€Fä—(‘(×&Ñ&Ø�ˆVØ�s�ñ(ó €Kð
 �[Ò Ð Ñ r   c                 ón  ‡— t         j                  j                  g d¢g d¢g d¢g d¢dœ«      Šˆfd„}d}t         j                  j	                  |«      }t         j
                  j                  ||d¬	«      }|j                  «       }t         j                  j                  g d
¢g d¢g d¢dœ«      }||k(  sJ ‚y )N)r    r    r    r    r!   r!   r!   r!   )r    r   r   r    r   r    r   r    )r    r!   r"   r#   r$   ra   é   é   )r›   r›   r›   r›   g       @g      @g      @g      @)Útrœ   r�   rž   c                 ó   •— ‰S r“   r”   r€   s     €r   rl   z5test_hash_aggregate_udf_basic.<locals>.table_provider  r    r   s  
{
  "extensionUris": [
    {
      "extensionUriAnchor": 1,
      "uri": "urn:arrow:substrait_simple_extension_function"
    },
  ],
  "extensions": [
    {
      "extensionFunction": {
        "extensionUriReference": 1,
        "functionAnchor": 1,
        "name": "sum_mean"
      }
    }
  ],
  "relations": [
    {
      "root": {
        "input": {
          "extensionSingle": {
            "common": {
              "emit": {
                "outputMapping": [
                  0,
                  1,
                  2
                ]
              }
            },
            "input": {
              "read": {
                "baseSchema": {
                  "names": [
                    "t",
                    "k",
                    "v1",
                    "v2",
                  ],
                  "struct": {
                    "types": [
                      {
                        "i64": {
                          "nullability": "NULLABILITY_REQUIRED"
                        }
                      },
                      {
                        "i64": {
                          "nullability": "NULLABILITY_REQUIRED"
                        }
                      },
                      {
                        "i64": {
                          "nullability": "NULLABILITY_NULLABLE"
                        }
                      },
                      {
                        "fp64": {
                          "nullability": "NULLABILITY_NULLABLE"
                        }
                      }
                    ],
                    "nullability": "NULLABILITY_REQUIRED"
                  }
                },
                "namedTable": {
                  "names": ["t1"]
                }
              }
            },
            "detail": {
              "@type": "/arrow.substrait_ext.SegmentedAggregateRel",
              "groupingKeys": [
                {
                  "directReference": {
                    "structField": {
                      "field": 1
                    }
                  },
                  "rootReference": {}
                }
              ],
              "segmentKeys": [
                {
                  "directReference": {
                    "structField": {}
                  },
                  "rootReference": {}
                }
              ],
              "measures": [
                {
                  "measure": {
                    "functionReference": 1,
                    "phase": "AGGREGATION_PHASE_INITIAL_TO_RESULT",
                    "outputType": {
                      "fp64": {
                        "nullability": "NULLABILITY_NULLABLE"
                      }
                    },
                    "arguments": [
                      {
                        "value": {
                          "selection": {
                            "directReference": {
                              "structField": {
                                "field": 2
                              }
                            },
                            "rootReference": {}
                          }
                        }
                      },
                      {
                        "value": {
                          "selection": {
                            "directReference": {
                              "structField": {
                                "field": 3
                              }
                            },
                            "rootReference": {}
                          }
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        },
        "names": [
          "t",
          "k",
          "v_avg"
        ]
      }
    }
  ],
}
Frm   rš   )r    r   r   r    )ç      @r«   g      "@g      &@)r©   rœ   r¡   r¢   r£   s          @r   Útest_hash_aggregate_udf_basicr¬   ø  s¬   ø€ ô —‘×%Ñ%Ú&Ú&Ú'Ú7ñ	9ó€JôðN€Oô^ �-‰-×
(Ñ
(¨Ó
9€CÜ�\‰\×#Ñ#Ø˜N¸ð $ó ?€Fà�_‰_Ó€Fä—(‘(×&Ñ&ÚÚÚ&ñ(ó €Kð �[Ò Ð Ñ r   Úexprr_   r§   rƒ   é2   c                 óÄ  — t        j                  t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      g«      }t         j                  j                  | gdg|«      }t         j                  j                  |«      }||j                  k(  sJ ‚t        |j                  «      dk(  sJ ‚d|j                  v sJ ‚y )Nr_   rƒ   Ú	test_exprr    )	r	   r   rp   Úint32r1   Úserialize_expressionsÚdeserialize_expressionsÚlenÚexpressions)r­   r   r8   Úreturneds       r   Útest_serializing_expressionsr·   £  s°   € ô �Y‰YÜ
�‰�”b—h‘h“jÓ!Ü
�‰�”b—h‘h“jÓ!ðó €Fô
 �,‰,×
,Ñ
,¨d¨V°k°]ÀFÓ
K€CÜ�|‰|×3Ñ3°CÓ8€HØ�X—_‘_Ò$Ð$Ð$Üˆx×#Ñ#Ó$¨Ò)Ð)Ð)Ø˜(×.Ñ.Ñ.Ð.Ñ.r   c                  ó`  ‡— t        j                  d«      dft        j                  d«      dft        j                  d«      dft        j                  «       dft        j                  «       dft        j
                  «       dfdœ} t        j                  | j                  «       D ���cg c]  \  }\  }}t        j                  ||«      ‘Œ  c}}}«      Šˆfd„}| j                  «       D ];  \  }\  }} |t        j                  |«      t        j                  ||¬	«      k(  «       Œ= y c c}}}w )
NÚsr   ÚmsÚnsÚtest_strings   test_string)Útime_secondsÚtime_millisÚ
time_nanosÚdate_millisÚlarge_stringÚlarge_binaryc                 ó¬   •— t         j                  j                  | gdg‰«      }t         j                  j                  |«      }‰|j                  k(  sJ ‚y ©Nr°   )r	   r1   r²   r³   r   )r­   r8   r¶   r   s      €r   Úcheck_round_tripz3test_arrow_specific_types.<locals>.check_round_tripÀ  sE   ø€ Ü�l‰l×0Ñ0°$°¸+¸ÈÓOˆÜ—<‘<×7Ñ7¸Ó<ˆØ˜Ÿ™Ò(Ð(Ñ(r   )rC   )r	   Útime32Útime64Údate64rÁ   rÂ   r   Úitemsrp   ÚpcÚscalar)Úfieldsrˆ   Útyprw   rÅ   Úvalr   s         @r   Útest_arrow_specific_typesrÏ   µ  sê   ø€ äŸ™ 3›¨Ð+ÜŸ	™	 $›¨Ð+Ü—y‘y “¨Ð*ÜŸ	™	› QÐ'ÜŸ™Ó*¨MÐ:ÜŸ™Ó*¨NÐ;ñ€Fô �Y‰YÀ&Ç,Á,Ã.×QÐQ±°±h°s¸AœŸ™  sÕ+ÔQÓR€Fô)ð
 #ŸL™L›Nò EÑˆ‰jˆs�CÙœŸ™ $›¬2¯9©9°S¸sÔ+CÑCÕDñEùô Rs   Â)#D)c                  óŽ  ‡‡— t        j                  t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      t        j                  dt        j
                  t        j                  «       t        j                  «       «      «      t        j                  dt        j                  t        j                  «       t        j                  «       «      «      g«      Št        j                  t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      g«      Šˆˆfd„} ‰D ]
  } | |«       Œ y )NÚbinary_viewÚstring_viewÚ
dictionaryÚreec                 ó  •— t        j                  t        j                  | j                  «      «      }t        j
                  j                  |gdg‰«      }t        j
                  j                  |«      }‰|j                  k(  sJ ‚y rÄ   )	rÊ   Úis_nullrp   rˆ   r	   r1   r²   r³   r   )rp   r­   r8   r¶   Ú
alt_schemar   s       €€r   Úcheck_one_wayz/test_arrow_one_way_types.<locals>.check_one_wayÛ  s`   ø€ Ü�z‰zœ"Ÿ(™( 5§:¡:Ó.Ó/ˆÜ�l‰l×0Ñ0°$°¸+¸ÈÓOˆÜ—<‘<×7Ñ7¸Ó<ˆØ˜XŸ_™_Ò,Ð,Ñ,r   )
r	   r   rp   rÑ   rÒ   rÓ   r±   ÚstringÚrun_end_encodedÚbinary)rØ   rp   r×   r   s     @@r   Útest_arrow_one_way_typesrÜ   É  s  ù€ Ü�Y‰Yä�H‰H�]¤B§N¡NÓ$4Ó5Ü�H‰H�]¤B§N¡NÓ$4Ó5Ü�H‰H�\¤2§=¡=´·±³¼R¿Y¹Y»[Ó#IÓJÜ�H‰H�UœB×.Ñ.¬r¯x©x«z¼2¿9¹9»;ÓGÓHð		
ó€Fô —‘ä�H‰H�]¤B§I¡I£KÓ0Ü�H‰H�]¤B§I¡I£KÓ0Ü�H‰H�\¤2§9¡9£;Ó/Ü�H‰H�UœBŸI™I›KÓ(ð		
ó€Jõ-ð ò ˆÙ�eÕñr   c                  óê  — t        j                  t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      g«      } t	        j
                  t	        j                  d«      d«      }t	        j
                  t	        j                  d«      d«      }t        j                  t        «      5 }t         j                  j                  |gg | «       d d d «       dt        j                  «      v sJ ‚t        j                  t        «      5 }t         j                  j                  |gddg| «       d d d «       dt        |j                  «      v sJ ‚t        j                  t        «      5 }t         j                  j                  |gdg| «       d d d «       d	t        |j                  «      v sJ ‚y # 1 sw Y   ŒàxY w# 1 sw Y   Œ�xY w# 1 sw Y   Œ;xY w)
Nr_   rƒ   r§   Úzzneed to have the same lengthr%   rM   r­   zNo match for FieldRef)r	   r   rp   r±   rÊ   ÚequalrD   rE   Ú
ValueErrorr1   r²   r   rŽ   )r   r­   Úbad_exprr�   s       r   Útest_invalid_expression_ser_desrâ   å  ss  € Ü�Y‰YÜ
�‰�”b—h‘h“jÓ!Ü
�‰�”b—h‘h“jÓ!ðó €Fô �8‰8”B—H‘H˜S“M 1Ó%€DÜ�x‰xœŸ™ › qÓ)€Hä	�‰”zÓ	"ð ? gÜ
�‰×*Ñ*¨D¨6°2°vÔ>÷?à)¬S°·±Ó-?Ñ?Ð?Ð?Ü	�‰”zÓ	"ð K gÜ
�‰×*Ñ*¨D¨6°E¸5°>À6ÔJ÷Kà)¬S°·±Ó-?Ñ?Ð?Ð?ä	�‰”zÓ	"ð I gÜ
�‰×*Ñ*¨H¨:¸°xÀÔH÷Ià"¤c¨'¯-©-Ó&8Ñ8Ð8Ñ8÷?ð ?ú÷Kð Kú÷Ið Iús$   Ã#GÄ,%GÆ$G)ÇGÇG&Ç)G2c                  óÜ  — t        j                  t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      g«      } t	        j
                  t	        j                  d«      d«      t	        j
                  t	        j                  d«      t	        j                  d«      «      g}t         j                  j                  |ddg| «      }t         j                  j                  |«      }| |j                  k(  sJ ‚t        |j                  «      dk(  sJ ‚t	        j
                  t	        j                  d«      d«      t	        j
                  t	        j                  d«      t	        j                  d«      «      g}t        |j                  d   «      t        |d   «      k(  sJ ‚t        |j                  d   «      t        |d   «      k(  sJ ‚y )	Nr_   rƒ   r§   ÚfirstÚsecondr!   r   r    )r	   r   rp   r±   rÊ   rß   r1   r²   r³   r´   rµ   r   )r   Úexprsr8   r¶   Ú
norm_exprss        r   Ú%test_serializing_multiple_expressionsrè   ù  sY  € Ü�Y‰YÜ
�‰�”b—h‘h“jÓ!Ü
�‰�”b—h‘h“jÓ!ðó €Fô �X‰X”b—h‘h˜s“m QÓ'¬¯©´"·(±(¸3³-ÄÇÁÈ#ÃÓ)OÐP€EÜ
�,‰,×
,Ñ
,¨U°W¸hÐ4GÈÓ
P€CÜ�|‰|×3Ñ3°CÓ8€HØ�X—_‘_Ò$Ð$Ð$Üˆx×#Ñ#Ó$¨Ò)Ð)Ð)ä—(‘(œ2Ÿ8™8 A›;¨Ó*¬B¯H©H´R·X±X¸a³[Ä"Ç(Á(È1Ã+Ó,NÐO€JÜˆx×#Ñ# GÑ,Ó-´°ZÀ±]Ó1CÒCÐCÐCÜˆx×#Ñ# HÑ-Ó.´#°jÀ±mÓ2DÒDÐDÑDr   c                  ó<  — t        j                  t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      g«      } t	        j
                  t	        j                  d«      d«      }t	        j
                  t	        j                  d«      d«      }|j                  | «      }t         j                  j                  |«      }| |j                  k(  sJ ‚t        |j                  «      dk(  sJ ‚t        |j                  d   «      t        |«      k(  sJ ‚t         j                  j                  ||gddg| «      }t        j                  t        «      5 }t        j                   j#                  |«       d d d «       d	t        j$                  «      v sJ ‚t         j                  j                  |gd
g| «      }t        j                   j#                  |«      }t        |«      t        |«      k(  sJ ‚y # 1 sw Y   Œ~xY w)Nr_   rƒ   r§   r   r    Ú
expressionrä   rå   zcontained multiple expressionsÚ	weirdname)r	   r   rp   r±   rÊ   rß   Úto_substraitr1   r³   r´   rµ   r   r²   rD   rE   rà   Ú
ExpressionÚfrom_substraitrŽ   )r   r­   Ú	expr_normr8   r¶   r�   Úexpr2s          r   Útest_serializing_with_computerñ   	  s˜  € Ü�Y‰YÜ
�‰�”b—h‘h“jÓ!Ü
�‰�”b—h‘h“jÓ!ðó €Fô �8‰8”B—H‘H˜S“M 1Ó%€DÜ—‘œŸ™ !› aÓ(€IØ
×
Ñ
˜FÓ
#€CÜ�|‰|×3Ñ3°CÓ8€Hà�X—_‘_Ò$Ð$Ð$Üˆx×#Ñ#Ó$¨Ò)Ð)Ð)äˆx×#Ñ# LÑ1Ó2´c¸)³nÒDÐDÐDô �,‰,×
,Ñ
,¨d°D¨\¸GÀXÐ;NÐPVÓ
W€CÜ	�‰”zÓ	"ð * gÜ
�‰×$Ñ$ SÔ)÷*à+¬s°7·=±=Ó/AÑAÐAÐAô �,‰,×
,Ñ
,¨d¨V°k°]ÀFÓ
K€CÜ�M‰M×(Ñ(¨Ó-€EÜˆu‹:œ˜Y›Ò'Ð'Ñ'÷*ð *ús   Å5 HÈHc                  óÌ  — t        j                  t        j                  dt        j                  «       «      g«      } t	        j
                  d«      }t	        j
                  d«      }t	        j                  ||«      g}t        j                  t        «      5  t         j                  j                  |dg| «       d d d «       t         j                  j                  |dg| d¬«      }t         j                  j                  |«      }| |j                  k(  sJ ‚t        |j                  «      dk(  sJ ‚t        |j                  d   «      t        |d   «      k(  sJ ‚y # 1 sw Y   Œ¡xY w)	Nr_   r„   r#   r­   T)Úallow_arrow_extensionsr    r   )r	   r   rp   Úuint32rÊ   rË   Ú
shift_leftrD   rE   r   r1   r²   r³   r´   rµ   r   )r   ÚaÚbræ   r8   r¶   s         r   Útest_serializing_udfsrø   $  s#  € ô �Y‰YÜ
�‰�”b—i‘i“kÓ"ðó €Fô 	�	‰	�"‹€AÜ
�	‰	�!‹€AÜ�]‰]˜1˜aÓ Ð!€Eä	�‰Ô/Ó	0ñ DÜ
�‰×*Ñ*¨5°6°(¸FÔC÷Dô �,‰,×
,Ñ
,Ø�ˆx˜¸ð -ó >€Cä�|‰|×3Ñ3°CÓ8€HØ�X—_‘_Ò$Ð$Ð$Üˆx×#Ñ#Ó$¨Ò)Ð)Ð)Üˆx×#Ñ# FÑ+Ó,´°E¸!±H³Ò=Ð=Ñ=÷Dð Dús   Â#EÅE#c                  óš  — d} t        j                  t        j                  dt        j                  «       «      t        j                  dt        j                  «       «      g«      }t         j
                  j                  | «      }||k(  sJ ‚t         j
                  j                  |«      }|j                  | k(  sJ ‚t         j
                  j                  |«      }||k(  sJ ‚t         j
                  j                  |j                  «      }||k(  sJ ‚t         j
                  j                  |j                  «      }|j                  |k(  sJ ‚y )Ns   
x
y
*
br_   rƒ   )
r	   r   rp   r±   rÙ   r1   Údeserialize_schemaÚserialize_schemar³   rê   )Úsubstrait_schemaÚexpected_schemar¶   Úarrow_substrait_schemas       r   Útest_serializing_schemarÿ   :  s  € ØVÐÜ—i‘iÜ
�‰�”b—h‘h“jÓ!Ü
�‰�”b—i‘i“kÓ"ð!ó €Oô �|‰|×.Ñ.Ð/?Ó@€HØ˜hÒ&Ð&Ð&äŸ\™\×:Ñ:¸8ÓDÐØ!×(Ñ(Ð,<Ò<Ð<Ð<ä�|‰|×.Ñ.Ð/EÓF€HØ˜hÒ&Ð&Ð&ä�|‰|×.Ñ.Ð/E×/LÑ/LÓM€HØ˜hÒ&Ð&Ð&ä�|‰|×3Ñ3Ð4J×4UÑ4UÓV€HØ�?‰?˜oÒ-Ð-Ñ-r   c                  óî   —  G d„ d«      } d}t         j                  j                  j                   | |«      «      }t	        |j
                  «      dk(  sJ ‚d|j
                  v sJ ‚d|j
                  v sJ ‚y )Nc                   ó   — e Zd Zd„ Zd„ Zy)ú7test_bound_expression_from_Message.<locals>.FakeMessagec                 ó   — || _         y r“   ©r­   )Úselfr­   s     r   Ú__init__z@test_bound_expression_from_Message.<locals>.FakeMessage.__init__R  s	   € ØˆD�Ir   c                 ó   — | j                   S r“   r  )r  s    r   ÚSerializeToStringzItest_bound_expression_from_Message.<locals>.FakeMessage.SerializeToStringU  s   € Ø—9‘9Ðr   N)Ú__name__Ú
__module__Ú__qualname__r  r  r”   r   r   ÚFakeMessager  Q  s   „ ò	ó	r   r  sj   

project_release

 project_version"0
project_version
project_release
:
br!   Úproject_releaseÚproject_version)r	   r1   ÚBoundExpressionsrî   r´   rµ   )r  Úmessageræ   s      r   Ú"test_bound_expression_from_Messager  P  sv   € ÷ñ ðA€Gô �L‰L×)Ñ)×8Ñ8¹ÀWÓ9MÓN€EÜˆu× Ñ Ó! QÒ&Ð&Ð&Ø × 1Ñ 1Ñ1Ð1Ð1Ø × 1Ñ 1Ñ1Ð1Ñ1r   )r„   )/r   r,   rD   Úpyarrowr	   Úpyarrow.computeÚcomputerÊ   Úpyarrow.libr   r   r   Úpyarrow.substraitr1   ÚImportErrorÚmarkÚ
pytestmarkr   r   Úparametrizer;   Ú	py_bufferrH   rK   rN   rW   r]   rr   rz   r}   rŠ   r�   r˜   Únumpyr¥   r¬   rß   rp   r·   rÏ   rÜ   râ   rè   rñ   rø   rÿ   r  r”   r   r   ú<module>r     sm  ðó$ 
Û ã ã Ý Ý ß >ðÝ)ð �[‰[×"Ñ"€
óDò
ð ‡�×Ñ˜¨¨u¨Ó6ñ*;ó 7ð*;ðZ ‡�×Ñ˜ < 2§<¡<°	Ó#:¸HÀaÐ"HÓIñ#ó Jð#ò
!ð ‡�×Ñ˜¨¨u¨Ó6ñ,;ó 7ð,;òbò<ð ‡�×Ñ˜¨¨u¨Ó6ñ-"ó 7ð-"ò`'@òT'@ðT ‡�×Ñ˜¨¨u¨Ó6ñx!ó 7ðx!òvs:ðl ‡�×Ñ˜¨¨u¨Ó6ñ'ó 7ð'ðT ‡�×ÑñQ!ó ðQ!ðh ‡�×Ññg!ó ðg!ðT ‡�×Ñ˜Ø€B‡H�HˆXˆR�X‰X�c‹]˜AÓØ€B‡H�HˆXˆR�X‰X�c‹]˜H˜BŸH™H S›MÓ*Ø€B‡H�HˆSƒM�BÑð"ó ñ

/óð

/òEò(ò89ò(Eò (ò6>ò,.ó,2øðe! ò ØƒIðús   ¦H ÈH*È)H*