o
    Ûñhß}  ã                
   @   s
  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 zd dlmZ W n ey7   dZY nw ejjZdCdd„Zdd„ Zej d	d
dg¡dd„ ƒZej de d¡ddf¡dd„ ƒZdd„ Zej d	d
dg¡dd„ ƒZdd„ Zdd„ Zej d	d
dg¡dd„ ƒZdd„ Zd d!„ Zej d	d
dg¡d"d#„ ƒZd$d%„ Zej d	d
dg¡d&d'„ ƒZ ejj!d(d)„ ƒZ"ejj!d*d+„ ƒZ#ej d,e $e %d-¡d.¡e $e %d-¡e %d/¡¡e %d-¡d0kg¡d1d2„ ƒZ&d3d4„ Z'd5d6„ Z(d7d8„ Z)d9d:„ Z*d;d<„ Z+d=d>„ Z,d?d@„ Z-dAdB„ Z.dS )Dé    N)Útobytes)ÚArrowInvalidÚArrowNotImplementedErroré
   c                 C   s   ddl m} |t ¡ | ƒS )Nr   )Ú_get_udf_context)Úpyarrow._computer   ÚpaÚdefault_memory_pool)Úbatch_lengthr   © r   úP/var/www/vscode/kcb/lib/python3.10/site-packages/pyarrow/tests/test_substrait.pyÚmock_udf_context&   s   r   c                 C   sT   t j t| ƒ|¡}tjj||jd}| |¡ W d   ƒ |S 1 s#w   Y  |S )N©Úschema)	ÚosÚpathÚjoinÚstrr   ÚipcÚRecordBatchFileWriterr   Úwrite_table)ÚtmpdirÚ	file_nameÚtabler   Úwriterr   r   r   Ú_write_dummy_data_to_disk+   s   
ÿþr   Úuse_threadsTFc           
      C   s†   d}d}t jg d¢gdgd}t| ||ƒ}t| dt |¡ ¡ ¡ƒ}t j 	|¡}t
j||d}| ¡ }	| dg¡|	 dg¡ksAJ ‚d S )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_tbr   r   r   Útest_run_serialized_query2   s   ÿ r9   r5   s   buffers   bytesr   c                 C   s    t |tjtfƒs/dt|ƒ› d}tjt|d t 	|¡ W d   ƒ d S 1 s(w   Y  d S d}tjt
|d t 	|¡ W d   ƒ d S 1 sIw   Y  d S )Nz)Expected 'pyarrow.Buffer' or bytes, got 'ú'©Úmatchz1ParseFromZeroCopyStream failed for substrait.Plan)Ú
isinstancer   ÚBufferÚbytesÚtypeÚpytestÚraisesÚ	TypeErrorr/   r0   r   )r   r5   Úmsgr   r   r   Útest_run_query_input_types`   s   
ÿþ"ÿrE   c                  C   sV   d} t j t| ƒ¡}d}tjt|d t |¡ W d   ƒ d S 1 s$w   Y  d S )Nz2
    {
        "relations": [
        ]
    }
    zPlan has no relationsr;   )	r   r-   r.   r   rA   rB   r   r/   r0   )r5   r6   Úexec_messager   r   r   Útest_invalid_planp   s   "ÿrG   c           
      C   sŠ   d}d}t jg d¢gdgd}t| ||ƒ}t| dt |¡ ¡ ¡ƒ}t j 	t|ƒ¡}t
j||d}| ¡ }	| dg¡|	 dg¡ksCJ ‚d S )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(   r3   r   r   r   Ú(test_binary_conversion_with_json_options}   s   !ÿ rI   c                 C   s,   |› d|› }| D ]
}|  |¡r dS q	dS )Nú#TF)Úendswith)ÚfnsÚext_fileÚfn_nameÚsuffixÚfnr   r   r   Úhas_function¯   s   
ÿrQ   c                  C   s.   t j ¡ } t| ddƒsJ ‚t| ddƒsJ ‚d S )Nzfunctions_arithmetic.yamlÚaddÚsum)r   r-   Úget_supported_functionsrQ   )Úsupported_functionsr   r   r   Útest_get_supported_functions·   s   
ÿÿrV   c                    sŽ   t j dg d¢i¡‰t j dg d¢i¡‰t  t  dt  ¡ ¡g¡‰ ‡ ‡‡fdd„}d}t j t|ƒ¡}t j	j
||| d}| ¡ }|ˆksEJ ‚d S )NÚx©r   r   r    )r!   r"   é   c                    s@   | 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_2r   r   Útable_providerÇ   s   z(test_named_table.<locals>.table_providerað  
    {
        "version": { "major": 9999 },
        "relations": [
        {"rel": {
            "read": {
            "base_schema": {
                "struct": {
                "types": [
                            {"i64": {}}
                        ]
                },
                "names": [
                        "x"
                        ]
            },
            "namedTable": {
                    "names": ["t1"]
            }
            }
        }}
        ]
    }
    ©re   r   )r   ÚTableÚfrom_pydictr   ÚfieldÚint64r-   r.   r   r/   r0   r1   )r   re   r4   r6   r7   r8   r   ra   r   Útest_named_tableÁ   s   ÿrk   c                     sz   t j dg d¢i¡‰ ‡ fdd„} d}t j t|ƒ¡}d}tjt|d t	j
|| d W d   ƒ d S 1 s6w   Y  d S )	NrW   rX   c                    ó$   | st dƒ‚| d dkrˆ S t dƒ‚©NrZ   r   r[   r]   r^   ©r%   Ú_©rc   r   r   re   õ   ó
   z;test_named_table_invalid_table_name.<locals>.table_providerað  
    {
        "version": { "major": 9999 },
        "relations": [
        {"rel": {
            "read": {
            "base_schema": {
                "struct": {
                "types": [
                            {"i64": {}}
                        ]
                },
                "names": [
                        "x"
                        ]
            },
            "namedTable": {
                    "names": ["t3"]
            }
            }
        }}
        ]
    }
    zInvalid NamedTable Sourcer;   ©re   )r   rg   rh   r-   r.   r   rA   rB   r   r/   r0   )re   r4   r6   rF   r   rp   r   Ú#test_named_table_invalid_table_nameò   s   "ÿrs   c                     s‚   t j dg d¢i¡‰ ‡ fdd„} d}t|ƒ}t j t|ƒ¡}d}tjt|d t	j
|| d W d   ƒ d S 1 s:w   Y  d S )	NrW   rX   c                    rl   rm   r^   rn   rp   r   r   re     rq   z4test_named_table_empty_names.<locals>.table_provideraì  
    {
        "version": { "major": 9999 },
        "relations": [
        {"rel": {
            "read": {
            "base_schema": {
                "struct": {
                "types": [
                            {"i64": {}}
                        ]
                },
                "names": [
                        "x"
                        ]
            },
            "namedTable": {
                    "names": []
            }
            }
        }}
        ]
    }
    z!names for NamedTable not providedr;   rr   )r   rg   rh   r   r-   r.   rA   rB   r   r/   r0   )re   r4   r5   r6   rF   r   rp   r   Útest_named_table_empty_names  s   "ÿrt   c           
         s~   t j dg d¢i¡‰ ‡ fdd„}d}t j |¡}t jj|||d}| ¡ }| \}}ˆ  dd|t	d	ƒˆ d ƒ¡}	||	ks=J ‚d S )
NrW   rX   c                    rl   rm   r^   rn   ©Ú
test_tabler   r   re   J  rq   z.test_udf_via_substrait.<locals>.table_providers	  
    {
  "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",
        ]
      }
    }
  ]
}
    rf   r   Úyr   )
r   rg   rh   r-   r.   r/   r0   r1   Ú
add_columnr   )
Úunary_func_fixturer   re   r4   r6   r7   r8   ÚfunctionÚnameÚexpected_tbr   ru   r   Útest_udf_via_substraitF  s   eÿ
ÿr}   c                     s‚   t j dg d¢i¡‰ ‡ fdd„} d}t j |¡}t t j¡}t jj	|| d W d   ƒ n1 s1w   Y  dt
|jƒv s?J ‚d S )NrW   rX   c                    rl   rm   r^   rn   ru   r   r   re   Å  rq   z=test_udf_via_substrait_wrong_udf_name.<locals>.table_providers	  
    {
  "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",
        ]
      }
    }
  ]
}
    rr   zNo function registered)r   rg   rh   r-   r.   rA   rB   ÚArrowKeyErrorr/   r0   r   Úvalue)re   r4   r6   Úexcinfor   ru   r   Ú%test_udf_via_substrait_wrong_udf_nameÂ  s   eÿr   c                    sr   t j dg d¢i¡‰ ‡ fdd„}d}t j t|ƒ¡}t jj||| d}| ¡ }t j dg d¢i¡}||ks7J ‚d S )NrW   rX   c                    ó   ˆ S ©Nr   r`   ©Úin_tabler   r   re   <  ó   z/test_output_field_names.<locals>.table_provideraø  
    {
      "version": { "major": 9999 },
      "relations": [
        {
          "root": {
            "input": {
              "read": {
                "base_schema": {
                  "struct": {
                    "types": [{"i64": {}}]
                  },
                  "names": ["x"]
                },
                "namedTable": {
                  "names": ["t1"]
                }
              }
            },
            "names": ["out"]
          }
        }
      ]
    }
    rf   Úout)	r   rg   rh   r-   r.   r   r/   r0   r1   )r   re   r4   r6   r7   r8   Úexpectedr   r„   r   Útest_output_field_names8  s   ÿr‰   c                    s€   t j g d¢g d¢g d¢dœ¡‰ ‡ fdd„}d}t j |¡}t jj||dd	}| ¡ }t j d
dgddgdœ¡}||ks>J ‚d S )N©r   r   r   r   )r   r   r    r!   )ç      ð?r‹   r‹   r‹   )ÚkÚv1Úv2c                    r‚   rƒ   r   rn   ru   r   r   re   k  r†   z7test_scalar_aggregate_udf_basic.<locals>.table_providers  
{
  "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"
        ]
      }
    }
  ],
}
Frf   r   r   g      @g      @)rŒ   Úv_avg©r   rg   rh   r-   r.   r/   r0   r1   ©Úvarargs_agg_func_fixturere   r4   r6   r7   r8   r|   r   ru   r   Útest_scalar_aggregate_udf_basicc  s"   ÿÿ}ÿþr“   c                    sŒ   t j g d¢g d¢g d¢g d¢dœ¡‰ ‡ fdd„}d}t j |¡}t jj||d	d
}| ¡ }t j g d¢g d¢g d¢dœ¡}||ksDJ ‚d S )N)r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r    r!   r"   rY   é   é   )r‹   r‹   r‹   r‹   g       @g      @g      @g      @)ÚtrŒ   r   rŽ   c                    r‚   rƒ   r   rn   ru   r   r   re     r†   z5test_hash_aggregate_udf_basic.<locals>.table_providers  
{
  "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"
        ]
      }
    }
  ],
}
Frf   rŠ   )r   r   r   r   )ç      @r—   g      "@g      &@)r–   rŒ   r   r   r‘   r   ru   r   Útest_hash_aggregate_udf_basicø  s*   ýÿ ÿýr˜   ÚexprrW   r”   rw   é2   c                 C   sx   t  t  dt  ¡ ¡t  dt  ¡ ¡g¡}t j | gdg|¡}t j |¡}||jks*J ‚t|jƒdks3J ‚d|jv s:J ‚d S )NrW   rw   Ú	test_exprr   )	r   r   ri   Úint32r/   Úserialize_expressionsÚdeserialize_expressionsÚlenÚexpressions)r™   r   r6   Úreturnedr   r   r   Útest_serializing_expressions£  s   þr¢   c                     s¢   t  d¡dft  d¡dft  d¡dft  ¡ dft  ¡ dft  ¡ dfdœ} t  dd	„ |  ¡ D ƒ¡‰ ‡ fd
d„}|  ¡ D ]\}\}}|t 	|¡t j
||dkƒ q:d S )NÚsr   ÚmsÚnsÚtest_strings   test_string)Útime_secondsÚtime_millisÚ
time_nanosÚdate_millisÚlarge_stringÚlarge_binaryc                 S   s    g | ]\}\}}t  ||¡‘qS r   )r   ri   )Ú.0r{   Útypro   r   r   r   Ú
<listcomp>¾  s     z-test_arrow_specific_types.<locals>.<listcomp>c                    s2   t j | gdgˆ ¡}t j |¡}ˆ |jksJ ‚d S ©Nr›   )r   r/   r   rž   r   )r™   r6   r¡   r   r   r   Úcheck_round_tripÀ  s   z3test_arrow_specific_types.<locals>.check_round_trip)r@   )r   Útime32Útime64Údate64r«   r¬   r   ÚitemsÚpcri   Úscalar)Úfieldsr±   r{   r®   Úvalr   r   r   Útest_arrow_specific_typesµ  s   


úÿrº   c                     sÀ   t  t  dt  ¡ ¡t  dt  ¡ ¡t  dt  t  ¡ t  ¡ ¡¡t  dt  t  ¡ t  ¡ ¡¡g¡‰t  t  dt  	¡ ¡t  dt  ¡ ¡t  dt  ¡ ¡t  dt  ¡ ¡g¡‰ ‡ ‡fdd„} ˆD ]}| |ƒ qWd S )NÚbinary_viewÚstring_viewÚ
dictionaryÚreec                    sD   t  t  | j¡¡}tj |gdgˆ¡}tj |¡}ˆ |jks J ‚d S r°   )	r¶   Úis_nullri   r{   r   r/   r   rž   r   )ri   r™   r6   r¡   ©Ú
alt_schemar   r   r   Úcheck_one_wayÛ  s   z/test_arrow_one_way_types.<locals>.check_one_way)
r   r   ri   r»   r¼   r½   rœ   ÚstringÚrun_end_encodedÚbinary)rÂ   ri   r   rÀ   r   Útest_arrow_one_way_typesÉ  s$   üÿüÿ	
ÿrÆ   c                  C   s>  t  t  dt  ¡ ¡t  dt  ¡ ¡g¡} t t d¡d¡}t t d¡d¡}t t¡}t j	 
|gg | ¡ W d   ƒ n1 s>w   Y  dt|jƒv sLJ ‚t t¡}t j	 
|gddg| ¡ W d   ƒ n1 sgw   Y  dt|jƒv suJ ‚t t¡}t j	 
|gdg| ¡ W d   ƒ n1 sw   Y  d	t|jƒv sJ ‚d S )
NrW   rw   r”   Úzzneed to have the same lengthr#   rH   r™   zNo match for FieldRef)r   r   ri   rœ   r¶   ÚequalrA   rB   Ú
ValueErrorr/   r   r   r   )r   r™   Úbad_exprr€   r   r   r   Útest_invalid_expression_ser_deså  s$   þÿÿÿrË   c                  C   sú   t  t  dt  ¡ ¡t  dt  ¡ ¡g¡} t t d¡d¡t t d¡t d¡¡g}t j |ddg| ¡}t j |¡}| |jks?J ‚t	|j
ƒdksHJ ‚t t d¡d¡t t d¡t d¡¡g}t|j
d ƒt|d ƒkslJ ‚t|j
d ƒt|d ƒks{J ‚d S )	NrW   rw   r”   ÚfirstÚsecondr   r   r   )r   r   ri   rœ   r¶   rÈ   r/   r   rž   rŸ   r    r   )r   Úexprsr6   r¡   Ú
norm_exprsr   r   r   Ú%test_serializing_multiple_expressionsù  s   þ**"rÐ   c                  C   s2  t  t  dt  ¡ ¡t  dt  ¡ ¡g¡} t t d¡d¡}t t d¡d¡}| | ¡}t j |¡}| |jks7J ‚t	|j
ƒdks@J ‚t|j
d ƒt|ƒksMJ ‚t j ||gddg| ¡}t t¡}tj |¡ W d   ƒ n1 sow   Y  d	t|jƒv s}J ‚t j |gd
g| ¡}tj |¡}t|ƒt|ƒks—J ‚d S )NrW   rw   r”   r   r   Ú
expressionrÌ   rÍ   zcontained multiple expressionsÚ	weirdname)r   r   ri   rœ   r¶   rÈ   Úto_substraitr/   rž   rŸ   r    r   r   rA   rB   rÉ   Ú
ExpressionÚfrom_substraitr   )r   r™   Ú	expr_normr6   r¡   r€   Úexpr2r   r   r   Útest_serializing_with_compute	  s&   þ
ÿrØ   c                  C   sÚ   t  t  dt  ¡ ¡g¡} t d¡}t d¡}t ||¡g}t t	¡ t j
 |dg| ¡ W d   ƒ n1 s6w   Y  t j
