import FIA_python311
import FIA_API_constants
import csv
import os

print ("Welcome to the FIA Python demonstrator")

# Set up security master data
s = FIA_python311.stringmatrix()
s = [
		["ZERO_INTEREST_CASH","ZERO_INTEREST_CASH","SECURITY_TYPE=CASH","","FT_CASH","","","","AUD","","","","","","","",""],
        ["INTEREST_BEARING_CASH","INTEREST_BEARING_CASH","SECURITY_TYPE=CASH","","FT_CASH","Interest(BASE_CURVE[0.0])","","","AUD","","","","","","","",""],
        ["BANK_BILL","BANK_BILL","SECURITY_TYPE=BILL","","FT_BILL","","","","AUD","","BASE_CURVE","","2011-Jan-01","","","",""],
        ["VANILLA_BOND","VANILLA_BOND","SECURITY_TYPE=BOND","","FT_BOND_ZERO_CURVE","","","","AUD","","BASE_CURVE|SECTOR_CURVE","","2019-Jan-01","0.04","2","","","","","7"],
		["DELAYED_BOND","DELAYED_BOND","SECURITY_TYPE=BOND","","FT_BOND_ZERO_CURVE","","","","AUD","","BASE_CURVE","2015-Jan-01","2019-Jan-01","0.05","2","",""],
		["IL_BOND","IL_BOND","SECURITY_TYPE=IL BOND","","FT_BOND_ZERO_CURVE","Inflation(AUD_CPI)","","","AUD","","BASE_CURVE","","2019-Jan-15","0.04","4","",""],
        ["FRN","FRN","SECURITY_TYPE=FRN","","FT_FRN_ZERO_CURVE(MONTHLY_LIBOR)","","","","AUD","","BASE_CURVE","","2019-Jan-01","0.0025","12","",""],
		["PERTURBATIONAL","PERTURBATIONAL","SECURITY_TYPE=BOND","","","","","","AUD","","BASE_CURVE|SECTOR_CURVE","","2011-Jan-01","0.05","2","",""],
		["AMORTIZING_BOND","AMORTIZING_BOND","SECURITY_TYPE=BOND","","FT_SINKER_ZERO_CURVE","","","","AUD","","BASE_CURVE","","2019-Jan-01","0.05","4","","8.5"],
 		["CDS","CDS","SECURITY_TYPE=CDS","","FT_CDS","","","","AUD","","BASE_CURVE","","2019-Jan-01","0.04","12","",""]
	]      

# Set up weights and returns data
p = FIA_python311.stringmatrix()
p = [
		[ "2010-Jan-01", "PTF", "ZERO_INTEREST_CASH",			"1.0", "0.0", "0.0", "", "", "" ],
		[ "2010-Jan-01", "PTF", "VANILLA_BOND",					"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "VANILLA_BOND",					"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "ZERO_INTEREST_CASH",			"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "INTEREST_BEARING_CASH",		"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "BANK_BILL",					"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "DELAYED_BOND",					"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "IL_BOND",						"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "FRN",							"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "CDS",							"1.0", "0.0", "0.0", "", "", "" ],
        [ "2011-Jan-01", "PTF", "PERTURBATIONAL",				"1.0", "0.0", "0.0", "0.05", "5.0", "0.2" ],
        [ "2011-Jan-01", "PTF", "AMORTIZING_BOND",				"1.0", "0.0", "0.0", "", "", "" ]
	]

# Set up yield curve data
y  = FIA_python311.stringmatrix()
y = [
        ["BASE_CURVE", "2010-Jan-01", "0.0",   "0.050"],
        ["BASE_CURVE", "2010-Jan-01", "4.0",   "0.050"],
        ["BASE_CURVE", "2010-Jan-01", "8.0",   "0.050"],
        ["BASE_CURVE", "2011-Jan-01", "0.0",   "0.045"],
        ["BASE_CURVE", "2011-Jan-01", "4.0",   "0.045"],
        ["BASE_CURVE", "2011-Jan-01", "8.0",   "0.045"],
        ["SECTOR_CURVE", "2010-Jan-01", "0.0",  "0.055"],
        ["SECTOR_CURVE", "2010-Jan-01", "4.0",  "0.055"],
        ["SECTOR_CURVE", "2010-Jan-01", "8.0",  "0.055"],
        ["SECTOR_CURVE", "2011-Jan-01", "0.0",  "0.051"],
        ["SECTOR_CURVE", "2011-Jan-01", "4.0",  "0.051"],
        ["SECTOR_CURVE", "2011-Jan-01", "8.0",  "0.051"]
	]

