NOTE: Active Session now server. NOTE: Added action set 'modelPublishing'. NOTE: Added action set 'ds2'. NOTE: Added action set 'table'. NOTE: Running 'modelPublishing' action set with 3 workers. NOTE: Creating new model table 'TempModel_6D62EF12-B573-0F46-808B-70FB2D7E15DA'. NOTE: Model 'TempModel_6D62EF12-B573-0F46-808B-70FB2D7E15DA' has been successfully published to model table 'TempModel_6D62EF12-B573-0F46-808B-70FB2D7E15DA'. 1 package _7D4A4091D7094E3AA38E54785D7B218 / overwrite=yes; 2 dcl package pymas py; 3 dcl package logger logr('App.tk.MAS'); 4 dcl varchar(67108864) character set utf8 pycode; 5 dcl int revision; 6 7 method init(); 8 9 dcl integer rc; 10 if null(py) then do; 11 py = _new_ pymas(); 12 rc = py.useModule('7D4A4091D7094E3AA38E54785D7B2180', 1); 13 if rc then do; 14 rc = py.appendSrcLine('try:'); 15 rc = py.appendSrcLine(' import pickle, base64'); 16 rc = py.appendSrcLine(' bytes = b"gANjc2tsZWFybi5saW5lYXJfbW9kZWwuX2xvZ2lzdGljCkxvZ2lzdGljUmVncmVzc2lvbgpxACmBcQF9cQIoWAcAAABwZW5hbHR5cQNYAgAAAGwycQRYBAAAAGR1YWxxBYlYAwAAAHRvbHEGRz8aNuLrHEMtWAEAAABDcQdHP/AAAAAAAABYDQAAAGZpdF9pbnRlcmNlcHRxCIhYEQAAAGludGVyY2VwdF9zY2FsaW5ncQlLAVgMAAAAY2xhc3Nfd2VpZ2h0cQpOWAwAAAByYW5kb21fc3RhdGVxC0sAWAYAAABzb2x2ZXJxDFgFAAAAbGJmZ3NxDVgIAAAAbWF4X2l0ZXJxDktkWAsAAABtdWx0aV9jbGFzc3EPWAQAAABhdXRvcRBYBwAAAHZlcmJvc2VxEUsAWAoAAAB3YXJtX3N0YXJ0cRKJWAYAAABuX2pvYnNxE05YCAAAAGwxX3JhdGlvcRROWA4AAABuX2ZlYXR1cmVzX2luX3EVSxJYCAAAAGNsYXNzZXNfcRZjbnVtcHkuY29yZS5tdWx0aWFycmF5Cl9yZWNvbnN0cnVjdApxF2NudW1weQpuZGFycmF5CnEYSwCFcRlDAWJxGodxG1JxHChLAUsChXEdY251bXB5CmR0eXBlCnEeWAIAAABpOHEfSwBLAYdxIFJxIShLA1gBAAAAPHEiTk5OSv////9K/////0sAdHEjYolDEAAAAAAAAAAAAQAAAAAAAABxJHRxJWJYBwAAAG5faXRlcl9xJmgXaBhLAIVxJ2gah3EoUnEpKEsBSwGFcSpoHlgCAAAAaTRxK0sASwGHcSxScS0oSwNoIk5OTkr/////Sv////9LAHRxLmKJQwQ5AAAAcS90cTBiWAUAAABjb2VmX3ExaBdoGEsAhXEyaBqHcTNScTQoSwFLAUsShnE1aB5YAgAAAGY4cTZLAEsBh3E3UnE4KEsDaCJOTk5K/////0r/////SwB0cTliiUOQcfHIcfm2AL/Z/82Tr164vrxCPVrsltK+luW2Z3J7hr9aEnHK43VyP8cj+DdQ0ns/VBwVmzhTiL+ZR25jzUlwP5A6YT3073c/Mh4iUK02kz+FLspAXxw/v0dlohnPDka/m4oQm39GFz9np1aeXi5Hv0BlDxEdk0W/ohJWvefbPb+XbqGZlI80Pzb/rSetwzE/cTp0cTtiWAoAAABpbnRlcmNlcHRfcTxoF2gYSwCFcT1oGodxPlJxPyhLAUsBhXFAaDiJQwhla7BMgc5Sv3FBdHFCYlgQAAAAX3NrbGVhcm5fdmVyc2lvbnFDWAYAAAAwLjI0LjJxRHViLg=="'); 17 rc = py.appendSrcLine(' obj = pickle.loads(base64.b64decode(bytes))'); 18 rc = py.appendSrcLine(' _compile_error = None'); 19 rc = py.appendSrcLine('except Exception as e:'); 20 rc = py.appendSrcLine(' _compile_error = e'); 21 rc = py.appendSrcLine(''); 22 rc = py.appendSrcLine('def _6rog2WoeTgC0Vsl2GmCd(LOAN, MORTDUE, VALUE, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC, REASON_DebtCon, REASON_HomeImp, JOB_Mgr, JOB_Office, JOB_Other, JOB_ProfExe, JOB_Sales, JOB_Self):'); 23 rc = py.appendSrcLine(' "Output: var1, msg"'); 24 rc = py.appendSrcLine(' result = None'); 25 rc = py.appendSrcLine(' msg = None'); 26 rc = py.appendSrcLine(' try:'); 27 rc = py.appendSrcLine(' global _compile_error'); 28 rc = py.appendSrcLine(' if _compile_error is not None:'); 29 rc = py.appendSrcLine(' raise _compile_error'); 30 rc = py.appendSrcLine(' import numpy as np'); 31 rc = py.appendSrcLine(' import pandas as pd'); 32 rc = py.appendSrcLine(''); 33 rc = py.appendSrcLine(' if LOAN is None: LOAN = np.nan'); 34 rc = py.appendSrcLine(' if MORTDUE is None: MORTDUE = np.nan'); 35 rc = py.appendSrcLine(' if VALUE is None: VALUE = np.nan'); 36 rc = py.appendSrcLine(' if YOJ is None: YOJ = np.nan'); 37 rc = py.appendSrcLine(' if DEROG is None: DEROG = np.nan'); 38 rc = py.appendSrcLine(' if DELINQ is None: DELINQ = np.nan'); 39 rc = py.appendSrcLine(' if CLAGE is None: CLAGE = np.nan'); 40 rc = py.appendSrcLine(' if NINQ is None: NINQ = np.nan'); 41 rc = py.appendSrcLine(' if CLNO is None: CLNO = np.nan'); 42 rc = py.appendSrcLine(' if DEBTINC is None: DEBTINC = np.nan'); 43 rc = py.appendSrcLine(' if REASON_DebtCon is None: REASON_DebtCon = np.nan'); 44 rc = py.appendSrcLine(' if REASON_HomeImp is None: REASON_HomeImp = np.nan'); 45 rc = py.appendSrcLine(' if JOB_Mgr is None: JOB_Mgr = np.nan'); 46 rc = py.appendSrcLine(' if JOB_Office is None: JOB_Office = np.nan'); 47 rc = py.appendSrcLine(' if JOB_Other is None: JOB_Other = np.nan'); 48 rc = py.appendSrcLine(' if JOB_ProfExe is None: JOB_ProfExe = np.nan'); 49 rc = py.appendSrcLine(' if JOB_Sales is None: JOB_Sales = np.nan'); 50 rc = py.appendSrcLine(' if JOB_Self is None: JOB_Self = np.nan'); 51 rc = py.appendSrcLine(' input_array = np.array([LOAN, MORTDUE, VALUE, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC, REASON_DebtCon, REASON_HomeImp, JOB_Mgr, JOB_Office, JOB_Other, JOB_ProfExe, JOB_Sales, JOB_Self]).reshape((1, -1))'); 52 rc = py.appendSrcLine(' columns = ["LOAN", "MORTDUE", "VALUE", "YOJ", "DEROG", "DELINQ", "CLAGE", "NINQ", "CLNO", "DEBTINC", "REASON_DebtCon", "REASON_HomeImp", "JOB_Mgr", "JOB_Office", "JOB_Other", "JOB_ProfExe", "JOB_Sales", "JOB_Self"]'); 53 rc = py.appendSrcLine(' input_df = pd.DataFrame(data=input_array, columns=columns)'); 54 rc = py.appendSrcLine(' result = obj.predict(input_df)'); 55 rc = py.appendSrcLine(' result = tuple(result.ravel()) if hasattr(result, "ravel") else tuple(result)'); 56 rc = py.appendSrcLine(' if len(result) == 0:'); 57 rc = py.appendSrcLine(' result = tuple(None for i in range(1))'); 58 rc = py.appendSrcLine(' elif "numpy" in str(type(result[0])):'); 59 rc = py.appendSrcLine(' result = tuple(np.asscalar(i) for i in result)'); 60 rc = py.appendSrcLine(' except Exception as e:'); 61 rc = py.appendSrcLine(' from traceback import format_exc'); 62 rc = py.appendSrcLine(' msg = str(e) + format_exc()'); 63 rc = py.appendSrcLine(' if result is None:'); 64 rc = py.appendSrcLine(' result = tuple(None for i in range(1))'); 65 rc = py.appendSrcLine(' return result + (msg, )'); 66 rc = py.appendSrcLine(''); 67 rc = py.appendSrcLine('def _ddSAVc5A8HvObkaQxqyp(LOAN, MORTDUE, VALUE, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC, REASON_DebtCon, REASON_HomeImp, JOB_Mgr, JOB_Office, JOB_Other, JOB_ProfExe, JOB_Sales, JOB_Self):'); 68 rc = py.appendSrcLine(' "Output: P_1, P_2, msg"'); 69 rc = py.appendSrcLine(' result = None'); 70 rc = py.appendSrcLine(' msg = None'); 71 rc = py.appendSrcLine(' try:'); 72 rc = py.appendSrcLine(' global _compile_error'); 73 rc = py.appendSrcLine(' if _compile_error is not None:'); 74 rc = py.appendSrcLine(' raise _compile_error'); 75 rc = py.appendSrcLine(' import numpy as np'); 76 rc = py.appendSrcLine(' import pandas as pd'); 77 rc = py.appendSrcLine(''); 78 rc = py.appendSrcLine(' if LOAN is None: LOAN = np.nan'); 79 rc = py.appendSrcLine(' if MORTDUE is None: MORTDUE = np.nan'); 80 rc = py.appendSrcLine(' if VALUE is None: VALUE = np.nan'); 81 rc = py.appendSrcLine(' if YOJ is None: YOJ = np.nan'); 82 rc = py.appendSrcLine(' if DEROG is None: DEROG = np.nan'); 83 rc = py.appendSrcLine(' if DELINQ is None: DELINQ = np.nan'); 84 rc = py.appendSrcLine(' if CLAGE is None: CLAGE = np.nan'); 85 rc = py.appendSrcLine(' if NINQ is None: NINQ = np.nan'); 86 rc = py.appendSrcLine(' if CLNO is None: CLNO = np.nan'); 87 rc = py.appendSrcLine(' if DEBTINC is None: DEBTINC = np.nan'); 88 rc = py.appendSrcLine(' if REASON_DebtCon is None: REASON_DebtCon = np.nan'); 89 rc = py.appendSrcLine(' if REASON_HomeImp is None: REASON_HomeImp = np.nan'); 90 rc = py.appendSrcLine(' if JOB_Mgr is None: JOB_Mgr = np.nan'); 91 rc = py.appendSrcLine(' if JOB_Office is None: JOB_Office = np.nan'); 92 rc = py.appendSrcLine(' if JOB_Other is None: JOB_Other = np.nan'); 93 rc = py.appendSrcLine(' if JOB_ProfExe is None: JOB_ProfExe = np.nan'); 94 rc = py.appendSrcLine(' if JOB_Sales is None: JOB_Sales = np.nan'); 95 rc = py.appendSrcLine(' if JOB_Self is None: JOB_Self = np.nan'); 96 rc = py.appendSrcLine(' input_array = np.array([LOAN, MORTDUE, VALUE, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC, REASON_DebtCon, REASON_HomeImp, JOB_Mgr, JOB_Office, JOB_Other, JOB_ProfExe, JOB_Sales, JOB_Self]).reshape((1, -1))'); 97 rc = py.appendSrcLine(' columns = ["LOAN", "MORTDUE", "VALUE", "YOJ", "DEROG", "DELINQ", "CLAGE", "NINQ", "CLNO", "DEBTINC", "REASON_DebtCon", "REASON_HomeImp", "JOB_Mgr", "JOB_Office", "JOB_Other", "JOB_ProfExe", "JOB_Sales", "JOB_Self"]'); 98 rc = py.appendSrcLine(' input_df = pd.DataFrame(data=input_array, columns=columns)'); 99 rc = py.appendSrcLine(' result = obj.predict_proba(input_df)'); 100 rc = py.appendSrcLine(' result = tuple(result.ravel()) if hasattr(result, "ravel") else tuple(result)'); 101 rc = py.appendSrcLine(' if len(result) == 0:'); 102 rc = py.appendSrcLine(' result = tuple(None for i in range(2))'); 103 rc = py.appendSrcLine(' elif "numpy" in str(type(result[0])):'); 104 rc = py.appendSrcLine(' result = tuple(np.asscalar(i) for i in result)'); 105 rc = py.appendSrcLine(' except Exception as e:'); 106 rc = py.appendSrcLine(' from traceback import format_exc'); 107 rc = py.appendSrcLine(' msg = str(e) + format_exc()'); 108 rc = py.appendSrcLine(' if result is None:'); 109 rc = py.appendSrcLine(' result = tuple(None for i in range(2))'); 110 rc = py.appendSrcLine(' return result + (msg, )'); 111 pycode = py.getSource(); 112 revision = py.publish(pycode, '7D4A4091D7094E3AA38E54785D7B2180'); 113 if revision lt 1 then do; 114 logr.log('e', 'py.publish() failed.'); 115 rc = -1; 116 end; 117 end; 118 end; 119 end; 120 121 method predict( 122 integer LOAN, 123 double MORTDUE, 124 double VALUE, 125 double YOJ, 126 double DEROG, 127 double DELINQ, 128 double CLAGE, 129 double NINQ, 130 double CLNO, 131 double DEBTINC, 132 integer REASON_DebtCon, 133 integer REASON_HomeImp, 134 integer JOB_Mgr, 135 integer JOB_Office, 136 integer JOB_Other, 137 integer JOB_ProfExe, 138 integer JOB_Sales, 139 integer JOB_Self, 140 in_out integer var1 141 ); 142 143 dcl integer rc; 144 dcl varchar(4068) msg; 145 rc = py.useMethod('_6rog2WoeTgC0Vsl2GmCd'); 146 if rc then return; 147 rc = py.setInt('LOAN', LOAN); if rc then return; 148 rc = py.setDouble('MORTDUE', MORTDUE); if rc then return; 149 rc = py.setDouble('VALUE', VALUE); if rc then return; 150 rc = py.setDouble('YOJ', YOJ); if rc then return; 151 rc = py.setDouble('DEROG', DEROG); if rc then return; 152 rc = py.setDouble('DELINQ', DELINQ); if rc then return; 153 rc = py.setDouble('CLAGE', CLAGE); if rc then return; 154 rc = py.setDouble('NINQ', NINQ); if rc then return; 155 rc = py.setDouble('CLNO', CLNO); if rc then return; 156 rc = py.setDouble('DEBTINC', DEBTINC); if rc then return; 157 rc = py.setInt('REASON_DebtCon', REASON_DebtCon); if rc then return; 158 rc = py.setInt('REASON_HomeImp', REASON_HomeImp); if rc then return; 159 rc = py.setInt('JOB_Mgr', JOB_Mgr); if rc then return; 160 rc = py.setInt('JOB_Office', JOB_Office); if rc then return; 161 rc = py.setInt('JOB_Other', JOB_Other); if rc then return; 162 rc = py.setInt('JOB_ProfExe', JOB_ProfExe); if rc then return; 163 rc = py.setInt('JOB_Sales', JOB_Sales); if rc then return; 164 rc = py.setInt('JOB_Self', JOB_Self); if rc then return; 165 rc = py.execute(); if rc then return; 166 var1 = py.getInt('var1'); 167 msg = py.getString('msg'); 168 if not null(msg) then logr.log('e', 'Error executing Python function "predict": $s', msg); 169 end; 170 171 method predict_proba( 172 integer LOAN, 173 double MORTDUE, 174 double VALUE, 175 double YOJ, 176 double DEROG, 177 double DELINQ, 178 double CLAGE, 179 double NINQ, 180 double CLNO, 181 double DEBTINC, 182 integer REASON_DebtCon, 183 integer REASON_HomeImp, 184 integer JOB_Mgr, 185 integer JOB_Office, 186 integer JOB_Other, 187 integer JOB_ProfExe, 188 integer JOB_Sales, 189 integer JOB_Self, 190 in_out double P_1, 191 in_out double P_2 192 ); 193 194 dcl integer rc; 195 dcl varchar(4068) msg; 196 rc = py.useMethod('_ddSAVc5A8HvObkaQxqyp'); 197 if rc then return; 198 rc = py.setInt('LOAN', LOAN); if rc then return; 199 rc = py.setDouble('MORTDUE', MORTDUE); if rc then return; 200 rc = py.setDouble('VALUE', VALUE); if rc then return; 201 rc = py.setDouble('YOJ', YOJ); if rc then return; 202 rc = py.setDouble('DEROG', DEROG); if rc then return; 203 rc = py.setDouble('DELINQ', DELINQ); if rc then return; 204 rc = py.setDouble('CLAGE', CLAGE); if rc then return; 205 rc = py.setDouble('NINQ', NINQ); if rc then return; 206 rc = py.setDouble('CLNO', CLNO); if rc then return; 207 rc = py.setDouble('DEBTINC', DEBTINC); if rc then return; 208 rc = py.setInt('REASON_DebtCon', REASON_DebtCon); if rc then return; 209 rc = py.setInt('REASON_HomeImp', REASON_HomeImp); if rc then return; 210 rc = py.setInt('JOB_Mgr', JOB_Mgr); if rc then return; 211 rc = py.setInt('JOB_Office', JOB_Office); if rc then return; 212 rc = py.setInt('JOB_Other', JOB_Other); if rc then return; 213 rc = py.setInt('JOB_ProfExe', JOB_ProfExe); if rc then return; 214 rc = py.setInt('JOB_Sales', JOB_Sales); if rc then return; 215 rc = py.setInt('JOB_Self', JOB_Self); if rc then return; 216 rc = py.execute(); if rc then return; 217 P_1 = py.getDouble('P_1'); 218 P_2 = py.getDouble('P_2'); 219 msg = py.getString('msg'); 220 if not null(msg) then logr.log('e', 'Error executing Python function "predict_proba": $s', msg); 221 end; 222 223 endpackage; 224 225 thread pyMasThread / inline; 226 dcl package _7D4A4091D7094E3AA38E54785D7B218 pythonPackage(); 227 dcl integer var1; 228 method run(); 229 set "caslib_sasdata36_t22939"."HMEQ_X_TEST"; 230 231 pythonPackage.init(); 232 pythonPackage.predict(LOAN,MORTDUE,VALUE,YOJ,DEROG,DELINQ,CLAGE,NINQ,CLNO,DEBTINC,REASON_DebtCon,REASON_HomeImp,JOB_Mgr,JOB_Office,JOB_Other,JOB_ProfExe,JOB_Sales,JOB_Self,var1); 233 output; 234 end; 235 endthread; 236 data "caslib_sasdata36_t22939"."Test_2_undefined_2023_04_11_19_27_32_output"; 237 dcl thread pyMasThread t; 238 method run(); 239 set from t; 240 output; 241 end; NOTE: Created package _7d4a4091d7094e3aa38e54785d7b218 in data set "casuserhdfs(bt22939)"._7d4a4091d7094e3aa38e54785d7b218. NOTE: Running THREAD program on all nodes NOTE: Running DATA program on all nodes ERROR: Line 112: ERROR: Python launch _pyConnect Failure. Matplotlib created a temporary config/cache directory at /tmp/matplotlib-gsc0h19t because the default path (/viyatmp/python) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing. . ERROR: Line 112: ERROR: ***** Traceback (most recent call last): File "/opt/sas/viya/home/SASFoundation/misc/embscoreeng/mas2py.py", line 1005, in main mas = MAS2py() File "/opt/sas/viya/home/SASFoundation/misc/embscoreeng/mas2py.py", line 286, in __init__ for name in os.environ.keys(): File "/usr/local/lib/python3.6/_collections_abc.py", line 720, in __iter__ yield from self._mapping File "/usr/local/lib/python3.6/os.py", line 688, in __iter__ for key in self._data: RuntimeError: di.. ERROR: Line 112: ERROR: Python launch _pyConnect Failure. Matplotlib created a temporary config/cache directory at /tmp/matplotlib-926otnmv because the default path (/viyatmp/python) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing. . ERROR: Line 112: ERROR: ***** Traceback (most recent call last): File "/opt/sas/viya/home/SASFoundation/misc/embscoreeng/mas2py.py", line 1005, in main mas = MAS2py() File "/opt/sas/viya/home/SASFoundation/misc/embscoreeng/mas2py.py", line 286, in __init__ for name in os.environ.keys(): File "/usr/local/lib/python3.6/_collections_abc.py", line 720, in __iter__ yield from self._mapping File "/usr/local/lib/python3.6/os.py", line 688, in __iter__ for key in self._data: RuntimeError: di.. ERROR: Line 112: ERROR: tkmaspyPublish encountered a failure in tkmaspyConnect, rc=0x803FC009. ERROR: Line 112: ERROR: tkmaspyPublish encountered a failure in tkmaspyConnect, rc=0x803FC009. ERROR: Line 112: Error reported by DS2 package pymas: ERROR: Line 112: ERROR: Python launch _pyConnect Failure. Matplotlib created a temporary config/cache directory at /tmp/matplotlib-tbxpivlt because the default path (/viyatmp/python) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing. . ERROR: Line 112: Error reported by DS2 package pymas: ERROR: Line 112: DS2 "pymas" package encountered a failure in the 'publish' method. ERROR: Line 112: ERROR: ***** Traceback (most recent call last): File "/opt/sas/viya/home/SASFoundation/misc/embscoreeng/mas2py.py", line 1005, in main mas = MAS2py() File "/opt/sas/viya/home/SASFoundation/misc/embscoreeng/mas2py.py", line 286, in __init__ for name in os.environ.keys(): File "/usr/local/lib/python3.6/_collections_abc.py", line 720, in __iter__ yield from self._mapping File "/usr/local/lib/python3.6/os.py", line 688, in __iter__ for key in self._data: RuntimeError: di.. ERROR: Line 112: DS2 "pymas" package encountered a failure in the 'publish' method. ERROR: Line 112: ERROR: tkmaspyPublish encountered a failure in tkmaspyConnect, rc=0x803FC009. ERROR: Line 112: Error reported by DS2 package pymas: ERROR: Line 112: DS2 "pymas" package encountered a failure in the 'publish' method. NOTE: Execution succeeded. 841 rows affected. NOTE: Running 'modelPublishing' action set with 3 workers. NOTE: Execution of model 'TempModel_6D62EF12-B573-0F46-808B-70FB2D7E15DA' succeeded. NOTE: Cloud Analytic Services promoted table TEST_2_UNDEFINED_2023_04_11_19_27_32_OUTPUT in caslib caslib_sasdata36_t22939 to table Test_2_undefined_2023_04_11_19_27_32_output in caslib caslib_sasdata36_t22939. NOTE: Cloud Analytic Services dropped table TempModel_6D62EF12-B573-0F46-808B-70FB2D7E15DA from caslib caslib_sasdata36_t22939.