So I tried running this:
proc fcmp;
   declare object py(python);
	declare object py(python);
	submit into py;
   def model_call(path_in, path_out, model, dataset, debug):
       import xgboost
       import pandas as pd
       import math
       import category_encoders as ce
    
       if dataset.endswith(".sas7bdat") > 1:
           ds_path = path_in + dataset
       else:
           ds_path = path_in + dataset + ".sas7bdat"
       
       model_path = path_in + model
       out_path = path_out + "outscore.csv"

       if debug == 1:
           print("path: " + path_in)
           print("model name: " + model)
           print("dataset name: " + dataset)
           print("DS_path: " + ds_path)

       target_name = "default12"
       time_name = "period"
       intercept_name = "Intercept"
       event_value = "outstanding_bad"
       all_value = "outstanding"
       id_vars = ["aid"]
    
       df = pd.read_sas(ds_path, encoding="LATIN2")
    
       df[intercept_name] = 1
       df[event_value] = df["app_loan_amount"] * df[target_name]
       df[all_value] = df["app_loan_amount"]
    
       vars = [var for var in list(df) if var[0:3].lower() in ["app","act","agr","ags"]]
       varsc = list(df[vars].select_dtypes(include="object"))
       varsn = list(df[vars].select_dtypes(include="number"))
    
       enc = ce.BinaryEncoder(cols=varsc)
       df_ce = enc.fit_transform(df[varsc])
       varsc_ce = list(df_ce)

       df_ce = df

       vars_ce = varsn

       test = df_ce
       test[target_name] = 1

       X_test = test[vars_ce]
       Y_test = test[target_name]

       if debug == 1:
           print(test.shape)
           print(df.shape)

       xdm_test = xgboost.DMatrix(X_test, Y_test, enable_categorical=True, missing=True)
    
       model = xgboost.Booster()
       model.load_model(model_path)

       Y_pred_test = model.predict(xdm_test)
    
       df_out = df

       df_out["SCORECARD_POINTS"] = pd.DataFrame(Y_pred_test)
    
       fin_vars = ["SCORECARD_POINTS"] + [time_name] + id_vars
    
       df_out = df_out[fin_vars]
    
       df_out.to_csv(out_path, index=False)
        
       return 0,
   endsubmit;
   rc = py.publish();
   rc = py.call("model_call", "&scoring_dir", "&scoring_dir", 'xgb1.model', "indata", 0);
   Result = py.results["model_call"];
   put Result=;
run;


but I get error:
  /*    <PRESIDIO_ANONYMIZED_EMAIL_ADDRESS>    */
1852
1853  /* model calibration process, cut-off calculation, to make a profitable products */
1854
1855  options mprint;
1856  options nomprint;
1857  %let dir=C:\Users\Użytkownik\Desktop\Credit Scoring\software\PROCSS_SIMULATION\;
1858
1859  libname data "&dir.process\data\" compress=yes;
NOTE: Libref DATA was successfully assigned as follows:
      Engine:        V9
      Physical Name: C:\Users\Użytkownik\Desktop\Credit
      Scoring\software\PROCSS_SIMULATION\process\data
1860
1861  %let apr_ins=0.01;
1862  %let apr_css=0.18;
1863  %let lgd_ins=0.45;
1864  %let lgd_css=0.55;
1865  %let provision_ins=0;
1866  %let provision_css=0;
1867
1868
1869
1870  data cal;
1871  set data.abt_app;
1872  if default12 in (0,.i,.d) then default12=0;
1873  where '197501'<=period<='198712' and decision='A';
1874  run;

NOTE: There were 31212 observations read from the data set DATA.ABT_APP.
      WHERE (period>='197501' and period<='198712') and (decision='A');
NOTE: The data set WORK.CAL has 31212 observations and 219 variables.
NOTE: DATA statement used (Total process time):
      real time           0.20 seconds
      cpu time            0.18 seconds


1875
1876  %let zbior=cal;
1877  %let scoring_dir=&dir.process\calibration\model_XGBoost\;
1878  %include "&scoring_dir.scoring_code.sas";
NOTE: Libref SCLIB was successfully assigned as follows:
      Engine:        V9
      Physical Name: C:\Users\Użytkownik\Desktop\Credit
      Scoring\software\PROCSS_SIMULATION\process\calibration\model_XGBoost

NOTE: There were 31212 observations read from the data set WORK.CAL.
NOTE: The data set SCLIB.INDATA has 31212 observations and 219 variables.
NOTE: DATA statement used (Total process time):
      real time           0.04 seconds
      cpu time            0.04 seconds



WARNING: Method 'model_call' not found in module dictionary
ERROR: masSymCreate encountered a failure in sfSym2Create, rc=0x8B3FF0D3.
ERROR: Unable to call function 'model_call'. Possible missing 'Output:' return signature in Python
       source code.
ERROR: Error reported in function 'python:CALL' in statement number 5 at line 2441 column 4.
       The statement was:
    1     (2441:4)   rc = python:CALL( "model_call", "C:\Users\Użytkownik\Desktop\Credit
Scoring\software\PROCSS_SIMULATION\process\calibration\model_XGBoost\", "
C:\Users\Użytkownik\Desktop\Credit
Scoring\software\PROCSS_SIMULATION\process\calibration\model_XGBoost\", "xgb1.model", "indata", 0 )
NOTE: PROCEDURE FCMP used (Total process time):
      real time           0.17 seconds
      cpu time            0.00 seconds



ERROR: Physical file does not exist, C:\Users\Użytkownik\Desktop\Credit
       Scoring\software\PROCSS_SIMULATION\process\calibration\model_XGBoost\outscore.csv.
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.SCORE may be incomplete.  When this step was stopped there were 0
         observations and 3 variables.
WARNING: Data set WORK.SCORE was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds



