teradataml 17.20.0.6__py3-none-any.whl → 20.0.0.0__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.
Potentially problematic release.
This version of teradataml might be problematic. Click here for more details.
- teradataml/LICENSE-3RD-PARTY.pdf +0 -0
- teradataml/LICENSE.pdf +0 -0
- teradataml/README.md +238 -1
- teradataml/__init__.py +13 -3
- teradataml/_version.py +1 -1
- teradataml/analytics/Transformations.py +4 -4
- teradataml/analytics/__init__.py +0 -2
- teradataml/analytics/analytic_function_executor.py +3 -0
- teradataml/analytics/json_parser/utils.py +13 -12
- teradataml/analytics/sqle/DecisionTreePredict.py +15 -30
- teradataml/analytics/sqle/NaiveBayesPredict.py +11 -20
- teradataml/analytics/sqle/__init__.py +0 -13
- teradataml/analytics/utils.py +1 -0
- teradataml/analytics/valib.py +3 -0
- teradataml/automl/__init__.py +1628 -0
- teradataml/automl/custom_json_utils.py +1270 -0
- teradataml/automl/data_preparation.py +993 -0
- teradataml/automl/data_transformation.py +727 -0
- teradataml/automl/feature_engineering.py +1648 -0
- teradataml/automl/feature_exploration.py +547 -0
- teradataml/automl/model_evaluation.py +163 -0
- teradataml/automl/model_training.py +887 -0
- teradataml/catalog/__init__.py +0 -2
- teradataml/catalog/byom.py +49 -6
- teradataml/catalog/function_argument_mapper.py +0 -2
- teradataml/catalog/model_cataloging_utils.py +2 -1021
- teradataml/common/aed_utils.py +6 -2
- teradataml/common/constants.py +50 -58
- teradataml/common/deprecations.py +160 -0
- teradataml/common/garbagecollector.py +61 -104
- teradataml/common/messagecodes.py +27 -36
- teradataml/common/messages.py +11 -15
- teradataml/common/utils.py +205 -287
- teradataml/common/wrapper_utils.py +1 -110
- teradataml/context/context.py +150 -78
- teradataml/data/bank_churn.csv +10001 -0
- teradataml/data/bmi.csv +501 -0
- teradataml/data/docs/sqle/docs_17_10/BincodeFit.py +3 -3
- teradataml/data/docs/sqle/docs_17_10/BincodeTransform.py +6 -5
- teradataml/data/docs/sqle/docs_17_10/Fit.py +1 -1
- teradataml/data/docs/sqle/docs_17_10/OneHotEncodingTransform.py +1 -1
- teradataml/data/docs/sqle/docs_17_10/OutlierFilterTransform.py +1 -1
- teradataml/data/docs/sqle/docs_17_10/PolynomialFeaturesTransform.py +2 -2
- teradataml/data/docs/sqle/docs_17_10/RowNormalizeTransform.py +2 -1
- teradataml/data/docs/sqle/docs_17_10/ScaleTransform.py +1 -0
- teradataml/data/docs/sqle/docs_17_10/SimpleImputeTransform.py +1 -1
- teradataml/data/docs/sqle/docs_17_10/Transform.py +2 -1
- teradataml/data/docs/sqle/docs_17_20/BincodeFit.py +3 -3
- teradataml/data/docs/sqle/docs_17_20/BincodeTransform.py +6 -5
- teradataml/data/docs/sqle/docs_17_20/Fit.py +1 -1
- teradataml/data/docs/sqle/docs_17_20/GLM.py +1 -1
- teradataml/data/docs/sqle/docs_17_20/GLMPredictPerSegment.py +9 -10
- teradataml/data/docs/sqle/docs_17_20/KMeansPredict.py +3 -2
- teradataml/data/docs/sqle/docs_17_20/NaiveBayesTextClassifierPredict.py +16 -15
- teradataml/data/docs/sqle/docs_17_20/NaiveBayesTextClassifierTrainer.py +2 -2
- teradataml/data/docs/sqle/docs_17_20/NonLinearCombineFit.py +2 -2
- teradataml/data/docs/sqle/docs_17_20/NonLinearCombineTransform.py +8 -8
- teradataml/data/docs/sqle/docs_17_20/OneClassSVMPredict.py +21 -20
- teradataml/data/docs/sqle/docs_17_20/OneHotEncodingTransform.py +1 -1
- teradataml/data/docs/sqle/docs_17_20/OutlierFilterTransform.py +8 -3
- teradataml/data/docs/sqle/docs_17_20/PolynomialFeaturesTransform.py +6 -5
- teradataml/data/docs/sqle/docs_17_20/RandomProjectionTransform.py +6 -6
- teradataml/data/docs/sqle/docs_17_20/RowNormalizeTransform.py +2 -1
- teradataml/data/docs/sqle/docs_17_20/SVM.py +1 -1
- teradataml/data/docs/sqle/docs_17_20/SVMPredict.py +16 -16
- teradataml/data/docs/sqle/docs_17_20/ScaleTransform.py +1 -0
- teradataml/data/docs/sqle/docs_17_20/SimpleImputeTransform.py +3 -2
- teradataml/data/docs/sqle/docs_17_20/TDDecisionForestPredict.py +4 -4
- teradataml/data/docs/sqle/docs_17_20/TDGLMPredict.py +19 -19
- teradataml/data/docs/sqle/docs_17_20/TargetEncodingTransform.py +5 -4
- teradataml/data/docs/sqle/docs_17_20/Transform.py +2 -2
- teradataml/data/docs/sqle/docs_17_20/XGBoostPredict.py +9 -9
- teradataml/data/fish.csv +160 -0
- teradataml/data/glass_types.csv +215 -0
- teradataml/data/insurance.csv +1 -1
- teradataml/data/iris_data.csv +151 -0
- teradataml/data/jsons/sqle/17.10/TD_FunctionTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_OneHotEncodingTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_OutlierFilterTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_PolynomialFeaturesTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_RowNormalizeTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_ScaleTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_SimpleImputeTransform.json +1 -0
- teradataml/data/load_example_data.py +3 -0
- teradataml/data/multi_model_classification.csv +401 -0
- teradataml/data/multi_model_regression.csv +401 -0
- teradataml/data/openml_example.json +63 -0
- teradataml/data/scripts/deploy_script.py +65 -0
- teradataml/data/scripts/mapper.R +20 -0
- teradataml/data/scripts/sklearn/__init__.py +0 -0
- teradataml/data/scripts/sklearn/sklearn_fit.py +175 -0
- teradataml/data/scripts/sklearn/sklearn_fit_predict.py +135 -0
- teradataml/data/scripts/sklearn/sklearn_function.template +113 -0
- teradataml/data/scripts/sklearn/sklearn_model_selection_split.py +158 -0
- teradataml/data/scripts/sklearn/sklearn_neighbors.py +152 -0
- teradataml/data/scripts/sklearn/sklearn_score.py +128 -0
- teradataml/data/scripts/sklearn/sklearn_transform.py +179 -0
- teradataml/data/templates/open_source_ml.json +9 -0
- teradataml/data/teradataml_example.json +73 -1
- teradataml/data/test_classification.csv +101 -0
- teradataml/data/test_prediction.csv +101 -0
- teradataml/data/test_regression.csv +101 -0
- teradataml/data/train_multiclass.csv +101 -0
- teradataml/data/train_regression.csv +101 -0
- teradataml/data/train_regression_multiple_labels.csv +101 -0
- teradataml/data/wine_data.csv +1600 -0
- teradataml/dataframe/copy_to.py +79 -13
- teradataml/dataframe/data_transfer.py +8 -0
- teradataml/dataframe/dataframe.py +910 -311
- teradataml/dataframe/dataframe_utils.py +102 -5
- teradataml/dataframe/fastload.py +11 -3
- teradataml/dataframe/setop.py +15 -2
- teradataml/dataframe/sql.py +3735 -77
- teradataml/dataframe/sql_function_parameters.py +56 -5
- teradataml/dataframe/vantage_function_types.py +45 -1
- teradataml/dataframe/window.py +30 -29
- teradataml/dbutils/dbutils.py +18 -1
- teradataml/geospatial/geodataframe.py +18 -7
- teradataml/geospatial/geodataframecolumn.py +5 -0
- teradataml/hyperparameter_tuner/optimizer.py +910 -120
- teradataml/hyperparameter_tuner/utils.py +131 -37
- teradataml/lib/aed_0_1.dll +0 -0
- teradataml/lib/libaed_0_1.dylib +0 -0
- teradataml/lib/libaed_0_1.so +0 -0
- teradataml/libaed_0_1.dylib +0 -0
- teradataml/libaed_0_1.so +0 -0
- teradataml/opensource/__init__.py +1 -0
- teradataml/opensource/sklearn/__init__.py +1 -0
- teradataml/opensource/sklearn/_class.py +255 -0
- teradataml/opensource/sklearn/_sklearn_wrapper.py +1668 -0
- teradataml/opensource/sklearn/_wrapper_utils.py +268 -0
- teradataml/opensource/sklearn/constants.py +54 -0
- teradataml/options/__init__.py +3 -6
- teradataml/options/configure.py +21 -20
- teradataml/scriptmgmt/UserEnv.py +61 -5
- teradataml/scriptmgmt/lls_utils.py +135 -53
- teradataml/table_operators/Apply.py +38 -6
- teradataml/table_operators/Script.py +45 -308
- teradataml/table_operators/TableOperator.py +182 -591
- teradataml/table_operators/__init__.py +0 -1
- teradataml/table_operators/table_operator_util.py +32 -40
- teradataml/utils/validators.py +127 -3
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/METADATA +243 -3
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/RECORD +147 -391
- teradataml/analytics/mle/AdaBoost.py +0 -651
- teradataml/analytics/mle/AdaBoostPredict.py +0 -564
- teradataml/analytics/mle/Antiselect.py +0 -342
- teradataml/analytics/mle/Arima.py +0 -641
- teradataml/analytics/mle/ArimaPredict.py +0 -477
- teradataml/analytics/mle/Attribution.py +0 -1070
- teradataml/analytics/mle/Betweenness.py +0 -658
- teradataml/analytics/mle/Burst.py +0 -711
- teradataml/analytics/mle/CCM.py +0 -600
- teradataml/analytics/mle/CCMPrepare.py +0 -324
- teradataml/analytics/mle/CFilter.py +0 -460
- teradataml/analytics/mle/ChangePointDetection.py +0 -572
- teradataml/analytics/mle/ChangePointDetectionRT.py +0 -477
- teradataml/analytics/mle/Closeness.py +0 -737
- teradataml/analytics/mle/ConfusionMatrix.py +0 -420
- teradataml/analytics/mle/Correlation.py +0 -477
- teradataml/analytics/mle/Correlation2.py +0 -573
- teradataml/analytics/mle/CoxHazardRatio.py +0 -679
- teradataml/analytics/mle/CoxPH.py +0 -556
- teradataml/analytics/mle/CoxSurvival.py +0 -478
- teradataml/analytics/mle/CumulativeMovAvg.py +0 -363
- teradataml/analytics/mle/DTW.py +0 -623
- teradataml/analytics/mle/DWT.py +0 -564
- teradataml/analytics/mle/DWT2D.py +0 -599
- teradataml/analytics/mle/DecisionForest.py +0 -716
- teradataml/analytics/mle/DecisionForestEvaluator.py +0 -363
- teradataml/analytics/mle/DecisionForestPredict.py +0 -561
- teradataml/analytics/mle/DecisionTree.py +0 -830
- teradataml/analytics/mle/DecisionTreePredict.py +0 -528
- teradataml/analytics/mle/ExponentialMovAvg.py +0 -418
- teradataml/analytics/mle/FMeasure.py +0 -402
- teradataml/analytics/mle/FPGrowth.py +0 -734
- teradataml/analytics/mle/FrequentPaths.py +0 -695
- teradataml/analytics/mle/GLM.py +0 -558
- teradataml/analytics/mle/GLML1L2.py +0 -547
- teradataml/analytics/mle/GLML1L2Predict.py +0 -519
- teradataml/analytics/mle/GLMPredict.py +0 -529
- teradataml/analytics/mle/HMMDecoder.py +0 -945
- teradataml/analytics/mle/HMMEvaluator.py +0 -901
- teradataml/analytics/mle/HMMSupervised.py +0 -521
- teradataml/analytics/mle/HMMUnsupervised.py +0 -572
- teradataml/analytics/mle/Histogram.py +0 -561
- teradataml/analytics/mle/IDWT.py +0 -476
- teradataml/analytics/mle/IDWT2D.py +0 -493
- teradataml/analytics/mle/IdentityMatch.py +0 -763
- teradataml/analytics/mle/Interpolator.py +0 -918
- teradataml/analytics/mle/KMeans.py +0 -485
- teradataml/analytics/mle/KNN.py +0 -627
- teradataml/analytics/mle/KNNRecommender.py +0 -488
- teradataml/analytics/mle/KNNRecommenderPredict.py +0 -581
- teradataml/analytics/mle/LAR.py +0 -439
- teradataml/analytics/mle/LARPredict.py +0 -478
- teradataml/analytics/mle/LDA.py +0 -548
- teradataml/analytics/mle/LDAInference.py +0 -492
- teradataml/analytics/mle/LDATopicSummary.py +0 -464
- teradataml/analytics/mle/LevenshteinDistance.py +0 -450
- teradataml/analytics/mle/LinReg.py +0 -433
- teradataml/analytics/mle/LinRegPredict.py +0 -438
- teradataml/analytics/mle/MinHash.py +0 -544
- teradataml/analytics/mle/Modularity.py +0 -587
- teradataml/analytics/mle/NEREvaluator.py +0 -410
- teradataml/analytics/mle/NERExtractor.py +0 -595
- teradataml/analytics/mle/NERTrainer.py +0 -458
- teradataml/analytics/mle/NGrams.py +0 -570
- teradataml/analytics/mle/NPath.py +0 -634
- teradataml/analytics/mle/NTree.py +0 -549
- teradataml/analytics/mle/NaiveBayes.py +0 -462
- teradataml/analytics/mle/NaiveBayesPredict.py +0 -513
- teradataml/analytics/mle/NaiveBayesTextClassifier.py +0 -607
- teradataml/analytics/mle/NaiveBayesTextClassifier2.py +0 -531
- teradataml/analytics/mle/NaiveBayesTextClassifierPredict.py +0 -799
- teradataml/analytics/mle/NamedEntityFinder.py +0 -529
- teradataml/analytics/mle/NamedEntityFinderEvaluator.py +0 -414
- teradataml/analytics/mle/NamedEntityFinderTrainer.py +0 -396
- teradataml/analytics/mle/POSTagger.py +0 -417
- teradataml/analytics/mle/Pack.py +0 -411
- teradataml/analytics/mle/PageRank.py +0 -535
- teradataml/analytics/mle/PathAnalyzer.py +0 -426
- teradataml/analytics/mle/PathGenerator.py +0 -367
- teradataml/analytics/mle/PathStart.py +0 -464
- teradataml/analytics/mle/PathSummarizer.py +0 -470
- teradataml/analytics/mle/Pivot.py +0 -471
- teradataml/analytics/mle/ROC.py +0 -425
- teradataml/analytics/mle/RandomSample.py +0 -637
- teradataml/analytics/mle/RandomWalkSample.py +0 -490
- teradataml/analytics/mle/SAX.py +0 -779
- teradataml/analytics/mle/SVMDense.py +0 -677
- teradataml/analytics/mle/SVMDensePredict.py +0 -536
- teradataml/analytics/mle/SVMDenseSummary.py +0 -437
- teradataml/analytics/mle/SVMSparse.py +0 -557
- teradataml/analytics/mle/SVMSparsePredict.py +0 -553
- teradataml/analytics/mle/SVMSparseSummary.py +0 -435
- teradataml/analytics/mle/Sampling.py +0 -549
- teradataml/analytics/mle/Scale.py +0 -565
- teradataml/analytics/mle/ScaleByPartition.py +0 -496
- teradataml/analytics/mle/ScaleMap.py +0 -378
- teradataml/analytics/mle/ScaleSummary.py +0 -320
- teradataml/analytics/mle/SentenceExtractor.py +0 -363
- teradataml/analytics/mle/SentimentEvaluator.py +0 -432
- teradataml/analytics/mle/SentimentExtractor.py +0 -578
- teradataml/analytics/mle/SentimentTrainer.py +0 -405
- teradataml/analytics/mle/SeriesSplitter.py +0 -641
- teradataml/analytics/mle/Sessionize.py +0 -475
- teradataml/analytics/mle/SimpleMovAvg.py +0 -397
- teradataml/analytics/mle/StringSimilarity.py +0 -425
- teradataml/analytics/mle/TF.py +0 -389
- teradataml/analytics/mle/TFIDF.py +0 -504
- teradataml/analytics/mle/TextChunker.py +0 -414
- teradataml/analytics/mle/TextClassifier.py +0 -399
- teradataml/analytics/mle/TextClassifierEvaluator.py +0 -413
- teradataml/analytics/mle/TextClassifierTrainer.py +0 -565
- teradataml/analytics/mle/TextMorph.py +0 -494
- teradataml/analytics/mle/TextParser.py +0 -623
- teradataml/analytics/mle/TextTagger.py +0 -530
- teradataml/analytics/mle/TextTokenizer.py +0 -502
- teradataml/analytics/mle/UnivariateStatistics.py +0 -488
- teradataml/analytics/mle/Unpack.py +0 -526
- teradataml/analytics/mle/Unpivot.py +0 -438
- teradataml/analytics/mle/VarMax.py +0 -776
- teradataml/analytics/mle/VectorDistance.py +0 -762
- teradataml/analytics/mle/WeightedMovAvg.py +0 -400
- teradataml/analytics/mle/XGBoost.py +0 -842
- teradataml/analytics/mle/XGBoostPredict.py +0 -627
- teradataml/analytics/mle/__init__.py +0 -123
- teradataml/analytics/mle/json/adaboost_mle.json +0 -135
- teradataml/analytics/mle/json/adaboostpredict_mle.json +0 -85
- teradataml/analytics/mle/json/antiselect_mle.json +0 -34
- teradataml/analytics/mle/json/antiselect_mle_mle.json +0 -34
- teradataml/analytics/mle/json/arima_mle.json +0 -172
- teradataml/analytics/mle/json/arimapredict_mle.json +0 -52
- teradataml/analytics/mle/json/attribution_mle_mle.json +0 -143
- teradataml/analytics/mle/json/betweenness_mle.json +0 -97
- teradataml/analytics/mle/json/burst_mle.json +0 -140
- teradataml/analytics/mle/json/ccm_mle.json +0 -124
- teradataml/analytics/mle/json/ccmprepare_mle.json +0 -14
- teradataml/analytics/mle/json/cfilter_mle.json +0 -93
- teradataml/analytics/mle/json/changepointdetection_mle.json +0 -92
- teradataml/analytics/mle/json/changepointdetectionrt_mle.json +0 -78
- teradataml/analytics/mle/json/closeness_mle.json +0 -104
- teradataml/analytics/mle/json/confusionmatrix_mle.json +0 -79
- teradataml/analytics/mle/json/correlation_mle.json +0 -86
- teradataml/analytics/mle/json/correlationreduce_mle.json +0 -49
- teradataml/analytics/mle/json/coxhazardratio_mle.json +0 -89
- teradataml/analytics/mle/json/coxph_mle.json +0 -98
- teradataml/analytics/mle/json/coxsurvival_mle.json +0 -79
- teradataml/analytics/mle/json/cumulativemovavg_mle.json +0 -34
- teradataml/analytics/mle/json/decisionforest_mle.json +0 -167
- teradataml/analytics/mle/json/decisionforestevaluator_mle.json +0 -33
- teradataml/analytics/mle/json/decisionforestpredict_mle_mle.json +0 -74
- teradataml/analytics/mle/json/decisiontree_mle.json +0 -194
- teradataml/analytics/mle/json/decisiontreepredict_mle_mle.json +0 -86
- teradataml/analytics/mle/json/dtw_mle.json +0 -97
- teradataml/analytics/mle/json/dwt2d_mle.json +0 -116
- teradataml/analytics/mle/json/dwt_mle.json +0 -101
- teradataml/analytics/mle/json/exponentialmovavg_mle.json +0 -55
- teradataml/analytics/mle/json/fmeasure_mle.json +0 -58
- teradataml/analytics/mle/json/fpgrowth_mle.json +0 -159
- teradataml/analytics/mle/json/frequentpaths_mle.json +0 -129
- teradataml/analytics/mle/json/glm_mle.json +0 -111
- teradataml/analytics/mle/json/glml1l2_mle.json +0 -106
- teradataml/analytics/mle/json/glml1l2predict_mle.json +0 -57
- teradataml/analytics/mle/json/glmpredict_mle_mle.json +0 -74
- teradataml/analytics/mle/json/histogram_mle.json +0 -100
- teradataml/analytics/mle/json/hmmdecoder_mle.json +0 -192
- teradataml/analytics/mle/json/hmmevaluator_mle.json +0 -206
- teradataml/analytics/mle/json/hmmsupervised_mle.json +0 -91
- teradataml/analytics/mle/json/hmmunsupervised_mle.json +0 -114
- teradataml/analytics/mle/json/identitymatch_mle.json +0 -88
- teradataml/analytics/mle/json/idwt2d_mle.json +0 -73
- teradataml/analytics/mle/json/idwt_mle.json +0 -66
- teradataml/analytics/mle/json/interpolator_mle.json +0 -151
- teradataml/analytics/mle/json/kmeans_mle.json +0 -97
- teradataml/analytics/mle/json/knn_mle.json +0 -141
- teradataml/analytics/mle/json/knnrecommender_mle.json +0 -111
- teradataml/analytics/mle/json/knnrecommenderpredict_mle.json +0 -75
- teradataml/analytics/mle/json/lar_mle.json +0 -78
- teradataml/analytics/mle/json/larpredict_mle.json +0 -69
- teradataml/analytics/mle/json/lda_mle.json +0 -130
- teradataml/analytics/mle/json/ldainference_mle.json +0 -78
- teradataml/analytics/mle/json/ldatopicsummary_mle.json +0 -64
- teradataml/analytics/mle/json/levenshteindistance_mle.json +0 -92
- teradataml/analytics/mle/json/linreg_mle.json +0 -42
- teradataml/analytics/mle/json/linregpredict_mle.json +0 -56
- teradataml/analytics/mle/json/minhash_mle.json +0 -113
- teradataml/analytics/mle/json/modularity_mle.json +0 -91
- teradataml/analytics/mle/json/naivebayespredict_mle_mle.json +0 -85
- teradataml/analytics/mle/json/naivebayesreduce_mle.json +0 -52
- teradataml/analytics/mle/json/naivebayestextclassifierpredict_mle_mle.json +0 -147
- teradataml/analytics/mle/json/naivebayestextclassifiertrainer2_mle.json +0 -108
- teradataml/analytics/mle/json/naivebayestextclassifiertrainer_mle.json +0 -102
- teradataml/analytics/mle/json/namedentityfinder_mle.json +0 -84
- teradataml/analytics/mle/json/namedentityfinderevaluatorreduce_mle.json +0 -43
- teradataml/analytics/mle/json/namedentityfindertrainer_mle.json +0 -64
- teradataml/analytics/mle/json/nerevaluator_mle.json +0 -54
- teradataml/analytics/mle/json/nerextractor_mle.json +0 -87
- teradataml/analytics/mle/json/nertrainer_mle.json +0 -89
- teradataml/analytics/mle/json/ngrams_mle.json +0 -137
- teradataml/analytics/mle/json/ngramsplitter_mle_mle.json +0 -137
- teradataml/analytics/mle/json/npath@coprocessor_mle.json +0 -73
- teradataml/analytics/mle/json/ntree@coprocessor_mle.json +0 -123
- teradataml/analytics/mle/json/pack_mle.json +0 -58
- teradataml/analytics/mle/json/pack_mle_mle.json +0 -58
- teradataml/analytics/mle/json/pagerank_mle.json +0 -81
- teradataml/analytics/mle/json/pathanalyzer_mle.json +0 -63
- teradataml/analytics/mle/json/pathgenerator_mle.json +0 -40
- teradataml/analytics/mle/json/pathstart_mle.json +0 -62
- teradataml/analytics/mle/json/pathsummarizer_mle.json +0 -72
- teradataml/analytics/mle/json/pivoting_mle.json +0 -71
- teradataml/analytics/mle/json/postagger_mle.json +0 -51
- teradataml/analytics/mle/json/randomsample_mle.json +0 -131
- teradataml/analytics/mle/json/randomwalksample_mle.json +0 -85
- teradataml/analytics/mle/json/roc_mle.json +0 -73
- teradataml/analytics/mle/json/sampling_mle.json +0 -75
- teradataml/analytics/mle/json/sax_mle.json +0 -154
- teradataml/analytics/mle/json/scale_mle.json +0 -93
- teradataml/analytics/mle/json/scalebypartition_mle.json +0 -89
- teradataml/analytics/mle/json/scalemap_mle.json +0 -44
- teradataml/analytics/mle/json/scalesummary_mle.json +0 -14
- teradataml/analytics/mle/json/sentenceextractor_mle.json +0 -41
- teradataml/analytics/mle/json/sentimentevaluator_mle.json +0 -43
- teradataml/analytics/mle/json/sentimentextractor_mle.json +0 -100
- teradataml/analytics/mle/json/sentimenttrainer_mle.json +0 -68
- teradataml/analytics/mle/json/seriessplitter_mle.json +0 -133
- teradataml/analytics/mle/json/sessionize_mle_mle.json +0 -62
- teradataml/analytics/mle/json/simplemovavg_mle.json +0 -48
- teradataml/analytics/mle/json/stringsimilarity_mle.json +0 -50
- teradataml/analytics/mle/json/stringsimilarity_mle_mle.json +0 -50
- teradataml/analytics/mle/json/svmdense_mle.json +0 -165
- teradataml/analytics/mle/json/svmdensepredict_mle.json +0 -95
- teradataml/analytics/mle/json/svmdensesummary_mle.json +0 -58
- teradataml/analytics/mle/json/svmsparse_mle.json +0 -148
- teradataml/analytics/mle/json/svmsparsepredict_mle_mle.json +0 -103
- teradataml/analytics/mle/json/svmsparsesummary_mle.json +0 -57
- teradataml/analytics/mle/json/textchunker_mle.json +0 -40
- teradataml/analytics/mle/json/textclassifier_mle.json +0 -51
- teradataml/analytics/mle/json/textclassifierevaluator_mle.json +0 -43
- teradataml/analytics/mle/json/textclassifiertrainer_mle.json +0 -103
- teradataml/analytics/mle/json/textmorph_mle.json +0 -63
- teradataml/analytics/mle/json/textparser_mle.json +0 -166
- teradataml/analytics/mle/json/texttagger_mle.json +0 -81
- teradataml/analytics/mle/json/texttokenizer_mle.json +0 -91
- teradataml/analytics/mle/json/tf_mle.json +0 -33
- teradataml/analytics/mle/json/tfidf_mle.json +0 -34
- teradataml/analytics/mle/json/univariatestatistics_mle.json +0 -81
- teradataml/analytics/mle/json/unpack_mle.json +0 -91
- teradataml/analytics/mle/json/unpack_mle_mle.json +0 -91
- teradataml/analytics/mle/json/unpivoting_mle.json +0 -63
- teradataml/analytics/mle/json/varmax_mle.json +0 -176
- teradataml/analytics/mle/json/vectordistance_mle.json +0 -179
- teradataml/analytics/mle/json/weightedmovavg_mle.json +0 -48
- teradataml/analytics/mle/json/xgboost_mle.json +0 -178
- teradataml/analytics/mle/json/xgboostpredict_mle.json +0 -104
- teradataml/analytics/sqle/Antiselect.py +0 -321
- teradataml/analytics/sqle/Attribution.py +0 -603
- teradataml/analytics/sqle/DecisionForestPredict.py +0 -408
- teradataml/analytics/sqle/GLMPredict.py +0 -430
- teradataml/analytics/sqle/MovingAverage.py +0 -543
- teradataml/analytics/sqle/NGramSplitter.py +0 -548
- teradataml/analytics/sqle/NPath.py +0 -632
- teradataml/analytics/sqle/NaiveBayesTextClassifierPredict.py +0 -515
- teradataml/analytics/sqle/Pack.py +0 -388
- teradataml/analytics/sqle/SVMSparsePredict.py +0 -464
- teradataml/analytics/sqle/Sessionize.py +0 -390
- teradataml/analytics/sqle/StringSimilarity.py +0 -400
- teradataml/analytics/sqle/Unpack.py +0 -503
- teradataml/analytics/sqle/json/antiselect_sqle.json +0 -21
- teradataml/analytics/sqle/json/attribution_sqle.json +0 -92
- teradataml/analytics/sqle/json/decisionforestpredict_sqle.json +0 -48
- teradataml/analytics/sqle/json/glmpredict_sqle.json +0 -48
- teradataml/analytics/sqle/json/h2opredict_sqle.json +0 -63
- teradataml/analytics/sqle/json/movingaverage_sqle.json +0 -58
- teradataml/analytics/sqle/json/naivebayestextclassifierpredict_sqle.json +0 -76
- teradataml/analytics/sqle/json/ngramsplitter_sqle.json +0 -126
- teradataml/analytics/sqle/json/npath_sqle.json +0 -67
- teradataml/analytics/sqle/json/pack_sqle.json +0 -47
- teradataml/analytics/sqle/json/pmmlpredict_sqle.json +0 -55
- teradataml/analytics/sqle/json/sessionize_sqle.json +0 -43
- teradataml/analytics/sqle/json/stringsimilarity_sqle.json +0 -39
- teradataml/analytics/sqle/json/svmsparsepredict_sqle.json +0 -74
- teradataml/analytics/sqle/json/unpack_sqle.json +0 -80
- teradataml/catalog/model_cataloging.py +0 -980
- teradataml/config/mlengine_alias_definitions_v1.0 +0 -118
- teradataml/config/mlengine_alias_definitions_v1.1 +0 -127
- teradataml/config/mlengine_alias_definitions_v1.3 +0 -129
- teradataml/table_operators/sandbox_container_util.py +0 -643
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/WHEEL +0 -0
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/top_level.txt +0 -0
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/zip-safe +0 -0
|
@@ -14,12 +14,9 @@
|
|
|
14
14
|
# ##################################################################
|
|
15
15
|
|
|
16
16
|
import os
|
|
17
|
-
import tarfile
|
|
18
17
|
import teradataml.dataframe as tdmldf
|
|
19
18
|
import subprocess
|
|
20
19
|
import sys
|
|
21
|
-
from pathlib import Path
|
|
22
|
-
from datetime import datetime
|
|
23
20
|
from io import StringIO
|
|
24
21
|
from teradataml.common.constants import TableOperatorConstants
|
|
25
22
|
from teradataml.common.wrapper_utils import AnalyticsWrapperUtils
|
|
@@ -28,7 +25,6 @@ from teradataml.common.constants import OutputStyle, TeradataConstants
|
|
|
28
25
|
from teradataml.context.context import _get_current_databasename
|
|
29
26
|
from teradataml.context.context import get_context, get_connection
|
|
30
27
|
from teradataml.dataframe.dataframe_utils import DataFrameUtils as df_utils
|
|
31
|
-
from teradataml.common.garbagecollector import GarbageCollector
|
|
32
28
|
from teradataml.dbutils.filemgr import install_file
|
|
33
29
|
from teradataml.dbutils.filemgr import remove_file
|
|
34
30
|
from teradataml.table_operators.table_operator_query_generator import \
|
|
@@ -39,7 +35,6 @@ from teradataml.common.messagecodes import MessageCodes
|
|
|
39
35
|
from teradataml.utils.validators import _Validators
|
|
40
36
|
from teradataml.options.display import display
|
|
41
37
|
from teradataml.options.configure import configure
|
|
42
|
-
from teradataml.table_operators.sandbox_container_util import setup_sandbox_env
|
|
43
38
|
from teradataml.utils.utils import execute_sql
|
|
44
39
|
from teradatasqlalchemy.dialect import dialect as td_dialect
|
|
45
40
|
from teradatasqlalchemy import (BYTEINT, SMALLINT, INTEGER, BIGINT, DECIMAL, FLOAT,
|
|
@@ -57,7 +52,6 @@ from teradatasqlalchemy import (INTERVAL_YEAR, INTERVAL_YEAR_TO_MONTH, INTERVAL_
|
|
|
57
52
|
from teradataml.table_operators.TableOperator import TableOperator
|
|
58
53
|
|
|
59
54
|
class Script(TableOperator):
|
|
60
|
-
|
|
61
55
|
def __init__(self,
|
|
62
56
|
data=None,
|
|
63
57
|
script_name=None,
|
|
@@ -254,15 +248,7 @@ class Script(TableOperator):
|
|
|
254
248
|
... charset='latin',
|
|
255
249
|
... returns=OrderedDict([("word", VARCHAR(15)),("count_input", VARCHAR(2))]))
|
|
256
250
|
|
|
257
|
-
# Run user script locally
|
|
258
|
-
# This helps the user to fix script level issues outside Vantage.
|
|
259
|
-
# Setup the environment by providing local path to docker image file.
|
|
260
|
-
>>> sto.setup_sto_env(docker_image_location='/tmp/sto_sandbox_docker_image.tar'))
|
|
261
|
-
Loading image from /tmp/sto_sandbox_docker_image.tar. It may take few minutes.
|
|
262
|
-
Image loaded successfully.
|
|
263
|
-
Starting a container for stosandbox:1.0 image.
|
|
264
|
-
Container d7c73cb498c79a082180576bb5b10bb07b52efdd3026856146fc15e91147b19f
|
|
265
|
-
started successfully.
|
|
251
|
+
# Run user script locally and using data from csv.
|
|
266
252
|
|
|
267
253
|
>>> sto.test_script(input_data_file='../barrier.csv', data_file_delimiter=',')
|
|
268
254
|
|
|
@@ -316,6 +302,7 @@ class Script(TableOperator):
|
|
|
316
302
|
self.sort_ascending = sort_ascending
|
|
317
303
|
self.nulls_first = nulls_first
|
|
318
304
|
self._check_reserved_keyword = True
|
|
305
|
+
self._skip_argument_validation = False
|
|
319
306
|
|
|
320
307
|
# Create AnalyticsWrapperUtils instance which contains validation functions.
|
|
321
308
|
# This is required for is_default_or_not check.
|
|
@@ -367,6 +354,38 @@ class Script(TableOperator):
|
|
|
367
354
|
# Perform the function validations
|
|
368
355
|
self.__validate()
|
|
369
356
|
|
|
357
|
+
@property
|
|
358
|
+
def skip_argument_validation(self):
|
|
359
|
+
"""
|
|
360
|
+
DESCRIPTION:
|
|
361
|
+
Getter for self._skip_argument_validation.
|
|
362
|
+
|
|
363
|
+
RETURNS:
|
|
364
|
+
bool
|
|
365
|
+
|
|
366
|
+
RAISES:
|
|
367
|
+
None
|
|
368
|
+
"""
|
|
369
|
+
return self._skip_argument_validation
|
|
370
|
+
|
|
371
|
+
@skip_argument_validation.setter
|
|
372
|
+
def skip_argument_validation(self, flag):
|
|
373
|
+
"""
|
|
374
|
+
DESCRIPTION:
|
|
375
|
+
Setter for self._skip_argument_validation
|
|
376
|
+
|
|
377
|
+
PARAMETERS:
|
|
378
|
+
flag Required Argument.
|
|
379
|
+
Specifies whether the arguments should be skipped or not.
|
|
380
|
+
Types: bool
|
|
381
|
+
RETURNS:
|
|
382
|
+
None
|
|
383
|
+
|
|
384
|
+
RAISES:
|
|
385
|
+
None
|
|
386
|
+
"""
|
|
387
|
+
self._skip_argument_validation = flag
|
|
388
|
+
|
|
370
389
|
@property
|
|
371
390
|
def check_reserved_keyword(self):
|
|
372
391
|
"""
|
|
@@ -420,6 +439,8 @@ class Script(TableOperator):
|
|
|
420
439
|
Function to validate Table Operator Function arguments, which verifies missing
|
|
421
440
|
arguments, input argument and table types. Also processes the argument values.
|
|
422
441
|
"""
|
|
442
|
+
if self.skip_argument_validation:
|
|
443
|
+
return
|
|
423
444
|
# Make sure that a non-NULL value has been supplied for all mandatory arguments
|
|
424
445
|
_Validators._validate_missing_required_arguments(self.awu_matrix)
|
|
425
446
|
|
|
@@ -800,91 +821,11 @@ class Script(TableOperator):
|
|
|
800
821
|
nulls_first)
|
|
801
822
|
self.__validate()
|
|
802
823
|
|
|
803
|
-
def setup_sto_env(self, docker_image_location):
|
|
804
|
-
"""
|
|
805
|
-
DESCRIPTION:
|
|
806
|
-
Function enables user to load already downloaded sandbox image.
|
|
807
|
-
|
|
808
|
-
PARAMETERS:
|
|
809
|
-
docker_image_location:
|
|
810
|
-
Required Argument.
|
|
811
|
-
Specifies the location of image on user's system.
|
|
812
|
-
Types: str
|
|
813
|
-
|
|
814
|
-
Note:
|
|
815
|
-
For location to download docker image refer teradataml User Guide.
|
|
816
|
-
|
|
817
|
-
RETURNS:
|
|
818
|
-
None.
|
|
819
|
-
|
|
820
|
-
RAISES:
|
|
821
|
-
TeradataMlException
|
|
822
|
-
|
|
823
|
-
EXAMPLES:
|
|
824
|
-
# Note - Refer to User Guide for setting search path and required permissions.
|
|
825
|
-
# Load example data.
|
|
826
|
-
load_example_data("Script", ["barrier"])
|
|
827
|
-
|
|
828
|
-
# Example - The script mapper.py reads in a line of text input
|
|
829
|
-
# ("Old Macdonald Had A Farm") from csv and
|
|
830
|
-
# splits the line into individual words, emitting a new row for each word.
|
|
831
|
-
|
|
832
|
-
# Create teradataml DataFrame objects.
|
|
833
|
-
>>> barrierdf = DataFrame.from_table("barrier")
|
|
834
|
-
|
|
835
|
-
# Set SEARCHUIFDBPATH.
|
|
836
|
-
>>> execute_sql("SET SESSION SEARCHUIFDBPATH = alice;")
|
|
837
|
-
|
|
838
|
-
# Create a Script object that allows us to execute script on Vantage.
|
|
839
|
-
>>> import os
|
|
840
|
-
>>> td_path = os.path.dirname(teradataml.__file__)
|
|
841
|
-
>>> from teradatasqlalchemy import VARCHAR
|
|
842
|
-
>>> sto = Script(data=barrierdf,
|
|
843
|
-
... script_name='mapper.py',
|
|
844
|
-
... files_local_path= os.path.join(td_path, 'data', 'scripts'),
|
|
845
|
-
... script_command='tdpython3 ./alice/mapper.py',
|
|
846
|
-
... data_order_column="Id",
|
|
847
|
-
... is_local_order=False,
|
|
848
|
-
... nulls_first=False,
|
|
849
|
-
... sort_ascending=False,
|
|
850
|
-
... charset='latin',
|
|
851
|
-
... returns=OrderedDict([("word", VARCHAR(15)),("count_input", VARCHAR(2))]))
|
|
852
|
-
|
|
853
|
-
# Run user script locally within docker container and using data from csv.
|
|
854
|
-
# This helps the user to fix script level issues outside Vantage.
|
|
855
|
-
# Setup the environment by providing local path to docker image file.
|
|
856
|
-
>>> sto.setup_sto_env(docker_image_location='/tmp/sto_sandbox_docker_image.tar')
|
|
857
|
-
Loading image from /tmp/sto_sandbox_docker_image.tar. It may take few minutes.
|
|
858
|
-
Image loaded successfully.
|
|
859
|
-
Starting a container for stosandbox:1.0 image.
|
|
860
|
-
Container d7c73cb498c79a082180576bb5b10bb07b52efdd3026856146fc15e91147b19f
|
|
861
|
-
started successfully.
|
|
862
|
-
|
|
863
|
-
"""
|
|
864
|
-
self.awu_matrix_setup = []
|
|
865
|
-
self.awu_matrix_setup.append((["docker_image_location", docker_image_location,
|
|
866
|
-
False, (str), True]))
|
|
867
|
-
|
|
868
|
-
# Validate missing arguments.
|
|
869
|
-
_Validators._validate_missing_required_arguments(self.awu_matrix_setup)
|
|
870
|
-
|
|
871
|
-
# Validate argument types.
|
|
872
|
-
_Validators._validate_function_arguments(self.awu_matrix_setup)
|
|
873
|
-
|
|
874
|
-
from teradataml.table_operators.sandbox_container_util import setup_sandbox_env
|
|
875
|
-
setup_sandbox_env(sandbox_image_location=docker_image_location,
|
|
876
|
-
sandbox_image_name='stosandbox:1.0')
|
|
877
|
-
|
|
878
|
-
# Set _latest_sandbox_exists to True - which indicates sandbox image for STO
|
|
879
|
-
# exists on the system.
|
|
880
|
-
configure._latest_sandbox_exists = True
|
|
881
|
-
|
|
882
824
|
def test_script(self, supporting_files=None, input_data_file=None, script_args="",
|
|
883
|
-
exec_mode ='
|
|
825
|
+
exec_mode ='local', **kwargs):
|
|
884
826
|
"""
|
|
885
827
|
DESCRIPTION:
|
|
886
|
-
Function enables user to run script
|
|
887
|
-
Vantage.
|
|
828
|
+
Function enables user to run script locally outside Vantage.
|
|
888
829
|
Input data for user script is either read from a file or from database.
|
|
889
830
|
Note:
|
|
890
831
|
1. Purpose of test_script() function is to enable the user to test their scripts for any errors without
|
|
@@ -917,10 +858,9 @@ class Script(TableOperator):
|
|
|
917
858
|
exec_mode:
|
|
918
859
|
Optional Argument.
|
|
919
860
|
Specifies the mode in which user wants to test the script.
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
Default Value: 'sandbox'
|
|
861
|
+
When set to 'local', the user script will run locally on user's system.
|
|
862
|
+
Permitted Values: 'local'
|
|
863
|
+
Default Value: 'local'
|
|
924
864
|
Types: str
|
|
925
865
|
|
|
926
866
|
kwargs:
|
|
@@ -954,13 +894,6 @@ class Script(TableOperator):
|
|
|
954
894
|
Default Value: True
|
|
955
895
|
Types: bool
|
|
956
896
|
|
|
957
|
-
timeout:
|
|
958
|
-
Optional Argument.
|
|
959
|
-
Specifies the timeout for docker API calls when running in
|
|
960
|
-
sandbox mode.
|
|
961
|
-
Default Value: 5000
|
|
962
|
-
Types: int
|
|
963
|
-
|
|
964
897
|
data_file_quote_char:
|
|
965
898
|
Optional Argument.
|
|
966
899
|
Specifies the quotechar used in the input data file.
|
|
@@ -1031,13 +964,13 @@ class Script(TableOperator):
|
|
|
1031
964
|
EXAMPLES:
|
|
1032
965
|
# Assumption - sto is Script() object. Please refer to help(Script)
|
|
1033
966
|
# for creating Script object.
|
|
1034
|
-
# Run user script in
|
|
967
|
+
# Run user script in local mode with input from data file.
|
|
1035
968
|
|
|
1036
969
|
>>> sto.test_script(input_data_file='../barrier.csv',
|
|
1037
970
|
... data_file_delimiter=',',
|
|
1038
971
|
... data_file_quote_char='"',
|
|
1039
972
|
... data_file_header=True,
|
|
1040
|
-
... exec_mode='
|
|
973
|
+
... exec_mode='local')
|
|
1041
974
|
|
|
1042
975
|
############ STDOUT Output ############
|
|
1043
976
|
word count_input
|
|
@@ -1060,22 +993,6 @@ class Script(TableOperator):
|
|
|
1060
993
|
3 Had 1
|
|
1061
994
|
4 A 1
|
|
1062
995
|
5 Farm 1
|
|
1063
|
-
|
|
1064
|
-
# Run user script in sandbox mode with logmech as 'TD2'.
|
|
1065
|
-
>>> sto.test_script(script_args="4 5 10 6 480", password="alice", logmech="TD2")
|
|
1066
|
-
|
|
1067
|
-
# Run user script in sandbox mode with logmech as 'TDNEGO'.
|
|
1068
|
-
>>> sto.test_script(script_args="4 5 10 6 480", password="alice", logmech="TDNEGO")
|
|
1069
|
-
|
|
1070
|
-
# Run user script in sandbox mode with logmech as 'LDAP'.
|
|
1071
|
-
>>> sto.test_script(script_args="4 5 10 6 480", password="alice", logmech="LDAP")
|
|
1072
|
-
|
|
1073
|
-
# Run user script in sandbox mode with logmech as 'KRB5'.
|
|
1074
|
-
>>> sto.test_script(script_args="4 5 10 6 480", password="alice", logmech="KRB5")
|
|
1075
|
-
|
|
1076
|
-
# Run user script in sandbox mode with logmech as 'JWT'.
|
|
1077
|
-
>>> sto.test_script(script_args="4 5 10 6 480", password="alice",
|
|
1078
|
-
logmech='JWT', logdata='token=eyJpc...h8dA')
|
|
1079
996
|
|
|
1080
997
|
"""
|
|
1081
998
|
logmech_valid_values = ['TD2', 'TDNEGO', 'LDAP', 'KRB5', 'JWT']
|
|
@@ -1086,8 +1003,7 @@ class Script(TableOperator):
|
|
|
1086
1003
|
awu_matrix_test.append((["input_data_file", input_data_file, True, (str), True]))
|
|
1087
1004
|
awu_matrix_test.append((["script_args", script_args, True, (str), False]))
|
|
1088
1005
|
awu_matrix_test.append((["exec_mode", exec_mode, True, (str), True,
|
|
1089
|
-
[TableOperatorConstants.
|
|
1090
|
-
TableOperatorConstants.LOCAL_EXEC.value]]))
|
|
1006
|
+
[TableOperatorConstants.LOCAL_EXEC.value]]))
|
|
1091
1007
|
|
|
1092
1008
|
data_row_limit = kwargs.pop("data_row_limit", 1000)
|
|
1093
1009
|
awu_matrix_test.append((["data_row_limit", data_row_limit, True, (int), True]))
|
|
@@ -1103,9 +1019,6 @@ class Script(TableOperator):
|
|
|
1103
1019
|
data_file_header = kwargs.pop("data_file_header", True)
|
|
1104
1020
|
awu_matrix_test.append((["data_file_header", data_file_header, True, (bool)]))
|
|
1105
1021
|
|
|
1106
|
-
timeout = kwargs.pop("timeout", 5000)
|
|
1107
|
-
awu_matrix_test.append((["timeout", timeout, True, (int), True]))
|
|
1108
|
-
|
|
1109
1022
|
logmech = kwargs.pop("logmech", "TD2")
|
|
1110
1023
|
awu_matrix_test.append(
|
|
1111
1024
|
["logmech", logmech, True, (str), True, logmech_valid_values])
|
|
@@ -1116,9 +1029,6 @@ class Script(TableOperator):
|
|
|
1116
1029
|
# Validate argument types.
|
|
1117
1030
|
_Validators._validate_function_arguments(awu_matrix_test)
|
|
1118
1031
|
|
|
1119
|
-
# Validate timeout value.
|
|
1120
|
-
_Validators._validate_positive_int(timeout, "timeout")
|
|
1121
|
-
|
|
1122
1032
|
self.__validate()
|
|
1123
1033
|
self.__validate_for_reserved_keyword()
|
|
1124
1034
|
|
|
@@ -1136,14 +1046,8 @@ class Script(TableOperator):
|
|
|
1136
1046
|
# Either of 'input_data_file' or 'password' argument is required.
|
|
1137
1047
|
password = kwargs.pop("password", None)
|
|
1138
1048
|
|
|
1139
|
-
# The check of EITHER_THIS_OR_THAT_ARGUMENT is applicable only when the exec_mode is sandbox.
|
|
1140
|
-
# Hence adding the check exec_mode != "local".
|
|
1141
1049
|
# When exec_mode is local, the connection object is used to get the values in the table.
|
|
1142
|
-
if exec_mode
|
|
1143
|
-
message = Messages.get_message(MessageCodes.EITHER_THIS_OR_THAT_ARGUMENT,
|
|
1144
|
-
"input_data_file", "Script data and password")
|
|
1145
|
-
raise TeradataMlException(message, MessageCodes.EITHER_THIS_OR_THAT_ARGUMENT)
|
|
1146
|
-
elif exec_mode == "local" and not (input_data_file or self.data):
|
|
1050
|
+
if exec_mode == "local" and not (input_data_file or self.data):
|
|
1147
1051
|
message = Messages.get_message(MessageCodes.EITHER_THIS_OR_THAT_ARGUMENT,
|
|
1148
1052
|
"input_data_file", "Script data")
|
|
1149
1053
|
raise TeradataMlException(message, MessageCodes.EITHER_THIS_OR_THAT_ARGUMENT)
|
|
@@ -1172,7 +1076,6 @@ class Script(TableOperator):
|
|
|
1172
1076
|
|
|
1173
1077
|
if exec_mode.upper() == TableOperatorConstants.LOCAL_EXEC.value:
|
|
1174
1078
|
user_script_path = os.path.join(self.files_local_path, self.script_name)
|
|
1175
|
-
import sys
|
|
1176
1079
|
cmd = [str(sys.executable), user_script_path]
|
|
1177
1080
|
cmd.extend(script_args)
|
|
1178
1081
|
|
|
@@ -1206,172 +1109,6 @@ class Script(TableOperator):
|
|
|
1206
1109
|
return self.__process_test_script_output(exec_cmd_output)
|
|
1207
1110
|
except Exception as exp:
|
|
1208
1111
|
raise
|
|
1209
|
-
else:
|
|
1210
|
-
# Execution Mode - sandbox.
|
|
1211
|
-
|
|
1212
|
-
# get the frame object of the function.
|
|
1213
|
-
import inspect
|
|
1214
|
-
frame = inspect.currentframe()
|
|
1215
|
-
|
|
1216
|
-
# Validate argument types.
|
|
1217
|
-
_Validators._validate_module_presence('docker', frame.f_code.co_name)
|
|
1218
|
-
|
|
1219
|
-
import docker
|
|
1220
|
-
|
|
1221
|
-
# Read container_id from configure.sandbox_container_id, if it is None then
|
|
1222
|
-
# raise an exception
|
|
1223
|
-
|
|
1224
|
-
container_id = configure.sandbox_container_id
|
|
1225
|
-
if container_id is None:
|
|
1226
|
-
message = Messages.get_message(MessageCodes.SANDBOX_CONTAINER_NOT_FOUND)
|
|
1227
|
-
raise TeradataMlException(message,
|
|
1228
|
-
MessageCodes.SANDBOX_CONTAINER_NOT_FOUND)
|
|
1229
|
-
|
|
1230
|
-
# Set path inside docker container. This is where files will be copied to.
|
|
1231
|
-
# os.path.join() will not work here because the path is not dependent on
|
|
1232
|
-
# client platform. Sandbox environment is linux based here.
|
|
1233
|
-
_path_in_docker_container = "/home/tdatuser"
|
|
1234
|
-
user_script_path = "{}/{}".format(_path_in_docker_container, self.script_name)
|
|
1235
|
-
|
|
1236
|
-
if input_data_file is not None:
|
|
1237
|
-
input_file_name = os.path.basename(input_data_file)
|
|
1238
|
-
input_file_path = "{}/{}".format(_path_in_docker_container,
|
|
1239
|
-
input_file_name)
|
|
1240
|
-
# Create script_executor.
|
|
1241
|
-
self._create_executor_script(user_script_path=user_script_path,
|
|
1242
|
-
user_script_args=script_args,
|
|
1243
|
-
data_file_path=input_file_path,
|
|
1244
|
-
data_file_delimiter=data_file_delimiter,
|
|
1245
|
-
data_file_quote_char=data_file_quote_char,
|
|
1246
|
-
data_file_header=data_file_header)
|
|
1247
|
-
else:
|
|
1248
|
-
# Read input from db.
|
|
1249
|
-
if self.data.shape[0] > data_row_limit:
|
|
1250
|
-
raise ValueError(
|
|
1251
|
-
Messages.get_message(MessageCodes.DATAFRAME_LIMIT_ERROR,
|
|
1252
|
-
'data_row_limit', 'data_row_limit',
|
|
1253
|
-
data_row_limit))
|
|
1254
|
-
db_host = get_context().url.host
|
|
1255
|
-
|
|
1256
|
-
user_name = get_context().url.username
|
|
1257
|
-
|
|
1258
|
-
if not self.data._table_name:
|
|
1259
|
-
self.data._table_name = df_utils._execute_node_return_db_object_name(
|
|
1260
|
-
self.data._nodeid, self.data._metaexpr)
|
|
1261
|
-
table_name = UtilFuncs._extract_table_name(self.data._table_name)
|
|
1262
|
-
|
|
1263
|
-
db_name = _get_current_databasename()
|
|
1264
|
-
|
|
1265
|
-
# Create script_executor.
|
|
1266
|
-
self._create_executor_script(user_script_path=user_script_path,
|
|
1267
|
-
user_script_args=script_args,
|
|
1268
|
-
db_host=db_host,
|
|
1269
|
-
user_name=user_name,
|
|
1270
|
-
passwd=password,
|
|
1271
|
-
table_name=table_name,
|
|
1272
|
-
db_name=db_name,
|
|
1273
|
-
logmech=logmech,
|
|
1274
|
-
logdata=logdata)
|
|
1275
|
-
|
|
1276
|
-
client = docker.APIClient(timeout=timeout)
|
|
1277
|
-
|
|
1278
|
-
# Copy files to container indicated in configure.sandbox_container_id.
|
|
1279
|
-
files_to_copy = [self.script_name]
|
|
1280
|
-
|
|
1281
|
-
if supporting_files is not None:
|
|
1282
|
-
if isinstance(supporting_files, str):
|
|
1283
|
-
supporting_files = [supporting_files]
|
|
1284
|
-
|
|
1285
|
-
if len(supporting_files) == 0 \
|
|
1286
|
-
or any(file in [None, "None", ""] for file in supporting_files):
|
|
1287
|
-
raise ValueError(
|
|
1288
|
-
Messages.get_message(MessageCodes.LIST_SELECT_NONE_OR_EMPTY,
|
|
1289
|
-
'supporting_files'))
|
|
1290
|
-
else:
|
|
1291
|
-
files_to_copy.extend(supporting_files)
|
|
1292
|
-
|
|
1293
|
-
if input_data_file is not None:
|
|
1294
|
-
files_to_copy.append(input_data_file)
|
|
1295
|
-
|
|
1296
|
-
for filename in files_to_copy:
|
|
1297
|
-
file_path = os.path.join(self.files_local_path, filename)
|
|
1298
|
-
# Check if file exists.
|
|
1299
|
-
_Validators._validate_file_exists(file_path)
|
|
1300
|
-
|
|
1301
|
-
# Copy file to docker container.
|
|
1302
|
-
self._copy_to_docker_container(client, file_path,
|
|
1303
|
-
_path_in_docker_container,
|
|
1304
|
-
container_id)
|
|
1305
|
-
|
|
1306
|
-
# Copy script_executor to docker container.
|
|
1307
|
-
self._copy_to_docker_container(client, self.script_path,
|
|
1308
|
-
_path_in_docker_container,
|
|
1309
|
-
container_id)
|
|
1310
|
-
|
|
1311
|
-
script_executor_file_name = os.path.basename(self.script_path)
|
|
1312
|
-
exec_cmd = ("tdpython3 {0}/{1}".format(_path_in_docker_container,
|
|
1313
|
-
script_executor_file_name))
|
|
1314
|
-
|
|
1315
|
-
try:
|
|
1316
|
-
# Setup an exec instance in the container.
|
|
1317
|
-
exec_cmd_create = client.exec_create(container_id, exec_cmd)
|
|
1318
|
-
|
|
1319
|
-
# Start exec instance and run user script.
|
|
1320
|
-
exec_cmd_output = client.exec_start(exec_cmd_create, demux=True)
|
|
1321
|
-
|
|
1322
|
-
# Inspect the output for success or failure.
|
|
1323
|
-
inspect_out = client.exec_inspect(exec_cmd_create)
|
|
1324
|
-
|
|
1325
|
-
# Extract the exit code.
|
|
1326
|
-
exit_code = inspect_out['ExitCode']
|
|
1327
|
-
|
|
1328
|
-
if exec_cmd_output[0] is not None:
|
|
1329
|
-
executor_output = exec_cmd_output[0].decode()
|
|
1330
|
-
|
|
1331
|
-
executor_error = ""
|
|
1332
|
-
if exec_cmd_output[1] is not None:
|
|
1333
|
-
executor_error = exec_cmd_output[1].decode()
|
|
1334
|
-
|
|
1335
|
-
# Exit code 1 indicates any error thrown by subprocess.
|
|
1336
|
-
# Exit code 126 indicates permission problem or command is not executable.
|
|
1337
|
-
# Exit code 127 indicates possible typos in shell script with
|
|
1338
|
-
# unrecognizable characters.
|
|
1339
|
-
if exit_code == 1 or exit_code == 126 or exit_code == 127:
|
|
1340
|
-
message = Messages.get_message(
|
|
1341
|
-
MessageCodes.SANDBOX_SCRIPT_ERROR).format(executor_error)
|
|
1342
|
-
raise TeradataMlException(message,
|
|
1343
|
-
MessageCodes.SANDBOX_SCRIPT_ERROR)
|
|
1344
|
-
# Exit code 2 indicates either username or password is invalid.
|
|
1345
|
-
elif exit_code == 2:
|
|
1346
|
-
message = Messages.get_message(
|
|
1347
|
-
MessageCodes.SANDBOX_CONNECTION_ERROR).format(executor_error)
|
|
1348
|
-
raise TeradataMlException(message,
|
|
1349
|
-
MessageCodes.SANDBOX_CONNECTION_ERROR)
|
|
1350
|
-
# Exit code 3 indicates problem with query.
|
|
1351
|
-
elif exit_code == 3:
|
|
1352
|
-
message = Messages.get_message(
|
|
1353
|
-
MessageCodes.SANDBOX_QUERY_ERROR).format(executor_error)
|
|
1354
|
-
raise TeradataMlException(message,
|
|
1355
|
-
MessageCodes.SANDBOX_QUERY_ERROR)
|
|
1356
|
-
# Exit code 4 indicates all other exceptions / errors.
|
|
1357
|
-
elif exit_code == 4:
|
|
1358
|
-
message = Messages.get_message(
|
|
1359
|
-
MessageCodes.SANDBOX_CONTAINER_ERROR).format(executor_error)
|
|
1360
|
-
raise TeradataMlException(message,
|
|
1361
|
-
MessageCodes.SANDBOX_CONTAINER_ERROR)
|
|
1362
|
-
elif exit_code != 0:
|
|
1363
|
-
# Any error other than exit code 1, 2, 3, 4
|
|
1364
|
-
message = Messages.get_message(
|
|
1365
|
-
MessageCodes.SANDBOX_CONTAINER_ERROR).format(executor_error)
|
|
1366
|
-
raise TeradataMlException(message,
|
|
1367
|
-
MessageCodes.SANDBOX_CONTAINER_ERROR)
|
|
1368
|
-
else:
|
|
1369
|
-
return self.__process_test_script_output(executor_output)
|
|
1370
|
-
except Exception as exp:
|
|
1371
|
-
message = Messages.get_message(
|
|
1372
|
-
MessageCodes.SANDBOX_CONTAINER_ERROR).format(str(exp))
|
|
1373
|
-
raise TeradataMlException(message,
|
|
1374
|
-
MessageCodes.SANDBOX_CONTAINER_ERROR)
|
|
1375
1112
|
|
|
1376
1113
|
def __local_run_user_script_input_file(self, cmd, input_file_path,
|
|
1377
1114
|
data_file_delimiter='\t',
|