teradataml 20.0.0.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1208) hide show
  1. teradataml/LICENSE-3RD-PARTY.pdf +0 -0
  2. teradataml/LICENSE.pdf +0 -0
  3. teradataml/README.md +2762 -0
  4. teradataml/__init__.py +78 -0
  5. teradataml/_version.py +11 -0
  6. teradataml/analytics/Transformations.py +2996 -0
  7. teradataml/analytics/__init__.py +82 -0
  8. teradataml/analytics/analytic_function_executor.py +2416 -0
  9. teradataml/analytics/analytic_query_generator.py +1050 -0
  10. teradataml/analytics/byom/H2OPredict.py +514 -0
  11. teradataml/analytics/byom/PMMLPredict.py +437 -0
  12. teradataml/analytics/byom/__init__.py +16 -0
  13. teradataml/analytics/json_parser/__init__.py +133 -0
  14. teradataml/analytics/json_parser/analytic_functions_argument.py +1805 -0
  15. teradataml/analytics/json_parser/json_store.py +191 -0
  16. teradataml/analytics/json_parser/metadata.py +1666 -0
  17. teradataml/analytics/json_parser/utils.py +805 -0
  18. teradataml/analytics/meta_class.py +236 -0
  19. teradataml/analytics/sqle/DecisionTreePredict.py +456 -0
  20. teradataml/analytics/sqle/NaiveBayesPredict.py +420 -0
  21. teradataml/analytics/sqle/__init__.py +128 -0
  22. teradataml/analytics/sqle/json/decisiontreepredict_sqle.json +78 -0
  23. teradataml/analytics/sqle/json/naivebayespredict_sqle.json +62 -0
  24. teradataml/analytics/table_operator/__init__.py +11 -0
  25. teradataml/analytics/uaf/__init__.py +82 -0
  26. teradataml/analytics/utils.py +828 -0
  27. teradataml/analytics/valib.py +1617 -0
  28. teradataml/automl/__init__.py +5835 -0
  29. teradataml/automl/autodataprep/__init__.py +493 -0
  30. teradataml/automl/custom_json_utils.py +1625 -0
  31. teradataml/automl/data_preparation.py +1384 -0
  32. teradataml/automl/data_transformation.py +1254 -0
  33. teradataml/automl/feature_engineering.py +2273 -0
  34. teradataml/automl/feature_exploration.py +1873 -0
  35. teradataml/automl/model_evaluation.py +488 -0
  36. teradataml/automl/model_training.py +1407 -0
  37. teradataml/catalog/__init__.py +2 -0
  38. teradataml/catalog/byom.py +1759 -0
  39. teradataml/catalog/function_argument_mapper.py +859 -0
  40. teradataml/catalog/model_cataloging_utils.py +491 -0
  41. teradataml/clients/__init__.py +0 -0
  42. teradataml/clients/auth_client.py +137 -0
  43. teradataml/clients/keycloak_client.py +165 -0
  44. teradataml/clients/pkce_client.py +481 -0
  45. teradataml/common/__init__.py +1 -0
  46. teradataml/common/aed_utils.py +2078 -0
  47. teradataml/common/bulk_exposed_utils.py +113 -0
  48. teradataml/common/constants.py +1669 -0
  49. teradataml/common/deprecations.py +166 -0
  50. teradataml/common/exceptions.py +147 -0
  51. teradataml/common/formula.py +743 -0
  52. teradataml/common/garbagecollector.py +666 -0
  53. teradataml/common/logger.py +1261 -0
  54. teradataml/common/messagecodes.py +518 -0
  55. teradataml/common/messages.py +262 -0
  56. teradataml/common/pylogger.py +67 -0
  57. teradataml/common/sqlbundle.py +764 -0
  58. teradataml/common/td_coltype_code_to_tdtype.py +48 -0
  59. teradataml/common/utils.py +3166 -0
  60. teradataml/common/warnings.py +36 -0
  61. teradataml/common/wrapper_utils.py +625 -0
  62. teradataml/config/__init__.py +0 -0
  63. teradataml/config/dummy_file1.cfg +5 -0
  64. teradataml/config/dummy_file2.cfg +3 -0
  65. teradataml/config/sqlengine_alias_definitions_v1.0 +14 -0
  66. teradataml/config/sqlengine_alias_definitions_v1.1 +20 -0
  67. teradataml/config/sqlengine_alias_definitions_v1.3 +19 -0
  68. teradataml/context/__init__.py +0 -0
  69. teradataml/context/aed_context.py +223 -0
  70. teradataml/context/context.py +1462 -0
  71. teradataml/data/A_loan.csv +19 -0
  72. teradataml/data/BINARY_REALS_LEFT.csv +11 -0
  73. teradataml/data/BINARY_REALS_RIGHT.csv +11 -0
  74. teradataml/data/B_loan.csv +49 -0
  75. teradataml/data/BuoyData2.csv +17 -0
  76. teradataml/data/CONVOLVE2_COMPLEX_LEFT.csv +5 -0
  77. teradataml/data/CONVOLVE2_COMPLEX_RIGHT.csv +5 -0
  78. teradataml/data/Convolve2RealsLeft.csv +5 -0
  79. teradataml/data/Convolve2RealsRight.csv +5 -0
  80. teradataml/data/Convolve2ValidLeft.csv +11 -0
  81. teradataml/data/Convolve2ValidRight.csv +11 -0
  82. teradataml/data/DFFTConv_Real_8_8.csv +65 -0
  83. teradataml/data/Employee.csv +5 -0
  84. teradataml/data/Employee_Address.csv +4 -0
  85. teradataml/data/Employee_roles.csv +5 -0
  86. teradataml/data/JulesBelvezeDummyData.csv +100 -0
  87. teradataml/data/Mall_customer_data.csv +201 -0
  88. teradataml/data/Orders1_12mf.csv +25 -0
  89. teradataml/data/Pi_loan.csv +7 -0
  90. teradataml/data/SMOOTHED_DATA.csv +7 -0
  91. teradataml/data/TestDFFT8.csv +9 -0
  92. teradataml/data/TestRiver.csv +109 -0
  93. teradataml/data/Traindata.csv +28 -0
  94. teradataml/data/__init__.py +0 -0
  95. teradataml/data/acf.csv +17 -0
  96. teradataml/data/adaboost_example.json +34 -0
  97. teradataml/data/adaboostpredict_example.json +24 -0
  98. teradataml/data/additional_table.csv +11 -0
  99. teradataml/data/admissions_test.csv +21 -0
  100. teradataml/data/admissions_train.csv +41 -0
  101. teradataml/data/admissions_train_nulls.csv +41 -0
  102. teradataml/data/advertising.csv +201 -0
  103. teradataml/data/ageandheight.csv +13 -0
  104. teradataml/data/ageandpressure.csv +31 -0
  105. teradataml/data/amazon_reviews_25.csv +26 -0
  106. teradataml/data/antiselect_example.json +36 -0
  107. teradataml/data/antiselect_input.csv +8 -0
  108. teradataml/data/antiselect_input_mixed_case.csv +8 -0
  109. teradataml/data/applicant_external.csv +7 -0
  110. teradataml/data/applicant_reference.csv +7 -0
  111. teradataml/data/apriori_example.json +22 -0
  112. teradataml/data/arima_example.json +9 -0
  113. teradataml/data/assortedtext_input.csv +8 -0
  114. teradataml/data/attribution_example.json +34 -0
  115. teradataml/data/attribution_sample_table.csv +27 -0
  116. teradataml/data/attribution_sample_table1.csv +6 -0
  117. teradataml/data/attribution_sample_table2.csv +11 -0
  118. teradataml/data/bank_churn.csv +10001 -0
  119. teradataml/data/bank_marketing.csv +11163 -0
  120. teradataml/data/bank_web_clicks1.csv +43 -0
  121. teradataml/data/bank_web_clicks2.csv +91 -0
  122. teradataml/data/bank_web_url.csv +85 -0
  123. teradataml/data/barrier.csv +2 -0
  124. teradataml/data/barrier_new.csv +3 -0
  125. teradataml/data/betweenness_example.json +14 -0
  126. teradataml/data/bike_sharing.csv +732 -0
  127. teradataml/data/bin_breaks.csv +8 -0
  128. teradataml/data/bin_fit_ip.csv +4 -0
  129. teradataml/data/binary_complex_left.csv +11 -0
  130. teradataml/data/binary_complex_right.csv +11 -0
  131. teradataml/data/binary_matrix_complex_left.csv +21 -0
  132. teradataml/data/binary_matrix_complex_right.csv +21 -0
  133. teradataml/data/binary_matrix_real_left.csv +21 -0
  134. teradataml/data/binary_matrix_real_right.csv +21 -0
  135. teradataml/data/blood2ageandweight.csv +26 -0
  136. teradataml/data/bmi.csv +501 -0
  137. teradataml/data/boston.csv +507 -0
  138. teradataml/data/boston2cols.csv +721 -0
  139. teradataml/data/breast_cancer.csv +570 -0
  140. teradataml/data/buoydata_mix.csv +11 -0
  141. teradataml/data/burst_data.csv +5 -0
  142. teradataml/data/burst_example.json +21 -0
  143. teradataml/data/byom_example.json +34 -0
  144. teradataml/data/bytes_table.csv +4 -0
  145. teradataml/data/cal_housing_ex_raw.csv +70 -0
  146. teradataml/data/callers.csv +7 -0
  147. teradataml/data/calls.csv +10 -0
  148. teradataml/data/cars_hist.csv +33 -0
  149. teradataml/data/cat_table.csv +25 -0
  150. teradataml/data/ccm_example.json +32 -0
  151. teradataml/data/ccm_input.csv +91 -0
  152. teradataml/data/ccm_input2.csv +13 -0
  153. teradataml/data/ccmexample.csv +101 -0
  154. teradataml/data/ccmprepare_example.json +9 -0
  155. teradataml/data/ccmprepare_input.csv +91 -0
  156. teradataml/data/cfilter_example.json +12 -0
  157. teradataml/data/changepointdetection_example.json +18 -0
  158. teradataml/data/changepointdetectionrt_example.json +8 -0
  159. teradataml/data/chi_sq.csv +3 -0
  160. teradataml/data/churn_data.csv +14 -0
  161. teradataml/data/churn_emission.csv +35 -0
  162. teradataml/data/churn_initial.csv +3 -0
  163. teradataml/data/churn_state_transition.csv +5 -0
  164. teradataml/data/citedges_2.csv +745 -0
  165. teradataml/data/citvertices_2.csv +1210 -0
  166. teradataml/data/clicks2.csv +16 -0
  167. teradataml/data/clickstream.csv +13 -0
  168. teradataml/data/clickstream1.csv +11 -0
  169. teradataml/data/closeness_example.json +16 -0
  170. teradataml/data/complaints.csv +21 -0
  171. teradataml/data/complaints_mini.csv +3 -0
  172. teradataml/data/complaints_test_tokenized.csv +353 -0
  173. teradataml/data/complaints_testtoken.csv +224 -0
  174. teradataml/data/complaints_tokens_model.csv +348 -0
  175. teradataml/data/complaints_tokens_test.csv +353 -0
  176. teradataml/data/complaints_traintoken.csv +472 -0
  177. teradataml/data/computers_category.csv +1001 -0
  178. teradataml/data/computers_test1.csv +1252 -0
  179. teradataml/data/computers_train1.csv +5009 -0
  180. teradataml/data/computers_train1_clustered.csv +5009 -0
  181. teradataml/data/confusionmatrix_example.json +9 -0
  182. teradataml/data/conversion_event_table.csv +3 -0
  183. teradataml/data/corr_input.csv +17 -0
  184. teradataml/data/correlation_example.json +11 -0
  185. teradataml/data/covid_confirm_sd.csv +83 -0
  186. teradataml/data/coxhazardratio_example.json +39 -0
  187. teradataml/data/coxph_example.json +15 -0
  188. teradataml/data/coxsurvival_example.json +28 -0
  189. teradataml/data/cpt.csv +41 -0
  190. teradataml/data/credit_ex_merged.csv +45 -0
  191. teradataml/data/creditcard_data.csv +1001 -0
  192. teradataml/data/customer_loyalty.csv +301 -0
  193. teradataml/data/customer_loyalty_newseq.csv +31 -0
  194. teradataml/data/customer_segmentation_test.csv +2628 -0
  195. teradataml/data/customer_segmentation_train.csv +8069 -0
  196. teradataml/data/dataframe_example.json +173 -0
  197. teradataml/data/decisionforest_example.json +37 -0
  198. teradataml/data/decisionforestpredict_example.json +38 -0
  199. teradataml/data/decisiontree_example.json +21 -0
  200. teradataml/data/decisiontreepredict_example.json +45 -0
  201. teradataml/data/dfft2_size4_real.csv +17 -0
  202. teradataml/data/dfft2_test_matrix16.csv +17 -0
  203. teradataml/data/dfft2conv_real_4_4.csv +65 -0
  204. teradataml/data/diabetes.csv +443 -0
  205. teradataml/data/diabetes_test.csv +89 -0
  206. teradataml/data/dict_table.csv +5 -0
  207. teradataml/data/docperterm_table.csv +4 -0
  208. teradataml/data/docs/__init__.py +1 -0
  209. teradataml/data/docs/byom/__init__.py +0 -0
  210. teradataml/data/docs/byom/docs/DataRobotPredict.py +180 -0
  211. teradataml/data/docs/byom/docs/DataikuPredict.py +217 -0
  212. teradataml/data/docs/byom/docs/H2OPredict.py +325 -0
  213. teradataml/data/docs/byom/docs/ONNXEmbeddings.py +242 -0
  214. teradataml/data/docs/byom/docs/ONNXPredict.py +283 -0
  215. teradataml/data/docs/byom/docs/ONNXSeq2Seq.py +255 -0
  216. teradataml/data/docs/byom/docs/PMMLPredict.py +278 -0
  217. teradataml/data/docs/byom/docs/__init__.py +0 -0
  218. teradataml/data/docs/sqle/__init__.py +0 -0
  219. teradataml/data/docs/sqle/docs_17_10/Antiselect.py +83 -0
  220. teradataml/data/docs/sqle/docs_17_10/Attribution.py +200 -0
  221. teradataml/data/docs/sqle/docs_17_10/BincodeFit.py +172 -0
  222. teradataml/data/docs/sqle/docs_17_10/BincodeTransform.py +131 -0
  223. teradataml/data/docs/sqle/docs_17_10/CategoricalSummary.py +86 -0
  224. teradataml/data/docs/sqle/docs_17_10/ChiSq.py +90 -0
  225. teradataml/data/docs/sqle/docs_17_10/ColumnSummary.py +86 -0
  226. teradataml/data/docs/sqle/docs_17_10/ConvertTo.py +96 -0
  227. teradataml/data/docs/sqle/docs_17_10/DecisionForestPredict.py +139 -0
  228. teradataml/data/docs/sqle/docs_17_10/DecisionTreePredict.py +152 -0
  229. teradataml/data/docs/sqle/docs_17_10/FTest.py +161 -0
  230. teradataml/data/docs/sqle/docs_17_10/FillRowId.py +83 -0
  231. teradataml/data/docs/sqle/docs_17_10/Fit.py +88 -0
  232. teradataml/data/docs/sqle/docs_17_10/GLMPredict.py +144 -0
  233. teradataml/data/docs/sqle/docs_17_10/GetRowsWithMissingValues.py +85 -0
  234. teradataml/data/docs/sqle/docs_17_10/GetRowsWithoutMissingValues.py +82 -0
  235. teradataml/data/docs/sqle/docs_17_10/Histogram.py +165 -0
  236. teradataml/data/docs/sqle/docs_17_10/MovingAverage.py +134 -0
  237. teradataml/data/docs/sqle/docs_17_10/NGramSplitter.py +209 -0
  238. teradataml/data/docs/sqle/docs_17_10/NPath.py +266 -0
  239. teradataml/data/docs/sqle/docs_17_10/NaiveBayesPredict.py +116 -0
  240. teradataml/data/docs/sqle/docs_17_10/NaiveBayesTextClassifierPredict.py +176 -0
  241. teradataml/data/docs/sqle/docs_17_10/NumApply.py +147 -0
  242. teradataml/data/docs/sqle/docs_17_10/OneHotEncodingFit.py +135 -0
  243. teradataml/data/docs/sqle/docs_17_10/OneHotEncodingTransform.py +109 -0
  244. teradataml/data/docs/sqle/docs_17_10/OutlierFilterFit.py +166 -0
  245. teradataml/data/docs/sqle/docs_17_10/OutlierFilterTransform.py +105 -0
  246. teradataml/data/docs/sqle/docs_17_10/Pack.py +128 -0
  247. teradataml/data/docs/sqle/docs_17_10/PolynomialFeaturesFit.py +112 -0
  248. teradataml/data/docs/sqle/docs_17_10/PolynomialFeaturesTransform.py +102 -0
  249. teradataml/data/docs/sqle/docs_17_10/QQNorm.py +105 -0
  250. teradataml/data/docs/sqle/docs_17_10/RoundColumns.py +110 -0
  251. teradataml/data/docs/sqle/docs_17_10/RowNormalizeFit.py +118 -0
  252. teradataml/data/docs/sqle/docs_17_10/RowNormalizeTransform.py +99 -0
  253. teradataml/data/docs/sqle/docs_17_10/SVMSparsePredict.py +153 -0
  254. teradataml/data/docs/sqle/docs_17_10/ScaleFit.py +197 -0
  255. teradataml/data/docs/sqle/docs_17_10/ScaleTransform.py +99 -0
  256. teradataml/data/docs/sqle/docs_17_10/Sessionize.py +114 -0
  257. teradataml/data/docs/sqle/docs_17_10/SimpleImputeFit.py +116 -0
  258. teradataml/data/docs/sqle/docs_17_10/SimpleImputeTransform.py +98 -0
  259. teradataml/data/docs/sqle/docs_17_10/StrApply.py +187 -0
  260. teradataml/data/docs/sqle/docs_17_10/StringSimilarity.py +146 -0
  261. teradataml/data/docs/sqle/docs_17_10/Transform.py +105 -0
  262. teradataml/data/docs/sqle/docs_17_10/UnivariateStatistics.py +142 -0
  263. teradataml/data/docs/sqle/docs_17_10/Unpack.py +214 -0
  264. teradataml/data/docs/sqle/docs_17_10/WhichMax.py +83 -0
  265. teradataml/data/docs/sqle/docs_17_10/WhichMin.py +83 -0
  266. teradataml/data/docs/sqle/docs_17_10/ZTest.py +155 -0
  267. teradataml/data/docs/sqle/docs_17_10/__init__.py +0 -0
  268. teradataml/data/docs/sqle/docs_17_20/ANOVA.py +186 -0
  269. teradataml/data/docs/sqle/docs_17_20/Antiselect.py +83 -0
  270. teradataml/data/docs/sqle/docs_17_20/Apriori.py +138 -0
  271. teradataml/data/docs/sqle/docs_17_20/Attribution.py +201 -0
  272. teradataml/data/docs/sqle/docs_17_20/BincodeFit.py +172 -0
  273. teradataml/data/docs/sqle/docs_17_20/BincodeTransform.py +139 -0
  274. teradataml/data/docs/sqle/docs_17_20/CFilter.py +132 -0
  275. teradataml/data/docs/sqle/docs_17_20/CategoricalSummary.py +86 -0
  276. teradataml/data/docs/sqle/docs_17_20/ChiSq.py +90 -0
  277. teradataml/data/docs/sqle/docs_17_20/ClassificationEvaluator.py +166 -0
  278. teradataml/data/docs/sqle/docs_17_20/ColumnSummary.py +86 -0
  279. teradataml/data/docs/sqle/docs_17_20/ColumnTransformer.py +246 -0
  280. teradataml/data/docs/sqle/docs_17_20/ConvertTo.py +113 -0
  281. teradataml/data/docs/sqle/docs_17_20/DecisionForest.py +280 -0
  282. teradataml/data/docs/sqle/docs_17_20/DecisionForestPredict.py +144 -0
  283. teradataml/data/docs/sqle/docs_17_20/DecisionTreePredict.py +136 -0
  284. teradataml/data/docs/sqle/docs_17_20/FTest.py +240 -0
  285. teradataml/data/docs/sqle/docs_17_20/FillRowId.py +83 -0
  286. teradataml/data/docs/sqle/docs_17_20/Fit.py +88 -0
  287. teradataml/data/docs/sqle/docs_17_20/GLM.py +541 -0
  288. teradataml/data/docs/sqle/docs_17_20/GLMPerSegment.py +415 -0
  289. teradataml/data/docs/sqle/docs_17_20/GLMPredict.py +144 -0
  290. teradataml/data/docs/sqle/docs_17_20/GLMPredictPerSegment.py +233 -0
  291. teradataml/data/docs/sqle/docs_17_20/GetFutileColumns.py +125 -0
  292. teradataml/data/docs/sqle/docs_17_20/GetRowsWithMissingValues.py +109 -0
  293. teradataml/data/docs/sqle/docs_17_20/GetRowsWithoutMissingValues.py +106 -0
  294. teradataml/data/docs/sqle/docs_17_20/Histogram.py +224 -0
  295. teradataml/data/docs/sqle/docs_17_20/KMeans.py +251 -0
  296. teradataml/data/docs/sqle/docs_17_20/KMeansPredict.py +144 -0
  297. teradataml/data/docs/sqle/docs_17_20/KNN.py +215 -0
  298. teradataml/data/docs/sqle/docs_17_20/MovingAverage.py +134 -0
  299. teradataml/data/docs/sqle/docs_17_20/NERExtractor.py +121 -0
  300. teradataml/data/docs/sqle/docs_17_20/NGramSplitter.py +209 -0
  301. teradataml/data/docs/sqle/docs_17_20/NPath.py +266 -0
  302. teradataml/data/docs/sqle/docs_17_20/NaiveBayes.py +162 -0
  303. teradataml/data/docs/sqle/docs_17_20/NaiveBayesPredict.py +116 -0
  304. teradataml/data/docs/sqle/docs_17_20/NaiveBayesTextClassifierPredict.py +177 -0
  305. teradataml/data/docs/sqle/docs_17_20/NaiveBayesTextClassifierTrainer.py +127 -0
  306. teradataml/data/docs/sqle/docs_17_20/NonLinearCombineFit.py +119 -0
  307. teradataml/data/docs/sqle/docs_17_20/NonLinearCombineTransform.py +112 -0
  308. teradataml/data/docs/sqle/docs_17_20/NumApply.py +147 -0
  309. teradataml/data/docs/sqle/docs_17_20/OneClassSVM.py +307 -0
  310. teradataml/data/docs/sqle/docs_17_20/OneClassSVMPredict.py +185 -0
  311. teradataml/data/docs/sqle/docs_17_20/OneHotEncodingFit.py +231 -0
  312. teradataml/data/docs/sqle/docs_17_20/OneHotEncodingTransform.py +121 -0
  313. teradataml/data/docs/sqle/docs_17_20/OrdinalEncodingFit.py +220 -0
  314. teradataml/data/docs/sqle/docs_17_20/OrdinalEncodingTransform.py +127 -0
  315. teradataml/data/docs/sqle/docs_17_20/OutlierFilterFit.py +191 -0
  316. teradataml/data/docs/sqle/docs_17_20/OutlierFilterTransform.py +117 -0
  317. teradataml/data/docs/sqle/docs_17_20/Pack.py +128 -0
  318. teradataml/data/docs/sqle/docs_17_20/Pivoting.py +279 -0
  319. teradataml/data/docs/sqle/docs_17_20/PolynomialFeaturesFit.py +112 -0
  320. teradataml/data/docs/sqle/docs_17_20/PolynomialFeaturesTransform.py +112 -0
  321. teradataml/data/docs/sqle/docs_17_20/QQNorm.py +105 -0
  322. teradataml/data/docs/sqle/docs_17_20/ROC.py +164 -0
  323. teradataml/data/docs/sqle/docs_17_20/RandomProjectionFit.py +155 -0
  324. teradataml/data/docs/sqle/docs_17_20/RandomProjectionMinComponents.py +106 -0
  325. teradataml/data/docs/sqle/docs_17_20/RandomProjectionTransform.py +120 -0
  326. teradataml/data/docs/sqle/docs_17_20/RegressionEvaluator.py +211 -0
  327. teradataml/data/docs/sqle/docs_17_20/RoundColumns.py +109 -0
  328. teradataml/data/docs/sqle/docs_17_20/RowNormalizeFit.py +118 -0
  329. teradataml/data/docs/sqle/docs_17_20/RowNormalizeTransform.py +111 -0
  330. teradataml/data/docs/sqle/docs_17_20/SMOTE.py +212 -0
  331. teradataml/data/docs/sqle/docs_17_20/SVM.py +414 -0
  332. teradataml/data/docs/sqle/docs_17_20/SVMPredict.py +213 -0
  333. teradataml/data/docs/sqle/docs_17_20/SVMSparsePredict.py +153 -0
  334. teradataml/data/docs/sqle/docs_17_20/ScaleFit.py +315 -0
  335. teradataml/data/docs/sqle/docs_17_20/ScaleTransform.py +202 -0
  336. teradataml/data/docs/sqle/docs_17_20/SentimentExtractor.py +206 -0
  337. teradataml/data/docs/sqle/docs_17_20/Sessionize.py +114 -0
  338. teradataml/data/docs/sqle/docs_17_20/Shap.py +225 -0
  339. teradataml/data/docs/sqle/docs_17_20/Silhouette.py +153 -0
  340. teradataml/data/docs/sqle/docs_17_20/SimpleImputeFit.py +116 -0
  341. teradataml/data/docs/sqle/docs_17_20/SimpleImputeTransform.py +109 -0
  342. teradataml/data/docs/sqle/docs_17_20/StrApply.py +187 -0
  343. teradataml/data/docs/sqle/docs_17_20/StringSimilarity.py +146 -0
  344. teradataml/data/docs/sqle/docs_17_20/TDDecisionForestPredict.py +207 -0
  345. teradataml/data/docs/sqle/docs_17_20/TDGLMPredict.py +333 -0
  346. teradataml/data/docs/sqle/docs_17_20/TDNaiveBayesPredict.py +189 -0
  347. teradataml/data/docs/sqle/docs_17_20/TFIDF.py +142 -0
  348. teradataml/data/docs/sqle/docs_17_20/TargetEncodingFit.py +267 -0
  349. teradataml/data/docs/sqle/docs_17_20/TargetEncodingTransform.py +141 -0
  350. teradataml/data/docs/sqle/docs_17_20/TextMorph.py +119 -0
  351. teradataml/data/docs/sqle/docs_17_20/TextParser.py +224 -0
  352. teradataml/data/docs/sqle/docs_17_20/TrainTestSplit.py +160 -0
  353. teradataml/data/docs/sqle/docs_17_20/Transform.py +123 -0
  354. teradataml/data/docs/sqle/docs_17_20/UnivariateStatistics.py +142 -0
  355. teradataml/data/docs/sqle/docs_17_20/Unpack.py +214 -0
  356. teradataml/data/docs/sqle/docs_17_20/Unpivoting.py +216 -0
  357. teradataml/data/docs/sqle/docs_17_20/VectorDistance.py +169 -0
  358. teradataml/data/docs/sqle/docs_17_20/WhichMax.py +83 -0
  359. teradataml/data/docs/sqle/docs_17_20/WhichMin.py +83 -0
  360. teradataml/data/docs/sqle/docs_17_20/WordEmbeddings.py +237 -0
  361. teradataml/data/docs/sqle/docs_17_20/XGBoost.py +362 -0
  362. teradataml/data/docs/sqle/docs_17_20/XGBoostPredict.py +281 -0
  363. teradataml/data/docs/sqle/docs_17_20/ZTest.py +220 -0
  364. teradataml/data/docs/sqle/docs_17_20/__init__.py +0 -0
  365. teradataml/data/docs/tableoperator/__init__.py +0 -0
  366. teradataml/data/docs/tableoperator/docs_17_00/ReadNOS.py +430 -0
  367. teradataml/data/docs/tableoperator/docs_17_00/__init__.py +0 -0
  368. teradataml/data/docs/tableoperator/docs_17_05/ReadNOS.py +430 -0
  369. teradataml/data/docs/tableoperator/docs_17_05/WriteNOS.py +348 -0
  370. teradataml/data/docs/tableoperator/docs_17_05/__init__.py +0 -0
  371. teradataml/data/docs/tableoperator/docs_17_10/ReadNOS.py +429 -0
  372. teradataml/data/docs/tableoperator/docs_17_10/WriteNOS.py +348 -0
  373. teradataml/data/docs/tableoperator/docs_17_10/__init__.py +0 -0
  374. teradataml/data/docs/tableoperator/docs_17_20/Image2Matrix.py +118 -0
  375. teradataml/data/docs/tableoperator/docs_17_20/ReadNOS.py +440 -0
  376. teradataml/data/docs/tableoperator/docs_17_20/WriteNOS.py +387 -0
  377. teradataml/data/docs/tableoperator/docs_17_20/__init__.py +0 -0
  378. teradataml/data/docs/uaf/__init__.py +0 -0
  379. teradataml/data/docs/uaf/docs_17_20/ACF.py +186 -0
  380. teradataml/data/docs/uaf/docs_17_20/ArimaEstimate.py +370 -0
  381. teradataml/data/docs/uaf/docs_17_20/ArimaForecast.py +172 -0
  382. teradataml/data/docs/uaf/docs_17_20/ArimaValidate.py +161 -0
  383. teradataml/data/docs/uaf/docs_17_20/ArimaXEstimate.py +293 -0
  384. teradataml/data/docs/uaf/docs_17_20/AutoArima.py +354 -0
  385. teradataml/data/docs/uaf/docs_17_20/BinaryMatrixOp.py +248 -0
  386. teradataml/data/docs/uaf/docs_17_20/BinarySeriesOp.py +252 -0
  387. teradataml/data/docs/uaf/docs_17_20/BreuschGodfrey.py +178 -0
  388. teradataml/data/docs/uaf/docs_17_20/BreuschPaganGodfrey.py +175 -0
  389. teradataml/data/docs/uaf/docs_17_20/Convolve.py +230 -0
  390. teradataml/data/docs/uaf/docs_17_20/Convolve2.py +218 -0
  391. teradataml/data/docs/uaf/docs_17_20/CopyArt.py +145 -0
  392. teradataml/data/docs/uaf/docs_17_20/CumulPeriodogram.py +185 -0
  393. teradataml/data/docs/uaf/docs_17_20/DFFT.py +204 -0
  394. teradataml/data/docs/uaf/docs_17_20/DFFT2.py +216 -0
  395. teradataml/data/docs/uaf/docs_17_20/DFFT2Conv.py +216 -0
  396. teradataml/data/docs/uaf/docs_17_20/DFFTConv.py +192 -0
  397. teradataml/data/docs/uaf/docs_17_20/DIFF.py +175 -0
  398. teradataml/data/docs/uaf/docs_17_20/DTW.py +180 -0
  399. teradataml/data/docs/uaf/docs_17_20/DWT.py +235 -0
  400. teradataml/data/docs/uaf/docs_17_20/DWT2D.py +217 -0
  401. teradataml/data/docs/uaf/docs_17_20/DickeyFuller.py +142 -0
  402. teradataml/data/docs/uaf/docs_17_20/DurbinWatson.py +184 -0
  403. teradataml/data/docs/uaf/docs_17_20/ExtractResults.py +185 -0
  404. teradataml/data/docs/uaf/docs_17_20/FilterFactory1d.py +160 -0
  405. teradataml/data/docs/uaf/docs_17_20/FitMetrics.py +172 -0
  406. teradataml/data/docs/uaf/docs_17_20/GenseriesFormula.py +206 -0
  407. teradataml/data/docs/uaf/docs_17_20/GenseriesSinusoids.py +143 -0
  408. teradataml/data/docs/uaf/docs_17_20/GoldfeldQuandt.py +198 -0
  409. teradataml/data/docs/uaf/docs_17_20/HoltWintersForecaster.py +260 -0
  410. teradataml/data/docs/uaf/docs_17_20/IDFFT.py +165 -0
  411. teradataml/data/docs/uaf/docs_17_20/IDFFT2.py +191 -0
  412. teradataml/data/docs/uaf/docs_17_20/IDWT.py +236 -0
  413. teradataml/data/docs/uaf/docs_17_20/IDWT2D.py +226 -0
  414. teradataml/data/docs/uaf/docs_17_20/IQR.py +134 -0
  415. teradataml/data/docs/uaf/docs_17_20/InputValidator.py +121 -0
  416. teradataml/data/docs/uaf/docs_17_20/LineSpec.py +156 -0
  417. teradataml/data/docs/uaf/docs_17_20/LinearRegr.py +215 -0
  418. teradataml/data/docs/uaf/docs_17_20/MAMean.py +174 -0
  419. teradataml/data/docs/uaf/docs_17_20/MInfo.py +134 -0
  420. teradataml/data/docs/uaf/docs_17_20/Matrix2Image.py +297 -0
  421. teradataml/data/docs/uaf/docs_17_20/MatrixMultiply.py +145 -0
  422. teradataml/data/docs/uaf/docs_17_20/MultivarRegr.py +191 -0
  423. teradataml/data/docs/uaf/docs_17_20/PACF.py +157 -0
  424. teradataml/data/docs/uaf/docs_17_20/Portman.py +217 -0
  425. teradataml/data/docs/uaf/docs_17_20/PowerSpec.py +203 -0
  426. teradataml/data/docs/uaf/docs_17_20/PowerTransform.py +155 -0
  427. teradataml/data/docs/uaf/docs_17_20/Resample.py +237 -0
  428. teradataml/data/docs/uaf/docs_17_20/SAX.py +246 -0
  429. teradataml/data/docs/uaf/docs_17_20/SInfo.py +123 -0
  430. teradataml/data/docs/uaf/docs_17_20/SeasonalNormalize.py +173 -0
  431. teradataml/data/docs/uaf/docs_17_20/SelectionCriteria.py +174 -0
  432. teradataml/data/docs/uaf/docs_17_20/SignifPeriodicities.py +171 -0
  433. teradataml/data/docs/uaf/docs_17_20/SignifResidmean.py +164 -0
  434. teradataml/data/docs/uaf/docs_17_20/SimpleExp.py +180 -0
  435. teradataml/data/docs/uaf/docs_17_20/Smoothma.py +208 -0
  436. teradataml/data/docs/uaf/docs_17_20/TrackingOp.py +151 -0
  437. teradataml/data/docs/uaf/docs_17_20/UNDIFF.py +171 -0
  438. teradataml/data/docs/uaf/docs_17_20/Unnormalize.py +202 -0
  439. teradataml/data/docs/uaf/docs_17_20/WhitesGeneral.py +171 -0
  440. teradataml/data/docs/uaf/docs_17_20/WindowDFFT.py +368 -0
  441. teradataml/data/docs/uaf/docs_17_20/__init__.py +0 -0
  442. teradataml/data/dtw_example.json +18 -0
  443. teradataml/data/dtw_t1.csv +11 -0
  444. teradataml/data/dtw_t2.csv +4 -0
  445. teradataml/data/dwt2d_dataTable.csv +65 -0
  446. teradataml/data/dwt2d_example.json +16 -0
  447. teradataml/data/dwt_dataTable.csv +8 -0
  448. teradataml/data/dwt_example.json +15 -0
  449. teradataml/data/dwt_filterTable.csv +3 -0
  450. teradataml/data/dwt_filter_dim.csv +5 -0
  451. teradataml/data/emission.csv +9 -0
  452. teradataml/data/emp_table_by_dept.csv +19 -0
  453. teradataml/data/employee_info.csv +4 -0
  454. teradataml/data/employee_table.csv +6 -0
  455. teradataml/data/excluding_event_table.csv +2 -0
  456. teradataml/data/finance_data.csv +6 -0
  457. teradataml/data/finance_data2.csv +61 -0
  458. teradataml/data/finance_data3.csv +93 -0
  459. teradataml/data/finance_data4.csv +13 -0
  460. teradataml/data/fish.csv +160 -0
  461. teradataml/data/fm_blood2ageandweight.csv +26 -0
  462. teradataml/data/fmeasure_example.json +12 -0
  463. teradataml/data/followers_leaders.csv +10 -0
  464. teradataml/data/fpgrowth_example.json +12 -0
  465. teradataml/data/frequentpaths_example.json +29 -0
  466. teradataml/data/friends.csv +9 -0
  467. teradataml/data/fs_input.csv +33 -0
  468. teradataml/data/fs_input1.csv +33 -0
  469. teradataml/data/genData.csv +513 -0
  470. teradataml/data/geodataframe_example.json +40 -0
  471. teradataml/data/glass_types.csv +215 -0
  472. teradataml/data/glm_admissions_model.csv +12 -0
  473. teradataml/data/glm_example.json +56 -0
  474. teradataml/data/glml1l2_example.json +28 -0
  475. teradataml/data/glml1l2predict_example.json +54 -0
  476. teradataml/data/glmpredict_example.json +54 -0
  477. teradataml/data/gq_t1.csv +21 -0
  478. teradataml/data/grocery_transaction.csv +19 -0
  479. teradataml/data/hconvolve_complex_right.csv +5 -0
  480. teradataml/data/hconvolve_complex_rightmulti.csv +5 -0
  481. teradataml/data/histogram_example.json +12 -0
  482. teradataml/data/hmmdecoder_example.json +79 -0
  483. teradataml/data/hmmevaluator_example.json +25 -0
  484. teradataml/data/hmmsupervised_example.json +10 -0
  485. teradataml/data/hmmunsupervised_example.json +8 -0
  486. teradataml/data/hnsw_alter_data.csv +5 -0
  487. teradataml/data/hnsw_data.csv +10 -0
  488. teradataml/data/house_values.csv +12 -0
  489. teradataml/data/house_values2.csv +13 -0
  490. teradataml/data/housing_cat.csv +7 -0
  491. teradataml/data/housing_data.csv +9 -0
  492. teradataml/data/housing_test.csv +47 -0
  493. teradataml/data/housing_test_binary.csv +47 -0
  494. teradataml/data/housing_train.csv +493 -0
  495. teradataml/data/housing_train_attribute.csv +5 -0
  496. teradataml/data/housing_train_binary.csv +437 -0
  497. teradataml/data/housing_train_parameter.csv +2 -0
  498. teradataml/data/housing_train_response.csv +493 -0
  499. teradataml/data/housing_train_segment.csv +201 -0
  500. teradataml/data/ibm_stock.csv +370 -0
  501. teradataml/data/ibm_stock1.csv +370 -0
  502. teradataml/data/identitymatch_example.json +22 -0
  503. teradataml/data/idf_table.csv +4 -0
  504. teradataml/data/idwt2d_dataTable.csv +5 -0
  505. teradataml/data/idwt_dataTable.csv +8 -0
  506. teradataml/data/idwt_filterTable.csv +3 -0
  507. teradataml/data/impressions.csv +101 -0
  508. teradataml/data/inflation.csv +21 -0
  509. teradataml/data/initial.csv +3 -0
  510. teradataml/data/insect2Cols.csv +61 -0
  511. teradataml/data/insect_sprays.csv +13 -0
  512. teradataml/data/insurance.csv +1339 -0
  513. teradataml/data/interpolator_example.json +13 -0
  514. teradataml/data/interval_data.csv +5 -0
  515. teradataml/data/iris_altinput.csv +481 -0
  516. teradataml/data/iris_attribute_output.csv +8 -0
  517. teradataml/data/iris_attribute_test.csv +121 -0
  518. teradataml/data/iris_attribute_train.csv +481 -0
  519. teradataml/data/iris_category_expect_predict.csv +31 -0
  520. teradataml/data/iris_data.csv +151 -0
  521. teradataml/data/iris_input.csv +151 -0
  522. teradataml/data/iris_response_train.csv +121 -0
  523. teradataml/data/iris_test.csv +31 -0
  524. teradataml/data/iris_train.csv +121 -0
  525. teradataml/data/join_table1.csv +4 -0
  526. teradataml/data/join_table2.csv +4 -0
  527. teradataml/data/jsons/anly_function_name.json +7 -0
  528. teradataml/data/jsons/byom/ONNXSeq2Seq.json +287 -0
  529. teradataml/data/jsons/byom/dataikupredict.json +148 -0
  530. teradataml/data/jsons/byom/datarobotpredict.json +147 -0
  531. teradataml/data/jsons/byom/h2opredict.json +195 -0
  532. teradataml/data/jsons/byom/onnxembeddings.json +267 -0
  533. teradataml/data/jsons/byom/onnxpredict.json +187 -0
  534. teradataml/data/jsons/byom/pmmlpredict.json +147 -0
  535. teradataml/data/jsons/paired_functions.json +450 -0
  536. teradataml/data/jsons/sqle/16.20/Antiselect.json +56 -0
  537. teradataml/data/jsons/sqle/16.20/Attribution.json +249 -0
  538. teradataml/data/jsons/sqle/16.20/DecisionForestPredict.json +156 -0
  539. teradataml/data/jsons/sqle/16.20/DecisionTreePredict.json +170 -0
  540. teradataml/data/jsons/sqle/16.20/GLMPredict.json +122 -0
  541. teradataml/data/jsons/sqle/16.20/MovingAverage.json +367 -0
  542. teradataml/data/jsons/sqle/16.20/NGramSplitter.json +239 -0
  543. teradataml/data/jsons/sqle/16.20/NaiveBayesPredict.json +136 -0
  544. teradataml/data/jsons/sqle/16.20/NaiveBayesTextClassifierPredict.json +235 -0
  545. teradataml/data/jsons/sqle/16.20/Pack.json +98 -0
  546. teradataml/data/jsons/sqle/16.20/SVMSparsePredict.json +162 -0
  547. teradataml/data/jsons/sqle/16.20/Sessionize.json +105 -0
  548. teradataml/data/jsons/sqle/16.20/StringSimilarity.json +86 -0
  549. teradataml/data/jsons/sqle/16.20/Unpack.json +166 -0
  550. teradataml/data/jsons/sqle/16.20/nPath.json +269 -0
  551. teradataml/data/jsons/sqle/17.00/Antiselect.json +56 -0
  552. teradataml/data/jsons/sqle/17.00/Attribution.json +249 -0
  553. teradataml/data/jsons/sqle/17.00/DecisionForestPredict.json +156 -0
  554. teradataml/data/jsons/sqle/17.00/DecisionTreePredict.json +170 -0
  555. teradataml/data/jsons/sqle/17.00/GLMPredict.json +122 -0
  556. teradataml/data/jsons/sqle/17.00/MovingAverage.json +367 -0
  557. teradataml/data/jsons/sqle/17.00/NGramSplitter.json +239 -0
  558. teradataml/data/jsons/sqle/17.00/NaiveBayesPredict.json +136 -0
  559. teradataml/data/jsons/sqle/17.00/NaiveBayesTextClassifierPredict.json +235 -0
  560. teradataml/data/jsons/sqle/17.00/Pack.json +98 -0
  561. teradataml/data/jsons/sqle/17.00/SVMSparsePredict.json +162 -0
  562. teradataml/data/jsons/sqle/17.00/Sessionize.json +105 -0
  563. teradataml/data/jsons/sqle/17.00/StringSimilarity.json +86 -0
  564. teradataml/data/jsons/sqle/17.00/Unpack.json +166 -0
  565. teradataml/data/jsons/sqle/17.00/nPath.json +269 -0
  566. teradataml/data/jsons/sqle/17.05/Antiselect.json +56 -0
  567. teradataml/data/jsons/sqle/17.05/Attribution.json +249 -0
  568. teradataml/data/jsons/sqle/17.05/DecisionForestPredict.json +156 -0
  569. teradataml/data/jsons/sqle/17.05/DecisionTreePredict.json +170 -0
  570. teradataml/data/jsons/sqle/17.05/GLMPredict.json +122 -0
  571. teradataml/data/jsons/sqle/17.05/MovingAverage.json +367 -0
  572. teradataml/data/jsons/sqle/17.05/NGramSplitter.json +239 -0
  573. teradataml/data/jsons/sqle/17.05/NaiveBayesPredict.json +136 -0
  574. teradataml/data/jsons/sqle/17.05/NaiveBayesTextClassifierPredict.json +235 -0
  575. teradataml/data/jsons/sqle/17.05/Pack.json +98 -0
  576. teradataml/data/jsons/sqle/17.05/SVMSparsePredict.json +162 -0
  577. teradataml/data/jsons/sqle/17.05/Sessionize.json +105 -0
  578. teradataml/data/jsons/sqle/17.05/StringSimilarity.json +86 -0
  579. teradataml/data/jsons/sqle/17.05/Unpack.json +166 -0
  580. teradataml/data/jsons/sqle/17.05/nPath.json +269 -0
  581. teradataml/data/jsons/sqle/17.10/Antiselect.json +56 -0
  582. teradataml/data/jsons/sqle/17.10/Attribution.json +249 -0
  583. teradataml/data/jsons/sqle/17.10/DecisionForestPredict.json +185 -0
  584. teradataml/data/jsons/sqle/17.10/DecisionTreePredict.json +172 -0
  585. teradataml/data/jsons/sqle/17.10/GLMPredict.json +151 -0
  586. teradataml/data/jsons/sqle/17.10/MovingAverage.json +368 -0
  587. teradataml/data/jsons/sqle/17.10/NGramSplitter.json +239 -0
  588. teradataml/data/jsons/sqle/17.10/NaiveBayesPredict.json +149 -0
  589. teradataml/data/jsons/sqle/17.10/NaiveBayesTextClassifierPredict.json +288 -0
  590. teradataml/data/jsons/sqle/17.10/Pack.json +133 -0
  591. teradataml/data/jsons/sqle/17.10/SVMSparsePredict.json +193 -0
  592. teradataml/data/jsons/sqle/17.10/Sessionize.json +105 -0
  593. teradataml/data/jsons/sqle/17.10/StringSimilarity.json +86 -0
  594. teradataml/data/jsons/sqle/17.10/TD_BinCodeFit.json +239 -0
  595. teradataml/data/jsons/sqle/17.10/TD_BinCodeTransform.json +70 -0
  596. teradataml/data/jsons/sqle/17.10/TD_CategoricalSummary.json +54 -0
  597. teradataml/data/jsons/sqle/17.10/TD_Chisq.json +68 -0
  598. teradataml/data/jsons/sqle/17.10/TD_ColumnSummary.json +54 -0
  599. teradataml/data/jsons/sqle/17.10/TD_ConvertTo.json +69 -0
  600. teradataml/data/jsons/sqle/17.10/TD_FTest.json +187 -0
  601. teradataml/data/jsons/sqle/17.10/TD_FillRowID.json +52 -0
  602. teradataml/data/jsons/sqle/17.10/TD_FunctionFit.json +46 -0
  603. teradataml/data/jsons/sqle/17.10/TD_FunctionTransform.json +72 -0
  604. teradataml/data/jsons/sqle/17.10/TD_GetRowsWithMissingValues.json +53 -0
  605. teradataml/data/jsons/sqle/17.10/TD_GetRowsWithoutMissingValues.json +53 -0
  606. teradataml/data/jsons/sqle/17.10/TD_Histogram.json +133 -0
  607. teradataml/data/jsons/sqle/17.10/TD_NumApply.json +147 -0
  608. teradataml/data/jsons/sqle/17.10/TD_OneHotEncodingFit.json +183 -0
  609. teradataml/data/jsons/sqle/17.10/TD_OneHotEncodingTransform.json +66 -0
  610. teradataml/data/jsons/sqle/17.10/TD_OutlierFilterFit.json +197 -0
  611. teradataml/data/jsons/sqle/17.10/TD_OutlierFilterTransform.json +48 -0
  612. teradataml/data/jsons/sqle/17.10/TD_PolynomialFeaturesFit.json +114 -0
  613. teradataml/data/jsons/sqle/17.10/TD_PolynomialFeaturesTransform.json +72 -0
  614. teradataml/data/jsons/sqle/17.10/TD_QQNorm.json +112 -0
  615. teradataml/data/jsons/sqle/17.10/TD_RoundColumns.json +93 -0
  616. teradataml/data/jsons/sqle/17.10/TD_RowNormalizeFit.json +128 -0
  617. teradataml/data/jsons/sqle/17.10/TD_RowNormalizeTransform.json +71 -0
  618. teradataml/data/jsons/sqle/17.10/TD_ScaleFit.json +157 -0
  619. teradataml/data/jsons/sqle/17.10/TD_ScaleTransform.json +71 -0
  620. teradataml/data/jsons/sqle/17.10/TD_SimpleImputeFit.json +148 -0
  621. teradataml/data/jsons/sqle/17.10/TD_SimpleImputeTransform.json +48 -0
  622. teradataml/data/jsons/sqle/17.10/TD_StrApply.json +240 -0
  623. teradataml/data/jsons/sqle/17.10/TD_UnivariateStatistics.json +119 -0
  624. teradataml/data/jsons/sqle/17.10/TD_WhichMax.json +53 -0
  625. teradataml/data/jsons/sqle/17.10/TD_WhichMin.json +53 -0
  626. teradataml/data/jsons/sqle/17.10/TD_ZTest.json +171 -0
  627. teradataml/data/jsons/sqle/17.10/Unpack.json +188 -0
  628. teradataml/data/jsons/sqle/17.10/nPath.json +269 -0
  629. teradataml/data/jsons/sqle/17.20/Antiselect.json +56 -0
  630. teradataml/data/jsons/sqle/17.20/Attribution.json +249 -0
  631. teradataml/data/jsons/sqle/17.20/DecisionForestPredict.json +185 -0
  632. teradataml/data/jsons/sqle/17.20/DecisionTreePredict.json +172 -0
  633. teradataml/data/jsons/sqle/17.20/GLMPredict.json +151 -0
  634. teradataml/data/jsons/sqle/17.20/MovingAverage.json +367 -0
  635. teradataml/data/jsons/sqle/17.20/NGramSplitter.json +239 -0
  636. teradataml/data/jsons/sqle/17.20/NaiveBayesPredict.json +149 -0
  637. teradataml/data/jsons/sqle/17.20/NaiveBayesTextClassifierPredict.json +287 -0
  638. teradataml/data/jsons/sqle/17.20/Pack.json +133 -0
  639. teradataml/data/jsons/sqle/17.20/SVMSparsePredict.json +192 -0
  640. teradataml/data/jsons/sqle/17.20/Sessionize.json +105 -0
  641. teradataml/data/jsons/sqle/17.20/StringSimilarity.json +86 -0
  642. teradataml/data/jsons/sqle/17.20/TD_ANOVA.json +149 -0
  643. teradataml/data/jsons/sqle/17.20/TD_Apriori.json +181 -0
  644. teradataml/data/jsons/sqle/17.20/TD_BinCodeFit.json +239 -0
  645. teradataml/data/jsons/sqle/17.20/TD_BinCodeTransform.json +71 -0
  646. teradataml/data/jsons/sqle/17.20/TD_CFilter.json +118 -0
  647. teradataml/data/jsons/sqle/17.20/TD_CategoricalSummary.json +53 -0
  648. teradataml/data/jsons/sqle/17.20/TD_Chisq.json +68 -0
  649. teradataml/data/jsons/sqle/17.20/TD_ClassificationEvaluator.json +146 -0
  650. teradataml/data/jsons/sqle/17.20/TD_ColumnSummary.json +53 -0
  651. teradataml/data/jsons/sqle/17.20/TD_ColumnTransformer.json +218 -0
  652. teradataml/data/jsons/sqle/17.20/TD_ConvertTo.json +92 -0
  653. teradataml/data/jsons/sqle/17.20/TD_DecisionForest.json +260 -0
  654. teradataml/data/jsons/sqle/17.20/TD_DecisionForestPredict.json +139 -0
  655. teradataml/data/jsons/sqle/17.20/TD_FTest.json +269 -0
  656. teradataml/data/jsons/sqle/17.20/TD_FillRowID.json +52 -0
  657. teradataml/data/jsons/sqle/17.20/TD_FunctionFit.json +46 -0
  658. teradataml/data/jsons/sqle/17.20/TD_FunctionTransform.json +72 -0
  659. teradataml/data/jsons/sqle/17.20/TD_GLM.json +507 -0
  660. teradataml/data/jsons/sqle/17.20/TD_GLMPREDICT.json +168 -0
  661. teradataml/data/jsons/sqle/17.20/TD_GLMPerSegment.json +411 -0
  662. teradataml/data/jsons/sqle/17.20/TD_GLMPredictPerSegment.json +146 -0
  663. teradataml/data/jsons/sqle/17.20/TD_GetFutileColumns.json +93 -0
  664. teradataml/data/jsons/sqle/17.20/TD_GetRowsWithMissingValues.json +76 -0
  665. teradataml/data/jsons/sqle/17.20/TD_GetRowsWithoutMissingValues.json +76 -0
  666. teradataml/data/jsons/sqle/17.20/TD_Histogram.json +152 -0
  667. teradataml/data/jsons/sqle/17.20/TD_KMeans.json +232 -0
  668. teradataml/data/jsons/sqle/17.20/TD_KMeansPredict.json +87 -0
  669. teradataml/data/jsons/sqle/17.20/TD_KNN.json +262 -0
  670. teradataml/data/jsons/sqle/17.20/TD_NERExtractor.json +145 -0
  671. teradataml/data/jsons/sqle/17.20/TD_NaiveBayes.json +193 -0
  672. teradataml/data/jsons/sqle/17.20/TD_NaiveBayesPredict.json +212 -0
  673. teradataml/data/jsons/sqle/17.20/TD_NaiveBayesTextClassifierTrainer.json +137 -0
  674. teradataml/data/jsons/sqle/17.20/TD_NonLinearCombineFit.json +102 -0
  675. teradataml/data/jsons/sqle/17.20/TD_NonLinearCombineTransform.json +71 -0
  676. teradataml/data/jsons/sqle/17.20/TD_NumApply.json +147 -0
  677. teradataml/data/jsons/sqle/17.20/TD_OneClassSVM.json +316 -0
  678. teradataml/data/jsons/sqle/17.20/TD_OneClassSVMPredict.json +124 -0
  679. teradataml/data/jsons/sqle/17.20/TD_OneHotEncodingFit.json +271 -0
  680. teradataml/data/jsons/sqle/17.20/TD_OneHotEncodingTransform.json +65 -0
  681. teradataml/data/jsons/sqle/17.20/TD_OrdinalEncodingFit.json +229 -0
  682. teradataml/data/jsons/sqle/17.20/TD_OrdinalEncodingTransform.json +75 -0
  683. teradataml/data/jsons/sqle/17.20/TD_OutlierFilterFit.json +217 -0
  684. teradataml/data/jsons/sqle/17.20/TD_OutlierFilterTransform.json +48 -0
  685. teradataml/data/jsons/sqle/17.20/TD_Pivoting.json +280 -0
  686. teradataml/data/jsons/sqle/17.20/TD_PolynomialFeaturesFit.json +114 -0
  687. teradataml/data/jsons/sqle/17.20/TD_PolynomialFeaturesTransform.json +72 -0
  688. teradataml/data/jsons/sqle/17.20/TD_QQNorm.json +111 -0
  689. teradataml/data/jsons/sqle/17.20/TD_ROC.json +179 -0
  690. teradataml/data/jsons/sqle/17.20/TD_RandomProjectionFit.json +179 -0
  691. teradataml/data/jsons/sqle/17.20/TD_RandomProjectionMinComponents.json +74 -0
  692. teradataml/data/jsons/sqle/17.20/TD_RandomProjectionTransform.json +74 -0
  693. teradataml/data/jsons/sqle/17.20/TD_RegressionEvaluator.json +138 -0
  694. teradataml/data/jsons/sqle/17.20/TD_RoundColumns.json +93 -0
  695. teradataml/data/jsons/sqle/17.20/TD_RowNormalizeFit.json +128 -0
  696. teradataml/data/jsons/sqle/17.20/TD_RowNormalizeTransform.json +71 -0
  697. teradataml/data/jsons/sqle/17.20/TD_SMOTE.json +267 -0
  698. teradataml/data/jsons/sqle/17.20/TD_SVM.json +389 -0
  699. teradataml/data/jsons/sqle/17.20/TD_SVMPredict.json +142 -0
  700. teradataml/data/jsons/sqle/17.20/TD_ScaleFit.json +310 -0
  701. teradataml/data/jsons/sqle/17.20/TD_ScaleTransform.json +120 -0
  702. teradataml/data/jsons/sqle/17.20/TD_SentimentExtractor.json +194 -0
  703. teradataml/data/jsons/sqle/17.20/TD_Shap.json +221 -0
  704. teradataml/data/jsons/sqle/17.20/TD_Silhouette.json +143 -0
  705. teradataml/data/jsons/sqle/17.20/TD_SimpleImputeFit.json +147 -0
  706. teradataml/data/jsons/sqle/17.20/TD_SimpleImputeTransform.json +48 -0
  707. teradataml/data/jsons/sqle/17.20/TD_StrApply.json +240 -0
  708. teradataml/data/jsons/sqle/17.20/TD_TFIDF.json +162 -0
  709. teradataml/data/jsons/sqle/17.20/TD_TargetEncodingFit.json +248 -0
  710. teradataml/data/jsons/sqle/17.20/TD_TargetEncodingTransform.json +75 -0
  711. teradataml/data/jsons/sqle/17.20/TD_TextMorph.json +134 -0
  712. teradataml/data/jsons/sqle/17.20/TD_TextParser.json +297 -0
  713. teradataml/data/jsons/sqle/17.20/TD_TrainTestSplit.json +142 -0
  714. teradataml/data/jsons/sqle/17.20/TD_UnivariateStatistics.json +117 -0
  715. teradataml/data/jsons/sqle/17.20/TD_Unpivoting.json +235 -0
  716. teradataml/data/jsons/sqle/17.20/TD_VectorDistance.json +183 -0
  717. teradataml/data/jsons/sqle/17.20/TD_WhichMax.json +53 -0
  718. teradataml/data/jsons/sqle/17.20/TD_WhichMin.json +53 -0
  719. teradataml/data/jsons/sqle/17.20/TD_WordEmbeddings.json +241 -0
  720. teradataml/data/jsons/sqle/17.20/TD_XGBoost.json +330 -0
  721. teradataml/data/jsons/sqle/17.20/TD_XGBoostPredict.json +195 -0
  722. teradataml/data/jsons/sqle/17.20/TD_ZTest.json +247 -0
  723. teradataml/data/jsons/sqle/17.20/Unpack.json +188 -0
  724. teradataml/data/jsons/sqle/17.20/nPath.json +269 -0
  725. teradataml/data/jsons/sqle/20.00/AI_AnalyzeSentiment.json +370 -0
  726. teradataml/data/jsons/sqle/20.00/AI_AskLLM.json +460 -0
  727. teradataml/data/jsons/sqle/20.00/AI_DetectLanguage.json +385 -0
  728. teradataml/data/jsons/sqle/20.00/AI_ExtractKeyPhrases.json +369 -0
  729. teradataml/data/jsons/sqle/20.00/AI_MaskPII.json +369 -0
  730. teradataml/data/jsons/sqle/20.00/AI_RecognizeEntities.json +369 -0
  731. teradataml/data/jsons/sqle/20.00/AI_RecognizePIIEntities.json +369 -0
  732. teradataml/data/jsons/sqle/20.00/AI_TextClassifier.json +400 -0
  733. teradataml/data/jsons/sqle/20.00/AI_TextEmbeddings.json +401 -0
  734. teradataml/data/jsons/sqle/20.00/AI_TextSummarize.json +384 -0
  735. teradataml/data/jsons/sqle/20.00/AI_TextTranslate.json +384 -0
  736. teradataml/data/jsons/sqle/20.00/TD_API_AzureML.json +151 -0
  737. teradataml/data/jsons/sqle/20.00/TD_API_Sagemaker.json +182 -0
  738. teradataml/data/jsons/sqle/20.00/TD_API_VertexAI.json +183 -0
  739. teradataml/data/jsons/sqle/20.00/TD_HNSW.json +296 -0
  740. teradataml/data/jsons/sqle/20.00/TD_HNSWPredict.json +206 -0
  741. teradataml/data/jsons/sqle/20.00/TD_HNSWSummary.json +32 -0
  742. teradataml/data/jsons/sqle/20.00/TD_KMeans.json +250 -0
  743. teradataml/data/jsons/sqle/20.00/TD_SMOTE.json +266 -0
  744. teradataml/data/jsons/sqle/20.00/TD_VectorDistance.json +278 -0
  745. teradataml/data/jsons/storedprocedure/17.20/TD_COPYART.json +71 -0
  746. teradataml/data/jsons/storedprocedure/17.20/TD_FILTERFACTORY1D.json +150 -0
  747. teradataml/data/jsons/tableoperator/17.00/read_nos.json +198 -0
  748. teradataml/data/jsons/tableoperator/17.05/read_nos.json +198 -0
  749. teradataml/data/jsons/tableoperator/17.05/write_nos.json +195 -0
  750. teradataml/data/jsons/tableoperator/17.10/read_nos.json +184 -0
  751. teradataml/data/jsons/tableoperator/17.10/write_nos.json +195 -0
  752. teradataml/data/jsons/tableoperator/17.20/IMAGE2MATRIX.json +53 -0
  753. teradataml/data/jsons/tableoperator/17.20/read_nos.json +183 -0
  754. teradataml/data/jsons/tableoperator/17.20/write_nos.json +224 -0
  755. teradataml/data/jsons/uaf/17.20/TD_ACF.json +132 -0
  756. teradataml/data/jsons/uaf/17.20/TD_ARIMAESTIMATE.json +396 -0
  757. teradataml/data/jsons/uaf/17.20/TD_ARIMAFORECAST.json +77 -0
  758. teradataml/data/jsons/uaf/17.20/TD_ARIMAVALIDATE.json +153 -0
  759. teradataml/data/jsons/uaf/17.20/TD_ARIMAXESTIMATE.json +362 -0
  760. teradataml/data/jsons/uaf/17.20/TD_AUTOARIMA.json +469 -0
  761. teradataml/data/jsons/uaf/17.20/TD_BINARYMATRIXOP.json +107 -0
  762. teradataml/data/jsons/uaf/17.20/TD_BINARYSERIESOP.json +106 -0
  763. teradataml/data/jsons/uaf/17.20/TD_BREUSCH_GODFREY.json +89 -0
  764. teradataml/data/jsons/uaf/17.20/TD_BREUSCH_PAGAN_GODFREY.json +104 -0
  765. teradataml/data/jsons/uaf/17.20/TD_CONVOLVE.json +78 -0
  766. teradataml/data/jsons/uaf/17.20/TD_CONVOLVE2.json +66 -0
  767. teradataml/data/jsons/uaf/17.20/TD_CUMUL_PERIODOGRAM.json +87 -0
  768. teradataml/data/jsons/uaf/17.20/TD_DFFT.json +134 -0
  769. teradataml/data/jsons/uaf/17.20/TD_DFFT2.json +144 -0
  770. teradataml/data/jsons/uaf/17.20/TD_DFFT2CONV.json +108 -0
  771. teradataml/data/jsons/uaf/17.20/TD_DFFTCONV.json +108 -0
  772. teradataml/data/jsons/uaf/17.20/TD_DICKEY_FULLER.json +78 -0
  773. teradataml/data/jsons/uaf/17.20/TD_DIFF.json +92 -0
  774. teradataml/data/jsons/uaf/17.20/TD_DTW.json +114 -0
  775. teradataml/data/jsons/uaf/17.20/TD_DURBIN_WATSON.json +101 -0
  776. teradataml/data/jsons/uaf/17.20/TD_DWT.json +173 -0
  777. teradataml/data/jsons/uaf/17.20/TD_DWT2D.json +160 -0
  778. teradataml/data/jsons/uaf/17.20/TD_EXTRACT_RESULTS.json +39 -0
  779. teradataml/data/jsons/uaf/17.20/TD_FITMETRICS.json +101 -0
  780. teradataml/data/jsons/uaf/17.20/TD_GENSERIES4FORMULA.json +85 -0
  781. teradataml/data/jsons/uaf/17.20/TD_GENSERIES4SINUSOIDS.json +71 -0
  782. teradataml/data/jsons/uaf/17.20/TD_GOLDFELD_QUANDT.json +139 -0
  783. teradataml/data/jsons/uaf/17.20/TD_HOLT_WINTERS_FORECASTER.json +313 -0
  784. teradataml/data/jsons/uaf/17.20/TD_IDFFT.json +58 -0
  785. teradataml/data/jsons/uaf/17.20/TD_IDFFT2.json +81 -0
  786. teradataml/data/jsons/uaf/17.20/TD_IDWT.json +162 -0
  787. teradataml/data/jsons/uaf/17.20/TD_IDWT2D.json +149 -0
  788. teradataml/data/jsons/uaf/17.20/TD_INPUTVALIDATOR.json +64 -0
  789. teradataml/data/jsons/uaf/17.20/TD_IQR.json +117 -0
  790. teradataml/data/jsons/uaf/17.20/TD_LINEAR_REGR.json +182 -0
  791. teradataml/data/jsons/uaf/17.20/TD_LINESPEC.json +103 -0
  792. teradataml/data/jsons/uaf/17.20/TD_MAMEAN.json +181 -0
  793. teradataml/data/jsons/uaf/17.20/TD_MATRIX2IMAGE.json +209 -0
  794. teradataml/data/jsons/uaf/17.20/TD_MATRIXMULTIPLY.json +68 -0
  795. teradataml/data/jsons/uaf/17.20/TD_MINFO.json +67 -0
  796. teradataml/data/jsons/uaf/17.20/TD_MULTIVAR_REGR.json +179 -0
  797. teradataml/data/jsons/uaf/17.20/TD_PACF.json +114 -0
  798. teradataml/data/jsons/uaf/17.20/TD_PORTMAN.json +119 -0
  799. teradataml/data/jsons/uaf/17.20/TD_POWERSPEC.json +175 -0
  800. teradataml/data/jsons/uaf/17.20/TD_POWERTRANSFORM.json +98 -0
  801. teradataml/data/jsons/uaf/17.20/TD_RESAMPLE.json +194 -0
  802. teradataml/data/jsons/uaf/17.20/TD_SAX.json +210 -0
  803. teradataml/data/jsons/uaf/17.20/TD_SEASONALNORMALIZE.json +143 -0
  804. teradataml/data/jsons/uaf/17.20/TD_SELECTION_CRITERIA.json +90 -0
  805. teradataml/data/jsons/uaf/17.20/TD_SIGNIF_PERIODICITIES.json +80 -0
  806. teradataml/data/jsons/uaf/17.20/TD_SIGNIF_RESIDMEAN.json +68 -0
  807. teradataml/data/jsons/uaf/17.20/TD_SIMPLEEXP.json +184 -0
  808. teradataml/data/jsons/uaf/17.20/TD_SINFO.json +58 -0
  809. teradataml/data/jsons/uaf/17.20/TD_SMOOTHMA.json +163 -0
  810. teradataml/data/jsons/uaf/17.20/TD_TRACKINGOP.json +101 -0
  811. teradataml/data/jsons/uaf/17.20/TD_UNDIFF.json +112 -0
  812. teradataml/data/jsons/uaf/17.20/TD_UNNORMALIZE.json +95 -0
  813. teradataml/data/jsons/uaf/17.20/TD_WHITES_GENERAL.json +78 -0
  814. teradataml/data/jsons/uaf/17.20/TD_WINDOWDFFT.json +410 -0
  815. teradataml/data/kmeans_example.json +23 -0
  816. teradataml/data/kmeans_table.csv +10 -0
  817. teradataml/data/kmeans_us_arrests_data.csv +51 -0
  818. teradataml/data/knn_example.json +19 -0
  819. teradataml/data/knnrecommender_example.json +7 -0
  820. teradataml/data/knnrecommenderpredict_example.json +12 -0
  821. teradataml/data/lar_example.json +17 -0
  822. teradataml/data/larpredict_example.json +30 -0
  823. teradataml/data/lc_new_predictors.csv +5 -0
  824. teradataml/data/lc_new_reference.csv +9 -0
  825. teradataml/data/lda_example.json +9 -0
  826. teradataml/data/ldainference_example.json +15 -0
  827. teradataml/data/ldatopicsummary_example.json +9 -0
  828. teradataml/data/levendist_input.csv +13 -0
  829. teradataml/data/levenshteindistance_example.json +10 -0
  830. teradataml/data/linreg_example.json +10 -0
  831. teradataml/data/load_example_data.py +350 -0
  832. teradataml/data/loan_prediction.csv +295 -0
  833. teradataml/data/lungcancer.csv +138 -0
  834. teradataml/data/mappingdata.csv +12 -0
  835. teradataml/data/medical_readings.csv +101 -0
  836. teradataml/data/milk_timeseries.csv +157 -0
  837. teradataml/data/min_max_titanic.csv +4 -0
  838. teradataml/data/minhash_example.json +6 -0
  839. teradataml/data/ml_ratings.csv +7547 -0
  840. teradataml/data/ml_ratings_10.csv +2445 -0
  841. teradataml/data/mobile_data.csv +13 -0
  842. teradataml/data/model1_table.csv +5 -0
  843. teradataml/data/model2_table.csv +5 -0
  844. teradataml/data/models/License_file.txt +1 -0
  845. teradataml/data/models/License_file_empty.txt +0 -0
  846. teradataml/data/models/dataiku_iris_data_ann_thin +0 -0
  847. teradataml/data/models/dr_iris_rf +0 -0
  848. teradataml/data/models/iris_db_dt_model_sklearn.onnx +0 -0
  849. teradataml/data/models/iris_db_dt_model_sklearn_floattensor.onnx +0 -0
  850. teradataml/data/models/iris_db_glm_model.pmml +57 -0
  851. teradataml/data/models/iris_db_xgb_model.pmml +4471 -0
  852. teradataml/data/models/iris_kmeans_model +0 -0
  853. teradataml/data/models/iris_mojo_glm_h2o_model +0 -0
  854. teradataml/data/models/iris_mojo_xgb_h2o_model +0 -0
  855. teradataml/data/modularity_example.json +12 -0
  856. teradataml/data/movavg_example.json +8 -0
  857. teradataml/data/mtx1.csv +7 -0
  858. teradataml/data/mtx2.csv +13 -0
  859. teradataml/data/multi_model_classification.csv +401 -0
  860. teradataml/data/multi_model_regression.csv +401 -0
  861. teradataml/data/mvdfft8.csv +9 -0
  862. teradataml/data/naivebayes_example.json +10 -0
  863. teradataml/data/naivebayespredict_example.json +19 -0
  864. teradataml/data/naivebayestextclassifier2_example.json +7 -0
  865. teradataml/data/naivebayestextclassifier_example.json +8 -0
  866. teradataml/data/naivebayestextclassifierpredict_example.json +32 -0
  867. teradataml/data/name_Find_configure.csv +10 -0
  868. teradataml/data/namedentityfinder_example.json +14 -0
  869. teradataml/data/namedentityfinderevaluator_example.json +10 -0
  870. teradataml/data/namedentityfindertrainer_example.json +6 -0
  871. teradataml/data/nb_iris_input_test.csv +31 -0
  872. teradataml/data/nb_iris_input_train.csv +121 -0
  873. teradataml/data/nbp_iris_model.csv +13 -0
  874. teradataml/data/ner_dict.csv +8 -0
  875. teradataml/data/ner_extractor_text.csv +2 -0
  876. teradataml/data/ner_input_eng.csv +7 -0
  877. teradataml/data/ner_rule.csv +5 -0
  878. teradataml/data/ner_sports_test2.csv +29 -0
  879. teradataml/data/ner_sports_train.csv +501 -0
  880. teradataml/data/nerevaluator_example.json +6 -0
  881. teradataml/data/nerextractor_example.json +18 -0
  882. teradataml/data/nermem_sports_test.csv +18 -0
  883. teradataml/data/nermem_sports_train.csv +51 -0
  884. teradataml/data/nertrainer_example.json +7 -0
  885. teradataml/data/ngrams_example.json +7 -0
  886. teradataml/data/notebooks/__init__.py +0 -0
  887. teradataml/data/notebooks/sqlalchemy/Teradata Vantage Aggregate Functions using SQLAlchemy.ipynb +1455 -0
  888. teradataml/data/notebooks/sqlalchemy/Teradata Vantage Arithmetic Functions Using SQLAlchemy.ipynb +1993 -0
  889. teradataml/data/notebooks/sqlalchemy/Teradata Vantage Bit-Byte Manipulation Functions using SQLAlchemy.ipynb +1492 -0
  890. teradataml/data/notebooks/sqlalchemy/Teradata Vantage Built-in functions using SQLAlchemy.ipynb +536 -0
  891. teradataml/data/notebooks/sqlalchemy/Teradata Vantage Regular Expressions Using SQLAlchemy.ipynb +570 -0
  892. teradataml/data/notebooks/sqlalchemy/Teradata Vantage String Functions Using SQLAlchemy.ipynb +2559 -0
  893. teradataml/data/notebooks/sqlalchemy/Teradata Vantage Window Aggregate Functions using SQLAlchemy.ipynb +2911 -0
  894. teradataml/data/notebooks/sqlalchemy/Using Generic SQLAlchemy ClauseElements teradataml DataFrame assign method.ipynb +698 -0
  895. teradataml/data/notebooks/sqlalchemy/__init__.py +0 -0
  896. teradataml/data/notebooks/sqlalchemy/teradataml filtering using SQLAlchemy ClauseElements.ipynb +784 -0
  897. teradataml/data/npath_example.json +23 -0
  898. teradataml/data/ntree_example.json +14 -0
  899. teradataml/data/numeric_strings.csv +5 -0
  900. teradataml/data/numerics.csv +4 -0
  901. teradataml/data/ocean_buoy.csv +17 -0
  902. teradataml/data/ocean_buoy2.csv +17 -0
  903. teradataml/data/ocean_buoys.csv +28 -0
  904. teradataml/data/ocean_buoys2.csv +10 -0
  905. teradataml/data/ocean_buoys_nonpti.csv +28 -0
  906. teradataml/data/ocean_buoys_seq.csv +29 -0
  907. teradataml/data/onehot_encoder_train.csv +4 -0
  908. teradataml/data/openml_example.json +92 -0
  909. teradataml/data/optional_event_table.csv +4 -0
  910. teradataml/data/orders1.csv +11 -0
  911. teradataml/data/orders1_12.csv +13 -0
  912. teradataml/data/orders_ex.csv +4 -0
  913. teradataml/data/pack_example.json +9 -0
  914. teradataml/data/package_tracking.csv +19 -0
  915. teradataml/data/package_tracking_pti.csv +19 -0
  916. teradataml/data/pagerank_example.json +13 -0
  917. teradataml/data/paragraphs_input.csv +6 -0
  918. teradataml/data/pathanalyzer_example.json +8 -0
  919. teradataml/data/pathgenerator_example.json +8 -0
  920. teradataml/data/patient_profile.csv +101 -0
  921. teradataml/data/pattern_matching_data.csv +11 -0
  922. teradataml/data/payment_fraud_dataset.csv +10001 -0
  923. teradataml/data/peppers.png +0 -0
  924. teradataml/data/phrases.csv +7 -0
  925. teradataml/data/pivot_example.json +9 -0
  926. teradataml/data/pivot_input.csv +22 -0
  927. teradataml/data/playerRating.csv +31 -0
  928. teradataml/data/pos_input.csv +40 -0
  929. teradataml/data/postagger_example.json +7 -0
  930. teradataml/data/posttagger_output.csv +44 -0
  931. teradataml/data/production_data.csv +17 -0
  932. teradataml/data/production_data2.csv +7 -0
  933. teradataml/data/randomsample_example.json +32 -0
  934. teradataml/data/randomwalksample_example.json +9 -0
  935. teradataml/data/rank_table.csv +6 -0
  936. teradataml/data/real_values.csv +14 -0
  937. teradataml/data/ref_mobile_data.csv +4 -0
  938. teradataml/data/ref_mobile_data_dense.csv +2 -0
  939. teradataml/data/ref_url.csv +17 -0
  940. teradataml/data/restaurant_reviews.csv +7 -0
  941. teradataml/data/retail_churn_table.csv +27772 -0
  942. teradataml/data/river_data.csv +145 -0
  943. teradataml/data/roc_example.json +8 -0
  944. teradataml/data/roc_input.csv +101 -0
  945. teradataml/data/rule_inputs.csv +6 -0
  946. teradataml/data/rule_table.csv +2 -0
  947. teradataml/data/sales.csv +7 -0
  948. teradataml/data/sales_transaction.csv +501 -0
  949. teradataml/data/salesdata.csv +342 -0
  950. teradataml/data/sample_cities.csv +3 -0
  951. teradataml/data/sample_shapes.csv +11 -0
  952. teradataml/data/sample_streets.csv +3 -0
  953. teradataml/data/sampling_example.json +16 -0
  954. teradataml/data/sax_example.json +17 -0
  955. teradataml/data/scale_attributes.csv +3 -0
  956. teradataml/data/scale_example.json +74 -0
  957. teradataml/data/scale_housing.csv +11 -0
  958. teradataml/data/scale_housing_test.csv +6 -0
  959. teradataml/data/scale_input_part_sparse.csv +31 -0
  960. teradataml/data/scale_input_partitioned.csv +16 -0
  961. teradataml/data/scale_input_sparse.csv +11 -0
  962. teradataml/data/scale_parameters.csv +3 -0
  963. teradataml/data/scale_stat.csv +11 -0
  964. teradataml/data/scalebypartition_example.json +13 -0
  965. teradataml/data/scalemap_example.json +13 -0
  966. teradataml/data/scalesummary_example.json +12 -0
  967. teradataml/data/score_category.csv +101 -0
  968. teradataml/data/score_summary.csv +4 -0
  969. teradataml/data/script_example.json +10 -0
  970. teradataml/data/scripts/deploy_script.py +84 -0
  971. teradataml/data/scripts/lightgbm/dataset.template +175 -0
  972. teradataml/data/scripts/lightgbm/lightgbm_class_functions.template +264 -0
  973. teradataml/data/scripts/lightgbm/lightgbm_function.template +234 -0
  974. teradataml/data/scripts/lightgbm/lightgbm_sklearn.template +177 -0
  975. teradataml/data/scripts/mapper.R +20 -0
  976. teradataml/data/scripts/mapper.py +16 -0
  977. teradataml/data/scripts/mapper_replace.py +16 -0
  978. teradataml/data/scripts/sklearn/__init__.py +0 -0
  979. teradataml/data/scripts/sklearn/sklearn_fit.py +205 -0
  980. teradataml/data/scripts/sklearn/sklearn_fit_predict.py +148 -0
  981. teradataml/data/scripts/sklearn/sklearn_function.template +144 -0
  982. teradataml/data/scripts/sklearn/sklearn_model_selection_split.py +166 -0
  983. teradataml/data/scripts/sklearn/sklearn_neighbors.py +161 -0
  984. teradataml/data/scripts/sklearn/sklearn_score.py +145 -0
  985. teradataml/data/scripts/sklearn/sklearn_transform.py +327 -0
  986. teradataml/data/sdk/modelops/modelops_spec.json +101737 -0
  987. teradataml/data/seeds.csv +10 -0
  988. teradataml/data/sentenceextractor_example.json +7 -0
  989. teradataml/data/sentiment_extract_input.csv +11 -0
  990. teradataml/data/sentiment_train.csv +16 -0
  991. teradataml/data/sentiment_word.csv +20 -0
  992. teradataml/data/sentiment_word_input.csv +20 -0
  993. teradataml/data/sentimentextractor_example.json +24 -0
  994. teradataml/data/sentimenttrainer_example.json +8 -0
  995. teradataml/data/sequence_table.csv +10 -0
  996. teradataml/data/seriessplitter_example.json +8 -0
  997. teradataml/data/sessionize_example.json +17 -0
  998. teradataml/data/sessionize_table.csv +116 -0
  999. teradataml/data/setop_test1.csv +24 -0
  1000. teradataml/data/setop_test2.csv +22 -0
  1001. teradataml/data/soc_nw_edges.csv +11 -0
  1002. teradataml/data/soc_nw_vertices.csv +8 -0
  1003. teradataml/data/souvenir_timeseries.csv +168 -0
  1004. teradataml/data/sparse_iris_attribute.csv +5 -0
  1005. teradataml/data/sparse_iris_test.csv +121 -0
  1006. teradataml/data/sparse_iris_train.csv +601 -0
  1007. teradataml/data/star1.csv +6 -0
  1008. teradataml/data/star_pivot.csv +8 -0
  1009. teradataml/data/state_transition.csv +5 -0
  1010. teradataml/data/stock_data.csv +53 -0
  1011. teradataml/data/stock_movement.csv +11 -0
  1012. teradataml/data/stock_vol.csv +76 -0
  1013. teradataml/data/stop_words.csv +8 -0
  1014. teradataml/data/store_sales.csv +37 -0
  1015. teradataml/data/stringsimilarity_example.json +8 -0
  1016. teradataml/data/strsimilarity_input.csv +13 -0
  1017. teradataml/data/students.csv +101 -0
  1018. teradataml/data/svm_iris_input_test.csv +121 -0
  1019. teradataml/data/svm_iris_input_train.csv +481 -0
  1020. teradataml/data/svm_iris_model.csv +7 -0
  1021. teradataml/data/svmdense_example.json +10 -0
  1022. teradataml/data/svmdensepredict_example.json +19 -0
  1023. teradataml/data/svmsparse_example.json +8 -0
  1024. teradataml/data/svmsparsepredict_example.json +14 -0
  1025. teradataml/data/svmsparsesummary_example.json +8 -0
  1026. teradataml/data/target_mobile_data.csv +13 -0
  1027. teradataml/data/target_mobile_data_dense.csv +5 -0
  1028. teradataml/data/target_udt_data.csv +8 -0
  1029. teradataml/data/tdnerextractor_example.json +14 -0
  1030. teradataml/data/templatedata.csv +1201 -0
  1031. teradataml/data/templates/open_source_ml.json +11 -0
  1032. teradataml/data/teradata_icon.ico +0 -0
  1033. teradataml/data/teradataml_example.json +1473 -0
  1034. teradataml/data/test_classification.csv +101 -0
  1035. teradataml/data/test_loan_prediction.csv +53 -0
  1036. teradataml/data/test_pacf_12.csv +37 -0
  1037. teradataml/data/test_prediction.csv +101 -0
  1038. teradataml/data/test_regression.csv +101 -0
  1039. teradataml/data/test_river2.csv +109 -0
  1040. teradataml/data/text_inputs.csv +6 -0
  1041. teradataml/data/textchunker_example.json +8 -0
  1042. teradataml/data/textclassifier_example.json +7 -0
  1043. teradataml/data/textclassifier_input.csv +7 -0
  1044. teradataml/data/textclassifiertrainer_example.json +7 -0
  1045. teradataml/data/textmorph_example.json +11 -0
  1046. teradataml/data/textparser_example.json +15 -0
  1047. teradataml/data/texttagger_example.json +12 -0
  1048. teradataml/data/texttokenizer_example.json +7 -0
  1049. teradataml/data/texttrainer_input.csv +11 -0
  1050. teradataml/data/tf_example.json +7 -0
  1051. teradataml/data/tfidf_example.json +14 -0
  1052. teradataml/data/tfidf_input1.csv +201 -0
  1053. teradataml/data/tfidf_train.csv +6 -0
  1054. teradataml/data/time_table1.csv +535 -0
  1055. teradataml/data/time_table2.csv +14 -0
  1056. teradataml/data/timeseriesdata.csv +1601 -0
  1057. teradataml/data/timeseriesdatasetsd4.csv +105 -0
  1058. teradataml/data/timestamp_data.csv +4 -0
  1059. teradataml/data/titanic.csv +892 -0
  1060. teradataml/data/titanic_dataset_unpivoted.csv +19 -0
  1061. teradataml/data/to_num_data.csv +4 -0
  1062. teradataml/data/tochar_data.csv +5 -0
  1063. teradataml/data/token_table.csv +696 -0
  1064. teradataml/data/train_multiclass.csv +101 -0
  1065. teradataml/data/train_regression.csv +101 -0
  1066. teradataml/data/train_regression_multiple_labels.csv +101 -0
  1067. teradataml/data/train_tracking.csv +28 -0
  1068. teradataml/data/trans_dense.csv +16 -0
  1069. teradataml/data/trans_sparse.csv +55 -0
  1070. teradataml/data/transformation_table.csv +6 -0
  1071. teradataml/data/transformation_table_new.csv +2 -0
  1072. teradataml/data/tv_spots.csv +16 -0
  1073. teradataml/data/twod_climate_data.csv +117 -0
  1074. teradataml/data/uaf_example.json +529 -0
  1075. teradataml/data/univariatestatistics_example.json +9 -0
  1076. teradataml/data/unpack_example.json +10 -0
  1077. teradataml/data/unpivot_example.json +25 -0
  1078. teradataml/data/unpivot_input.csv +8 -0
  1079. teradataml/data/url_data.csv +10 -0
  1080. teradataml/data/us_air_pass.csv +37 -0
  1081. teradataml/data/us_population.csv +624 -0
  1082. teradataml/data/us_states_shapes.csv +52 -0
  1083. teradataml/data/varmax_example.json +18 -0
  1084. teradataml/data/vectordistance_example.json +30 -0
  1085. teradataml/data/ville_climatedata.csv +121 -0
  1086. teradataml/data/ville_tempdata.csv +12 -0
  1087. teradataml/data/ville_tempdata1.csv +12 -0
  1088. teradataml/data/ville_temperature.csv +11 -0
  1089. teradataml/data/waveletTable.csv +1605 -0
  1090. teradataml/data/waveletTable2.csv +1605 -0
  1091. teradataml/data/weightedmovavg_example.json +9 -0
  1092. teradataml/data/wft_testing.csv +5 -0
  1093. teradataml/data/windowdfft.csv +16 -0
  1094. teradataml/data/wine_data.csv +1600 -0
  1095. teradataml/data/word_embed_input_table1.csv +6 -0
  1096. teradataml/data/word_embed_input_table2.csv +5 -0
  1097. teradataml/data/word_embed_model.csv +23 -0
  1098. teradataml/data/words_input.csv +13 -0
  1099. teradataml/data/xconvolve_complex_left.csv +6 -0
  1100. teradataml/data/xconvolve_complex_leftmulti.csv +6 -0
  1101. teradataml/data/xgboost_example.json +36 -0
  1102. teradataml/data/xgboostpredict_example.json +32 -0
  1103. teradataml/data/ztest_example.json +16 -0
  1104. teradataml/dataframe/__init__.py +0 -0
  1105. teradataml/dataframe/copy_to.py +2446 -0
  1106. teradataml/dataframe/data_transfer.py +2840 -0
  1107. teradataml/dataframe/dataframe.py +20908 -0
  1108. teradataml/dataframe/dataframe_utils.py +2114 -0
  1109. teradataml/dataframe/fastload.py +794 -0
  1110. teradataml/dataframe/functions.py +2110 -0
  1111. teradataml/dataframe/indexer.py +424 -0
  1112. teradataml/dataframe/row.py +160 -0
  1113. teradataml/dataframe/setop.py +1171 -0
  1114. teradataml/dataframe/sql.py +10904 -0
  1115. teradataml/dataframe/sql_function_parameters.py +440 -0
  1116. teradataml/dataframe/sql_functions.py +652 -0
  1117. teradataml/dataframe/sql_interfaces.py +220 -0
  1118. teradataml/dataframe/vantage_function_types.py +675 -0
  1119. teradataml/dataframe/window.py +694 -0
  1120. teradataml/dbutils/__init__.py +3 -0
  1121. teradataml/dbutils/dbutils.py +2871 -0
  1122. teradataml/dbutils/filemgr.py +318 -0
  1123. teradataml/gen_ai/__init__.py +2 -0
  1124. teradataml/gen_ai/convAI.py +473 -0
  1125. teradataml/geospatial/__init__.py +4 -0
  1126. teradataml/geospatial/geodataframe.py +1105 -0
  1127. teradataml/geospatial/geodataframecolumn.py +392 -0
  1128. teradataml/geospatial/geometry_types.py +926 -0
  1129. teradataml/hyperparameter_tuner/__init__.py +1 -0
  1130. teradataml/hyperparameter_tuner/optimizer.py +4115 -0
  1131. teradataml/hyperparameter_tuner/utils.py +303 -0
  1132. teradataml/lib/__init__.py +0 -0
  1133. teradataml/lib/aed_0_1.dll +0 -0
  1134. teradataml/lib/libaed_0_1.dylib +0 -0
  1135. teradataml/lib/libaed_0_1.so +0 -0
  1136. teradataml/lib/libaed_0_1_aarch64.so +0 -0
  1137. teradataml/lib/libaed_0_1_ppc64le.so +0 -0
  1138. teradataml/opensource/__init__.py +1 -0
  1139. teradataml/opensource/_base.py +1321 -0
  1140. teradataml/opensource/_class.py +464 -0
  1141. teradataml/opensource/_constants.py +61 -0
  1142. teradataml/opensource/_lightgbm.py +949 -0
  1143. teradataml/opensource/_sklearn.py +1008 -0
  1144. teradataml/opensource/_wrapper_utils.py +267 -0
  1145. teradataml/options/__init__.py +148 -0
  1146. teradataml/options/configure.py +489 -0
  1147. teradataml/options/display.py +187 -0
  1148. teradataml/plot/__init__.py +3 -0
  1149. teradataml/plot/axis.py +1427 -0
  1150. teradataml/plot/constants.py +15 -0
  1151. teradataml/plot/figure.py +431 -0
  1152. teradataml/plot/plot.py +810 -0
  1153. teradataml/plot/query_generator.py +83 -0
  1154. teradataml/plot/subplot.py +216 -0
  1155. teradataml/scriptmgmt/UserEnv.py +4273 -0
  1156. teradataml/scriptmgmt/__init__.py +3 -0
  1157. teradataml/scriptmgmt/lls_utils.py +2157 -0
  1158. teradataml/sdk/README.md +79 -0
  1159. teradataml/sdk/__init__.py +4 -0
  1160. teradataml/sdk/_auth_modes.py +422 -0
  1161. teradataml/sdk/_func_params.py +487 -0
  1162. teradataml/sdk/_json_parser.py +453 -0
  1163. teradataml/sdk/_openapi_spec_constants.py +249 -0
  1164. teradataml/sdk/_utils.py +236 -0
  1165. teradataml/sdk/api_client.py +900 -0
  1166. teradataml/sdk/constants.py +62 -0
  1167. teradataml/sdk/modelops/__init__.py +98 -0
  1168. teradataml/sdk/modelops/_client.py +409 -0
  1169. teradataml/sdk/modelops/_constants.py +304 -0
  1170. teradataml/sdk/modelops/models.py +2308 -0
  1171. teradataml/sdk/spinner.py +107 -0
  1172. teradataml/series/__init__.py +0 -0
  1173. teradataml/series/series.py +537 -0
  1174. teradataml/series/series_utils.py +71 -0
  1175. teradataml/store/__init__.py +12 -0
  1176. teradataml/store/feature_store/__init__.py +0 -0
  1177. teradataml/store/feature_store/constants.py +658 -0
  1178. teradataml/store/feature_store/feature_store.py +4814 -0
  1179. teradataml/store/feature_store/mind_map.py +639 -0
  1180. teradataml/store/feature_store/models.py +7330 -0
  1181. teradataml/store/feature_store/utils.py +390 -0
  1182. teradataml/table_operators/Apply.py +979 -0
  1183. teradataml/table_operators/Script.py +1739 -0
  1184. teradataml/table_operators/TableOperator.py +1343 -0
  1185. teradataml/table_operators/__init__.py +2 -0
  1186. teradataml/table_operators/apply_query_generator.py +262 -0
  1187. teradataml/table_operators/query_generator.py +493 -0
  1188. teradataml/table_operators/table_operator_query_generator.py +462 -0
  1189. teradataml/table_operators/table_operator_util.py +726 -0
  1190. teradataml/table_operators/templates/dataframe_apply.template +184 -0
  1191. teradataml/table_operators/templates/dataframe_map.template +176 -0
  1192. teradataml/table_operators/templates/dataframe_register.template +73 -0
  1193. teradataml/table_operators/templates/dataframe_udf.template +67 -0
  1194. teradataml/table_operators/templates/script_executor.template +170 -0
  1195. teradataml/telemetry_utils/__init__.py +0 -0
  1196. teradataml/telemetry_utils/queryband.py +53 -0
  1197. teradataml/utils/__init__.py +0 -0
  1198. teradataml/utils/docstring.py +527 -0
  1199. teradataml/utils/dtypes.py +943 -0
  1200. teradataml/utils/internal_buffer.py +122 -0
  1201. teradataml/utils/print_versions.py +206 -0
  1202. teradataml/utils/utils.py +451 -0
  1203. teradataml/utils/validators.py +3305 -0
  1204. teradataml-20.0.0.8.dist-info/METADATA +2804 -0
  1205. teradataml-20.0.0.8.dist-info/RECORD +1208 -0
  1206. teradataml-20.0.0.8.dist-info/WHEEL +5 -0
  1207. teradataml-20.0.0.8.dist-info/top_level.txt +1 -0
  1208. teradataml-20.0.0.8.dist-info/zip-safe +1 -0