# Set up index data
index = FIA_python311.stringmatrix()
index = [
			[ "2009-Jun-01", "AUD_CPI", "80.0" ],
            [ "2009-Jul-01", "AUD_CPI", "80.1" ],
            [ "2009-Aug-01", "AUD_CPI", "80.2" ],
            [ "2009-Sep-01", "AUD_CPI", "80.3" ],
            [ "2009-Oct-01", "AUD_CPI", "80.4" ],
            [ "2009-Nov-01", "AUD_CPI", "80.5" ],
            [ "2009-Dec-01", "AUD_CPI", "80.6" ],
            [ "2009-Jun-01", "MONTHLY_LIBOR", "0.01" ],
            [ "2009-Jul-01", "MONTHLY_LIBOR", "0.01" ],
            [ "2009-Aug-01", "MONTHLY_LIBOR", "0.01" ],
            [ "2009-Sep-01", "MONTHLY_LIBOR", "0.01" ],
            [ "2009-Oct-01", "MONTHLY_LIBOR", "0.01" ],
            [ "2009-Nov-01", "MONTHLY_LIBOR", "0.01" ],
            [ "2009-Dec-01", "MONTHLY_LIBOR", "0.01" ]
		]

r = FIA_python311.stringvector()
r =  ["COUPON,SECURITY", "MATURITY,SECURITY"]

FIA_python311.FIA_init()
FIA_python311.FIA_set_matrix( FIA_API_constants.FT_MATRIX_PORTFOLIO, p );
FIA_python311.FIA_set_matrix( FIA_API_constants.FT_MATRIX_SECURITY, s );
FIA_python311.FIA_set_matrix( FIA_API_constants.FT_MATRIX_YIELDCURVE, y );
FIA_python311.FIA_set_matrix( FIA_API_constants.FT_MATRIX_INDEX, index );

FIA_python311.FIA_set_string ( FIA_API_constants.FT_STRING_CARRY_DECOMPOSITION, "AGGREGATED" );
FIA_python311.FIA_set_string ( FIA_API_constants.FT_STRING_AVERAGE_CURVE_LEVEL, "TRAPEZOIDAL" );
FIA_python311.FIA_set_string ( FIA_API_constants.FT_STRING_SOVEREIGN_CURVE_DECOMPOSITION, "STB" );
FIA_python311.FIA_set_bool ( FIA_API_constants.FT_BOOL_CONVEXITY_ATTRIBUTION, True );
FIA_python311.FIA_set_bool ( FIA_API_constants.FT_BOOL_CSV_REPORT, False );
FIA_python311.FIA_set_bool ( FIA_API_constants.FT_BOOL_XLS_REPORT, True );
FIA_python311.FIA_set_string ( FIA_API_constants.FT_STRING_DATE_FORMAT, "%Y-%b-%d" );
FIA_python311.FIA_set_integer ( FIA_API_constants.FT_INT_BATCH_ID, 999 );
FIA_python311.FIA_set_integer ( FIA_API_constants.FT_INT_N_CORES, -1 );
FIA_python311.FIA_set_bool ( FIA_API_constants.FT_BOOL_SUMMARY_ATTRIBUTION_REPORT, True );
FIA_python311.FIA_set_bool ( FIA_API_constants.FT_BOOL_INTERACTIVE_ATTRIBUTION_REPORT, True );
FIA_python311.FIA_set_bool ( FIA_API_constants.FT_BOOL_SECURITY_RISK_NUMBER_REPORT, True );

FIA_python311.FIA_set_vector_string ( FIA_API_constants.FT_STRING_REPORT_SECTORS, r );

version = FIA_python311.FIA_get_version();

print('Running version ', end='')
print ( version );
 
FIA_python311.FIA_run();

results = FIA_python311.stringmatrix
results = FIA_python311.FIA_get_matrix( FIA_API_constants.FT_MATRIX_RISKS );

# Note use of comma after print argument to insert newline
for i in range(0, len(results)): 
	print (results[i]),    
	