j|dg| dd}t j
 |¡}| |jksSJ ‚t|jƒdks\J ‚t|jd ƒt|d ƒkskJ ‚d S )	NrW   r   r!   r™   T)Úallow_arrow_extensionsr   r   )r   r   ri   Úuint32r¶   r·   Ú
shift_leftrA   rB   r   r/   r   rž   rŸ   r    r   )r   ÚaÚbrÎ   r6   r¡   r   r   r   Útest_serializing_udfs$  s    ÿ

ÿ
ÿ"rÞ   c                  C   s®   d} t  t  dt  ¡ ¡t  dt  ¡ ¡g¡}t j | ¡}||ks!J ‚t j |¡}|j| ks.J ‚t j |¡}||ks:J ‚t j |j¡}||ksGJ ‚t j |j	¡}|j|ksUJ ‚d S )Ns   
x
y
*
brW   rw   )
r   r   ri   rœ   rÃ   r/   Údeserialize_schemaÚserialize_schemarž   rÑ   )Úsubstrait_schemaÚexpected_schemar¡   Úarrow_substrait_schemar   r   r   Útest_serializing_schema:  s   þrä   c                  C   sV   G dd„ dƒ} d}t jj | |ƒ¡}t|jƒdksJ ‚d|jv s"J ‚d|jv s)J ‚d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z7test_bound_expression_from_Message.<locals>.FakeMessagec                 S   s
   || _ d S rƒ   ©r™   )Úselfr™   r   r   r   Ú__init__R  s   