@@ -0,0 +1,2416 @@
1
+ """
2
+ Unpublished work.
3
+ Copyright (c) 2021 by Teradata Corporation. All rights reserved.
4
+ TERADATA CORPORATION CONFIDENTIAL AND TRADE SECRET
5
+
6
+ Primary Owner: pradeep.garre@teradata.com
7
+ Secondary Owner: PankajVinod.Purandare@teradata.com
8
+
9
+ This file implements several classes which executes analytic functions such as
10
+ SQLE functions and UAF functions on Vantage.
11
+ File implements classes for following:
12
+ * _AnlyticFunctionExecutor
13
+ * _SQLEFunctionExecutor
14
+ * _TableOperatorExecutor
15
+ * _BYOMFunctionExecutor
16
+ """
17
+ from collections import OrderedDict
18
+ from teradataml.options.configure import configure
19
+ from teradataml.common.constants import TeradataConstants, TeradataAnalyticFunctionTypes
20
+ from teradataml.analytics.json_parser import PartitionKind
21
+ from teradataml.analytics.analytic_query_generator import AnalyticQueryGenerator, UAFQueryGenerator, StoredProcedureQueryGenerator
22
+ from teradataml.analytics.json_parser.json_store import _JsonStore
23
+ from teradataml.analytics.utils import FuncSpecialCaseHandler
24
+ from teradataml.options.display import display
25
+ from teradataml.common.exceptions import TeradataMlException
26
+ from teradataml.common.garbagecollector import GarbageCollector
27
+ from teradataml.common.messages import Messages, MessageCodes
28
+ from teradataml.common.wrapper_utils import AnalyticsWrapperUtils
29
+ from teradataml.common.utils import UtilFuncs
30
+ from teradataml.context.context import _get_context_temp_databasename
31
+ from teradataml.dataframe.dataframe import in_schema, DataFrame
32
+ from teradataml.dbutils.dbutils import _create_table, db_drop_table, list_td_reserved_keywords
33
+ from teradatasqlalchemy.types import *
34
+ from teradataml.table_operators.table_operator_query_generator import TableOperatorQueryGenerator
35
+ from teradataml.telemetry_utils.queryband import collect_queryband
36
+ from teradataml.utils.dtypes import _ListOf
37
+ from teradataml.utils.validators import _Validators
38
+
39
+ import time
40
+
41
+
42
+ class _AnlyticFunctionExecutor:
43
+ """
44
+ Class to hold the common attributes to execute analytic function.
45
+ """
46
+ def __init__(self, func_name, func_type):
47
+ """
48
+ DESCRIPTION:
49
+ Constructor for the class.
50
+
51
+ PARAMETERS:
52
+ func_name:
53
+ Required Argument.
54
+ Specifies the name of the analytic function, which is exposed to user.
55
+ Types: str
56
+
57
+ func_type:
58
+ Required Argument.
59
+ Specifies whether the argument "func_name" is SQLE, UAF or Table Operator function.
60
+ Types: str
61
+
62
+ RAISES:
63
+ TypeError OR ValueError OR TeradataMlException
64
+ """
65
+ self.func_name = func_name
66
+ self._func_type = func_type
67
+
68
+ # Input arguments passed, i.e., data members of the dynamic class to be generated.
69
+ self._dyn_cls_data_members = {}
70
+
71
+ # Output table arguments list
72
+ self._func_output_args_sql_names = []
73
+ self._func_output_args = []
74
+ self._func_output_table_type = []
75
+
76
+ # Generate lists for rest of the function arguments
77
+ self._func_other_arg_sql_names = []
78
+ self._func_other_args = []
79
+ self._func_other_arg_json_datatypes = []
80
+ self.sqlmr_query = None
81
+ self._function_output_table_map = {}
82
+ self._sql_specific_attributes = {}
83
+ self._metadata = _JsonStore.get_function_metadata(self.func_name)
84
+ self._mlresults = []
85
+ self._awu = AnalyticsWrapperUtils()
86
+ self.__build_time = None
87
+ self._is_argument_dataframe = lambda object: type(object).__name__ == "DataFrame"
88
+
89
+ # Initialize FuncSpecialCaseHandler.
90
+ self._spl_func_obj = FuncSpecialCaseHandler(self.func_name)
91
+
92
+ # Initialize database object type.
93
+ self.db_object_type = TeradataConstants.TERADATA_VIEW
94
+
95
+ @staticmethod
96
+ def _validate_analytic_function_argument(func_arg_name, func_arg_value, argument, additional_valid_types=None):
97
+ """
98
+ DESCRIPTION:
99
+ Function to validate the analytic function arguments. This function does
100
+ the following validations
101
+ * Checks for missing mandatory argument.
102
+ * Checks for the expected type for argument.
103
+ * Checks for the expected values for argument.
104
+ * Checks for empty value.
105
+
106
+ PARAMETERS:
107
+ func_arg_name:
108
+ Required Argument.
109
+ Specifies the name of the argument.
110
+ Type: str
111
+
112
+ func_arg_value:
113
+ Required Argument.
114
+ Specifies the value passed to argument 'func_arg_name' in analytic function.
115
+ Type: str OR float OR int OR list
116
+
117
+ argument:
118
+ Required Argument.
119
+ Specifies the argument object (_AnlyArgumentBase) containing argument
120
+ information to be validated.
121
+ Type: _AnlyFuncArgument OR _AnlyFuncInput
122
+
123
+ RETURNS:
124
+ None
125
+
126
+ RAISES:
127
+ ValueError OR TypeError
128
+
129
+ EXAMPLES:
130
+ self._validate_analytic_function_argument("arg", 1, metadata.arguments)
131
+ """
132
+ # Make sure that a non-NULL value has been supplied for all mandatory arguments
133
+ py_types = argument.get_python_type()
134
+ if additional_valid_types:
135
+ if isinstance(additional_valid_types, tuple):
136
+ py_types = (py_types, ) + additional_valid_types
137
+ else:
138
+ py_types = (py_types, additional_valid_types)
139
+
140
+
141
+ argument_info = [func_arg_name,
142
+ func_arg_value,
143
+ not argument.is_required(),
144
+ py_types
145
+ ]
146
+ _Validators._validate_missing_required_arguments([argument_info])
147
+
148
+ # Validate for empty string if argument accepts a column name for either input or output.
149
+ if not argument.is_empty_value_allowed() or argument.is_output_column():
150
+ argument_info.append(True)
151
+
152
+ # Validate the permitted values.
153
+ if argument.get_permitted_values():
154
+ if len(argument_info) == 4:
155
+ argument_info.append(True)
156
+ argument_info.append(argument.get_permitted_values())
157
+
158
+ # Validate the function arguments.
159
+ _Validators._validate_function_arguments([argument_info])
160
+
161
+ @collect_queryband(attr="func_name")
162
+ def _execute_query(self, persist=False, volatile=False, display_table_name=True):
163
+ """
164
+ DESCRIPTION:
165
+ Function to execute query on Vantage.
166
+
167
+ PARAMETERS:
168
+ persist:
169
+ Optional Argument.
170
+ Specifies whether to persist the result in a table or not.
171
+ Default Value: False
172
+ Type: bool
173
+
174
+ volatile:
175
+ Optional Argument.
176
+ Specifies whether to create a volatile table or not.
177
+ Default Value: False
178
+ Type: bool
179
+
180
+ display_table_name:
181
+ Optional Argument.
182
+ Specifies whether to display the table names or not when
183
+ persist is set to True.
184
+ Default Value: True
185
+ Type: bool
186
+
187
+ RETURNS:
188
+ None
189
+
190
+ RAISES:
191
+ None
192
+
193
+ EXAMPLES:
194
+ self._execute_query()
195
+ """
196
+ # Generate STDOUT table name and add it to the output table list.
197
+ func_params = self._get_generate_temp_table_params(persist=persist, volatile=volatile)
198
+ sqlmr_stdout_temp_tablename = UtilFuncs._generate_temp_table_name(**func_params)
199
+
200
+ __execute = UtilFuncs._create_table
201
+ __execute_params = (sqlmr_stdout_temp_tablename, self.sqlmr_query, volatile)
202
+ if func_params["table_type"] == TeradataConstants.TERADATA_VIEW:
203
+ __execute = UtilFuncs._create_view
204
+ __execute_params = (sqlmr_stdout_temp_tablename, self.sqlmr_query)
205
+
206
+ try:
207
+ __execute(*__execute_params)
208
+
209
+ # List stores names of the functions that will produce "output" attribute
210
+ # when more than one results are expected.
211
+ output_attr_functions = ["BincodeFit", "ChiSq", "PolynomialFeaturesFit",
212
+ "RowNormalizeFit", "ScaleFit", "SimpleImputeFit"]
213
+
214
+ # Store the result table in map.
215
+ if self.func_name in output_attr_functions:
216
+ self._function_output_table_map["output"] = sqlmr_stdout_temp_tablename
217
+ else:
218
+ self._function_output_table_map["result"] = sqlmr_stdout_temp_tablename
219
+
220
+ # Print the table/view names if display_table_name is set to True.
221
+ if persist and display_table_name:
222
+ # SQL is executed. So, print the table/view names.
223
+ for output_attribute, table_name in self._function_output_table_map.items():
224
+ print("{} data stored in table '{}'".format(output_attribute, table_name))
225
+
226
+ except Exception as emsg:
227
+ raise TeradataMlException(Messages.get_message(MessageCodes.TDMLDF_EXEC_SQL_FAILED, str(emsg)),
228
+ MessageCodes.TDMLDF_EXEC_SQL_FAILED)
229
+
230
+ def _get_generate_temp_table_params(self, persist=False, volatile=False):
231
+ """
232
+ DESCRIPTION:
233
+ Function to get the required parameters to create either table or view.
234
+ When function has output table arguments or argument persist is set to True,
235
+ then function returns parameters to create table otherwise returns parameters
236
+ to create view. If persist is set to True or volatile is set to True, in such cases,
237
+ tables created are not GC'ed.
238
+
239
+ PARAMETERS:
240
+ persist:
241
+ Optional Argument.
242
+ Specifies whether to persist the output table or not.
243
+ When set to True, output tables created are not garbage collected
244
+ at the end of the session, otherwise they are garbage collected.
245
+ Default Value: False
246
+ Types: bool
247
+
248
+ volatile:
249
+ Optional Argument.
250
+ Specifies whether to create the output table as volatile table or not.
251
+ When set to True, output tables created are garbage collected
252
+ at the end of the session, otherwise they are not garbage collected.
253
+ Default Value: False
254
+ Types: bool
255
+
256
+ RETURNS:
257
+ dict
258
+
259
+ RAISES:
260
+ None
261
+
262
+ EXAMPLES:
263
+ self._get_generate_temp_table_params(True, True)
264
+ """
265
+ use_default_database = True
266
+ prefix = "td_sqlmr_out_"
267
+ gc_on_quit = True
268
+
269
+ # If result is to be persisted or if the table is a volaile table then,
270
+ # it must not be Garbage collected.
271
+ if persist or volatile:
272
+ gc_on_quit = False
273
+ prefix = "td_sqlmr_{}_out_".format("persist" if persist else "volatile")
274
+ use_default_database = False if volatile else True
275
+
276
+ return {"use_default_database": use_default_database,
277
+ "table_type": self.db_object_type,
278
+ "prefix": prefix,
279
+ "gc_on_quit": gc_on_quit}
280
+
281
+ def _process_output_argument(self, persist=False, volatile=False, **kwargs):
282
+ """
283
+ DESCRIPTION:
284
+ Function to process output argument(s) of analytic function.
285
+
286
+ PARAMETERS:
287
+ persist:
288
+ Optional Argument.
289
+ Specifies whether to persist the output table or not.
290
+ When session is disconnected, if function is executed with persist
291
+ set to False, then output tables are removed.
292
+ When set to True, output tables created are not garbage collected
293
+ at the end of the session, otherwise they are garbage collected.
294
+ Default Value: False
295
+ Types: bool
296
+
297
+ volatile:
298
+ Optional Argument.
299
+ Specifies whether to create the output table as volatile table or not.
300
+ When set to True, output tables created are garbage collected
301
+ at the end of the session, otherwise they are not garbage collected.
302
+ Default Value: False
303
+ Types: bool
304
+
305
+ kwargs:
306
+ Specifies the keyword arguments passed to a function.
307
+
308
+ RETURNS:
309
+ None.
310
+
311
+ RAISES:
312
+ None.
313
+
314
+ EXAMPLES:
315
+ self._process_output_argument()
316
+ """
317
+ # Process the output_tables argument(s) of the metadata.
318
+ for output_argument in self._metadata.output_tables:
319
+ lang_name = output_argument.get_lang_name()
320
+
321
+ # Generate the name of the table.
322
+ func_params = self._get_generate_temp_table_params(persist=persist, volatile=volatile)
323
+ temp_table_name = UtilFuncs._generate_temp_table_name(**func_params)
324
+
325
+ # By default, populate the output table lists irrespective of 'is_required'. However,
326
+ # if the output table has a dependent argument, then check for the dependent argument
327
+ # value and decide whether to populate output table lists or not.
328
+ populate_output_tables = True
329
+ dependent_argument = output_argument.get_is_required_dependent_argument()
330
+ if dependent_argument is not None:
331
+ # Dependent argument can be input_tables or arguments or output_tables.
332
+ # Get the analytic function arguments based on the argument type and
333
+ # check whether dependenncy is satisfied or not.
334
+ for arg in getattr(self._metadata, dependent_argument.type):
335
+ if arg.get_sql_name() == dependent_argument.sql_name:
336
+ lang_name = arg.get_lang_name()
337
+ lang_name_val = kwargs.get(lang_name)
338
+ if not dependent_argument.is_required(lang_name_val):
339
+ populate_output_tables = False
340
+ break
341
+
342
+ if populate_output_tables:
343
+ self._func_output_args_sql_names.append(output_argument.get_sql_name())
344
+ self._func_output_args.append(temp_table_name)
345
+ self._function_output_table_map[lang_name] = temp_table_name
346
+
347
+ def _get_column_name_from_feature(self, obj):
348
+ # Extract the associated column name from Feature.
349
+ from teradataml.store.feature_store.feature_store import Feature
350
+ if isinstance(obj, Feature):
351
+ return obj.column_name
352
+
353
+ if isinstance(obj, list):
354
+ return [self._get_column_name_from_feature(col) for col in obj]
355
+
356
+ return obj
357
+
358
+ def _process_other_argument(self, **kwargs):
359
+ """
360
+ DESCRIPTION:
361
+ Function to process other arguments.
362
+
363
+ PARAMETERS:
364
+ kwargs:
365
+ Specifies the keyword arguments passed to a function.
366
+
367
+ RETURNS:
368
+ None.
369
+
370
+ RAISES:
371
+ ValueError OR TypeError OR TeradataMlException.
372
+
373
+ EXAMPLES:
374
+ self._process_other_arguments(arg1="string", arg2="db", arg3=2)
375
+ """
376
+ sequence_input_by_list = []
377
+
378
+ # Before populating the corresponding lists, make sure to empty those so
379
+ # duplicates won't be populated even if analytic function execution happens twice.
380
+ self._func_other_arg_sql_names = []
381
+ self._func_other_args = []
382
+ self._func_other_arg_json_datatypes = []
383
+
384
+ # Let's process formula argument.
385
+ if len(self._metadata.formula_args) > 0:
386
+ formula = kwargs.pop("formula", None)
387
+
388
+ # If formula is passed, process formula argument,
389
+ # else process components of formula individually as a
390
+ # part of normal function argument processing.
391
+ formula_comp_provided = False
392
+ formula_comp_args = []
393
+ if formula is not None:
394
+ _Validators._validate_function_arguments([["formula", formula, True, str, True]])
395
+ input_data = kwargs.get(self._metadata.formula_args[0].get_target_table_lang_name())
396
+ formula_obj = AnalyticsWrapperUtils()._validate_formula_notation(formula, input_data, "formula")
397
+
398
+ for formula_arg_component in self._metadata.formula_args:
399
+ # Check if this formula argument component is separately provided
400
+ # along with 'formula'. If so, raise error.
401
+ formula_arg_value = kwargs.get(formula_arg_component.get_lang_name(), None)
402
+ formula_comp_args.append(formula_arg_component.get_lang_name())
403
+ if formula_arg_value is not None or formula_comp_provided:
404
+ formula_comp_provided = True
405
+ elif formula is not None:
406
+ # Processing dependent component of formula.
407
+ if formula_arg_component.get_r_order_number() == 0:
408
+ __response_column = formula_obj._get_dependent_vars()
409
+ if len(__response_column) > 0:
410
+ kwargs[formula_arg_component.get_lang_name()] = __response_column
411
+
412
+ # Processing non-dependent components of formula.
413
+ # Non-dependent components of formula can consist columns of either all, numeric
414
+ # or categorical type.
415
+ else:
416
+ if formula_arg_component.get_r_order_number() == -1:
417
+ allowed_types_list = formula_arg_component.get_allowed_type_groups()
418
+ json_to_python_type_map = {"NUMERIC": "numerical",
419
+ "NUMERICAL": "numerical"
420
+ }
421
+ col_data_type = json_to_python_type_map.get(allowed_types_list[0], "all")
422
+ elif formula_arg_component.get_r_order_number() == -2:
423
+ col_data_type = "categorical"
424
+
425
+ __columns = AnalyticsWrapperUtils()._get_columns_by_type(formula_obj,
426
+ input_data,
427
+ col_data_type)
428
+ if len(__columns) > 0:
429
+ kwargs[formula_arg_component.get_lang_name()] = __columns
430
+ # Pass dummy value to validator if any of the formula component argument is provided.
431
+ # Else pass None.
432
+ _Validators._validate_mutually_exclusive_arguments(formula, "formula",
433
+ 1 if formula_comp_provided else None,
434
+ formula_comp_args)
435
+
436
+ # Let's process all other arguments.
437
+ for argument in self._metadata.arguments:
438
+ # If 'regexMatch' field is True in the JSON, extract all the
439
+ # arguments which follows the regex pattern specified in 'name'
440
+ # and 'rName' field.
441
+ if argument.regex_match():
442
+ m_name = argument.match_name()
443
+ a_name = argument.get_lang_name()
444
+
445
+ arg_names = argument.get_regex_matched_arguments(a_name,
446
+ **kwargs)
447
+ # If matchName is None, the SQL names remain the same as the
448
+ # Python names. Otherwise, the SQL names are replaced with
449
+ # those whose sql_name starts with the specified matching name.
450
+ if not m_name:
451
+ sql_names = arg_names
452
+ else:
453
+ sql_names = argument.get_regex_sql_name(argument.get_sql_name(),
454
+ m_name,
455
+ arg_names)
456
+
457
+ for a_name, s_name in zip(arg_names, sql_names):
458
+ arg_value = kwargs.get(a_name)
459
+ seq_inp_by = self._process_other_arguments_and_get_sequence_input_by_arg(
460
+ argument, a_name, s_name, arg_value, **kwargs)
461
+ if seq_inp_by:
462
+ sequence_input_by_list.append(seq_inp_by)
463
+ else:
464
+ sql_name = argument.get_sql_name()
465
+ arg_name = argument.get_lang_name()
466
+ arg_value = kwargs.get(arg_name)
467
+
468
+ seq_inp_by = self._process_other_arguments_and_get_sequence_input_by_arg(
469
+ argument, arg_name, sql_name, arg_value, **kwargs)
470
+
471
+ if seq_inp_by:
472
+ sequence_input_by_list.append(seq_inp_by)
473
+
474
+ if sequence_input_by_list:
475
+ self._func_other_arg_sql_names.append("SequenceInputBy")
476
+ sequence_input_by_arg_value = UtilFuncs._teradata_collapse_arglist(sequence_input_by_list, "'")
477
+ self._func_other_args.append(sequence_input_by_arg_value)
478
+ self._func_other_arg_json_datatypes.append("STRING")
479
+ self._sql_specific_attributes["SequenceInputBy"] = sequence_input_by_arg_value
480
+
481
+ def _process_other_arguments_and_get_sequence_input_by_arg(self, argument, arg_name, sql_name, arg_value, **kwargs):
482
+ """
483
+ DESCRIPTION:
484
+ Function to process the arguments on below checks and get the other arguments.
485
+ This function does the following:
486
+ * Checks the required arguments are passed or not.
487
+ * Checks the type of the arguments are expected or not.
488
+ * If argument accepts only specified values, function checks whether
489
+ the value passed is in the specified values or not.
490
+ * If all the checks pass, it then populates the corresponding lists
491
+ with respective values.
492
+
493
+ PARAMETERS:
494
+ argument:
495
+ Required Argument.
496
+ Specifies information about analytic function argument.
497
+ Types: teradataml.analytics.json_parser.analytic_functions_argument._AnlyFuncArgument
498
+
499
+ arg_name:
500
+ Required Argument.
501
+ Specifies python name of argument.
502
+ Types: str
503
+
504
+ sql_name:
505
+ Required Argument.
506
+ Specifies SQL name of argument.
507
+ Types: str
508
+
509
+ arg_value:
510
+ Required Argument.
511
+ Specifies value of argument.
512
+ Types: datatype provided in the JSON
513
+
514
+ kwargs:
515
+ Specifies the keyword arguments passed to a function.
516
+
517
+ RETURNS:
518
+ str
519
+
520
+ RAISES:
521
+ ValueError OR TypeError OR TeradataMlException.
522
+
523
+ EXAMPLES:
524
+ arg = _AnlyFuncArgument(sql_name="sql_name_param",
525
+ is_required=True,
526
+ sql_description="sql_description_param",
527
+ lang_description="lang_description_param",
528
+ lang_name="lang_name_param",
529
+ use_in_r=False,
530
+ r_order_num=5,
531
+ datatype="int")
532
+ self._process_other_arguments_and_get_sequence_input_by_arg(
533
+ arg, "lang_name_param", "sql_name_param", 2,
534
+ const_num=2, cost_min_len=20)
535
+ """
536
+ seq_inp_by = None
537
+
538
+ # Set the "argument".
539
+ self._spl_func_obj.set_arg_name(argument)
540
+ # Let's get spl handler if function requires.
541
+ special_case_handler = self._spl_func_obj._get_handle()
542
+
543
+ self._validate_analytic_function_argument(arg_name, arg_value, argument)
544
+
545
+ # Extract column names if it is a Feature.
546
+ arg_value = self._get_column_name_from_feature(arg_value)
547
+
548
+ # Perform the checks which are specific to argument(_AnlyFuncArgument) type.
549
+ # Check lower bound and upper bound for number type of arguments.
550
+ if isinstance(arg_value, (int, float)):
551
+ lower_bound_inclusive = argument.get_lower_bound_type() == "INCLUSIVE"
552
+ upper_bound_inclusive = argument.get_upper_bound_type() == "INCLUSIVE"
553
+ _Validators._validate_argument_range(arg_value,
554
+ arg_name,
555
+ lbound=argument.get_lower_bound(),
556
+ ubound=argument.get_upper_bound(),
557
+ lbound_inclusive=lower_bound_inclusive,
558
+ ubound_inclusive=upper_bound_inclusive)
559
+
560
+ if argument.is_column_argument() and not argument.get_target_table():
561
+ raise TeradataMlException(
562
+ Messages.get_message(MessageCodes.INVALID_JSON, "{}.json".format(self._metadata.sql_function_name),
563
+ "Argument '{}' is specified as column argument but "
564
+ "is Target table is not specified".format(sql_name)), MessageCodes.INVALID_JSON)
565
+
566
+ if argument.is_column_argument() and argument.get_target_table():
567
+
568
+ target_table_argument_name = argument.get_target_table_lang_name()
569
+ dataframe = kwargs.get(target_table_argument_name)
570
+ # Input table can be an object of MLE Functions too.
571
+ if not self._is_argument_dataframe(dataframe) and dataframe is not None:
572
+ dataframe = dataframe._mlresults[0]
573
+
574
+ # Validate column is existed or not in the table.
575
+ _Validators._validate_dataframe_has_argument_columns(
576
+ arg_value, arg_name, dataframe, target_table_argument_name, case_insensitive=True)
577
+
578
+ # Append square brackets for column range when function
579
+ # does not require special case handler.
580
+ arg_value = self._spl_func_obj._add_square_bracket(arg_value)
581
+
582
+ # Check if there are columns with non-ASCII characters.
583
+ if UtilFuncs._is_non_ascii(arg_value):
584
+ arg_value = UtilFuncs._teradata_quote_arg(arg_value, "\"", False)
585
+ # Handling special case for Teradata reserved keywords or column names with spaces.
586
+ # If argument is a string or list of strings, then add quotes to the string.
587
+ elif arg_name not in ["partition_columns"] and ( \
588
+ UtilFuncs._contains_space(arg_value) or list_td_reserved_keywords(arg_value)):
589
+ arg_value = UtilFuncs._teradata_quote_arg(arg_value, "\"", False)
590
+
591
+ # SequenceInputBy arguments require special processing.
592
+ if 500 <= argument.get_r_order_number() <= 510:
593
+
594
+ quoted_value = UtilFuncs._teradata_collapse_arglist(arg_value, "")
595
+ seq_inp_by = "{}:{}".format(sql_name, quoted_value)
596
+ else:
597
+
598
+ if arg_value is not None and arg_value != argument.get_default_value():
599
+
600
+ # Specific type of arguments required to be passed in a single quote.
601
+ # Append quote if argument requires it.
602
+
603
+ # Handle special cases for arg_values based on function handler.
604
+ arg_value = special_case_handler(arg_value, self._quote_collapse_other_args) \
605
+ if special_case_handler is not None \
606
+ else self._quote_collapse_other_args(argument, arg_value)
607
+
608
+ self._func_other_arg_sql_names.append(sql_name)
609
+ self._func_other_args.append(arg_value)
610
+ self._func_other_arg_json_datatypes.append(argument.get_data_type())
611
+
612
+ return seq_inp_by
613
+
614
+ def _create_dynamic_class(self):
615
+ """
616
+ DESCRIPTION:
617
+ Function dynamically creates a class with name as analytic function name.
618
+
619
+ RETURNS:
620
+ class
621
+
622
+ RAISES:
623
+ None.
624
+
625
+ EXAMPLE:
626
+ self._create_dynamic_class()
627
+ """
628
+ # Constructor for the dynamic class.
629
+ def constructor(self):
630
+ """ Constructor for dynamic class """
631
+ # Do Nothing...
632
+ pass
633
+
634
+ _function_output_table_map = self._function_output_table_map
635
+ # __repr__ method for dynamic class.
636
+ # Note that the self represents the dynamic class object. Not the
637
+ # instance of _AnlyticFunctionExecutor. So, DataFrames will be available as
638
+ # attributes of the object, which is created using dynamic class.
639
+ def print_result(self):
640
+ """ Function to be used for representation of InDB function type object. """
641
+ repr_string = ""
642
+ for key in _function_output_table_map:
643
+ repr_string = "{}\n############ {} Output ############".format(repr_string, key)
644
+ repr_string = "{}\n\n{}\n\n".format(repr_string, getattr(self,key))
645
+ return repr_string
646
+ self._dyn_cls_data_members["__repr__"] = print_result
647
+
648
+ def copy(self, **args):
649
+ """ Function to copy the ART to another table."""
650
+ from teradataml import CopyArt
651
+ params = {
652
+ "data": self.result,
653
+ "database_name": args.get("database_name", None),
654
+ "table_name": args.get("table_name", None),
655
+ "map_name": args.get("map_name", None),
656
+ "persist": args.get("persist", False)}
657
+ return CopyArt(**params)
658
+
659
+ query = self.sqlmr_query
660
+ build_time = None if self.__build_time is None else round(self.__build_time, 2)
661
+
662
+ self._dyn_cls_data_members["show_query"] = lambda x: query
663
+ self._dyn_cls_data_members["get_build_time"] = lambda x: build_time
664
+
665
+ # To list attributes using dict()
666
+ self._dyn_cls_data_members["__dict__"] = self._dyn_cls_data_members
667
+ self._dyn_cls_data_members["_mlresults"] = self._mlresults
668
+ self._dyn_cls_data_members["copy"] = copy
669
+
670
+ # Dynamic class creation with In-DB function name.
671
+ indb_class = type(self.func_name, (object,), self._dyn_cls_data_members)
672
+
673
+ return indb_class()
674
+
675
+ def _generate_query(self):
676
+ """
677
+ DESCRIPTION:
678
+ An interface, which should be implemented by child class(es) to generate the
679
+ query for analytic function.
680
+
681
+ RETURNS:
682
+ None
683
+
684
+ RAISES:
685
+ None.
686
+
687
+ EXAMPLE:
688
+ self._generate_query()
689
+ """
690
+ raise NotImplementedError("Function should be implemented in child class.")
691
+
692
+ def _process_input_argument(self, **kwargs):
693
+ """
694
+ DESCRIPTION:
695
+ An interface, which should be implemented by child class(es) to
696
+ process input argument(s).
697
+
698
+ PARAMETERS:
699
+ kwargs:
700
+ Specifies the keyword arguments passed to a function.
701
+
702
+ RETURNS:
703
+ None.
704
+
705
+ RAISES:
706
+ None.
707
+
708
+ EXAMPLES:
709
+ self._process_input_argument()
710
+ """
711
+ raise NotImplementedError("Function should be implemented in child class.")
712
+
713
+ def _process_function_output(self, **kwargs):
714
+ """
715
+ DESCRIPTION:
716
+ An interface, which should be implemented by child class(es) to
717
+ process the output.
718
+
719
+ PARAMETERS:
720
+ kwargs:
721
+ Specifies the keyword arguments passed to a function.
722
+
723
+ RETURNS:
724
+ None.
725
+
726
+ RAISES:
727
+ None.
728
+
729
+ EXAMPLES:
730
+ self._process_function_output()
731
+ """
732
+ raise NotImplementedError("Function should be implemented in child class.")
733
+
734
+ def _execute_function(self,
735
+ skip_input_arg_processing=False,
736
+ skip_output_arg_processing=False,
737
+ skip_other_arg_processing=False,
738
+ skip_func_output_processing=False,
739
+ skip_dyn_cls_processing=False,
740
+ **kwargs):
741
+ """
742
+ DESCRIPTION:
743
+ Function processes arguments and executes the analytic function.
744
+
745
+ PARAMETERS:
746
+ skip_input_arg_processing:
747
+ Optional Argument.
748
+ Specifies whether to skip input (data) argument processing or not.
749
+ Default is to process the input (data) argument.
750
+ When set to True, caller should make sure to process "input" argument and
751
+ pass SQL argument and values as part of kwargs to this function.
752
+ Default Value: False
753
+ Types: bool
754
+
755
+ skip_output_arg_processing:
756
+ Optional Argument.
757
+ Specifies whether to skip output argument processing or not.
758
+ Default is to process the output arguments.
759
+ When set to True, caller should make sure to process all output arguments and
760
+ pass equivalent SQL argument and values as part of kwargs to this function.
761
+ Default Value: False
762
+ Types: bool
763
+
764
+ skip_other_arg_processing:
765
+ Optional Argument.
766
+ Specifies whether to skip other argument processing or not.
767
+ Default is to process the other arguments, i.e., kwargs.
768
+ When set to True, caller should make sure to process all other arguments are
769
+ processed internally by the function.
770
+ Default Value: False
771
+ Types: bool
772
+
773
+ skip_func_output_processing:
774
+ Optional Argument.
775
+ Specifies whether to skip function output processing or not.
776
+ Default is to process the same.
777
+ When set to True, caller should make sure to process function output.
778
+ Generally, when this argument is set to True, one must also
779
+ set "skip_dyn_cls_processing" to True.
780
+ Default Value: False
781
+ Types: bool
782
+
783
+ skip_dyn_cls_processing:
784
+ Optional Argument.
785
+ Specifies whether to skip dynamic class processing or not.
786
+ Default is to process the dynamic class, where it creates a dynamic
787
+ class and an instance of the same and returns the same.
788
+ When set to True, caller should make sure to process dynamic class and
789
+ return an instance of the same.
790
+ Default Value: False
791
+ Types: bool
792
+
793
+ kwargs:
794
+ Specifies the keyword arguments passed to a function.
795
+
796
+ RETURNS:
797
+ An object of class, with the name same as analytic function.
798
+
799
+ RAISES:
800
+ TeradataMlException, TypeError
801
+
802
+ EXAMPLES:
803
+ self._execute_function(arg1="string", arg2="db", arg3=2)
804
+ """
805
+ # kwargs may contain all additional arguments in 'generic_arguments'.
806
+ # Hence update it to actual kwargs.
807
+ kwargs.update(kwargs.pop("generic_arguments", {}))
808
+
809
+ # Add all arguments to dynamic class as data members.
810
+ global_volatile = False
811
+ if configure.temp_object_type == TeradataConstants.TERADATA_VOLATILE_TABLE:
812
+ global_volatile = True
813
+
814
+ start_time = time.time()
815
+ persist = kwargs.get("persist", False)
816
+ # Use global volatile only when persist argument is False. If persist argument
817
+ # is True, then volatile can't be used whether it is global volatile or normal
818
+ # volatile. If it is normal volatile, then it will raise
819
+ # `CANNOT_USE_TOGETHER_WITH` error below.
820
+ volatile = kwargs.get("volatile", global_volatile if not persist else False)
821
+ display_table_name = kwargs.get("display_table_name", True)
822
+
823
+ # Validate local_order_column argument type and values.
824
+ arg_info_matrix = [["persist", persist, True, bool], ["volatile", volatile, True, bool]]
825
+ # Check for valid types and values.
826
+ _Validators._validate_function_arguments(arg_info_matrix)
827
+
828
+ if persist and volatile:
829
+ raise TeradataMlException(
830
+ Messages.get_message(MessageCodes.CANNOT_USE_TOGETHER_WITH, "persist", "volatile"),
831
+ MessageCodes.CANNOT_USE_TOGETHER_WITH)
832
+
833
+ # If function is VectorDistance and largereference_input is set to True,
834
+ # then set data_partition_column to PartitionKind.DIMENSION and
835
+ # reference_data_partition_column to PartitionKind.ANY .
836
+ if self.func_name == "VectorDistance" and \
837
+ kwargs.get("largereference_input", False):
838
+ kwargs['target_data_partition_column'] = PartitionKind.DIMENSION
839
+ kwargs['reference_data_partition_column'] = PartitionKind.ANY
840
+
841
+ self._dyn_cls_data_members.update(kwargs)
842
+
843
+ # If function produces output tables, i.e., function has output table arguments,
844
+ # then 'db_object_type' should be "table" or if analytic function does not support
845
+ # reading from a view created on output, then 'db_object_type' should be "table".
846
+ # If result is to be persisted or if the table is a volaile table then, db_object_type
847
+ # should be "table" else it should be "view".
848
+ self.db_object_type = (
849
+ TeradataConstants.TERADATA_VOLATILE_TABLE if volatile
850
+ else TeradataConstants.TERADATA_TABLE if len(self._metadata.output_tables) > 0 \
851
+ or not self._metadata._is_view_supported or persist
852
+ else TeradataConstants.TERADATA_VIEW
853
+ )
854
+ if not skip_input_arg_processing:
855
+ self._process_input_argument(**kwargs)
856
+
857
+ # check func_name is GLM and data_partition_column, data_hash_column, local_order_data are passed
858
+ if self.func_name in ['GLM', 'TDGLMPredict'] and \
859
+ any(key in kwargs for key in ['data_partition_column', 'data_hash_column', 'local_order_data']):
860
+ skip_output_arg_processing = True
861
+ elif self.func_name in ['CopyArt']:
862
+ # CopyArt function take care of persisting the result table internally
863
+ # through 'permanent_table' argument.
864
+ persist = False
865
+ volatile = False
866
+
867
+ if not skip_output_arg_processing:
868
+ self._process_output_argument(**kwargs)
869
+
870
+ if not skip_other_arg_processing:
871
+ self._process_other_argument(**kwargs)
872
+
873
+ # When Analytic function is executed it stores the result in _function_output_table_map['result'].
874
+ # If we want to skip the query execution of the function then we need to pass result table in '_result_data'.
875
+
876
+ # Execute the query only if the '_result_data' is not passed as an argument in kwargs.
877
+ # Otherwise, store the result table in _function_output_table_map.
878
+ if kwargs.get("_result_data", None) is None:
879
+ self._generate_query(volatile=volatile)
880
+
881
+ # Print SQL-MR query if requested to do so.
882
+ if display.print_sqlmr_query:
883
+ print(self.sqlmr_query)
884
+
885
+ self._execute_query(persist, volatile, display_table_name)
886
+ else:
887
+ # This is useful when we already have the result table and
888
+ # need to pass function result as an object to another function
889
+ # without executing the function again.
890
+
891
+ # Store the result table in map.
892
+ self._function_output_table_map["result"] = kwargs.pop("_result_data")
893
+ self._dyn_cls_data_members['result'] = self._dyn_cls_data_members.pop('_result_data')
894
+
895
+ if not skip_func_output_processing:
896
+ self._process_function_output(**kwargs)
897
+
898
+ # Set the build time.
899
+ self.__build_time = time.time() - start_time
900
+
901
+ if not skip_dyn_cls_processing:
902
+ return self._create_dynamic_class()
903
+
904
+ def _quote_collapse_other_args(self, argument, arg_value):
905
+ """
906
+ DESCRIPTION:
907
+ Given a list as an argument this will single quote all the
908
+ list elements and combine them into a single string separated by
909
+ commas.
910
+ Append single quote to the elements which are required to be quoted.
911
+
912
+ PARAMETERS:
913
+ argument:
914
+ Required Argument.
915
+ Specifies the argument object (_AnlyArgumentBase).
916
+ Types: _AnlyFuncArgument
917
+
918
+ arg_value:
919
+ Required Argument.
920
+ Specifies the arg_value to be quoted and combined.
921
+ Types: list OR string OR int OR bool OR float
922
+
923
+ RETURNS:
924
+ None
925
+
926
+ RAISES:
927
+ None
928
+
929
+ EXAMPLES:
930
+ self._quote_collapse_other_args(argument, arg_value)
931
+ """
932
+ if isinstance(argument.get_data_type(), list):
933
+ if isinstance(arg_value, (str, bool)):
934
+ return UtilFuncs._teradata_collapse_arglist(arg_value, "'")
935
+ else:
936
+ return UtilFuncs._teradata_collapse_arglist(arg_value, "")
937
+ else:
938
+ if (argument.get_data_type().lower() in ("column", "columns", "column_names", "string", "boolean")):
939
+ return UtilFuncs._teradata_collapse_arglist(arg_value, "'")
940
+ else:
941
+ return UtilFuncs._teradata_collapse_arglist(arg_value, "")
942
+
943
+ class _SQLEFunctionExecutor(_AnlyticFunctionExecutor):
944
+ """ Class to hold the attributes and provide methods to enable function execution. """
945
+ def __init__(self, func_name, func_type=TeradataAnalyticFunctionTypes.SQLE.value):
946
+ """
947
+ DESCRIPTION:
948
+ Constructor for the class.
949
+
950
+ PARAMETERS:
951
+ func_name:
952
+ Required Argument.
953
+ Specifies the name of the analytic function, which is exposed to user.
954
+ Types: str
955
+
956
+ func_type:
957
+ Optional Argument.
958
+ Specifies the type of the analytic function.
959
+ Types: str
960
+
961
+ RAISES:
962
+ TypeError OR ValueError OR TeradataMlException
963
+
964
+ EXAMPLES:
965
+ _SQLEFunctionExecutor("AdaBoost")
966
+ """
967
+ super().__init__(func_name, func_type)
968
+
969
+ # Lists to hold Input Argument (Table) Information
970
+ self._func_input_arg_sql_names = []
971
+ self._func_input_table_view_query = []
972
+ self._func_input_dataframe_type = []
973
+ self._func_input_distribution = []
974
+ self._func_input_partition_by_cols = []
975
+ self._func_input_order_by_cols = []
976
+ self._func_input_local_order = []
977
+
978
+ def _generate_query(self, volatile=False):
979
+ """
980
+ DESCRIPTION:
981
+ Function to generate the SQL query for SQLE analytic function.
982
+
983
+ PARAMETERS:
984
+ volatile:
985
+ Optional Argument.
986
+ Specifies whether to create a volatile table or not.
987
+ Default Value: False
988
+ Type: bool
989
+
990
+ RETURNS:
991
+ None.
992
+
993
+ RAISES:
994
+ None.
995
+
996
+ EXAMPLES:
997
+ self._generate_query()
998
+ """
999
+
1000
+ self.__aqg_obj = AnalyticQueryGenerator(function_name=self._metadata.sql_function_name,
1001
+ func_input_arg_sql_names=self._func_input_arg_sql_names,
1002
+ func_input_table_view_query=self._func_input_table_view_query,
1003
+ func_input_dataframe_type=self._func_input_dataframe_type,
1004
+ func_input_distribution=self._func_input_distribution,
1005
+ func_input_partition_by_cols=self._func_input_partition_by_cols,
1006
+ func_input_order_by_cols=self._func_input_order_by_cols,
1007
+ func_other_arg_sql_names=self._func_other_arg_sql_names,
1008
+ func_other_args_values=self._func_other_args,
1009
+ func_other_arg_json_datatypes=self._func_other_arg_json_datatypes,
1010
+ func_output_args_sql_names=self._func_output_args_sql_names,
1011
+ func_output_args_values=self._func_output_args,
1012
+ engine="ENGINE_SQL",
1013
+ volatile_output=volatile,
1014
+ skip_config_lookup=True,
1015
+ func_input_local_order=self._func_input_local_order)
1016
+
1017
+ # Invoke call to SQL-MR generation.
1018
+ self.sqlmr_query = self.__aqg_obj._gen_sqlmr_select_stmt_sql()
1019
+
1020
+ def _get_input_args(self, **kwargs):
1021
+ """
1022
+ DESCRIPTION:
1023
+ Function to get input argument(s).
1024
+
1025
+ PARAMETERS:
1026
+ kwargs:
1027
+ Specifies the keyword arguments passed to a function.
1028
+
1029
+ RETURNS:
1030
+ tuple, element1 represents input DataFrame argument name and
1031
+ second element represents the Input Argument metadata.
1032
+
1033
+ RAISES:
1034
+ None.
1035
+
1036
+ EXAMPLES:
1037
+ self._get_input_args()
1038
+ """
1039
+ sort_order = list(kwargs.keys())
1040
+ input_table_dict = {}
1041
+
1042
+ for _inp_attribute in self._metadata.input_tables:
1043
+ input_table_arg = _inp_attribute.get_lang_name()
1044
+
1045
+ # Store the first argument directly into the dictionary
1046
+ input_table_dict[input_table_arg] = _inp_attribute
1047
+
1048
+ # Check if SQL function allows multiple values as input.
1049
+ if _inp_attribute.allows_lists():
1050
+ _index = 1
1051
+ while True:
1052
+ _input_table_arg = "{}{}".format(input_table_arg, _index)
1053
+ if _input_table_arg in kwargs:
1054
+ input_table_dict[_input_table_arg] = _inp_attribute
1055
+ _index += 1
1056
+ else:
1057
+ break
1058
+
1059
+ # For ColumnTransformer, yield the input arguments in the order they are passed.
1060
+ if self.func_name == "ColumnTransformer":
1061
+ for key in sort_order:
1062
+ if key in input_table_dict:
1063
+ yield key, input_table_dict[key]
1064
+ else:
1065
+ for key in input_table_dict:
1066
+ yield key, input_table_dict[key]
1067
+
1068
+ def _process_input_argument(self, **kwargs):
1069
+ """
1070
+ DESCRIPTION:
1071
+ Function to process input argument(s).
1072
+
1073
+ PARAMETERS:
1074
+ kwargs:
1075
+ Specifies the keyword arguments passed to a function.
1076
+
1077
+ RETURNS:
1078
+ None.
1079
+
1080
+ RAISES:
1081
+ None.
1082
+
1083
+ EXAMPLES:
1084
+ self._process_input_argument()
1085
+ """
1086
+ for input_table_arg, input_attribute in self._get_input_args(**kwargs):
1087
+ partition_column_arg = "{}_partition_column".format(input_table_arg)
1088
+ order_column_arg = "{}_order_column".format(input_table_arg)
1089
+ local_order_column_arg = "local_order_{}".format(input_table_arg)
1090
+ hash_column_arg = "{}_hash_column".format(input_table_arg)
1091
+
1092
+ # Get the argument values from kwargs
1093
+ input_table_arg_value = kwargs.get(input_table_arg)
1094
+ partition_column_arg_value = kwargs.get(partition_column_arg)
1095
+ order_column_arg_value = kwargs.get(order_column_arg)
1096
+ local_order_column_arg_value = kwargs.get(local_order_column_arg, False)
1097
+ hash_column_arg_value = kwargs.get(hash_column_arg)
1098
+
1099
+ reference_class = None
1100
+ if input_attribute.is_reference_function_acceptable():
1101
+ reference_class = self._metadata.get_reference_function_class()
1102
+
1103
+ # Validate the input table arguments.
1104
+ self._validate_analytic_function_argument(
1105
+ input_table_arg, input_table_arg_value, input_attribute, additional_valid_types=reference_class)
1106
+
1107
+ # If input is an object of reference Function, then get the DataFrame from it.
1108
+ if reference_class and isinstance(input_table_arg_value, reference_class):
1109
+ input_table_arg_value = input_table_arg_value._mlresults[0]
1110
+ # Don't fill the input lists if the value is None.
1111
+ if input_table_arg_value is None:
1112
+ continue
1113
+
1114
+ # Validate local_order_column argument type and values.
1115
+ arg_info_matrix = [[local_order_column_arg, local_order_column_arg_value, True, bool, True]]
1116
+ # Check emptiness and types.
1117
+ _Validators._validate_missing_required_arguments(arg_info_matrix)
1118
+ _Validators._validate_function_arguments(arg_info_matrix)
1119
+
1120
+ for arg in [partition_column_arg, order_column_arg, hash_column_arg]:
1121
+ arg_value = kwargs.get(arg)
1122
+
1123
+ expected_types = (str, list)
1124
+ # For partition column, user can pass partition kind too.
1125
+ if "partition" in arg:
1126
+ expected_types = (str, _ListOf(str), PartitionKind)
1127
+ arg_info_matrix = [[arg, arg_value, True, expected_types, True]]
1128
+
1129
+ # Check for empty string and datatype.
1130
+ _Validators._validate_missing_required_arguments(arg_info_matrix)
1131
+ _Validators._validate_function_arguments(arg_info_matrix)
1132
+
1133
+ # Set order column value to "NA_character_" if it is None.
1134
+ if not isinstance(arg_value, PartitionKind):
1135
+ # Validate column existence in DataFrame only if user inputs a column(s).
1136
+ _Validators._validate_dataframe_has_argument_columns(arg_value,
1137
+ arg,
1138
+ input_table_arg_value,
1139
+ input_table_arg,
1140
+ case_insensitive=True
1141
+ )
1142
+
1143
+ order_column_arg_value = UtilFuncs._teradata_collapse_arglist(order_column_arg_value, "\"")
1144
+
1145
+ distribution, partition_column = self._get_distribution_and_partition_column(
1146
+ partition_column_arg_value, hash_column_arg_value, input_attribute)
1147
+
1148
+ table_ref = AnalyticsWrapperUtils()._teradata_on_clause_from_dataframe(
1149
+ input_table_arg_value, False)
1150
+
1151
+ self._func_input_arg_sql_names.append(input_attribute.get_sql_name())
1152
+ self._func_input_table_view_query.append(table_ref["ref"])
1153
+ self._func_input_dataframe_type.append(table_ref["ref_type"])
1154
+ self._func_input_order_by_cols.append(order_column_arg_value)
1155
+ self._func_input_distribution.append(distribution)
1156
+ self._func_input_partition_by_cols.append(partition_column)
1157
+ self._func_input_local_order.append(local_order_column_arg_value)
1158
+
1159
+ def _get_distribution_and_partition_column(self,
1160
+ partition_column_arg_value,
1161
+ hash_column_arg_value,
1162
+ input_attribute):
1163
+ """
1164
+ DESCRIPTION:
1165
+ Function to get the input distribution and partition column values to
1166
+ process input table argument.
1167
+
1168
+ PARAMETERS:
1169
+ partition_column_arg_value:
1170
+ Required Argument.
1171
+ Specifies the partition column argument value.
1172
+ Types: str OR PartitionKind OR None.
1173
+
1174
+ hash_column_arg_value:
1175
+ Required Argument.
1176
+ Specifies the hash column argument value.
1177
+ Types: str
1178
+
1179
+ input_attribute:
1180
+ Required Argument.
1181
+ Specifies the input table attribute.
1182
+ Types: _AnlyFuncInput
1183
+
1184
+ RETURNS:
1185
+ tuple, with first element represents distribution and second element
1186
+ represents partition_column.
1187
+
1188
+ RAISES:
1189
+ None.
1190
+
1191
+ EXAMPLES:
1192
+ self._get_distribution_and_partition_column(partition_column_arg_val, hash_column_arg_val)
1193
+ """
1194
+ # If user passes hash_column_argument, generate the Query based on HASH BY
1195
+ # irrespective of the value of partition_column.
1196
+ if hash_column_arg_value:
1197
+ return "HASH", UtilFuncs._teradata_collapse_arglist(hash_column_arg_value, "\"")
1198
+
1199
+ # If user passes PartitionKind, generate Query based on distribution and partition type.
1200
+ if isinstance(partition_column_arg_value, PartitionKind):
1201
+ return self.__get_dist_partition_column_from_partition_kind(partition_column_arg_value)
1202
+
1203
+ # If user pass a string or list of strings for partition_column, generate PARTITION BY
1204
+ # based on partition column value.
1205
+ if partition_column_arg_value is not None:
1206
+ return "FACT", UtilFuncs._teradata_collapse_arglist(partition_column_arg_value, "\"")
1207
+ # No partition_column is sourced to input. So, derive the default one.
1208
+ else:
1209
+ default = input_attribute._get_default_partition_column_kind()
1210
+ return self.__get_dist_partition_column_from_partition_kind(default)
1211
+
1212
+ def __get_dist_partition_column_from_partition_kind(self, partition_kind):
1213
+ """
1214
+ DESCRIPTION:
1215
+ Function to get the distribution and partition column based on PartitionKind.
1216
+
1217
+ PARAMETERS:
1218
+ partition_kind:
1219
+ Required Argument.
1220
+ Specifies the type of Partition.
1221
+ Types: PartitionKind
1222
+
1223
+ RETURNS:
1224
+ tuple, with first element represents distribution and second element
1225
+ represents partition_column.
1226
+
1227
+ RAISES:
1228
+ None.
1229
+
1230
+ EXAMPLES:
1231
+ self.__get_dist_partition_column_from_partition_kind(PartitionKind.ONE)
1232
+ """
1233
+ if partition_kind in (PartitionKind.ANY, PartitionKind.ONE):
1234
+ return "FACT", partition_kind.value
1235
+ elif partition_kind == PartitionKind.DIMENSION:
1236
+ return PartitionKind.DIMENSION.value, None
1237
+ # Else is for PartitionKind.NONE.
1238
+ else:
1239
+ return "NONE", "NA_character_"
1240
+
1241
+ # Below code is not being used. Kept here to refer again.
1242
+ '''
1243
+ def _get_input_distribution_and_partition_column(self, input_table, partition_column_arg_value):
1244
+ """
1245
+ DESCRIPTION:
1246
+ Function to get the input distribution and partition column values to
1247
+ process input table argument.
1248
+
1249
+ PARAMETERS:
1250
+ input_table:
1251
+ Required Argument.
1252
+ Specifies the input table argument.
1253
+ Types: _AnlyFuncInput
1254
+
1255
+ partition_column_arg_value:
1256
+ Required Argument.
1257
+ Specifies the partition column argument value.
1258
+ Types: str
1259
+
1260
+ RETURNS:
1261
+ tuple, with first element represents distribution and second element
1262
+ represents partition_column.
1263
+
1264
+ RAISES:
1265
+ None.
1266
+
1267
+ EXAMPLES:
1268
+ self._get_input_distribution_and_partition_column(inp1, partition_column_arg)
1269
+ """
1270
+ # Initialise all the temporary variables and set those to False by default.
1271
+ is_dimension, is_partition_by_key, is_partition_by_any, is_partition_by_one = [False] * 4
1272
+ is_partition_by_one_only, is_partition_by_any_only = [False] * 2
1273
+
1274
+ # Get the partition kind from input table.
1275
+ partition_kind = input_table._get_partition_column_required_kind()
1276
+
1277
+ # Check whether associated input table requires to be partitioned
1278
+ # on any column or not.
1279
+ # Set some booleans based on what type of distribution is supported by
1280
+ # the argument.
1281
+ if partition_kind == PartitionKind.DIMENSION:
1282
+ is_dimension = True
1283
+ elif partition_kind == PartitionKind.DIMENSIONKEY:
1284
+ is_dimension, is_partition_by_key = True, True
1285
+ elif partition_kind == PartitionKind.DIMENSIONKEYANY:
1286
+ is_dimension, is_partition_by_any, is_partition_by_key = True, True, True
1287
+ elif partition_kind == PartitionKind.KEY:
1288
+ is_partition_by_key = True
1289
+ elif partition_kind == PartitionKind.ONE:
1290
+ is_partition_by_one, is_partition_by_key = True, True
1291
+ elif partition_kind == PartitionKind.ANY:
1292
+ is_partition_by_any, is_partition_by_key = True, True
1293
+ elif partition_kind == PartitionKind.ANYONLY:
1294
+ is_partition_by_any_only = True
1295
+ elif partition_kind == PartitionKind.ONEONLY:
1296
+ is_partition_by_one_only = True
1297
+
1298
+ collapse_arg_list = lambda partition_column_arg_value: "NA_character_" if partition_column_arg_value is None\
1299
+ else UtilFuncs._teradata_collapse_arglist(partition_column_arg_value, "\"")
1300
+
1301
+ default_partition_value = input_table._get_default_partition_by_value(partition_kind)
1302
+
1303
+ # When distribution is of type dimension, no partition by column required.
1304
+ if is_dimension and not is_partition_by_key and not is_partition_by_any:
1305
+ distribution = "DIMENSION"
1306
+ partition_column = "NA_character_"
1307
+ # When partitioned by either key or any, distribution should be FACT.
1308
+ elif is_dimension and (is_partition_by_key or is_partition_by_any):
1309
+ # If the input is not None, then distribution should be FACT. Otherwise, DIMENSION.
1310
+ distribution = "DIMENSION"
1311
+ if (partition_column_arg_value is not None and is_partition_by_key):
1312
+ distribution = "FACT"
1313
+
1314
+ # Quote if input value is not same as default value.
1315
+ if self._awu._is_default_or_not(partition_column_arg_value, default_partition_value):
1316
+ partition_column = collapse_arg_list(partition_column_arg_value)
1317
+ else:
1318
+ partition_column = default_partition_value
1319
+
1320
+ elif partition_column_arg_value is not None and not is_partition_by_key and is_partition_by_any:
1321
+ distribution = "FACT"
1322
+ partition_column = "ANY"
1323
+ else:
1324
+ partition_column = "NA_character_"
1325
+ else:
1326
+ # When partitioned by either key or any, distribution should be FACT.
1327
+ if is_partition_by_any and not is_partition_by_key:
1328
+ distribution = "FACT"
1329
+ partition_column = "ANY"
1330
+ elif (is_partition_by_key and not is_partition_by_any and not is_partition_by_one) or\
1331
+ (is_partition_by_key and is_partition_by_any):
1332
+ distribution = "FACT"
1333
+ # If partition value is default value, Enclose it with double quotes.
1334
+ if default_partition_value is not None or default_partition_value != "":
1335
+ if self._awu._is_default_or_not(partition_column_arg_value, default_partition_value):
1336
+ partition_column = collapse_arg_list(partition_column_arg_value)
1337
+ else:
1338
+ partition_column = default_partition_value
1339
+ else:
1340
+ partition_column = UtilFuncs._teradata_collapse_arglist(partition_column_arg_value, "\"")
1341
+ elif is_partition_by_one:
1342
+ distribution = "FACT"
1343
+ # If partition value is 1, Enclose it with double quotes.
1344
+ if self._awu._is_default_or_not(partition_column_arg_value, "1"):
1345
+ partition_column = collapse_arg_list(partition_column_arg_value)
1346
+ else:
1347
+ partition_column = default_partition_value
1348
+ elif is_partition_by_any_only or is_partition_by_one_only:
1349
+ distribution = "FACT"
1350
+ partition_column = "{}".format(default_partition_value)
1351
+ else:
1352
+ distribution = "NONE"
1353
+ partition_column = "NA_character_"
1354
+
1355
+ return distribution, partition_column
1356
+ '''
1357
+
1358
+ def _process_function_output(self, **kwargs):
1359
+ """
1360
+ DESCRIPTION:
1361
+ Internal function to process the output tables. This function creates
1362
+ the required output DataFrames from the tables and a result list.
1363
+
1364
+ PARAMETERS:
1365
+ kwargs:
1366
+ Specifies the keyword arguments passed to a function.
1367
+
1368
+ RETURNS:
1369
+ None.
1370
+
1371
+ RAISES:
1372
+ None.
1373
+
1374
+ EXAMPLES:
1375
+ self._process_function_output()
1376
+ """
1377
+ for lang_name, table_name in self._function_output_table_map.items():
1378
+ out_table_name = UtilFuncs._extract_table_name(table_name)
1379
+ out_db_name = UtilFuncs._extract_db_name(table_name)
1380
+ df = self._awu._create_data_set_object(
1381
+ df_input=out_table_name, database_name=out_db_name, source_type="table")
1382
+ self._dyn_cls_data_members[lang_name] = df
1383
+ # Condition make sure that the first element always be result or output in _mlresults.
1384
+ if lang_name in ["output", "result"]:
1385
+ self._mlresults.insert(0, df)
1386
+ else:
1387
+ self._mlresults.append(df)
1388
+
1389
+ class _TableOperatorExecutor(_SQLEFunctionExecutor):
1390
+ """ Class to hold the attributes and provide methods to enable execution for Table Operators. """
1391
+ def __init__(self, func_name):
1392
+ """
1393
+ DESCRIPTION:
1394
+ Constructor for the class.
1395
+
1396
+ PARAMETERS:
1397
+ func_name:
1398
+ Required Argument.
1399
+ Specifies the name of the analytic function, which is exposed to the user.
1400
+ Types: str
1401
+
1402
+ RAISES:
1403
+ TypeError OR ValueError OR TeradataMlException
1404
+
1405
+ EXAMPLES:
1406
+ _TableOperatorExecutor("write_nos")
1407
+ """
1408
+ super().__init__(func_name, TeradataAnalyticFunctionTypes.TABLEOPERATOR.value)
1409
+
1410
+ # Lists to hold Input Argument (Table) Information
1411
+ self.__func_input_order_by_type = []
1412
+ self.__func_input_sort_ascending = []
1413
+ self.__func_input_nulls_first = []
1414
+
1415
+ def _generate_query(self, **kwargs):
1416
+ """
1417
+ DESCRIPTION:
1418
+ Function to generate the SQL query for TABLE OPERATOR function.
1419
+
1420
+ RETURNS:
1421
+ None.
1422
+
1423
+ RAISES:
1424
+ None.
1425
+
1426
+ EXAMPLES:
1427
+ self._generate_query()
1428
+ """
1429
+ self.__aqg_obj = TableOperatorQueryGenerator(function_name=self.func_name,
1430
+ func_input_arg_sql_names=self._func_input_arg_sql_names,
1431
+ func_input_table_view_query=self._func_input_table_view_query,
1432
+ func_input_dataframe_type=self._func_input_dataframe_type,
1433
+ func_input_distribution=self._func_input_distribution,
1434
+ func_input_partition_by_cols=self._func_input_partition_by_cols,
1435
+ func_input_order_by_cols=self._func_input_order_by_cols,
1436
+ func_other_arg_sql_names=self._func_other_arg_sql_names,
1437
+ func_other_args_values=self._func_other_args,
1438
+ func_other_arg_json_datatypes=self._func_other_arg_json_datatypes,
1439
+ func_output_args_sql_names=self._func_output_args_sql_names,
1440
+ func_output_args_values=self._func_output_args,
1441
+ func_input_order_by_type=self.__func_input_order_by_type,
1442
+ func_input_sort_ascending=self.__func_input_sort_ascending,
1443
+ func_input_nulls_first=self.__func_input_nulls_first,
1444
+ engine="ENGINE_SQL")
1445
+
1446
+ # Invoke call to SQL-MR generation.
1447
+ self.sqlmr_query = self.__aqg_obj._gen_table_operator_select_stmt_sql()
1448
+
1449
+ def _process_input_argument(self, **kwargs):
1450
+ """
1451
+ DESCRIPTION:
1452
+ Function to process input argument(s).
1453
+
1454
+ PARAMETERS:
1455
+ kwargs:
1456
+ Specifies the keyword arguments passed to a function.
1457
+
1458
+ RETURNS:
1459
+ None.
1460
+
1461
+ RAISES:
1462
+ None.
1463
+
1464
+ EXAMPLES:
1465
+ self._process_input_argument()
1466
+ """
1467
+ super()._process_input_argument(**kwargs)
1468
+ # Iterating over multiple input arguments if present.
1469
+ for index, input_attribute in enumerate(self._metadata.input_tables):
1470
+ # Extracting input argument name and value.
1471
+ input_table_arg = input_attribute.get_lang_name()
1472
+ input_table_arg_value = kwargs.get(input_table_arg)
1473
+ # No need to process further if no input argument.
1474
+ # Validation of this input is done in the parent class.
1475
+ if input_table_arg_value is None:
1476
+ continue
1477
+
1478
+ # Extracting argument names for partition, hash and is local ordered.
1479
+ partition_column_arg = "{}_partition_column".format(input_table_arg)
1480
+ hash_column_arg = "{}_hash_column".format(input_table_arg)
1481
+ is_local_ordered_arg = "local_order_{}".format(input_table_arg)
1482
+ order_column_arg = "{}_order_column".format(input_table_arg)
1483
+ # Extracting argument values for partition, hash and is local ordered.
1484
+ partition_column_value = kwargs.get(partition_column_arg, None)
1485
+ hash_column_value = kwargs.get(hash_column_arg, None)
1486
+ is_local_ordered_value = kwargs.get(is_local_ordered_arg, False)
1487
+ order_column_value = kwargs.get(order_column_arg, "NA_character_")
1488
+
1489
+ self._validate_hash_local_ordered_arguments(partition_column_arg, partition_column_value,
1490
+ hash_column_arg, hash_column_value,
1491
+ is_local_ordered_arg, is_local_ordered_value,
1492
+ order_column_arg, order_column_value,
1493
+ input_table_arg, input_table_arg_value)
1494
+
1495
+ if is_local_ordered_value:
1496
+ self.__func_input_order_by_type.append("LOCAL")
1497
+ if hash_column_value is None:
1498
+ self._func_input_distribution[index] = "NONE"
1499
+ else:
1500
+ self._func_input_distribution[index] = "HASH"
1501
+ self._func_input_partition_by_cols[index] = hash_column_value
1502
+ else:
1503
+ self.__func_input_order_by_type.append(None)
1504
+ if partition_column_value is None:
1505
+ self._func_input_distribution[index] = "NONE"
1506
+
1507
+ def _validate_hash_local_ordered_arguments(self, partition_column_arg, partition_column_value,
1508
+ hash_column_arg, hash_column_value,
1509
+ is_local_ordered_arg, is_local_ordered_value,
1510
+ order_column_arg, order_column_value,
1511
+ input_table_arg, input_table_arg_value):
1512
+ """
1513
+ DESCRIPTION:
1514
+ Function to validate the hash and local order function arguments. This function does
1515
+ the following validations
1516
+ * Check if Hash Column value is not empty string.
1517
+ * Check if "is local order" value is of type boolean.
1518
+ * Hash and order by can be used together as long as is_local_order = True.
1519
+ * Either hash or partition can be used.
1520
+ * Either local order by or partition by can be used.
1521
+
1522
+ PARAMETERS:
1523
+ partition_column_arg:
1524
+ Required Argument.
1525
+ Specifies the name of the partition by column argument.
1526
+ Type: str
1527
+
1528
+ partition_column_value:
1529
+ Required Argument.
1530
+ Specifies the value of the partition by column argument.
1531
+ Type: str
1532
+
1533
+ hash_column_arg:
1534
+ Required Argument.
1535
+ Specifies the name of the hash by column argument.
1536
+ Type: str
1537
+
1538
+ hash_column_value:
1539
+ Required Argument.
1540
+ Specifies the value of the hash by column argument.
1541
+ Type: str
1542
+
1543
+ is_local_ordered_arg:
1544
+ Required Argument.
1545
+ Specifies the name of the is local ordered argument.
1546
+ Type: str
1547
+
1548
+ is_local_ordered_value:
1549
+ Required Argument.
1550
+ Specifies the value of the is local ordered argument.
1551
+ Type: bool
1552
+
1553
+ order_column_arg:
1554
+ Required Argument.
1555
+ Specifies the name of the order by column argument.
1556
+ Type: str
1557
+
1558
+ order_column_value:
1559
+ Required Argument.
1560
+ Specifies the value of the ordere by column argument.
1561
+ Type: str
1562
+
1563
+ input_table_arg:
1564
+ Required Argument.
1565
+ Specifies the name of the input table provided to the function.
1566
+ Types: str
1567
+
1568
+ input_table_arg_value:
1569
+ Required Argument.
1570
+ Specifies the value of the input table provided to the function.
1571
+ Types: DataFrame
1572
+
1573
+ RETURNS:
1574
+ None
1575
+
1576
+ RAISES:
1577
+ TeradataMlException
1578
+
1579
+ EXAMPLES:
1580
+ self._validate_hash_local_ordered_arguments("data", DataFrame.from_table("ibm_stock")), **kwargs)
1581
+ """
1582
+ # Check for empty string and types(str or list) for hash column values.
1583
+ # Check for types for is local ordered values.
1584
+
1585
+ _Validators._validate_function_arguments([[hash_column_arg, hash_column_value, True, (str, list), True],
1586
+ [is_local_ordered_arg, is_local_ordered_value, True, bool, False]])
1587
+
1588
+ # Validate column existence in DataFrame.
1589
+ _Validators._validate_dataframe_has_argument_columns(hash_column_value,
1590
+ hash_column_arg,
1591
+ input_table_arg_value,
1592
+ input_table_arg,
1593
+ case_insensitive=True
1594
+ )
1595
+
1596
+ # Hash and order by can be used together as long as is_local_order = True.
1597
+ if all([hash_column_value,
1598
+ order_column_value]) and not is_local_ordered_value:
1599
+ raise TeradataMlException(
1600
+ Messages.get_message(MessageCodes.CANNOT_USE_TOGETHER_WITH,
1601
+ "{}' and '{}".format(hash_column_arg, order_column_arg),
1602
+ "{}=False".format(is_local_ordered_arg)),
1603
+ MessageCodes.CANNOT_USE_TOGETHER_WITH)
1604
+
1605
+ # Either hash or partition can be used.
1606
+ _Validators._validate_mutually_exclusive_arguments(hash_column_value,
1607
+ hash_column_arg,
1608
+ partition_column_value,
1609
+ partition_column_arg,
1610
+ skip_all_none_check=True)
1611
+
1612
+ # Either local order by or partition by can be used.
1613
+ _Validators._validate_mutually_exclusive_arguments(is_local_ordered_value,
1614
+ is_local_ordered_arg,
1615
+ partition_column_value,
1616
+ partition_column_arg,
1617
+ skip_all_none_check=True)
1618
+
1619
+ # local order by requires column name.
1620
+ if is_local_ordered_value and order_column_value is None:
1621
+ message = Messages.get_message(MessageCodes.DEPENDENT_ARG_MISSING,
1622
+ order_column_arg, "{}=True".format(is_local_ordered_arg))
1623
+ raise TeradataMlException(message, MessageCodes.DEPENDENT_ARG_MISSING)
1624
+
1625
+ def _quote_collapse_other_args(self, argument, arg_value):
1626
+ """
1627
+ DESCRIPTION:
1628
+ Given a list as an argument this will single quote all the
1629
+ list elements and combine them into a single string separated by
1630
+ commas.
1631
+ Append single quote to the elements which are required to be quoted.
1632
+
1633
+ PARAMETERS:
1634
+ argument:
1635
+ Required Argument.
1636
+ Specifies the argument object (_AnlyArgumentBase).
1637
+ Types: _AnlyFuncArgument
1638
+
1639
+ arg_value:
1640
+ Required Argument.
1641
+ Specifies the arg_value to be quoted and combined.
1642
+ Types: list OR string OR int OR bool OR float
1643
+
1644
+ RETURNS:
1645
+ None
1646
+
1647
+ RAISES:
1648
+ None
1649
+
1650
+ EXAMPLES:
1651
+ self._quote_collapse_other_args(argument, arg_value)
1652
+ """
1653
+ arg_dtype = UtilFuncs._as_list(argument.get_data_type())
1654
+ for arg in arg_dtype:
1655
+ if arg.lower() in ("column", "columns", "column_names", "string", "boolean") and isinstance(arg_value,(str, bool)):
1656
+ return UtilFuncs._teradata_collapse_arglist(UtilFuncs._teradata_collapse_arglist(arg_value, "\'"), "'")
1657
+ else:
1658
+ return UtilFuncs._teradata_collapse_arglist(arg_value, "'")
1659
+
1660
+ class _UAFFunctionExecutor(_SQLEFunctionExecutor):
1661
+ """ Class to hold the attributes and provide methods to enable execution for UAF Functions. """
1662
+ def __init__(self, func_name, func_type = TeradataAnalyticFunctionTypes.UAF.value):
1663
+ """
1664
+ DESCRIPTION:
1665
+ Constructor for the class.
1666
+
1667
+ PARAMETERS:
1668
+ func_name:
1669
+ Required Argument.
1670
+ Specifies the name of the analytic function, which is exposed to the user.
1671
+ Types: str
1672
+
1673
+ RAISES:
1674
+ TypeError OR ValueError OR TeradataMlException
1675
+
1676
+ EXAMPLES:
1677
+ _UAFFunctionExecutor("ArimaEstimate")
1678
+ """
1679
+ super().__init__(func_name, func_type)
1680
+ self._func_other_args = {}
1681
+ self._func_input_fmt_arguments = {}
1682
+ self._func_output_fmt_arguments = {}
1683
+
1684
+ # Lists to hold Input Argument (Table) Information
1685
+ self._func_input_args = []
1686
+ self._func_input_filter_expr_args = []
1687
+
1688
+ # Lists to hold Output Table Information.
1689
+ self._func_output_args = None
1690
+ self._function_output_table_map = {}
1691
+ self._volatile_output = False
1692
+
1693
+ def _generate_query(self, volatile=False):
1694
+ """
1695
+ DESCRIPTION:
1696
+ Function to generate the SQL query for UAF function.
1697
+
1698
+ RETURNS:
1699
+ None.
1700
+
1701
+ RAISES:
1702
+ None.
1703
+
1704
+ EXAMPLES:
1705
+ self._generate_query()
1706
+ """
1707
+
1708
+ query_generator = UAFQueryGenerator(function_name=self._metadata.sql_function_name,
1709
+ func_input_args=self._func_input_args,
1710
+ func_input_filter_expr_args=self._func_input_filter_expr_args,
1711
+ func_other_args=self._func_other_args ,
1712
+ func_output_args=self._func_output_args,
1713
+ func_input_fmt_args=self._func_input_fmt_arguments,
1714
+ func_output_fmt_args=self._func_output_fmt_arguments,
1715
+ volatile_output=volatile)
1716
+ self.sqlmr_query= query_generator._get_display_uaf()
1717
+
1718
+ def _process_input_argument(self, **kwargs):
1719
+ """
1720
+ DESCRIPTION:
1721
+ Function to process input argument(s).
1722
+
1723
+ PARAMETERS:
1724
+ kwargs:
1725
+ Specifies the keyword arguments passed to a function.
1726
+
1727
+ RETURNS:
1728
+ None.
1729
+
1730
+ RAISES:
1731
+ None.
1732
+
1733
+ EXAMPLES:
1734
+ self._process_input_argument()
1735
+ """
1736
+ from teradataml.dataframe.sql_interfaces import ColumnExpression
1737
+
1738
+ # Process the Input tables.
1739
+ # Get the list of input arguments from the JsonStore metadata
1740
+ for input_attribute in self._metadata.input_tables:
1741
+ # Get the input table arg name.
1742
+ input_table_arg = input_attribute.get_lang_name()
1743
+
1744
+ # Get the value of input table arg.
1745
+ input_table_arg_value = kwargs.get(input_table_arg, None)
1746
+ self._validate_analytic_function_argument(input_table_arg,
1747
+ input_table_arg_value,
1748
+ input_attribute)
1749
+
1750
+ # Form the 'filter_expr' key name (User provided input).
1751
+ filter_exp_arg = "{}_filter_expr".format(input_table_arg)
1752
+ # Get the 'filter_expr' value.
1753
+ filter_exp_arg_value = kwargs.get(filter_exp_arg, None)
1754
+
1755
+ # If 'filter_expr' is passed and 'data' is None, raise
1756
+ # dependent argument exception.
1757
+ if filter_exp_arg_value is not None and \
1758
+ input_table_arg_value is None:
1759
+ # Raise error, if "data" not provided and "data_filter_expr" is provided.
1760
+ err_ = Messages.get_message(MessageCodes.DEPENDENT_ARGUMENT,
1761
+ filter_exp_arg,
1762
+ input_table_arg)
1763
+ raise TeradataMlException(err_, MessageCodes.DEPENDENT_ARGUMENT)
1764
+
1765
+ # 'filter_expr' argument validation (User provided input).
1766
+ arg_info = []
1767
+ arg_info.append([filter_exp_arg, filter_exp_arg_value, True,
1768
+ (ColumnExpression), False])
1769
+
1770
+ # Validate 'filter_expr' argument types (User provided input).
1771
+ _Validators._validate_function_arguments(arg_info)
1772
+
1773
+ # If data is not None, then add 'data' and 'filter_expr' to lists.
1774
+ if input_table_arg_value is not None:
1775
+ # Append the lists.
1776
+ self._func_input_args.append(input_table_arg_value)
1777
+ self._func_input_filter_expr_args.append(filter_exp_arg_value)
1778
+
1779
+ def _process_function_output(self, **kwargs):
1780
+ """
1781
+ DESCRIPTION:
1782
+ Internal function to process the output tables. This function creates
1783
+ the required output DataFrames from the tables and a result list.
1784
+
1785
+ PARAMETERS:
1786
+ None.
1787
+
1788
+ RETURNS:
1789
+ None.
1790
+
1791
+ RAISES:
1792
+ None.
1793
+
1794
+ EXAMPLES:
1795
+ self._process_function_output()
1796
+ """
1797
+ volatile = kwargs.get("volatile", False)
1798
+ persist = kwargs.get("persist", False)
1799
+ output_db_name = kwargs.get("output_db_name")
1800
+
1801
+ # Since the regular function will always refer to latest value, creating
1802
+ # a closure here. The function will go as an attribute to dynamically
1803
+ # created object.
1804
+ def _parent(layer_name, table_name, query=None):
1805
+
1806
+ def _layer(self):
1807
+ if self._data.get(layer_name) is None:
1808
+ from teradataml import DataFrame, in_schema
1809
+ # Execute the Query, create a DataFrame and attach it.
1810
+ if query:
1811
+ UtilFuncs._execute_query(query=query)
1812
+ _db_name, _table_name = UtilFuncs._extract_db_name(table_name), \
1813
+ UtilFuncs._extract_table_name(table_name)
1814
+ _table_name = in_schema(_db_name, _table_name) if _db_name else _table_name
1815
+ self._data[layer_name] = DataFrame.from_table(table_name)
1816
+
1817
+ return self._data[layer_name]
1818
+
1819
+ return _layer
1820
+
1821
+ for output_table in self._metadata.output_tables[1:]:
1822
+ layer_name = output_table.get_layer_name()
1823
+ exposed_layer_name = output_table.get_lang_name()
1824
+
1825
+ # Creating the ART Spec here instead of creating an object of TDSeries to
1826
+ # save additional imports and processing.
1827
+ _art_spec = "ART_SPEC(TABLE_NAME({}), LAYER({}))".format(self._function_output_table_map["result"],
1828
+ layer_name)
1829
+
1830
+ # Generate table name.
1831
+ func_params = self._get_generate_temp_table_params(persist=persist,
1832
+ output_db=output_db_name)
1833
+ _table_name = UtilFuncs._generate_temp_table_name(**func_params)
1834
+
1835
+ # Generate Query.
1836
+ UAF_Query = UAFQueryGenerator(function_name="TD_EXTRACT_RESULTS",
1837
+ func_input_args=_art_spec,
1838
+ func_input_filter_expr_args={},
1839
+ func_other_args={},
1840
+ func_input_fmt_args={},
1841
+ func_output_args=_table_name,
1842
+ volatile_output=volatile,
1843
+ ctas=True)
1844
+
1845
+ query = UAF_Query._get_display_uaf()
1846
+
1847
+ # Store the internal function in a dict. While storing it, convert it to
1848
+ # a property so user do not need to call it.
1849
+ self._dyn_cls_data_members[exposed_layer_name] = property(
1850
+ _parent(exposed_layer_name, _table_name, query))
1851
+
1852
+ # 'result' attribute in UAF Function object should point to output table.
1853
+ self._dyn_cls_data_members["result"] = property(
1854
+ _parent("result", self._function_output_table_map["result"]))
1855
+
1856
+ # To make lazy execution, we will add additional attributes to UAF Function object.
1857
+ # Mask those additional attributes by overwriting the __dir__ method.
1858
+ attrs = list(self._dyn_cls_data_members.keys())
1859
+ self._dyn_cls_data_members["__dir__"] = lambda self: super(self.__class__).__dir__() + attrs
1860
+
1861
+ # Add a variable _data to output object so that the layers DataFrame
1862
+ # will be stored in this variable.
1863
+ self._dyn_cls_data_members["_data"] = {}
1864
+
1865
+ def _get_generate_temp_table_params(self, persist=False, output_db=None, volatile=False):
1866
+ """
1867
+ DESCRIPTION:
1868
+ Function to get the required parameters to create either table or view.
1869
+ When function has output table arguments or argument persist is set to True,
1870
+ then function returns parameters to create table otherwise returns parameters
1871
+ to create view. If persist is set to True or volatile is set to True, in such cases,
1872
+ tables created are not garbage collected.
1873
+
1874
+ PARAMETERS:
1875
+ persist:
1876
+ Optional Argument.
1877
+ Specifies whether to persist the output table or not.
1878
+ When set to True, output tables created are not garbage collected
1879
+ at the end of the session, otherwise they are garbage collected.
1880
+ Default Value: False
1881
+ Types: bool
1882
+
1883
+ output_db:
1884
+ Optional Argument.
1885
+ Specifies the output DataBase name to create the output tables.
1886
+ Default Value: False
1887
+ Types: str
1888
+
1889
+ volatile:
1890
+ Optional Argument.
1891
+ Specifies whether table to create is a volatile table or not.
1892
+ Default Value: False
1893
+ Types: bool
1894
+
1895
+ RETURNS:
1896
+ dict
1897
+
1898
+ RAISES:
1899
+ None
1900
+
1901
+ EXAMPLES:
1902
+ self._get_generate_temp_table_params(True, True)
1903
+ """
1904
+ prefix = "td_uaf_out_"
1905
+ gc_on_quit = True
1906
+ # If result is to be persisted then, it must not be Garbage collected.
1907
+ if persist or volatile:
1908
+ gc_on_quit = False
1909
+ prefix = "td_uaf_{}_out_".format("persist" if persist else "volatile")
1910
+
1911
+ return {"table_type": self.db_object_type,
1912
+ "prefix": prefix,
1913
+ "gc_on_quit": gc_on_quit,
1914
+ "databasename": output_db if output_db else _get_context_temp_databasename(
1915
+ table_type=self.db_object_type)}
1916
+
1917
+ def _process_output_argument(self, **kwargs):
1918
+ """
1919
+ DESCRIPTION:
1920
+ Function to process output argument(s) of UAF function.
1921
+
1922
+ PARAMETERS:
1923
+ kwargs:
1924
+ Specifies the keyword arguments passed to a function.
1925
+
1926
+ RETURNS:
1927
+ None.
1928
+
1929
+ RAISES:
1930
+ TypeError, ValueError, TeradataMlException.
1931
+
1932
+ EXAMPLES:
1933
+ self._process_output_argument()
1934
+ """
1935
+ # If kwargs not provided, initialize it with default value.
1936
+ volatile = kwargs.get("volatile", False)
1937
+ persist = kwargs.get("persist", False)
1938
+ output_table_name = kwargs.get("output_table_name", None)
1939
+ output_db_name = kwargs.get("output_db_name", None)
1940
+
1941
+ arg_info = []
1942
+ arg_info.append(["volatile", volatile, False, (bool)])
1943
+ arg_info.append(["persist", persist, False, (bool)])
1944
+ arg_info.append(["output_table_name", output_table_name, True, (str), True])
1945
+ arg_info.append(["output_db_name", output_db_name, True, (str), True])
1946
+
1947
+ _Validators._validate_function_arguments(arg_info)
1948
+
1949
+ # If table is name is not provided by user, generate the temp table name.
1950
+ # Else, get fully qualified table name.
1951
+ if output_table_name is None:
1952
+ # Generate the name of the table, if not provide by user.
1953
+ func_params = self._get_generate_temp_table_params(persist=persist,
1954
+ output_db=output_db_name,
1955
+ volatile=volatile)
1956
+
1957
+ # Generate temp table name and add it to garbage collector.
1958
+ table_name = UtilFuncs._generate_temp_table_name(**func_params)
1959
+ else:
1960
+ # If database name is not provided by user, get the default database name
1961
+ # else use user provided database name.
1962
+ db_name = output_db_name if output_db_name is not None else \
1963
+ _get_context_temp_databasename(table_type=self.db_object_type)
1964
+
1965
+ # Get the fully qualified table name.
1966
+ table_name = "{}.{}".format(UtilFuncs._teradata_quote_arg(db_name,
1967
+ "\"", False),
1968
+ UtilFuncs._teradata_quote_arg(output_table_name,
1969
+ "\"", False))
1970
+
1971
+ # If persist is set to False, add the table name to
1972
+ # Garbage collector.
1973
+ if not persist:
1974
+ GarbageCollector._add_to_garbagecollector(table_name)
1975
+
1976
+ # Populate the output arg, output table map and volatile output.
1977
+ self._func_output_args = table_name
1978
+ self._function_output_table_map["result"] = table_name
1979
+ self._volatile_output = volatile
1980
+
1981
+ def __process_individual_argument(self, argument, **kwargs):
1982
+ """
1983
+ DESCRIPTION:
1984
+ Internal function to process the individual arguments.
1985
+ 1. If the argument does not have nested parameters and is present in kwargs,
1986
+ the function does the following:
1987
+ * Checks the required arguments are passed or not.
1988
+ * Checks the type of the arguments are expected or not.
1989
+ * Checks for permitted values.
1990
+ * Checks for empty string.
1991
+ * If validations run fine,
1992
+ then returns a dict with the SQL name of the argument as key
1993
+ and user provided value as the value.
1994
+ * Dictornary without nested parameters is formed as below:
1995
+ {arg_sql_name : value}
1996
+ 2. If the argument has nested params:
1997
+ * Function loops over the nested parameter and calls itself recursively
1998
+ on the nested parameters and repeats the process.
1999
+ * Dictonary with nested arguments are formed as below:
2000
+ { Parent_sql_name : { Child1_sql_name : value, Child2_sql_name : value}}
2001
+
2002
+ PARAMETERS:
2003
+ argument:
2004
+ Required Argument.
2005
+ Specifies the argument object (_AnlyFuncArgument).
2006
+ Types: _AnlyFuncArgument
2007
+
2008
+ kwargs:
2009
+ Specifies the keyword arguments passed to a function.
2010
+
2011
+ RETURNS:
2012
+ None.
2013
+
2014
+ RAISES:
2015
+ ValueError OR TypeError OR TeradataMlException.
2016
+
2017
+ EXAMPLES:
2018
+ self._process_other_arguments(argument, arg1="string", arg2="db", arg3=2)
2019
+
2020
+ """
2021
+ sql_name = argument.get_name()
2022
+ lang_name = argument.get_lang_name()
2023
+ arg_value = kwargs.get(lang_name)
2024
+ # Set the "argument".
2025
+ self._spl_func_obj.set_arg_name(argument)
2026
+ # Let's get spl handler if function requires.
2027
+ special_case_handler = self._spl_func_obj._get_handle()
2028
+
2029
+ if len(argument.get_nested_param_list()) == 0:
2030
+ self._validate_analytic_function_argument(lang_name, arg_value, argument)
2031
+ # If argument is not None and it is not equal to the default value,
2032
+ # add the sql_name and arg_value to the dict else return an empty dict
2033
+ if arg_value is not None and arg_value != argument.get_default_value():
2034
+
2035
+ # If get_match_length_of_arguments is True, check if the arg_value is
2036
+ # a list and of the required size.
2037
+ if argument.get_match_length_of_arguments():
2038
+ required_length = argument.get_required_length()
2039
+
2040
+ _Validators._valid_list_length(arg_value=arg_value, arg_name=lang_name,
2041
+ required_length=required_length)
2042
+
2043
+ # Perform the checks which are specific to argument(_AnlyFuncArgument) type.
2044
+ # Check lower bound and upper bound for numeric arguments.
2045
+ if isinstance(arg_value, (int, float)):
2046
+ lower_bound_inclusive = argument.get_lower_bound_type() == "INCLUSIVE"
2047
+ upper_bound_inclusive = argument.get_upper_bound_type() == "INCLUSIVE"
2048
+ _Validators._validate_argument_range(arg_value,
2049
+ lang_name,
2050
+ lbound=argument.get_lower_bound(),
2051
+ ubound=argument.get_upper_bound(),
2052
+ lbound_inclusive=lower_bound_inclusive,
2053
+ ubound_inclusive=upper_bound_inclusive)
2054
+
2055
+ # If the argument is a bool type, convert it to integer since SQL do
2056
+ # not know boolean processing.
2057
+ if bool in argument.get_python_type() and isinstance(arg_value, bool):
2058
+ arg_value = int(arg_value)
2059
+
2060
+ # Handle special cases for "arg_values" based on handling method.
2061
+ arg_value = special_case_handler(arg_value) if special_case_handler is not None else arg_value
2062
+ return {sql_name : arg_value}
2063
+ return {}
2064
+ else:
2065
+ temp_dict = {}
2066
+ for nested_arg in argument.get_nested_param_list():
2067
+ temp_dict.update(self.__process_individual_argument(nested_arg, **kwargs))
2068
+ return_dict = {sql_name : temp_dict} if temp_dict else {}
2069
+ return return_dict
2070
+
2071
+ def _process_other_argument(self, **kwargs):
2072
+ """
2073
+ DESCRIPTION:
2074
+ Function to process the metadata arguments. It does the following:
2075
+ * Iterates over the metadata arguments, calls __process_individual_argument
2076
+ for each argument and populates the dict '_func_other_args'.
2077
+
2078
+ PARAMETERS:
2079
+ kwargs:
2080
+ Specifies the keyword arguments passed to a function.
2081
+
2082
+ RETURNS:
2083
+ None.
2084
+
2085
+ RAISES:
2086
+ ValueError OR TypeError OR TeradataMlException.
2087
+
2088
+ EXAMPLES:
2089
+ self._process_other_arguments(arg1="string", arg2="db", arg3=2)
2090
+ """
2091
+ for argument in self._metadata.arguments:
2092
+ self._func_other_args.update(self.__process_individual_argument(argument, **kwargs))
2093
+
2094
+ # Process the InputFmt arguments.
2095
+ for input_fmt_argument in self._metadata.input_fmt_arguments:
2096
+ self._func_input_fmt_arguments.update(
2097
+ self.__process_individual_argument(input_fmt_argument,
2098
+ **kwargs))
2099
+
2100
+ # Process the OutputFmt arguments.
2101
+ for output_fmt_argument in self._metadata.output_fmt_arguments:
2102
+ self._func_output_fmt_arguments.update(
2103
+ self.__process_individual_argument(output_fmt_argument,
2104
+ **kwargs))
2105
+
2106
+ @collect_queryband(attr="func_name")
2107
+ def _execute_query(self, persist=False, volatile=None, display_table_name=True):
2108
+ """
2109
+ DESCRIPTION:
2110
+ Function to execute query on Vantage.
2111
+
2112
+ PARAMETERS:
2113
+ persist:
2114
+ Optional Argument.
2115
+ Specifies whether to persist a table or not.
2116
+ Default Value: False
2117
+ Type: bool
2118
+
2119
+ display_table_name:
2120
+ Optional Argument.
2121
+ Specifies whether to display the table names or not when
2122
+ persist is set to True.
2123
+ Default Value: True
2124
+ Type: bool
2125
+
2126
+ RETURNS:
2127
+ None
2128
+
2129
+ RAISES:
2130
+ TeradataMlException
2131
+
2132
+ EXAMPLES:
2133
+ self._execute_query()
2134
+ """
2135
+ try:
2136
+ # Execute already generated query.
2137
+ UtilFuncs._execute_query(query=self.sqlmr_query)
2138
+
2139
+ # Print the table/view names if display_table_name is set to True.
2140
+ if persist and display_table_name:
2141
+ # SQL is executed. So, print the table/view names.
2142
+ for output_attribute, table_name in self._function_output_table_map.items():
2143
+ print("{} data stored in table '{}'".format(output_attribute, table_name))
2144
+
2145
+ except Exception as emsg:
2146
+ raise TeradataMlException(Messages.get_message(MessageCodes.TDMLDF_EXEC_SQL_FAILED, str(emsg)),
2147
+ MessageCodes.TDMLDF_EXEC_SQL_FAILED)
2148
+
2149
+
2150
+ class _BYOMFunctionExecutor(_SQLEFunctionExecutor):
2151
+ def __init__(self, func_name):
2152
+ """
2153
+ DESCRIPTION:
2154
+ Constructor for the class.
2155
+
2156
+ PARAMETERS:
2157
+ func_name:
2158
+ Required Argument.
2159
+ Specifies the name of the analytic function, which is exposed to the user.
2160
+ Types: str
2161
+
2162
+ RAISES:
2163
+ None
2164
+
2165
+ EXAMPLES:
2166
+ _BYOMFunctionExecutor("ONNXPredict")
2167
+ """
2168
+ super().__init__(func_name, TeradataAnalyticFunctionTypes.BYOM.value)
2169
+
2170
+ def _generate_query(self, volatile=False):
2171
+ """
2172
+ DESCRIPTION:
2173
+ Function to generate the SQL query for BYOM analytic function.
2174
+
2175
+ PARAMETERS:
2176
+ volatile:
2177
+ Optional Argument.
2178
+ Specifies whether to create a volatile table or not.
2179
+ Default Value: False
2180
+ Type: bool
2181
+
2182
+ RETURNS:
2183
+ None.
2184
+
2185
+ RAISES:
2186
+ None.
2187
+
2188
+ EXAMPLES:
2189
+ self._generate_query()
2190
+ """
2191
+ # Check for byom install location and
2192
+ # update the db_name.
2193
+ db_name = None
2194
+ if configure.byom_install_location is not None:
2195
+ db_name = configure.byom_install_location
2196
+
2197
+ self.__aqg_obj = AnalyticQueryGenerator(function_name=self._metadata.sql_function_name,
2198
+ func_input_arg_sql_names=self._func_input_arg_sql_names,
2199
+ func_input_table_view_query=self._func_input_table_view_query,
2200
+ func_input_dataframe_type=self._func_input_dataframe_type,
2201
+ func_input_distribution=self._func_input_distribution,
2202
+ func_input_partition_by_cols=self._func_input_partition_by_cols,
2203
+ func_input_order_by_cols=self._func_input_order_by_cols,
2204
+ func_other_arg_sql_names=self._func_other_arg_sql_names,
2205
+ func_other_args_values=self._func_other_args,
2206
+ func_other_arg_json_datatypes=self._func_other_arg_json_datatypes,
2207
+ func_output_args_sql_names=self._func_output_args_sql_names,
2208
+ func_output_args_values=self._func_output_args,
2209
+ engine="ENGINE_SQL",
2210
+ db_name=db_name,
2211
+ volatile_output=volatile,
2212
+ skip_config_lookup=True,
2213
+ func_input_local_order=self._func_input_local_order)
2214
+
2215
+ # Invoke call to SQL-MR generation.
2216
+ self.sqlmr_query = self.__aqg_obj._gen_sqlmr_select_stmt_sql()
2217
+
2218
+ class _StoredProcedureExecutor(_UAFFunctionExecutor):
2219
+ """
2220
+ Class to hold the attributes and provide methods to enable execution for Stored Procedures.
2221
+ As the stored procedure JSONs are written like UAF Functions we will use
2222
+ _UAFFunctionExecutor as the base class.
2223
+ """
2224
+ def __init__(self, func_name):
2225
+ """
2226
+ DESCRIPTION:
2227
+ Constructor for the class.
2228
+
2229
+ PARAMETERS:
2230
+ func_name:
2231
+ Required Argument.
2232
+ Specifies the name of the analytic function, which is exposed to the user.
2233
+ Types: str
2234
+
2235
+ RAISES:
2236
+ None
2237
+
2238
+ EXAMPLES:
2239
+ _StoredProcedureExecutor("FilterFactory1d")
2240
+ """
2241
+ super().__init__(func_name, TeradataAnalyticFunctionTypes.STORED_PROCEDURE.value)
2242
+ self._func_other_args = OrderedDict()
2243
+
2244
+ def _generate_query(self, volatile=False):
2245
+ """
2246
+ DESCRIPTION:
2247
+ Function to generate the SQL query for Stored Procedures.
2248
+
2249
+ PARAMETERS:
2250
+ volatile:
2251
+ Optional Argument.
2252
+ Specifies whether to create a volatile table or not.
2253
+ Default Value: False
2254
+ Type: bool
2255
+
2256
+ RETURNS:
2257
+ None.
2258
+
2259
+ RAISES:
2260
+ None.
2261
+
2262
+ EXAMPLES:
2263
+ self._generate_query()
2264
+ """
2265
+ # update the db_name.
2266
+ db_name = None
2267
+ if configure.stored_procedure_install_location is not None:
2268
+ db_name = configure.stored_procedure_install_location
2269
+
2270
+ self.__aqg_obj = StoredProcedureQueryGenerator(function_name=self._metadata.sql_function_name,
2271
+ func_other_args_values=self._func_other_args,
2272
+ db_name=db_name)
2273
+
2274
+ # Invoke call to SQL-MR generation.
2275
+ self.sqlmr_query = self.__aqg_obj._gen_call_stmt()
2276
+
2277
+ def _process_other_argument(self, **kwargs):
2278
+ """
2279
+ DESCRIPTION:
2280
+ Internal function to process the arguments.
2281
+ 1. The function does the following:
2282
+ * Checks the required arguments are passed or not.
2283
+ * Checks the type of the arguments are expected or not.
2284
+ * Checks for permitted values.
2285
+ * Checks for empty string.
2286
+ * If validations run fine,
2287
+ then returns a dict with the SQL name of the argument as key
2288
+ and user provided value as the value {arg_sql_name : value}
2289
+
2290
+ PARAMETERS:
2291
+
2292
+ kwargs:
2293
+ Specifies the keyword arguments passed to a function.
2294
+
2295
+ RETURNS:
2296
+ None.
2297
+
2298
+ RAISES:
2299
+ ValueError OR TypeError OR TeradataMlException.
2300
+
2301
+ EXAMPLES:
2302
+ self._process_other_arguments(argument, arg1="string", arg2="db", arg3=2)
2303
+
2304
+ """
2305
+ ## As the function 'FilterFactory1d' requries the output table to be created before the stored procedure call,
2306
+ ## creating it and adding them as parameters as stored procedure requires them
2307
+
2308
+ if self.func_name == "FilterFactory1d":
2309
+ columns_to_create = {"ID": INTEGER,
2310
+ "row_i": INTEGER,
2311
+ "FilterMag": FLOAT,
2312
+ "description": VARCHAR}
2313
+
2314
+ schema_name = UtilFuncs._extract_db_name(self._func_output_args)
2315
+ table_name = UtilFuncs._extract_table_name(self._func_output_args)
2316
+
2317
+ _create_table(table_name=table_name,
2318
+ columns=columns_to_create,
2319
+ schema_name=schema_name,
2320
+ primary_index=["ID", "row_i"])
2321
+ self._func_other_args['database_name'] = UtilFuncs._teradata_quote_arg(schema_name, "\'", False)
2322
+ self._func_other_args['table_name'] = UtilFuncs._teradata_quote_arg(table_name, "\'", False)
2323
+
2324
+ # 'CopyArt' function requires 'SRC_DATABASENMAE' and 'SRC_TABLENAME' as input arguments.
2325
+ # Extract the database and table name from the 'data' argument and add them to the
2326
+ # '_func_other_args' dictionary.
2327
+ if self.func_name == "CopyArt":
2328
+ data = kwargs.get('data', None)
2329
+ argument_info = ["data", data, False, (DataFrame), True]
2330
+ # 'data' is a required argument for 'CopyArt' function to get the source table name and database name.
2331
+ _Validators._validate_missing_required_arguments([argument_info])
2332
+ # 'data' should be a DataFrame.
2333
+ _Validators._validate_function_arguments([argument_info])
2334
+
2335
+ # Add the 'SRC_DATABASENMAE' and 'SRC_TABLENAME' to the '_func_other_args' dictionary.
2336
+ self._func_other_args["SRC_DATABASENMAE"] = "'{0}'".format(UtilFuncs._extract_db_name(data._table_name))
2337
+ self._func_other_args["SRC_TABLENAME"] = "'{0}'".format(UtilFuncs._extract_table_name(data._table_name))
2338
+
2339
+ # Setting permanent_table to True if 'persist' is set to True, else False.
2340
+ kwargs['permanent_table'] = 'True' if kwargs.get('persist', False) else 'False'
2341
+
2342
+ # Setting 'map_name' to empty string if not provided.
2343
+ if kwargs.get('map_name', None) is None:
2344
+ kwargs['map_name'] = ""
2345
+
2346
+ # CopyArt does not take 'data' as input argument.
2347
+ kwargs.pop('data')
2348
+
2349
+ for argument in self._metadata.arguments:
2350
+ sql_name = argument.get_name()
2351
+ lang_name = argument.get_lang_name()
2352
+ arg_value = kwargs.get(lang_name)
2353
+ # Set the "argument".
2354
+ self._spl_func_obj.set_arg_name(argument)
2355
+ # Let's get spl handler if function requires.
2356
+ special_case_handler = self._spl_func_obj._get_handle()
2357
+
2358
+ self._validate_analytic_function_argument(lang_name, arg_value, argument)
2359
+ # As stored procedures require the argument to passed in positional order and
2360
+ # NULL is required for arguments which are not present
2361
+ if arg_value is None:
2362
+ self._func_other_args[sql_name] = 'NULL'
2363
+
2364
+ # If argument is not None add the sql_name and arg_value to the dict.
2365
+ else:
2366
+ # If get_match_length_of_arguments is True, check if the arg_value is
2367
+ # a list and of the required size.
2368
+ if argument.get_match_length_of_arguments():
2369
+ required_length = argument.get_required_length()
2370
+
2371
+ _Validators._valid_list_length(arg_value=arg_value, arg_name=lang_name,
2372
+ required_length=required_length)
2373
+
2374
+ # Perform the checks which are specific to argument(_AnlyFuncArgument) type.
2375
+ # Check lower bound and upper bound for numeric arguments.
2376
+ if isinstance(arg_value, (int, float)):
2377
+ lower_bound_inclusive = argument.get_lower_bound_type() == "INCLUSIVE"
2378
+ upper_bound_inclusive = argument.get_upper_bound_type() == "INCLUSIVE"
2379
+ _Validators._validate_argument_range(arg_value,
2380
+ lang_name,
2381
+ lbound=argument.get_lower_bound(),
2382
+ ubound=argument.get_upper_bound(),
2383
+ lbound_inclusive=lower_bound_inclusive,
2384
+ ubound_inclusive=upper_bound_inclusive)
2385
+
2386
+ # If the argument is a bool type, convert it to integer since SQL do
2387
+ # not know boolean processing.
2388
+ if bool in argument.get_python_type() and isinstance(arg_value, bool):
2389
+ arg_value = int(arg_value)
2390
+
2391
+ # Handle special cases for "arg_values" based on handling method.
2392
+ arg_value = special_case_handler(arg_value) if special_case_handler is not None else arg_value
2393
+ self._func_other_args[sql_name] = arg_value
2394
+
2395
+
2396
+ def _process_function_output(self, **kwargs):
2397
+ """
2398
+ DESCRIPTION:
2399
+ Internal function to process the function output.
2400
+ """
2401
+ for lang_name, table_name in self._function_output_table_map.items():
2402
+ # For 'CopyArt' function, the result should be the destination table name and database name provided as input.
2403
+ if self.func_name == "CopyArt":
2404
+ out_table_name = kwargs.get('table_name')
2405
+ out_db_name = kwargs.get('database_name')
2406
+ else:
2407
+ out_table_name = UtilFuncs._extract_table_name(table_name)
2408
+ out_db_name = UtilFuncs._extract_db_name(table_name)
2409
+ df = self._awu._create_data_set_object(
2410
+ df_input=out_table_name, database_name=out_db_name, source_type="table")
2411
+ self._dyn_cls_data_members[lang_name] = df
2412
+ # Condition make sure that the first element always be result or output in _mlresults.
2413
+ if lang_name in ["output", "result"]:
2414
+ self._mlresults.insert(0, df)
2415
+ else:
2416
+ self._mlresults.append(df)