z@test_bound_expression_from_Message.<locals>.FakeMessage.__init__c                 S   s   | j S rƒ   rå   )ræ   r   r   r   ÚSerializeToStringU  s   zItest_bound_expression_from_Message.<locals>.FakeMessage.SerializeToStringN)Ú__name__Ú
__module__Ú__qualname__rç   rè   r   r   r   r   ÚFakeMessageQ  s    rì   sj   

project_release

 project_version"0
project_version
project_release
:
br   Úproject_releaseÚproject_version)r   r/   ÚBoundExpressionsrÕ   rŸ   r    )rì   ÚmessagerÎ   r   r   r   Ú"test_bound_expression_from_MessageP  s   rñ   )r   )/r   r*   rA   Úpyarrowr   Úpyarrow.computeÚcomputer¶   Úpyarrow.libr   r   r   Úpyarrow.substraitr/   ÚImportErrorÚmarkÚ
pytestmarkr   r   Úparametrizer9   Ú	py_bufferrE   rG   rI   rQ   rV   rk   rs   rt   r}   r   r‰   Únumpyr“   r˜   rÈ   ri   r¢   rº   rÆ   rË   rÐ   rØ   rÞ   rä   rñ   r   r   r   r   Ú<module>   sj   ÿ

-

1

0**
{v
*
 
 +ý
